[JPA] API 구현 시 엔티티 대신 DTO를 사용하자

컴공생의 코딩 일기·2023년 1월 8일
0

JPA

목록 보기
4/14
post-thumbnail

[JPA] API 구현 시 엔티티 대신 DTO를 사용하자

엔티티 클래스를 직접 Request Body (Controller 단)에 직접 매핑 할 경우

  • 엔티티에 프로젠테이션 계층을 위한 로직이 추가된다.
  • 엔티티에 API 검증을 위한 로직이 사용된다. (@NotEmpty 등등)
    • 엔티티 클래스에는 (@ManyToOne, @Id 등 많은 어노테이션이 사용된다. 여기에 API 검증을 위한 Validation 어노테이션이 사용된다면 가독성이 안 좋아질 뿐더러 코드가 매우 복잡해진다. )
  • 매우 많은 API가 하나의 엔티티에 각각 모든 요청을 담기는 어렵다.
    • 실무에서 하나의 회원 엔티티에 많은 API가 사용된다. 만약 엔티티를 직접 Request Body에 사용할 경우 모든 요청을 담기는 매우 어려워진다. (혹은 코드가 매우 길어진다.)
  • 엔티티가 변경되면 API 스펙이 변한다. (매우 위험)

엔티티 대신 DTO를 사용하자

  • DTO 를 사용할 경우 엔티티와 프레젠테이션 계층을 위한 로직을 분리할 수 있다.

  • 엔티티와 API 스펙을 명확하게 분리할 수 있다.

    • 엔티티가 변해도 API 스펙이 변하지 않는다.
  • 엔티티를 캡슐화 할 수 있다.

    • 엔티티를 API 스펙에 노출하는 것은 매우 위험하다.
  • 화면에 필요한 데이터만 따로 분리할 수 있다.

    • 화면에 필요한 데이터를 DTO 클래스에 따로 구현해서 값을 가져올 수 있다.
  • DTO 클래스만으로 API 요구사항을 유추할 수 있다.

  • Validation 코드를 분리할 수 있다.

    • DTO 클래스에서 Validation 검증을 하자!
profile
더 좋은 개발자가 되기위한 과정

0개의 댓글