Java Framework/Spring Boot

[Spring Boot] DTO(Data Transfer Object)

annovation 2024. 12. 17. 13:00

DTO(Data Transfer Object)

DTO(Data Transfer Object)는 개발 과정에서 자주 등장하는 개념으로, 데이터를 전달하기 위한 객체입니다. 주로 계층 간 데이터 교환을 목적으로 사용되며, 시스템을 설계할 때 중요한 역할을 합니다. 

 

  • 현대적인 애플리케이션은 컨트롤러, 서비스, 리포지터리 같은 여러 계층으로 나뉘어 동작합니다.
  • 이 계층 간에 데이터를 주고받을 때, 직접적으로 데이터를 전달하는 것이 아닌 DTO를 사용하여 데이터를 캡슐화합니다.

DTO 활용 : 엔티티(Entity)

DTO를 활용하여 엔티티(Entity)에 있는 민감한 정보를 제외한 데이터를 전달할 수 있습니다.

 

1. 엔티티(Entity)

  • 엔티티는 데이터베이스와 직접 연결된 객체입니다.
  • 데이터베이스의 테이블 구조를 자바 객체로 표현하며, id, createdAt 같은 시스템 정보도 포함됩니다.
public class Question {
    private Long id;
    private String subject;
    private String content;
    private LocalDateTime createDate;
    private String sensitiveInfo; // 민감한 정보
    // Getter, Setter 생략
}

 

2. DTO(Data Transfer Object)

  • DTO는 엔티티와 달리 데이터 전달만을 목적으로 하는 객체입니다.
  • 보통 사용자에게 필요한 데이터만 담아 전달합니다.
  • 데이터를 캡슐화하고, 불필요하거나 민감한 정보를 숨기는 역할을 합니다.
public class QuestionDTO {
    private String subject;
    private String content;
    private LocalDateTime createDate;
    // Getter, Setter 생략
}

 

3. 차이점

  • 엔티티에는 데이터베이스 관련 정보와 민감한 정보가 포함되어 있습니다.
  • DTO는 사용자와 교환하는 데 필요한 데이터만 포함합니다.

4. 엔터티 → DTO 변환

public class QuestionService {
    public QuestionDTO convertToDTO(Question question) {
        QuestionDTO dto = new QuestionDTO();
        dto.setSubject(question.getSubject());
        dto.setContent(question.getContent());
        dto.setCreateDate(question.getCreateDate());
        return dto;
    }
}

 

5. 그 외 Controller에서도 사용 가능

@GetMapping("/question/{id}")
public QuestionDTO getQuestion(@PathVariable Long id) {
    Question question = questionService.findById(id);
    return questionService.convertToDTO(question);
}

DTO 활용 : REST API 

REST API에서 데이터를 JSON 형식으로 반환할 때도 DTO를 사용합니다.

 

1. DTO

public class UserDTO {
    private String name;
    private String email;
    // Getter, Setter 생략
}

 

2. Controller

@GetMapping("/user")
public UserDTO getUser() {
    return new UserDTO("Alice", "alice@example.com");
}

주의 사항

  1. DTO의 크기
    • 너무 많은 데이터를 담으면 오히려 비효율적일 수 있습니다.
    • 필요한 데이터만 포함하도록 설계해야 합니다.
  2. DTO와 엔티티의 중복
    • DTO와 엔티티의 필드가 비슷해 보일 수 있지만, 각자의 역할이 다릅니다.
    • 엔티티는 데이터베이스와 연동, DTO는 데이터 전달에 초점.
  3. 자동화 도구 활용
    • ModelMapper, MapStruct와 같은 라이브러리를 사용하면 DTO 변환 작업을 쉽게 처리할 수 있습니다.

요약

DTO는 계층 간 데이터 교환을 안전하고 효율적으로 관리하기 위한 도구이다.


출처

OpenAI ChatGPT (https://openai.com)

 

반응형