πŸ“ λ°±μ—”λ“œ 개발/SPRING

@PutMapping, @PatchMapping, @GetMapping, @PostMapping 에 κ΄€ν•˜μ—¬...

Yeom.log 2025. 2. 15. 04:40
λ°˜μ‘ν˜•

πŸ“Œ 주제: "온라인 μ‡Όν•‘λͺ° (E-commerce)"

  • μƒν’ˆμ„ 쑰회 (@GetMapping)
  • μƒˆλ‘œμš΄ μƒν’ˆμ„ μΆ”κ°€ (@PostMapping)
  • μƒν’ˆ 정보λ₯Ό μˆ˜μ • (전체 λ³€κ²½) (@PutMapping)
  • μƒν’ˆ 정보λ₯Ό μˆ˜μ • (λΆ€λΆ„ λ³€κ²½) (@PatchMapping)

βœ… 1. @GetMapping (쑰회)

πŸ‘‰ μ‚¬μš©μžκ°€ νŠΉμ • μƒν’ˆ 정보λ₯Ό μ‘°νšŒν•  λ•Œ

@GetMapping("/products/{id}")
public ResponseEntity<ProductResponseDto> getProduct(@PathVariable Long id) {
    ProductResponseDto product = productService.getProductById(id);
    return ResponseEntity.ok(product);
}

✨ μ„€λͺ…

  • GET /products/1 같은 μš”μ²­μ„ λ°›μœΌλ©΄
  • idκ°€ 1인 μƒν’ˆ 정보λ₯Ό μ‘°νšŒν•΄μ„œ 응닡

βœ… 2. @PostMapping (μƒˆλ‘œμš΄ 데이터 μΆ”κ°€)

πŸ‘‰ μ‚¬μš©μžκ°€ μƒˆ μƒν’ˆμ„ 등둝할 λ•Œ

@PostMapping("/products")
public ResponseEntity<Void> createProduct(@RequestBody @Valid ProductRequestDto requestDto) {
    productService.createProduct(requestDto);
    return ResponseEntity.ok().build();
}

✨ μ„€λͺ…

  • POST /products μš”μ²­μ„ λ°›μœΌλ©΄
  • requestDto 데이터λ₯Ό 기반으둜 μƒˆ μƒν’ˆμ„ DB에 μ €μž₯

βœ… 3. @PutMapping (전체 μˆ˜μ •)

πŸ‘‰ μƒν’ˆ 정보λ₯Ό 전체 μˆ˜μ •ν•  λ•Œ

@PutMapping("/products/{id}")
public ResponseEntity<Void> updateProduct(
        @PathVariable Long id,
        @RequestBody @Valid ProductRequestDto requestDto) {
    productService.updateProduct(id, requestDto);
    return ResponseEntity.ok().build();
}

✨ μ„€λͺ…

  • PUT /products/1 μš”μ²­μ„ λ°›μœΌλ©΄
  • id=1인 μƒν’ˆ 정보λ₯Ό μ „λΆ€ μˆ˜μ •
  • μš”μ²­ μ‹œ λͺ¨λ“  데이터λ₯Ό 전달해야 함 (일뢀 λ°μ΄ν„°λ§Œ μ „λ‹¬ν•˜λ©΄ κΈ°μ‘΄ 값이 μ‚¬λΌμ§ˆ 수 있음)

βœ… 4. @PatchMapping (λΆ€λΆ„ μˆ˜μ •)

πŸ‘‰ μƒν’ˆ 정보λ₯Ό μΌλΆ€λ§Œ μˆ˜μ •ν•  λ•Œ

@PatchMapping("/products/{id}")
public ResponseEntity<Void> updateProductPrice(
        @PathVariable Long id,
        @RequestBody Map<String, Object> updates) {
    productService.updateProductPartially(id, updates);
    return ResponseEntity.ok().build();
}

✨ μ„€λͺ…

  • PATCH /products/1 μš”μ²­μ„ λ°›μœΌλ©΄
  • νŠΉμ • ν•„λ“œ (price, stock λ“±) λΆ€λΆ„μ μœΌλ‘œ μˆ˜μ • κ°€λŠ₯
  • 예λ₯Ό λ“€μ–΄ { "price": 20000 }만 보내면 κ°€κ²©λ§Œ μˆ˜μ •λ¨

βœ… 정리

μ–΄λ…Έν…Œμ΄μ…˜ HTTP λ©”μ„œλ“œ μ‚¬μš© λͺ©μ  νŠΉμ§•

@GetMapping GET 데이터 쑰회 URL에 νŒŒλΌλ―Έν„° 포함 (/products/1)
@PostMapping POST μƒˆλ‘œμš΄ 데이터 μΆ”κ°€ μš”μ²­ λ³Έλ¬Έ (RequestBody)을 ν™œμš©
@PutMapping PUT 데이터 전체 μˆ˜μ • λͺ¨λ“  ν•„λ“œλ₯Ό ν¬ν•¨ν•˜μ—¬ μš”μ²­ν•΄μ•Ό 함
@PatchMapping PATCH 데이터 일뢀 μˆ˜μ • λ³€κ²½ν•  ν•„λ“œλ§Œ μš”μ²­ κ°€λŠ₯

 

λ°˜μ‘ν˜•