Framework/Spring Boot

DTO

잔망루피 2022. 5. 24. 21:20

✨ DTO

  • Data Transfer Object
  • 계층간에 데이터를 전송할 때 사용한다.
    • Contoller와 View, Controller와 Service
  • DTO를 사용하는 이유
    • 내부 데이터 구조를 유출하지 않는다.
    • 유지보수가 쉬워진다.
  • DTO를 사용하는 흐름
    1. View에서 Contoller로부터 DTO를 받는다.
    2. Contoller에서 Service로 DTO를 보낸다.
    3. Service에서 Entity를 Controller에 보낸다.
    4. Controller에서 Entity를 DTO로 변환하고, model에 담아 View로 보낸다.

 

DTO ➡️ Entity 또는 Entity ➡️ DTO로 변환하기

  1. [첫 번째 방법] ModelMapper 사용
    •  ModelMapper를 사용하면 자동으로 해줘서 편하다.
  2. [두 번째 방법] DTO와 Entity에 toEntity, toDto와 같은 메소드를 만들어서 객체를 변환
// Employee를 EmployeeResponse로 변환하는 코드
@Getter
@Entity
@Builder
@Table(name = "employees")
public class Employee {

    @Id
    @Column(name = "employee_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "first_name")
    private String firstName;

    @Column(name = "last_name")
    private String lastName;

    @Column(name = "email")
    private String email;

    @Column(name = "phone_number")
    private String phoneNumber;

    @Column(name = "hire_date")
    private LocalDate hireDate;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "job_id")
    private Job job;

    @Column(name = "salary")
    private BigDecimal salary;

    @Column(name = "commission_pct")
    private BigDecimal commissionPercentage;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "manager_id")
    private Employee manager;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "department_id")
    private Department department;
    
    public EmployeeResponse toResponse() {
        return EmployeeResponse.builder()
                .id(id)
                .firstName(firstName)
                .lastName(lastName)
                .email(email)
                .phoneNumber(phoneNumber)
                .hireDate(hireDate)
                .job(job)
                .salary(salary)
                .commissionPercentage(commissionPercentage)
                .department(department)
                .build();
    }
}

 

@Getter
@Setter
@Builder
public class EmployeeResponse {

    private Long id;

    private String firstName;

    private String lastName;

    private String email;

    private String phoneNumber;

    private LocalDate hireDate;

    private Job job;

    private BigDecimal salary;

    private BigDecimal commissionPercentage;

    private Department department;
}

 

 

 

 

 


참고 👇

https://tecoble.techcourse.co.kr/post/2021-04-25-dto-layer-scope/

 

DTO의 사용 범위에 대하여

1. DTO란? DTO(Data Transfer Object)란 계층간 데이터 교환을 위해 사용하는 객체(Java Beans)입니다. 간략하게 DTO의 구체적인 용례 및 필요성을 MVC 패턴을 통해 알아볼까요? 🚀 1.1. MVC 패턴 MVC…

tecoble.techcourse.co.kr

https://kafcamus.tistory.com/12?category=912020 

 

Controller에서 Service에 값을 어떻게 전달할까?

바로 직전에, 스프링 부트에서 MVC 패턴을 구현하는 방법에 대해 간단한 글을 올렸다. 고민: SpringBoot에서의 MVC 패턴 이 글은 다음의 고민에서 시작한 글이다. 내가 스프링 부트로 지금까지 만든

kafcamus.tistory.com

 

https://auth0.com/blog/automatically-mapping-dto-to-entity-on-spring-boot-apis/#DTOs-and-Spring-Boot-APIs

 

Automatically Mapping DTO to Entity on Spring Boot APIs

Let's learn how ModelMapper can help us automate the mapping process of DTOs into entities on Spring Boot APIs.

auth0.com

 

https://techblog.woowahan.com/2711/

 

잊을만 하면 돌아오는 정산 신병들 | 우아한형제들 기술블로그

{{item.name}} 안녕하세요!!! 안녕하세요. 정산시스템팀 온택트 신입 개발자 김시영입니다. (입사한 지 2달이 되었지만 한 번도 출근한 적이 없습니다..) 꿈꾸던 회사에서 (방에서) 직접 글을 작성하

techblog.woowahan.com

 

https://www.youtube.com/watch?v=4Pvd0KrTfvE 

 

반응형