1.도메인 객체와 DTO의 반환 처리


  1. 서비스에서 DTO로 변환:
  2. 서비스에서 도메인 객체 반환:

권장 관행

예시

// 도메인 객체
public class Order {
    private String id;
    private String productId;
    private int quantity;
    // 비즈니스 로직 포함
}

// DTO 클래스
public class OrderResponse {
    private String id;
    private String productId;
    private int quantity;

    public static OrderResponse fromDomain(Order order) {
        OrderResponse response = new OrderResponse();
        response.id = order.getId();
        response.productId = order.getProductId();
        response.quantity = order.getQuantity();
        return response;
    }
}

// 서비스 클래스
public class OrderService {

    public OrderResponse getOrder(String orderId) {
        Order order = orderRepository.findById(orderId);
        // 도메인 객체를 DTO로 변환하여 반환
        return OrderResponse.fromDomain(order);
    }
}

// 컨트롤러 클래스
@RestController
@RequestMapping("/orders")
public class OrderController {

    private final OrderService orderService;

    @Autowired
    public OrderController(OrderService orderService) {
        this.orderService = orderService;
    }

    @GetMapping("/{orderId}")
    public ResponseEntity<OrderResponse> getOrder(@PathVariable String orderId) {
        OrderResponse response = orderService.getOrder(orderId);
        return ResponseEntity.ok(response);
    }
}

결론

이러한 구조는 헥사고날 아키텍처의 원칙을 준수하며, 애플리케이션의 각 레이어가 독립적으로 변화할 수 있도록 합니다.

2. 좀 더 자세하게 전체 반환 흐름 이해하기