Programming/Refactoring

DTO와 엔티티의 역할, 비즈니스 로직의 위치

LazyCat 2024. 12. 5. 19:16
반응형

 

🤍DTO와 엔티티 역할의 차이

1. DTO의 역할

  • 데이터 전달 객체: 주로 클라이언트서버 간, 계층 간 데이터를 전달하는데 사용됩니다.
  • 얇은 계층 객체: 데이터 전달유효성 검사만 담당하며, 비즈니스 로직은 포함하지 않습니다.

2. 엔티티의 역할

  • 도메인 객체: 데이터베이스와 매핑되며, 비즈니스 로직데이터를 함께 포함합니다.
  • 상태와 행위 관리: 상태의 유효성을 보장하고, 필요한 상태 변경 로직을 포함합니다.

 

🤍프로젝트 코드 리팩토링 방향

기존 코드

 

회원가입 DTO에서 회원 Entity로의 변환을 돕는 비즈니스 로직이 포함되어있는 상태이다.

 

그러나 DTO에 toEntity()를 포함하게 된다면,

  • 단일 책임 원칙(SRP) 위반: 데이터 전달객체 변환이라는 두 가지 책임을 지게 된다.
  • DTO와 엔티티의 강한 결합: DTO는 원래 컨트롤러/서비스에서만 사용되어야 하지만, 엔티티와의 직접적인 의존성이 생기며 책임의 경계가 모호해진다. DTO가 도메인 계층을 침범하게 되는 문제가 생깁니다.

 

 

쉽게 말해서 SignupRequestDto이 Member 엔티티를 반환하는 비즈니스 로직을 갖는 것은, DTO가 도메인 계층을 침범하게 만든다는 것이다.

 

수정 코드

 

 

SignupReqeustDto에 있던 비즈니스 로직을 Member 엔티티로 옮겼다.

 

 

🤍정적 팩토리 메서드란?

객체 생성의 역할을 하는 메소드입니다.

 

예시)

Member member = new Member(); // new ClassName() 을 이용하여 인스턴스 생성
Member member = Member.of("홍길동",20); //정적 팩토리 메소드 of 을 이용하여 인스턴스 생성

 

 

 

🤍결론

사실 변환 메소드(비즈니스 로직)의 위치는 확실한 답은 없는 것 같다.

그렇지만 DTO는 데이터 전달이라는 역할, Entity는 도메인 객체로써 데이터베이스와 매핑되며

비즈니스 로직과 데이터를 함께 포함할 수 있다는 역할에 중점을 두고 코드 리팩토링을 진행해보았다!

 

 

 

반응형