필드가 여러 개 있는 상황에서 해당 필드에 대한 제약 조건을 주고 싶을 때
위와 같이 컨트롤러를 구성하면 문제점이 뭘까?
1. 엔티티 코드가 복잡해진다
@NotEmpty와 같은 어노테이션이 덕지덕지 붙는데 나중에 유지보수성이 저하되는 결과를 초래한다.
2. 엔티티 필드명이 바뀌면 API 스펙 자체가 변경되버린다
예를 들어 엔티티 필드 중 name이 username으로 변경이 된다면?
이 API를 가져다 쓰는 쪽에서 같이 변경해주지 않는다면 에러가 발생하게 된다.
3. 하나의 애플리케이션에 여러 스펙의 API를 개발해야 되는 상황이 발생할 때
각 API 스펙이 다른 상황에서 엔티티에 제약을 반영하기 쉽지 않다.
그렇다면 어떻게 개발해야 할까?
엔티티를 파라미터로 받지 말고 별도의 데이터 전송 객체를 생성해서 여기에 데이터를 담아서 전달해야 한다.
위 코드에서는 CreateMemberRequest DTO객체를 생성해서
이를 다시 Member형태로 가공해서 전달하는 방식으로 변경했다.
API를 만들 때에는 API스펙에 맞는 별도의 객체를 생성해야 위에서 말한 이슈를 피하면서 안정적으로 서비스를 운영할 수 있다.
실무에서는 절대로 엔티티를 파라미터로 받거나 외부로 노출해서는 안된다.
'PROGRAMMING > SPRING' 카테고리의 다른 글
| [개념] Thread Pool & Multi Thread (0) | 2021.12.28 |
|---|---|
| [SPRING] @Controller와 @RestController (0) | 2021.12.20 |
| [SPRING] Gradle 의존관계 확인하기 (0) | 2021.12.08 |
| [SPRING] Web Scope (0) | 2021.08.25 |
| [SPRING] Bean Scope 싱글톤과 프로토타입 (0) | 2021.08.16 |