
:
템플릿 엔진을 통해뷰를 내려주는 것이 아닌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 2Response / 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>를 통해필요한 데이터가 있을 때확장이 용이함