Controller, Service, Repository 중에서 어디서 Entity를 DTO로 변환해야할까

재우·2023년 11월 17일
0
post-custom-banner

프로그래머스 스진초 과제를 진행하면서 작성한 내용입니다.



Entity를 DTO로 변환하는 작업은 일반적으로 Service 레이어에서 수행된다고 한다.

아키텍처적인 측면에서, 각 레이어의 역할을 고려하면 Service 레이어가 변환 작업을 처리하는 것이 적절하다.



빌더 패턴(@Builder)을 사용해서 변환해보자.

@Builder를 사용하는 이유

  • 필요한 데이터만 설정 가능하다
  • 유연성을 확보할 수 있다
  • 가독성을 높인다
  • 불변성을 확보할 수 있다


기존에 Entity만 있었던 코드에 DTO를 추가해보자.

@Getter
@Setter
public class FoodEntity { // 기존 Entity

    private Integer id;

    private Timestamp regTime; // 등록 시간

    private String foodName; // 음식 이름

    private String foodPrice; // 음식 가격

    private String foodImage; // 음식 이미지

}
@Getter
@Setter
@Builder
public class FoodDto { // DTO 생성

    private Integer id;

    private String foodName; // 음식 이름

    private String foodPrice; // 음식 가격

    private String foodImage; // 음식 이미지

    public static FoodDto fromEntityToDto(FoodEntity foodEntity){
        return FoodDto.builder()
                .id(foodEntity.getId())
                .foodName(foodEntity.getFoodName())
                .foodPrice(foodEntity.getFoodPrice())
                .foodImage(foodEntity.getFoodImage())
                .build();
    }
}


이제 Entity를 DTO로 변환해보자.

  • 👆 컨트롤러의 addFood와 updateFood를 확인해보자. Entity를 입력받는것을 볼 수 있다.

  • 👆 서비스에서 전달받은 Entity를 DTO로 변환해주고, Repository에 넘겨준다.

  • 👆 서비스에서 전달받은 DTO를 Repository에 저장한다.
post-custom-banner

0개의 댓글