본문 바로가기

Springboot

[Springboot] Entity와 DTO

Entity

  • 단순히 데이터를 담는 객체의 개념을 넘어 실제 데이터베이스와 관련됨
  • 내부적으로 엔티티 매니저 (Entity Manager)가 관리하는 객체

DTO

  • 각 계층끼리 주고받는 우편물이나 상자의 개념
  • 순수하게 데이터를 담고 있다는 점에서는 Entity와 유사

DTO가 갖는 Entity와의 차이점

  • 읽고 쓰는 것이 모두 허용
  • 일회성으로 사용되는 성격이 강함

DTO를 사용하는 이유

  • 엔티티 객체의 범위를 한정해 좀 더 안전한 코드 작성 가능
  • 화면과 데이터를 분리하려는 목적

DTO 사용의 단점

  • 엔티티와 유사한 코드를 중복으로 개발해야 함
  • Entity <-> DTO 변환 과정이 필수적임

Entity <-> DTO 변환

  • Controller (서비스 계층) <-> DTO -> Service (변환) -> Entity <-> DB (저장소)
  • 서비스 계층에서는 파라미터를 DTO 타입으로 받기 때문에 JPA로 처리하기 위해서는 Entity 타입으로 변환하는 작업이 필수적
@Service
public class BoardService {

    // DTO -> Entity
    default Board dtoToEntity(BoardDTO dto) {
    	Board entity = Board.builder()
			    .title(dto.getTitle())
                            .content(dto.getContent())
                            .build();
        return entity;
    }
    
}