API 개발 기본 / 고급 준비
2023. 9. 29. 00:07ㆍLECTURES/실전! 스프링 부트와 JPA 활용
회원 등록 API
https://github.com/dpdms529/JpaShop/commit/dfc282fdb5e15dd7154eeffb12b220fcec01e36a
V1 엔티티를 RequestBody에 직접 매핑
- 문제점
- 엔티티에 프레젠테이션 계층을 위한 로직이 추가됨
- 엔티티에 API 검증을 위한 로직이 들어감
- 실무에서는 한 엔티티에 대한 API가 다양하게 만들어지는데, 각각의 API를 위한 모든 요청 요구사항을 한 엔티티에 담기 어려움
- 엔티티가 변경되면 API 스펙이 변함
V2 엔티티 대신에 DTO를 RequestBody에 매핑
- 엔티티와 프레젠테이션 계층을 위한 로직을 분리 가능
- 엔티티와 API 스펙을 명확하게 분리 가능
- 엔티티가 변해도 API 스펙이 변하지 않음
회원 수정 API
https://github.com/dpdms529/JpaShop/commit/a3cd634695b9ce5e36f991d6a7d7bf90c2f25307
회원 조회 API
https://github.com/dpdms529/JpaShop/commit/42402b94b57f3cf316a87827add45cb592bc5b6a
V1 응답 값으로 엔티티를 직접 외부에 노출
- 문제점
- 엔티티에 프레젠테이션 계층을 위한 로직이 추가됨
- 기본적으로 엔티티의 모든 값이 노출됨
- 응답 스펙을 맞추기 위해 로직이 추가됨(
@JsonIgnore
, 별도의 뷰 로직 등) - 실무에서는 같은 엔티티에 대해 API가 용도에 따라 다양하게 만들어지는데, 한 엔티티에 각각의 API를 위한 프레젠테이션 응답 로직을 담기는 어려움
- 엔티티가 변경되면 API 스펙이 변함
- 추가로 컬렉션을 직접 반환하면 향후 API 스펙을 변경하기 어려움
V2 응답 값으로 엔티티가 아닌 별도의 DTO 사용
- 엔티티를 DTO로 변환해서 반환
- 엔티티가 변해도 API 스펙이 변경되지 않음
Result
클래스로 컬렉션을 감싸서 향후 필요한 필드를 추가 할 수 있음
조회용 샘플 데이터 입력
https://github.com/dpdms529/JpaShop/commit/3378098a0d125709092aec9c9027bf81c7c8b096
'LECTURES > 실전! 스프링 부트와 JPA 활용' 카테고리의 다른 글
컬렉션 조회 최적화 (0) | 2023.09.29 |
---|---|
지연 로딩과 조회 성능 최적화 (0) | 2023.09.29 |
웹 계층 개발 (0) | 2023.09.29 |
주문 도메인 개발 (0) | 2023.09.29 |
상품 도메인 개발 (0) | 2023.09.29 |