๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Project ESG+AI/Tech Basics

12์ผ์ฐจ. IT ๊ฐœ๋… ์ •๋ฆฌ

by GreenJin_S2 2025. 10. 24.

 

**“RESTful API ํˆด ๊ตฌ์„ฑ ๊ถŒ๊ณ ์•ˆ”**์„ ์™„์ „ ์ดˆ๋ณด์ž๋„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋‹จ๊ณ„๋ณ„๋กœ ์•„์ฃผ ์ž์„ธํžˆ ํ’€์–ด์„œ ์„ค๋ช…๋“œ๋ฆด๊ฒŒ์š”.
์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด,

“RESTful API๋ฅผ ๋งŒ๋“ค๊ณ  ์šด์˜ํ•  ๋•Œ, ์–ด๋–ค ๋„๊ตฌ(ํˆด)๋ฅผ ์จ์•ผ ํ•˜๊ณ  ์™œ ์“ฐ๋Š”์ง€๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ๊ฐ€์ด๋“œ๋ผ์ธ”
์ด์—์š”.


๐ŸŒฑ RESTful API ํˆด ๊ตฌ์„ฑ ๊ถŒ๊ณ ์•ˆ (์ดˆ๋ณด์ž์šฉ ์ž์„ธํ•œ ๋ฒ„์ „)


1๏ธโƒฃ RESTful API๋ž€?

๐Ÿ”น REST๋ž€?

REST(Representational State Transfer) ๋Š”
์›น์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ทœ์น™์ด์—์š”.

์˜ˆ๋ฅผ ๋“ค์–ด,

  • “์‚ฌ์šฉ์ž ๋ชฉ๋ก์„ ์ฃผ์„ธ์š”” → GET /users
  • “์ƒˆ ์‚ฌ์šฉ์ž๋ฅผ ์ถ”๊ฐ€ํ• ๊ฒŒ์š”” → POST /users
  • “์ด ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ• ๊ฒŒ์š”” → PUT /users/1
  • “์ด ์‚ฌ์šฉ์ž๋ฅผ ์‚ญ์ œํ• ๊ฒŒ์š”” → DELETE /users/1

์ด๋ ‡๊ฒŒ URL(์ฃผ์†Œ)๊ณผ HTTP ๋ฉ”์„œ๋“œ(GET, POST, PUT, DELETE)๋งŒ์œผ๋กœ ์–ด๋–ค ๋™์ž‘์„ ํ•˜๋Š”์ง€ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ RESTful API๋Š”:

“REST ๊ทœ์น™์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ์›น ์„œ๋น„์Šค”์˜ˆ์š”.


2๏ธโƒฃ API ๊ฐœ๋ฐœ์€ ์–ด๋–ค ๊ณผ์ •์ผ๊นŒ?

API๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ค์ œ ์„œ๋น„์Šค์— ์˜ฌ๋ฆฌ๊ธฐ๊นŒ์ง€๋Š” ๋ณดํ†ต 5๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ ์š” ๐Ÿ‘‡

๋‹จ๊ณ„์ด๋ฆ„ํ•˜๋Š” ์ผ์˜ˆ์‹œ
โ‘  ์„ค๊ณ„(Design) API ์ฃผ์†Œ, ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ, ์‘๋‹ต ํ˜•์‹ ์„ค๊ณ„ /users/{id}, ์‘๋‹ต JSON ๊ตฌ์กฐ
โ‘ก ๊ฐœ๋ฐœ(Development) ์‹ค์ œ๋กœ ์ฝ”๋“œ๋กœ API ๋งŒ๋“ค๊ธฐ Spring Boot, Express ๋“ฑ
โ‘ข ํ…Œ์ŠคํŠธ(Test) ์ž˜ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธ Postman, JMeter ๋“ฑ
โ‘ฃ ๋ฐฐํฌ(Deploy) ์„œ๋ฒ„์— ์˜ฌ๋ฆฌ๊ธฐ Docker, GitHub Actions
โ‘ค ์šด์˜(Operation) ๋กœ๊ทธ ํ™•์ธ, ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง Grafana, ELK Stack

3๏ธโƒฃ ๊ฐ ๋‹จ๊ณ„๋ณ„๋กœ ์–ด๋–ค ํˆด์„ ์จ์•ผ ํ•˜๋Š”๊ฐ€?

์ด์ œ๋ถ€ํ„ฐ ๋‹จ๊ณ„๋ณ„๋กœ ์ถ”์ฒœ ํˆด๊ณผ ์ด์œ ๋ฅผ ์„ค๋ช…๋“œ๋ฆด๊ฒŒ์š” ๐Ÿ‘‡


๐Ÿงฉ โ‘  ์„ค๊ณ„ ๋‹จ๊ณ„ (Design Phase)

๐ŸŽฏ ๋ชฉ์ 

  • ์–ด๋–ค API๋ฅผ ๋งŒ๋“ค์ง€ ๋ฏธ๋ฆฌ ์„ค๊ณ„ํ•˜๊ณ , ํŒ€์›๋“ค๊ณผ ๊ณต์œ ํ•˜๋Š” ๋‹จ๊ณ„์˜ˆ์š”.
  • “์ฃผ์†Œ๊ฐ€ ๋ญ๊ณ , ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜ค๊ณ  ๋‚˜๊ฐ€๋Š”์ง€”๋ฅผ ๋ฏธ๋ฆฌ ์ •ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿงฐ ์ถ”์ฒœ ํˆด

ํˆด์—ญํ• ์„ค๋ช…

 

Swagger Editor API ์„ค๊ณ„ ์›น์—์„œ REST API ๋ช…์„ธ(OpenAPI)๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ์„ค๊ณ„ ๊ฐ€๋Šฅ
Stoplight ํ˜‘์—…ํ˜• ์„ค๊ณ„ Swagger๋ณด๋‹ค ๋” ์‹œ๊ฐ์ ์ด๊ณ  ํŒ€ ํ˜‘์—…์— ์ข‹์Œ
Draw.io / Lucidchart ์„ค๊ณ„ ๋‹ค์ด์–ด๊ทธ๋žจ API ๊ตฌ์กฐ๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ์ •๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉ

 

 

โœ… RESTful ๊ธฐ์ค€์œผ๋กœ ๋ณด๋ฉด ์ด๋ ‡๊ฒŒ ๋ฉ๋‹ˆ๋‹ค ๐Ÿ‘‡

๊ธฐ๋ŠฅHTTP ๋ฉ”์„œ๋“œ์–ด๋…ธํ…Œ์ด์…˜์˜ˆ์‹œ
Create (์ƒ์„ฑ) POST @PostMapping POST /api/users
Read (์กฐํšŒ) GET @GetMapping GET /api/users/{id}
Update (์ˆ˜์ •) PUT @PutMapping PUT /api/users/{id}
Delete (์‚ญ์ œ) DELETE @DeleteMapping DELETE /api/users/{id}

๐Ÿ’ก ์ •๋ฆฌํ•˜์ž๋ฉด

  • โœ”๏ธ @PostMapping → ๋ฐ์ดํ„ฐ ๋“ฑ๋ก (save)
  • โœ”๏ธ @GetMapping → ๋ฐ์ดํ„ฐ ์กฐํšŒ (findById, findAll)
  • โœ”๏ธ @PutMapping → ๋ฐ์ดํ„ฐ ์ˆ˜์ • (update)
  • โœ”๏ธ @DeleteMapping → ๋ฐ์ดํ„ฐ ์‚ญ์ œ (delete)