회원 목록 조회
Last updated
Last updated
구현할 내용
컨트롤러 : MemberController 클래스 @GetMapping("/members") Member 리스트 컬렉션을 모델에 넘긴다!(원래는 DTO 또는 객체에 담아서 넘겨야 함!)
타임리프 템플릿 핵심 구현 모델에서 전달받은 members 컬렉션을 반복문처럼 돌려서 Member의 id, name, address 등을 렌더링한다!
결과 확인
<기술 설명>
타임리프 문법 address? : address가 null이면 진행하지 않는다는 의미! 타임리프에서 ?를 사용하면 null 을 무시한다.
엔티티 설계 시 주의사항 Form 객체를 써야하는지 엔티티를 직접 사용야하는지의 문제
실무에서는 Form 과 엔티티가 매칭되는 경우는 거의 없다. 엔티티를 사용하면 화면에 렌더링하기 위한 것들이 점점 증가한다! 해당 엔티티는 화면 종속성이 생겨버리고, 코드가 복잡해진다! 결국 유지보수가 어려워지게 된다. 그래서 엔티티를 설계할 때는 순수하게 비즈니스 로직에만 종속적으로 설계하는 것이 중요하다!
따라서 화면에 렌더링할 때는 Form 객체나 DTO(DataTransformObject;데이터 전송을 위해 Getter Setter만 존재)를 사용해야 한다!
화면에 단순히 데이터를 보여줄 때에도 마찬가지이다. 실제 엔티티 컬렉션을 들고오기 보다, 화면에 맞는 DTO를 생성해서 필요한 부분만 넘겨주는 것이 좋다! API 개발 시에는 이유를 불문하고 절대 엔티티를 넘기면 안된다!!!!!
이유1. 보안상의 이슈가 되는 필드 정보도 그대로 노출된다. 이유2. API는 스펙이다. 엔티티에 필드를 추가하면 스펙이 변경된다. 엔티티에 로직을 추가했는데 API의 스펙이 변해버린다!