Entity(또는 Domain)와 DTO를 분리해야 하는 이유

시루봉로·2024년 2월 2일
0

스프링 입문

목록 보기
4/4
post-thumbnail

1. 관심사의 분리

  • 관심사의 분리(Separation of Concerns, SoC)는 서로 다른 관심사를 분리하여 OCP한 시스템을 만드는 것임
  • DTO(Data Transfer Object)의 관심사는 데이터의 전달이며, 데이터를 다른 계층이나 컴포넌트에게 넘겨주기 위한 자료구조임 → 어떠한 기능이나 동작도 없어야 함
  • Entity는 핵심 비즈니스 로직을 담는 비즈니스 Domain 영역의 일부임 → 엔티티나 도메인 객체는 비즈니스 로직이 추가될 수 있음
    • 비즈니스 로직이란 실제 프로그램에서 요청 처리나 특정 기능 수행을 위해 데이터를 처리하는 실질적인 로직, 코드의 한 문장이라 할 수 있음

2. Validation 로직 및 불필요한 코드와의 분리

  • Spring는 요청 데이터 검증을 위한 @Valid 어노테이션을 지원하며, 해당 어노테이션 처리를 위해 @NotNull, @NotEmpty, @Size 와 같은 어노테이션을 필드에 붙여줘야 함 → JPA도 변수에 @Id, @Column 과 같은 어노테이션을 활용해 객체와 RDBMS를 매핑하는데, DTO와 엔티티를 분리하지 않으면 코드가 복잡하여 유지 보수가 힘들어짐

3. API 스펙의 유지

@Column(nullable = false)
private String userId;
  • 위의 값이 쓰이는 엔티티 클래스를 API가 활용하고 있는데 해당 값이 userId에서 memberId로 변경해야 하는 상황이고 DTO를 사용하지 않는다면 API 스펙이 변경되고 이로 인해 API를 사용하는 사용자들은 모두 장애를 겪음

4. API 스펙의 파악이 용이함

  • DTO를 사용함으로써 DTO를 통해 API 스펙을 어느정도 파악할 수 있음 → 요즘처럼 MSA 아키텍처로 개발을 많이 하는 상황에서 다른 사람이 작성한 코드를 파악할 때, 요청/응답 스펙을 쉽게 파악할 수 있음
    • MSA 아키텍처: 여러 개의 작은 서비스로 구성되어 각 서비스가 독립적으로 개발/배포되는 구조
profile
안녕하세요.

0개의 댓글