5주차에는 처음 Spring이 들어가서 새로운 내용과 Spring사용법 같은걸 많이 배웠다.
이번 주차에는 Spring을 이용해 블로그 포스팅 같은 게시글을 올릴 수 있는 CRUD이용 서버를 제작했다. 처음 Spring으로 만들어 보는 것이어서 쉬운 과제였지만 적응이 어려웠다. 그리고 느낀것...
Spring은 신 이야...
Day1
첫날에는 http에러코드를 배우고 Lombok의 기능, MySQL을 이용해 DB사용하는 법, json과 String을 서로 형변환 하는 방법 등 처음 배우는 내용이라 그런지 많은 내용을 배웠다.
에러코드 넘버는 다음과 같다.
- 100~ : 클라이언트가 서버와 연결상태를 확인하기위한 용도로 사용
- 200~ : http요청이 성공적으로 수행되었다.
- 300~ : 클라이언트가 추가적 조치를 취해야함을 나타냄. 페이지이동 혹은 redirection등에 사용됨.
- 400~ : 클라이언트의 잘못된 요청 혹은 인증오류 등에 나타남. 404는 우리가 요청한 브라우저나 페이지를 서버에서 찾을 수 없음을 나타냄
- 500~ : 서버에 오류가 발생했음을 나타냄.오류 또는 과부하 500은 서버내부에서 오류가 발생했음을 나타낸다.
많이 사용되는 Lombok라이브러리의 기능들도 있었는데, 그 내용은 1일차 TIL에서 알아보자
1일차 TIL : https://codeplace.tistory.com/52
Day2
2일차에는 클라이언트에서 서버로 데이터를 보내는 방법의 종류에대해 배웠다.
종류는 크게 3가지인데
RequestParam : Param을 이용해 값 전달, url노출
RequestBody : 내부의 body를 통해 값 전달, url에 노출x
PathVariable : url을 통해 값 전달, url 노출
이것들을 보고 패스워드 같은 노출을 피해야하는 정보는 url에 노출하지 않게 데이터를 전달해야겠다고 생각해서 코드를 고쳤었다..
Day3
Bean이라는 spring의 시스템과 IocContainer 그리고 여러 어노테이션들을 알게된 날이었다.
어노테이션 종류도 많고 기능도 다양해서 어노테이션을 종류별로 찾아 정리하는 작업을 했다.
어노테이션
@Component : 스프링이 run되는 시점 해당 클래스를 Bean으로 만들어서 IocContainer에 등록해준다.(RequireArgsConstructor를 이용해도 생성자 주입이 가능하다)
@Autowired : 이 메서드 혹은 필드에 주입 설정, 생성자가 하나일 땐 생략이 가능하다.
@Transaction : 모든 작업이 성공적으로 완료되어야 데이터베이스에 한꺼번에 적용해주는 기법인 Transaction적용.
테스트메서드에 사용시 테스트 종료시 자동으로 롤백된다.
@Component : 직접 작성한 Class를 Bean으로 등록할 수 있게 해주는 어노테이션
@Service : Service클래스에 사용
@Repository : Repository클래스에 사용
@Configuration : 해당 어노테이션을 적용한 클래스의 Method는 Bean에서 불러올 때 @Autowired상태로 불러올 수 있다.
@Require : setter method에 적용해주면 Bean 생성시 필수 프로퍼티 임을 알림.
@Entity : JPA가 컨트롤 할 수 있는 Entity클래스임을 지정해준다.
@Disable : 해당 Method는 실행하지 않는다.
@Table : 매핑할 테이블의 이름을 (name = "테이블 명")으로 지정해줄 수 있다.
그리고 값이 변경되는 요청을 DB에 전달할 경우 Transaction이라는 환경이 필수적으로 필요하다!
Transaction은 요청하는 것들이 모두 이상이 없을 때 한번에 변경을 수행한다.
Day4
4일째는 에러를 만나서 골머리를 썩었다. 팀원분의 도움으로 해결하긴 했지만 시간을 많이 뺏긴 날인것 같다.
알고보니 내가 QueryMethod를 잘 이해하지 못 하고 필드명을 일치시키지 않고 무분별하게 사용한 부분이 에러가 났던 것이고,
에러코드를 하나하나 다 뜯어서 찾아보지 않은 잘못도 컸다... 기능적이 부분보다 교훈을 더 많이 알아간 날이었다.
Day5
대망의 제출날 오전에 마무리를 하면서 보안적인 부분도 신경쓰고 RESTful하게 API를 짰는지 마지막으로 체크하는 시간이었다.
패스워드를 받고, 그 패스워드를 Param방식으로 넘겨주는 코드 때문에 패스워드가 url에 노출되는 이슈가 있었다.
지금은 안전히 url노출을 피해서 패스워드를 옮기는 방식으로 바꿨고, RESTfulAPI에 대해서는 아직 완벽하게 이해한건 아니지만 조금씩 알아가는 느낌이 들었다.