// 도메인 객체
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);
}
}
이러한 구조는 헥사고날 아키텍처의 원칙을 준수하며, 애플리케이션의 각 레이어가 독립적으로 변화할 수 있도록 합니다.