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 ๊ฐ๋ฐํ ๋ ํจ์ฌ ๊น๋ํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.