Today I Learned!
코드 쉐도잉 마지막 3차 과제를 진행했다. 1~2차 과제 관련 TIL은 아래 링크를 통해 확인할 수 있다.
1차 과제 TIL
[내일배움캠프] 260415 TIL #8 CRUD Code Shadowing
들어가며입문 프로젝트에 앞서, CRUD Code Shadowing 과제가 주어졌다. 오늘은 "따라 치기 과제"로, 작성되어 있는 코드를 보고 따라서 작성하면 되는 과제이다. 노션 페이지를 보고 단순히 따라쳐도
sxxlx.tistory.com
2차 과제 TIL
[내일배움캠프] 260417 TIL #10 CRUD Code Shadowing 2차
Today I Learned!지난 1차 과제에 이어 2차 과제를 진행했다. 1차 과제 관련 TIL 은 아래 링크를 통해 확인할 수 있다. [내일배움캠프] 260415 TIL #8 CRUD Code Shadowing들어가며입문 프로젝트에 앞서, CRUD Code Sh
sxxlx.tistory.com
작성한 코드는 아래 GitHub Repository에서 확인할 수 있다.
GitHub - seola12e/CRUD-Code-Shadowing: [내일배움캠프 단기심화 7기] CRUD Code Shadowing 과제 레포지토리
[내일배움캠프 단기심화 7기] CRUD Code Shadowing 과제 레포지토리. Contribute to seola12e/CRUD-Code-Shadowing development by creating an account on GitHub.
github.com
이번 3회차 최종에서는 OrderController 에 있었던 비즈니스로직을 OrderService 에서 처리하도록 역할을 분리시켰다.
1. 코드 작성
OrderController
// import 생략
@RestController
@RequestMapping("/api/orders")
@RequiredArgsConstructor
public class OrderController {
private final OrderService orderService;
@PostMapping
public ResponseEntity<OrderResponse> createOrder(@Valid @RequestBody OrderRequest request) {
OrderResponse response = orderService.createOrder(request);
return ResponseEntity.created(URI.create("/api/orders/" + response.getOrderId())).body(response);
}
@GetMapping("/{id}")
public ResponseEntity<OrderResponse> getOrder(@PathVariable Long id) {
return ResponseEntity.ok(orderService.getOrder(id));
}
}
OrderService
// import 생략
@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class OrderService {
private final OrderRepository orderRepository;
private final ProductRepository productRepository;
@Transactional
public OrderResponse createOrder(@Valid OrderRequest request) {
Product product = findProductById(request.getProductId());
Order order = new Order(product);
return new OrderResponse(orderRepository.save(order));
}
public OrderResponse getOrder(Long id) {
return new OrderResponse(findOrderById(id));
}
private Order findOrderById(Long id) {
return orderRepository.findById(id)
.orElseThrow(() -> new IllegalArgumentException(
"해당 주문이 존재하지 않습니다. id = " + id
));
}
private Product findProductById(Long id) {
return productRepository.findById(id)
.orElseThrow(() -> new IllegalArgumentException(
"해당 상품이 존재하지 않습니다. id=" + id
));
}
}
2. API 테스트
지금까지 진행해왔던 DB 안의 데이터들을 통해 마지막 테스트를 진행했다.
테스트 도구는 지난 번과 마찬가지로 Postman을 사용했다.

a. 주문 생성 API 테스트
productId에 1을 body에 넣어서 요청을 보냈더니 201 Created 와 함께 정상적으로 주문이 잘 생성되었음을 확인할 수 있었다.


실패 테스트를 위해 존재하지 않는 상품 ID인 20번을 넣어서 테스트 해봤더니, 정상적으로 error 를 throw함을 확인할 수 있었다.

b. 주문 조회 API 테스트
데이터베이스상에서 Order Id 값이 3으로 되어 있으니 파라미터에 3을 넣고 GET 요청을 보냈더니 200 OK 상태코드와 함께 정상적으로 조회되었음을 확인할 수 있었다.

존재하지 않는 주문 아이디인 30번을 넣고 요청을 보냈더니 마찬가지로 error를 throw하는 것을 확인할 수 있었다.

'내일배움캠프 > TIL' 카테고리의 다른 글
| [내일배움캠프] 260504 TIL #13 (0) | 2026.05.04 |
|---|---|
| [내일배움캠프] 260430 TIL #12 입문프로젝트 마무리 (0) | 2026.04.30 |
| [내일배움캠프] 260417 TIL #10 CRUD Code Shadowing 2차 (0) | 2026.04.17 |
| [내일배움캠프] 260416 TIL #9 입문 프로젝트 시작 (0) | 2026.04.16 |
| [내일배움캠프] 주특기 입문 MSA 요약본 (0) | 2026.04.15 |