템플릿 엔진을 사용하는 controller와 API 스타일의 Controller를 분리한다.
공통 예외처리 할 때 패키지 단위나 구성 단위로 한다. 화면은 예외처리시 에러화면이 나가야 하지만, API는 예외처리시 JSON 스펙이 나가야 한다.
@ResponseBody(데이터를 JSON으로 보낼 때 사용) + @Controller => @RestController
JSON 타입으로 온 body를 객체로 바꿔준다.
Body로 온 값에 대한 유효성 검사를 한다.
ex) 소셜로그인, 일반로그인, ...
다른 클래스에서 사용하지 않으면 이너 클래스로 만들어도 된다.
update 메소드의 리턴 타입을 Member로 할 수도 있지만, 영속성이 끊긴 객체이며 커맨드와 쿼리를 분리하는 것이 좋다.
따라서 update에서 void, controller에서 다시 조회하는 것이 유지보수에도 좋다.
Member 엔티티를 조회하면 원치 않는 orders가 같이 조회된다. 이를 위해서 orders에 @JsonIgnore를 선언하면 조회가 되지는 않지만, 다른 API에서 orders를 조회해야 한다면 문제가 생긴다.
이런 경우 엔티티에 화면을 위한 코드가 작성되고, 의존 관계가 양방향으로 맺어져 수정하기 어려워진다.
List를 바로 반환하면 배열 타입으로 반환되기 때문에 한 번 감싸줘야 유연성이 좋다.
Result 클래스에 count 등 필드를 추가할 수 있다.