๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐ˜์‘ํ˜•

Spring Boot๋กœ REST API๋ฅผ ๋งŒ๋“ค๋‹ค ๋ณด๋ฉด,

ํด๋ผ์ด์–ธํŠธ์—์„œ ๋„˜์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์–ด๋–ป๊ฒŒ ๋ฐ›์•„์•ผ ํ• ์ง€ ํ—ท๊ฐˆ๋ฆด ๋•Œ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.
ํŠนํžˆ @PathVariable, @RequestParam, @RequestBody๋Š”

๊ฐ๊ฐ ์“ฐ์ž„์ƒˆ๊ฐ€ ๋‹ค๋ฅด์ง€๋งŒ ๋น„์Šทํ•ด ๋ณด์—ฌ์„œ ์ฒ˜์Œ์—๋Š” ํ˜ผ๋™ํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์„ธ ์–ด๋…ธํ…Œ์ด์…˜์˜ ์ฐจ์ด์ ์„ ํ‘œ๋กœ ์ •๋ฆฌํ•˜๊ณ , ์ƒํ™ฉ๋ณ„๋กœ ์–ด๋–ค ๊ฒƒ์„ ์„ ํƒํ•˜๋ฉด ์ข‹์€์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


๋น„๊ต ํ‘œ

์–ด๋…ธํ…Œ์ด์…˜ ๊ฐ’์ด ์˜ค๋Š” ์œ„์น˜ ์˜ˆ์‹œ ์š”์ฒญ ์ปจํŠธ๋กค๋Ÿฌ ์ฝ”๋“œ ๋ฐ”์ธ๋”ฉ ๊ฒฐ๊ณผ
@PathVariable URL ๊ฒฝ๋กœ GET /boards/10 @GetMapping("/boards/{boardId}")public String get(@PathVariable int boardId) boardId = 10
@RequestParam URL ์ฟผ๋ฆฌ์ŠคํŠธ๋ง(?key=value) GET /boards?page=2&size=10 @GetMapping("/boards")public String list(@RequestParam int page, @RequestParam int size) page = 2, size = 10
@RequestBody HTTP Body (JSON, XML ๋“ฑ) POST /boardsBody: { "title": "์ œ๋ชฉ", "content": "๋‚ด์šฉ" } @PostMapping("/boards")public void add(@RequestBody BoardDTO dto) dto.title = "์ œ๋ชฉ"dto.content = "๋‚ด์šฉ"

๊ฐ ์–ด๋…ธํ…Œ์ด์…˜์˜ ํŠน์ง•

  • @PathVariable
    • URL ๊ฒฝ๋กœ์— ํฌํ•จ๋œ ๊ฐ’์„ ๋ณ€์ˆ˜๋กœ ๋งคํ•‘.
    • REST API์—์„œ ์ž์›์˜ ๊ณ ์œ  ID๋ฅผ ๋‚˜ํƒ€๋‚ผ ๋•Œ ์ ํ•ฉ.
    • ์˜ˆ: /boards/10 → ๊ฒŒ์‹œ๊ธ€ ๋ฒˆํ˜ธ 10 ์กฐํšŒ.
  • @RequestParam
    • ์ฟผ๋ฆฌ์ŠคํŠธ๋ง ํ˜•ํƒœ๋กœ ์ „๋‹ฌ๋˜๋Š” ๊ฐ’์„ ๋งคํ•‘.
    • ๊ฒ€์ƒ‰ ์กฐ๊ฑด, ํŽ˜์ด์ง• ๊ฐ™์€ ์˜ต์…˜์„ฑ ๊ฐ’์— ์ ํ•ฉ.
    • ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•„์ˆ˜์ง€๋งŒ required=false ์˜ต์…˜์œผ๋กœ ์„ ํƒ์ ์œผ๋กœ ๋ฐ›์„ ์ˆ˜๋„ ์žˆ์Œ.
  • @RequestBody
    • HTTP Body์— ๋‹ด๊ธด JSON, XML ๋ฐ์ดํ„ฐ๋ฅผ DTO๋กœ ๋ณ€ํ™˜.
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉ.
    • ๋ณดํ†ต POST, PUT ์š”์ฒญ์—์„œ ๋งŽ์ด ํ™œ์šฉ๋จ

ํ™œ์šฉ ์˜ˆ์‹œ: ๋Œ“๊ธ€ ๋“ฑ๋ก API

@PostMapping("/boards/{boardId}/comments")
public void addComment(@PathVariable int boardId,      // URL์—์„œ ๊ฒŒ์‹œ๊ธ€ ID
                       @RequestBody CommentDTO comment, // JSON Body์—์„œ ๋Œ“๊ธ€ ๋‚ด์šฉ
                       @AuthenticationPrincipal CustomUser user) { // ๋กœ๊ทธ์ธ ์‚ฌ์šฉ์ž
    comment.setBoardId(boardId);
    comment.setUserId(user.getUserDTO().getUserId());
    commentService.addComment(comment);
}

 

 

  • @PathVariable → ์–ด๋–ค ๊ฒŒ์‹œ๊ธ€(boardId)์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€์ธ์ง€ ๊ตฌ๋ถ„
  • @RequestBody → ๋Œ“๊ธ€ ๋‚ด์šฉ(content, parentId) ๋ฐ›์Œ
  • @AuthenticationPrincipal → ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž ์ •๋ณด์—์„œ userId ๊ฐ€์ ธ์˜ค๊ธฐ

๊ฒฐ๋ก 

  • @PathVariable์€ URL ๊ฒฝ๋กœ ๊ฐ’
  • @RequestParam์€ ์ฟผ๋ฆฌ์ŠคํŠธ๋ง ๊ฐ’
  • @RequestBody๋Š” HTTP Body(JSON/XML) ๊ฐ’

์„ธ ๊ฐ€์ง€๋ฅผ ์ ์ ˆํžˆ ์กฐํ•ฉํ•˜๋ฉด REST API๋ฅผ ํ›จ์”ฌ ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํŠนํžˆ ๊ฒŒ์‹œํŒ, ๋Œ“๊ธ€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค ๋•Œ๋Š” @PathVariable๋กœ ์ž์›์„ ๊ตฌ๋ถ„ํ•˜๊ณ ,

@RequestBody๋กœ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š” ํŒจํ„ด์ด ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ž…๋‹ˆ๋‹ค.

Spring MVC์—์„œ ์ด ์„ธ ๊ฐ€์ง€ ๊ฐœ๋…์„ ์ •ํ™•ํžˆ ๊ตฌ๋ถ„ํ•ด๋‘๋ฉด, ์ดํ›„ API ๊ฐœ๋ฐœํ•  ๋•Œ ํ›จ์”ฌ ๊น”๋”ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ฐ˜์‘ํ˜•