@@ -18,6 +18,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
+import java.util.stream.Collectors;
 
 @Slf4j
 @RestController
@@ -26,12 +27,24 @@ public class OrderController {
 
     private final OrderService orderService;
     private final BasketService basketService;
+
+    /*
+        (C) OrderController가 관심있는 부분은 주문 정보를 가져오고 처리하는 것이지 특정 서비스(SQS, SSE)를 사용하는 부분은 아닌 것 같습니다.
+        MessageService / OrderService / StoreService 등으로 Service를 분리하여서 그 안에서 SsqService, SseService 및 converter를 조합하여
+        필요한 데이터를 반환하는 것이 관심사의 분리가 더 적절하게 이루어 질 것 같습니다.
+    */
     private final SqsService sqsService;
     private final SseService sseService;
     private final SendingMessageConverter sendingMessageConverter;
-    private final ReceivingMessageConverter receivingMessageConverter;
+    private final ReceivingMessageConverter receivingMessageConverter; // (C) 사용하지 않는 의존성은 지워주는 것이 좋을 것 같습니다.
 
-    public OrderController(OrderService orderService, BasketService basketService, SqsService sqsService, SseService sseService, SendingMessageConverter sendingMessageConverter, ReceivingMessageConverter receivingMessageConverter) {
+    /* (C) 여기도 lombok의 RequiredArgsConstructor를 사용하는 것이 좋아보입니다. */
+    public OrderController(OrderService orderService,
+                           BasketService basketService,
+                           SqsService sqsService,
+                           SseService sseService,
+                           SendingMessageConverter sendingMessageConverter,
+                           ReceivingMessageConverter receivingMessageConverter) {
         this.orderService = orderService;
         this.basketService = basketService;
         this.sqsService = sqsService;
@@ -43,21 +56,32 @@ public OrderController(OrderService orderService, BasketService basketService, S
     @GetMapping
     @ResponseStatus(HttpStatus.OK)
     public List<OrderPartResponseDto> showOrderList(@RequestAttribute("cognitoUsername") String customerId) {
-        List<Order> orderList = orderService.getOrderList(customerId).orElseGet(ArrayList::new);
-        List<OrderPartResponseDto> orderPartInfoList = new ArrayList<>();
-        orderList.forEach(order -> {
-            orderPartInfoList.add(new OrderPartResponseDto(order));
-        });
-        return orderPartInfoList;
+
+        /*
+            (C) StreamAPI를 사용하면 아래처럼 처리할 수 있어 보입니다.
+            + getOrderList는 Optional이 아닌 List<Order> 타입을 반환하면 좋을 것 같습니다
+        */
+        return orderService.getOrderList(customerId)
+            .orElseGet(ArrayList::new)
+            .stream()
+            .map(OrderPartResponseDto::new)
+            .collect(Collectors.toList());
     }
 
     @PostMapping
     @ResponseStatus(HttpStatus.CREATED)
+    /*
+        (C) controller에서 하는 일이 꽤 많은 것 같습니다. 서비스로 로직을 빼보시는 것을 추천드립니다.
+    */
     public void createOrder(@RequestAttribute("cognitoUsername") String customerId,
                             HttpServletResponse response) throws IOException {
+        /*
+            1. (Q) 여기는 customerId가 왜 basketId로 사용되고 있나요?
+            2. (C) createOrder로 order를 생성했다면, orderId보다는 order 자체를 반환하는 것이 사용성 측면에서 좋을 것 같습니다.
+        */
         String orderId = orderService.createOrder(customerId, customerId);
         Optional<Order> orderOptional = orderService.getOrder(orderId);
-        if(orderOptional.isEmpty()){
+        if (orderOptional.isEmpty()) {
             throw new RuntimeException("Can't create order");
         }
         Order order = orderOptional.get();
@@ -69,9 +93,10 @@ public void createOrder(@RequestAttribute("cognitoUsername") String customerId,
     @GetMapping("/{orderId}")
     @ResponseStatus(HttpStatus.OK)
     public SseEmitter showOrderInfo(@RequestAttribute("cognitoUsername") String customerId,
-                                    @PathVariable String orderId){
+                                    @PathVariable String orderId) {
         SseEmitter sseEmitter = sseService.connect(customerId);
         sseService.showOrder(customerId, orderId);
         return sseEmitter;
     }
+
 }
\ No newline at end of file

리뷰: > Repository에서 습관적으로 create이후 id를 반환하는 로직을 사용하다보니 이렇게 작성했는데, 생각해보니 order 자체를 가져오면 getOrder()도 사용하지 않아도 되니 쿼리 한 번을 절약하겠군요. 지적해주셔서 감사합니다.

말씀해주신 부분도 order 객체로 처리하는 것의 장점으로 볼 수 있을 것 같습니다.
다만 제가 리뷰드린 관점은 조금 다른 부분입니다.

string 타입은 범용적인 primitive 타입이기 때문에, 클래스 자체로써는 큰 의미를 갖지 않습니다. (단지 string의 역할을 하는 기능들을 제공할 뿐이겠죠)

하지만 order 타입 객체를 사용하면 order만이 갖고 있는 클래스 자체의 의미, 그 클래스가 제공하는 기능들과 부가 로직 등을 코드에서 표현력있게 나타낼 수 있습니다.

(개인적으로) 저는 그러한 이유로 최대한 primitive type을 서비스 코드나 컨트롤러 코드에서는 잘 사용하지 않습니다.
관련해서 [디미터 법칙](https://prohannah.tistory.com/204)에 관해서도 알아보시면 좋을 것 같네요!