DTO는 왜쓰는겨

잉으잉·2024년 12월 14일

자바공부

목록 보기
9/9

데이터를 컨트롤러에서 서비스로 전달할 때 데이터를 그 원형으로 전달할 수도 있지만, 보통 객체 형태로 둘러싸서 전달한다. 그 기법을 DTO(Data Transfer Object)라고 한다.

DTO는 아래와 같은 역할을 한다.
1. 데이터 전달
2. 엔티티와의 분리 - 테이블에 직접적으로 매핑되는 엔티티와는 다르게 필요한 데이터만 전달
3. 데이터의 가공 - 데이터를 전달하는 과정에서 필요한 연산을 수행할 수 있음

예시로 다음과 같이 DTO를 구현해보자.

@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class BoardDto {
    private Long id;
    private String boardWriter;
    private String boardTitle;
    private String boardContents;
    private int boardHits;
    private LocalDateTime boardCreateTime;
    private LocalDateTime boardUpdateTime;
}

서비스에서 엔티티를 DTO로 변환하는 과정은 다음과 같다.

import java.util.List;
import java.util.stream.Collectors;

@Service
public class BoardService {
    @Autowired
    private BoardRepository boardRepository;

    public List<BoardDto> findAll() {
        // Entity → DTO 변환
        return boardRepository.findAll()
            .stream()
            .map(boardEntity -> new BoardDto(
                boardEntity.getId(),
                boardEntity.getBoardWriter(),
                boardEntity.getBoardTitle(),
                boardEntity.getBoardContents(),
                boardEntity.getBoardHits(),
                boardEntity.getCreatedTime(),
                boardEntity.getUpdatedTime()
            ))
            .collect(Collectors.toList());
    }
}

boardRepository라는 데이터베이스에서 findAll하여 모든 데이터를 찾은 뒤 이걸 BoardDto로 변환하고, 최종적으로 collect메서드를 통해 List로 변환하는 과정이다.

profile
컴퓨터 앞에 앉은 나는 개발자

0개의 댓글