[Spring] Rest API

DevelopHeoยท2025๋…„ 2์›” 2์ผ
post-thumbnail

๐Ÿ“™ REST API๋ž€?

REST API๋Š” Representational State Transfer(REST) ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ์„ ๋”ฐ๋ฅด๋Š” API๋กœ, ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์— HTTP ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

  • REST API๋Š” HTTP ๊ธฐ๋ฐ˜์˜ CRUD ์ˆ˜ํ–‰์„ ์œ„ํ•œ ๊ทœ์น™์„ ๋”ฐ๋ฅด๋Š” API
  • RESTfulํ•˜๊ฒŒ ์„ค๊ณ„ํ•˜๋ ค๋ฉด ์ผ๊ด€๋œ URL๊ณผ HTTP ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉ
  • Spring Boot์—์„œ @RestController, @RequestMapping, @ExceptionHandler ๋“ฑ์„ ํ™œ์šฉํ•˜์—ฌ REST API ๊ตฌํ˜„ ๊ฐ€๋Šฅ

โœ๏ธ 1. REST API์˜ ๊ธฐ๋ณธ ์›์น™

  1. ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๊ตฌ์กฐ

    • ํด๋ผ์ด์–ธํŠธ(ํ”„๋ก ํŠธ์—”๋“œ)์™€ ์„œ๋ฒ„(๋ฐฑ์—”๋“œ)๊ฐ€ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌ๋จ.
  2. ๋ฌด์ƒํƒœ(Stateless)

    • ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์š”์ฒญ๋งˆ๋‹ค ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ํฌํ•จํ•ด์•ผ ํ•จ.
  3. ์บ์‹œ ๊ฐ€๋Šฅ(Cacheable)

    • GET ์š”์ฒญ์˜ ๊ฒฝ์šฐ, ์‘๋‹ต์„ ์บ์‹œํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ.
  4. ๊ณ„์ธตํ™”๋œ ์‹œ์Šคํ…œ(Layered System)

    • API ์š”์ฒญ์€ ์—ฌ๋Ÿฌ ๊ณ„์ธต์„ ๊ฑฐ์น  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ณด์•ˆ, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๋“ฑ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Œ.
  5. ์ผ๊ด€๋œ ์ธํ„ฐํŽ˜์ด์Šค(Uniform Interface)

    • API์˜ ๋ฆฌ์†Œ์Šค ๋ช…๋ช… ๊ทœ์น™์„ ์ง€์ผœ์•ผ ํ•จ (/users, /products ๋“ฑ).

โœ๏ธ 2. REST API์˜ HTTP ๋ฉ”์„œ๋“œ

HTTP ๋ฉ”์„œ๋“œ์„ค๋ช…
GET๋ฆฌ์†Œ์Šค ์กฐํšŒ (/users/1 โ†’ ID๊ฐ€ 1์ธ ์‚ฌ์šฉ์ž ์กฐํšŒ)
POST๋ฆฌ์†Œ์Šค ์ƒ์„ฑ (/users โ†’ ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž ์ƒ์„ฑ)
PUT๋ฆฌ์†Œ์Šค ์ „์ฒด ์ˆ˜์ • (/users/1 โ†’ ID๊ฐ€ 1์ธ ์‚ฌ์šฉ์ž ์ „์ฒด ์ˆ˜์ •)
PATCH๋ฆฌ์†Œ์Šค ์ผ๋ถ€ ์ˆ˜์ • (/users/1 โ†’ ID๊ฐ€ 1์ธ ์‚ฌ์šฉ์ž ์ผ๋ถ€ ์ˆ˜์ •)
DELETE๋ฆฌ์†Œ์Šค ์‚ญ์ œ (/users/1 โ†’ ID๊ฐ€ 1์ธ ์‚ฌ์šฉ์ž ์‚ญ์ œ)

โœ๏ธ 3. Rest ๊ด€๋ จ ์–ด๋…ธํ…Œ์ด์…˜

AnnotationDescription
@RestControllerController๊ฐ€ REST ๋ฐฉ์‹์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž„์„ ๋ช…์‹œ
@ResponseBodyJSP ๊ฐ™์€ ๋ทฐ๋กœ ์ „๋‹ฌ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ ์ž์ฒด๋ฅผ ์ „๋‹ฌ
@PathVariableURL ๊ฒฝ๋กœ์— ์žˆ๋Š” ๊ฐ’์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ถ”์ถœ
@CrossOriginAjax์˜ ํฌ๋กœ์Šค ๋„๋ฉ”์ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ
@RequestBodyJSON ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ•˜๋Š” ํƒ€์ž…์œผ๋กœ ๋ฐ”์ธ๋”ฉ
@RequestParam์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๊ฐ’์„ ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉ
@RequestHeaderHTTP ์š”์ฒญ ํ—ค๋” ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉ
ResponseEntityHTTP ์‘๋‹ต ์ฝ”๋“œ, ํ—ค๋”, ๋ฐ”๋””๋ฅผ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•  ๋•Œ ์‚ฌ์šฉ

0๊ฐœ์˜ ๋Œ“๊ธ€