CodeStatesBootCamp/Review
Section 3 - Unit 1 : [Spring MVC] API 계층 Review
JKROH
2023. 4. 12. 16:36
반응형
Review 에서는 학습한 내용을 다시금 기록합니다.
Unit Review는 학습한 내용 중 기존에 알고 있었지만 정확하게 이해하지 못하던 정보와 새롭게 알게된 정보를 기록합니다. 추가적인 설명을 요하는 부분은 댓글로 남겨주세요.
Section Review는 전반적인 Section을 되돌아보고 학습했던 시간과 과정, 내용을 총괄하여 기록합니다.
DTO (Data Transfer Object)
* HTTP 요청 / 응답에서의 DTO
- DTO란?
- 데이터를 전송하기 위한 객체이다.
- 클라이언트 -> 서버로의 request와 서버 -> 클라이언트로의 response 에 담겨 클라이언트 - 서버 간 데이터 전송을 가능하게 한다.
- DTO가 필요한 이유
- DTO는 요청으로 오는 정보를 담은 하나의 객체 형태로 사용하여 코드를 간결하게 할 수 있다.
- 예를 들어, 회원 정보를 수정하는 메서드를 만든다고 해보자.
- DTO를 사용하지 않으면, 회원 정보에 해당하는 모든 데이터를 @RequestParam을 통해 하나 하나 받아오는 코드를 작성해햐 한다.
- DTO를 사용하면 객체와 수정 정보만 받아온 뒤 수정하면 된다.
- DTO를 이용하면 검증이 간단해지고 로직을 추상화하여 분리할 수 있다.
- 예를 들어, 회원을 저장하는 메서드를 만든다고 해보자.
- DTO를 사용하지 않으면, 회원을 저장하는 메서드에서 이메일이나 전화번호의 형식 같은 것들을 검사해야 한다. 이는 단일 책임의 원칙을 위반한다.
- DTO를 사용하면, 회원을 저장하는 메서드는 회원을 저장하기만 하면 된다.
- HTTP 요청 / 응답 데이터에 DTO 적용하기
- @RequestBody 애너테이션
- JSON 형식의 Request Body를 DTO객체로 전환해주는 역할을 한다.
- 그럼 당연히 인자로 받는 DTO 객체 앞에 붙여야겠지?
- 동시에 해당 애너테이션이 붙어있다는 것은 클라이언트에서 전송하는 Request Body가 JSON타입이여야함을 의미한다.
- JSON을 자바 객체로 바꾸는 것을 역직렬화라고 한다.
- @ResponseBody 애너테이션
- DTO를 Response Body로 전환하는 역할을 한다.
- 그러나 메서드의 반환 타입을 ResponseEntity로 반환하면, @ResponseBody와 같은 역할을 해 굳이 붙일 필요 없다.
- 자바 객체를 JSON으로 바꾸는 것을 직렬화라고 한다.
* DTO 유효성 검증
- 프론트엔드 단에서 입력값에 대한 검증을 마쳤더라도 백엔드 단에서 한 번 더 검증을 진행해야 한다.
- 'org.springframework.boot:spring-boot-starter-validation' 의존성을 추가하면 검증을 위한 여러 애너테이션을 사용할 수 있다.
- validation에서 제공하지 않는 것을 검증하고 싶으면 기능을 제작해서 사용해야한다.
반응형