:
템플릿 엔진
을 통해뷰
를 내려주는 것이 아닌REST API
로데이터
만 내려주는 것
- 최근
React
,Vue
등클라이언트에서 렌더링
을 통한 방식을 대부분 사용API를 개발
하는 방식의서버 개발
을 실무로 하는 경우가 더 많음
컨트롤러 구조
나누기
템플릿 엔진
을 사용한 개발과혼용
해서 사용할 경우컨트롤러 구조
를따로 유지
--> 줄 수 있는데이터 자체
가다르기 때문에
DTO를 적극 활용
(필수
)
HTTP Request / Response
를API
에 맞춰DTO
로 사용하자Entity
를직접 반환
하면Entity 변경시 API 스펙이 변경
된다- 기본적으로
Entity의 모든 값이 노출
됨필요한 데이터
를 거르기 위해 필드에@JsonIgnore
을 쓰는 것은바람직하지 X
:Entity
에API 스펙
에 맞추기 위한코드가 추가
되고 유지되어 버림Entity
에Presentation 계층
의로직
이 있는것은바람직하지 X
컬렉션
을직접 반환
하면 향후API스펙
을확장 / 변경
하기어려움
Entity 직접 반환
시무한루프
에 걸릴 수 있음
json형식으로 반환하기 위한 과정
이 수행될 때Entity
의양방향 연관관계
에 의해서 서로무한 참조
가 일어나버린다Entity
를 직접 반환하지 말고DTO를 생성해 반환
하면 된다
(API 로직)
/api/v1/members
- 회원가입
version 1
@RequestBody
를 통해 데이터를 바로 매칭함Response
는DTO
를 사용 /Request
는Entity
로 직접 받음/api/v2/members
- 회원가입
version 2
Response / Request
모두 DTO
를 사용
-->표현계층
과Entity계층
을분리
+필요한 데이터만 사용
(DTO)
(API 로직)
/api/v2/members/{id}
@PathVariable()
을 통해 params를 추출Request / Response
모두 DTO
를 사용memberService.update
는변경 감지
를 이용한수정
으로 구현- 입력한
id로 한번 검색
해서 주는 것으로확인 가능!
(DTO)
(변경 감지 수정 로직)
식별자
를파라미터
로 받은 후영속성 컨텍스트
가관리
하게 한 후수정!
(API 로직)
/api/v1/members
Entity
를직접 반환
--> 매우 위험 (실무 사용 X
)/api/v2/members
DTO 사용
map
을 활용해서List<DTO>
형식으로 변경Result<T>
를 사용해서반환 데이터
에확장성
추가
(DTO)
Result<T>
를 통해필요한 데이터
가 있을 때확장이 용이
함