2023๋…„ 8์›” 29์ผยท5๋ถ„ ์ฝ๊ธฐ

REST API ๋ชจ๋ฒ” ์‚ฌ๋ก€

ํ™•์žฅ์„ฑ, ์œ ์ง€ ๊ด€๋ฆฌ์„ฑ, ๋ณด์•ˆ์„ ๋ณด์žฅํ•˜๋Š” REST API ์„ค๊ณ„ ๋ชจ๋ฒ” ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.

REST API ๋ชจ๋ฒ” ์‚ฌ๋ก€

ํ˜„๋Œ€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์˜์—ญ์—์„œ ๊ฐ•๋ ฅํ•˜๊ณ  ํšจ์œจ์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์›น API์˜ ์ˆ™๋‹ฌ์— ๋‹ฌ๋ ค ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. REST(Representational State Transfer)๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์˜ ๋‹ค์–‘ํ•œ ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ„์˜ ์›ํ™œํ•œ ํ†ต์‹ ์„ ์ด‰์ง„ํ•˜๋Š” API๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ๊ตฌ์ถ•ํ•˜๋Š” ์ดˆ์„์œผ๋กœ ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. REST์˜ ์šฐ์•„ํ•จ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์ƒํ˜ธ ์šด์šฉ ๊ฐ€๋Šฅํ•œ API๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋‹จ์ˆœ์„ฑ๊ณผ ๊ธฐ๋ณธ ์•„ํ‚คํ…์ฒ˜ ์›์น™ ์ค€์ˆ˜์— ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ REST API ์˜ ์ž ์žฌ๋ ฅ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๋ ค๋ฉด ๊ธฐ๋ณธ ์›์น™์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ ์ด์ƒ์˜ ๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ๊ตํ™˜๊ณผ ํ–ฅ์ƒ๋œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์— ๊ธฐ์—ฌํ•˜๋Š” ๊ณ ํ’ˆ์งˆ API๋ฅผ ์ œ์ž‘ํ•˜๋ ค๋ฉด ์„ค๊ณ„, ๊ตฌํ˜„ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ชจ๋ฒ” ์‚ฌ๋ก€์— ๋Œ€ํ•œ ์‹ฌ์ธต ๋ถ„์„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ธ”๋กœ๊ทธ ๊ธฐ์‚ฌ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ๋…ธ๋ ฅ์„ ์ƒˆ๋กœ์šด ์ฐจ์›์œผ๋กœ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ํ•„์ˆ˜ REST API ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

์ธ์ฆ ๋ฐ ์Šน์ธ

REST API๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ๋ฆฌ์†Œ์Šค ๋ณด์•ˆ์„ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ๋Š” ๋ฌด๋‹จ ์•ก์„ธ์Šค ๋ฐ ์˜ค์šฉ์œผ๋กœ๋ถ€ํ„ฐ API๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์ธก๋ฉด์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ํšจ๊ณผ์ ์ธ ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ์ „๋žต์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ž…์ฆ

์ธ์ฆ์€ API์— ์•ก์„ธ์Šคํ•˜๋ ค๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค. ํšจ๊ณผ์ ์ธ ์ธ์ฆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ API ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•˜๊ธฐ ์ „์— ์‚ฌ์šฉ์ž์˜ ์‹ ์›์„ ๊ฒ€์ฆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. RESTful API์— ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ธ์ฆ ์ฒด๊ณ„์—๋Š” ๊ธฐ๋ณธ ์ธ์ฆ, API ํ‚ค, OAuth 2.0 ๋ฐ JWT( JSON ์›น ํ† ํฐ)๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  • ๊ธฐ๋ณธ ์ธ์ฆ: ๊ธฐ๋ณธ ์ธ์ฆ์—์„œ ํด๋ผ์ด์–ธํŠธ๋Š” Authorization ํ—ค๋”๋ฅผ ํ†ตํ•ด base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ์‚ฌ์šฉ์ž ์ž๊ฒฉ ์ฆ๋ช…(์˜ˆ: ์‚ฌ์šฉ์ž ์ด๋ฆ„ ๋ฐ ๋น„๋ฐ€๋ฒˆํ˜ธ)์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ๊ตฌํ˜„ํ•˜๊ธฐ ์‰ฝ์ง€๋งŒ ๋ณด์•ˆ ์ˆ˜์ค€์ด ๋‚ฎ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์€ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ „์†ก๋˜๋Š” ๊ฒฝ์šฐ ์ž๊ฒฉ ์ฆ๋ช…์ด ์ „์†ก ์ค‘์— ๊ฐ€๋กœ์ฑ„์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • API ํ‚ค: API ํ‚ค๋Š” ๊ฐ ์‚ฌ์šฉ์ž ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ• ๋‹น๋œ ๊ณ ์œ  ํ† ํฐ์ด๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ API ์š”์ฒญ๊ณผ ํ•จ๊ป˜ ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋˜๋Š” ํ—ค๋”๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ๋œ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ์™€ ๊ฐ„๋‹จํ•œ ์ธ์ฆ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๊ฐ–์ถ˜ ๊ณต๊ฐœ API์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ธ์ฆ๋ณด๋‹ค ์•ˆ์ „ํ•˜์ง€๋งŒ OAuth 2.0 ๋ฐ JWT์™€ ๊ฐ™์€ ๊ณ ๊ธ‰ ์ฒด๊ณ„์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์„ธ๋ถ€์ ์ธ ์ œ์–ด ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • OAuth 2.0: OAuth 2.0์€ API์— ๋Œ€ํ•œ ์•ˆ์ „ํ•˜๊ณ  ์œ„์ž„๋œ ์•ก์„ธ์Šค๋ฅผ ์œ„ํ•ด ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ํ‘œ์ค€์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ์ž์˜ ์—ญํ• ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ž๊ฒฉ ์ฆ๋ช… ์—†์ด๋„ ์‚ฌ์šฉ์ž๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. OAuth 2.0์€ ๋‹ค์–‘ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค(์˜ˆ: ์ธ์ฆ ์ฝ”๋“œ, ์•”์‹œ์ , ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ฐ ํด๋ผ์ด์–ธํŠธ ์ž๊ฒฉ ์ฆ๋ช…)์— ๋Œ€ํ•œ ๋‹ค์–‘ํ•œ ๋ถ€์—ฌ ์œ ํ˜•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • JSON ์›น ํ† ํฐ(JWT): JWT๋Š” ๋‹น์‚ฌ์ž ๊ฐ„ ์ฒญ๊ตฌ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ„๊ฒฐํ•˜๊ณ  ๋…๋ฆฝ์ ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. OAuth 2.0๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„ ๋ณด์•ˆ ๊ณ„์ธต์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. JWT๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ญํ• ์ด๋‚˜ ๊ถŒํ•œ ๋“ฑ ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ํ† ํฐ ์ž์ฒด์— ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ† ํฐ์€ ์„œ๋ฒ„์—์„œ ์„œ๋ช…ํ•˜๊ณ  ์„ ํƒ์ ์œผ๋กœ ์•”ํ˜ธํ™”ํ•˜์—ฌ ๋ณ€์กฐ ๋ฐฉ์ง€ ๋ฐ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ€์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

๊ถŒํ•œ ๋ถ€์—ฌ

๊ถŒํ•œ ๋ถ€์—ฌ๋Š” ์—ญํ• ์ด๋‚˜ ๊ถŒํ•œ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํŠน์ • ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•˜๊ฑฐ๋‚˜ ๊ฑฐ๋ถ€ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค. ์ธ์ฆ์ด ์„ฑ๊ณตํ•œ ํ›„์— ๋ฐœ์ƒํ•˜๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ API๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…๊ณผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์ž‘์—…์„ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๋ฐ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. ์—ญํ•  ๊ธฐ๋ฐ˜ ์•ก์„ธ์Šค ์ œ์–ด(RBAC)์™€ ์†์„ฑ ๊ธฐ๋ฐ˜ ์•ก์„ธ์Šค ์ œ์–ด(ABAC)๋Š” ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

  • RBAC(์—ญํ•  ๊ธฐ๋ฐ˜ ์•ก์„ธ์Šค ์ œ์–ด): RBAC์—์„œ๋Š” ๊ถŒํ•œ์ด ์—ญํ• ๊ณผ ์—ฐ๊ฒฐ๋˜๋ฉฐ ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ์ฑ…์ž„์— ๋”ฐ๋ผ ์—ญํ• ์ด ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค. RBAC๋Š” ๊ตฌํ˜„ ๋ฐ ๊ด€๋ฆฌ๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๊ฐ„๋‹จํ•˜๋ฏ€๋กœ ๋Œ€๋ถ€๋ถ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  • ์†์„ฑ ๊ธฐ๋ฐ˜ ์•ก์„ธ์Šค ์ œ์–ด(ABAC): ABAC๋Š” ์ถ”๊ฐ€ ์‚ฌ์šฉ์ž ์†์„ฑ, ์•ก์„ธ์Šค๋œ ๋ฆฌ์†Œ์Šค ๋˜๋Š” ํ™˜๊ฒฝ์„ ๊ณ ๋ คํ•˜์—ฌ RBAC๋ฅผ ํ™•์žฅํ•˜์—ฌ ๋ณด๋‹ค ์„ธ๋ถ„ํ™”๋œ ์•ก์„ธ์Šค ์ œ์–ด ๊ฒฐ์ •์„ ๋‚ด๋ฆฝ๋‹ˆ๋‹ค. ABAC๋Š” RBAC๋ณด๋‹ค ๋” ์œ ์—ฐํ•˜์ง€๋งŒ ๊ตฌํ˜„ ๋ฐ ๊ด€๋ฆฌ๊ฐ€ ๋” ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค.

๋ฒ„์ „ ๊ด€๋ฆฌ ๋ฐ ์ง€์› ์ค‘๋‹จ

API๊ฐ€ ๋ฐœ์ „ํ•จ์— ๋”ฐ๋ผ ๊ธฐ์กด ํด๋ผ์ด์–ธํŠธ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋„์ž…ํ•ด์•ผ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. API ๋ฒ„์ „ ๊ด€๋ฆฌ๋Š” ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์˜ ์›ํ™œํ•œ ์ „ํ™˜์„ ์œ„ํ•ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. REST API ๋ฒ„์ „์„ ์ง€์ •ํ•˜๋Š” ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ์ „๋žต์€ URI ๋ฒ„์ „ ๊ด€๋ฆฌ, ํ—ค๋” ๋ฒ„์ „ ๊ด€๋ฆฌ ๋ฐ ์ฝ˜ํ…์ธ  ํ˜‘์ƒ(ํ—ค๋” ์ˆ˜๋ฝ)์ž…๋‹ˆ๋‹ค.

  1. URI ๋ฒ„์ „ ๊ด€๋ฆฌ: ์ด๋Š” URI์— ๋ฒ„์ „ ๋ฒˆํ˜ธ๋ฅผ ์ง์ ‘ ํฌํ•จํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด https://api.example.com/v1/users ๋ฐ https://api.example.com/v2/users . URI ๋ฒ„์ „ ๊ด€๋ฆฌ๋Š” ๊ตฌํ˜„ํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฝ์ง€๋งŒ URI๊ฐ€ ๊ณ ์œ ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋‚˜ํƒ€๋‚ด์•ผ ํ•œ๋‹ค๋Š” REST ์›์น™์„ ์œ„๋ฐ˜ํ•ฉ๋‹ˆ๋‹ค.
  2. ํ—ค๋” ๋ฒ„์ „ ๊ด€๋ฆฌ: ์ด ์ ‘๊ทผ ๋ฐฉ์‹์—์„œ๋Š” API ๋ฒ„์ „์ด X-API-Version: 1 ๋˜๋Š” X-API-Version: 2 ๊ฐ™์€ ์‚ฌ์šฉ์ž ์ •์˜ ํ—ค๋”์— ์ง€์ •๋ฉ๋‹ˆ๋‹ค. ํ—ค๋” ๋ฒ„์ „ ๊ด€๋ฆฌ๋Š” URI ๋ฒ„์ „ ๊ด€๋ฆฌ๋ณด๋‹ค ๋œ ๋ฐฉํ•ด์ ์ด๊ณ  URI๋ฅผ ๊นจ๋—ํ•˜๊ฒŒ ์œ ์ง€ํ•˜์ง€๋งŒ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ๋Š” ๋œ ์ง๊ด€์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์ฝ˜ํ…์ธ  ํ˜‘์ƒ(Accept ํ—ค๋”): ์ด ๋ฐฉ๋ฒ•์€ ํ‘œ์ค€ Accept ํ—ค๋”๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฏธ๋””์–ด ์œ ํ˜•์—์„œ ์›ํ•˜๋Š” ๋ฒ„์ „์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Accept: application/vnd.example.api-v1+json . ์ด๋Š” ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹๋ณด๋‹ค REST ์›์น™์„ ๋” ๋ฐ€์ ‘ํ•˜๊ฒŒ ๋”ฐ๋ฅด์ง€๋งŒ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ํ•ด์„ํ•˜๊ธฐ๊ฐ€ ๋ฒˆ๊ฑฐ๋กœ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ ํƒํ•œ ๋ฒ„์ „ ๊ด€๋ฆฌ ์ „๋žต์— ๊ด€๊ณ„์—†์ด ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ณ ๊ฐ์—๊ฒŒ ๋ฏธ๋ฆฌ ์•Œ๋ฆฌ๊ณ  ์ƒˆ ๋ฒ„์ „์œผ๋กœ์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ๋ฌธ์„œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ  ์ž ์žฌ์ ์ธ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ด์ „ API ๋ฒ„์ „์— ๋Œ€ํ•œ ์ง€์› ํƒ€์ž„๋ผ์ธ์„ ์ •์˜ํ•˜๋Š” ๋ช…ํ™•ํ•œ ์‚ฌ์šฉ ์ค‘๋‹จ ์ •์ฑ…์„ ์„ค์ •ํ•˜์„ธ์š”.

์บ์‹ฑ ์ „๋žต

์บ์‹ฑ์€ ์„œ๋ฒ„ ๋กœ๋“œ๋ฅผ ์ค„์ด๊ณ , ์š”์ฒญ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ค„์ด๋ฉฐ, ๋Œ€์—ญํญ ์‚ฌ์šฉ๋Ÿ‰์„ ์ตœ์†Œํ™”ํ•˜์—ฌ RESTful API์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ธ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. API์— ์ ์ ˆํ•œ ์บ์‹ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ตฌํ˜„ํ•˜๋ฉด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜๊ณผ ์‹œ์Šคํ…œ ํšจ์œจ์„ฑ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ์ผ๋ฐ˜์ ์ธ ์บ์‹ฑ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

  • HTTP ์บ์‹ฑ: ETag , Last-Modified ๋ฐ Cache-Control ๊ณผ ๊ฐ™์€ ํ‘œ์ค€ HTTP ํ—ค๋”๋ฅผ ํ™œ์šฉํ•˜์—ฌ API์˜ ์บ์‹ฑ ๋™์ž‘์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ—ค๋”๋Š” ๋ฆฌ์†Œ์Šค์˜ ์ตœ์‹ ์„ฑ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์กฐ๊ฑด๋ถ€ ์š”์ฒญ์„ ํ™œ์„ฑํ™”ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์บ์‹œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„ ์ธก ์บ์‹ฑ: ์ž์ฃผ ์•ก์„ธ์Šคํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์„œ๋ฒ„ ์ธก ๋ฉ”๋ชจ๋ฆฌ๋‚˜ ๊ธฐํƒ€ ์บ์‹ฑ ์‹œ์Šคํ…œ(์˜ˆ: Redis, Memcached)์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ๋‚˜ ๋ฆฌ์†Œ์Šค ์ง‘์•ฝ์ ์ธ ์ž‘์—…์˜ ํ•„์š”์„ฑ์ด ํฌ๊ฒŒ ์ค„์–ด๋“ค์–ด ์‘๋‹ต ์‹œ๊ฐ„์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.
  • ์ฝ˜ํ…์ธ  ์ „๋‹ฌ ๋„คํŠธ์›Œํฌ(CDN): CDN์€ ์ „ ์„ธ๊ณ„์— ๋ถ„์‚ฐ๋œ ์—์ง€ ์„œ๋ฒ„์—์„œ ๋ฆฌ์†Œ์Šค ํ‘œํ˜„์„ ์บ์‹œํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์บ์‹œ๋œ ๋ฆฌ์†Œ์Šค ๋ณต์‚ฌ๋ณธ์„ ์ œ๊ณตํ•˜์—ฌ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค. CDN์€ ์ง€๋ฆฌ์ ์œผ๋กœ ํฐ ์‚ฌ์šฉ์ž ๊ธฐ๋ฐ˜๊ณผ ์ฝ˜ํ…์ธ  ๋ฐฐํฌ ์š”๊ตฌ ์‚ฌํ•ญ์ด ๋งŽ์€ API์— ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜์ค€ ์บ์‹ฑ: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜์ค€ ์บ์‹ฑ์€ ์ค‘๋ณต ๊ณ„์‚ฐ๊ณผ ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ์ž‘์—…์„ ์ตœ์†Œํ™”ํ•˜์—ฌ API ์„ฑ๋Šฅ์„ ๋”์šฑ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์บ์‹œ ๋ฌด๊ฒฐ์„ฑ๊ณผ ์ตœ์‹ ์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ์‚ฌ์šฉ์ž ์ •์˜ ๋…ผ๋ฆฌ๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํšจ๊ณผ์ ์ธ ์บ์‹ฑ ์ „๋žต์„ ๊ตฌํ˜„ํ•˜๋ฉด REST API์˜ ์„ฑ๋Šฅ๊ณผ ํ™•์žฅ์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. API์˜ ํŠน์ • ์š”๊ตฌ ์‚ฌํ•ญ์„ ํ‰๊ฐ€ํ•˜์—ฌ ์š”๊ตฌ ์‚ฌํ•ญ์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๊ธฐ์ˆ ์„ ๊ฒฐ์ •ํ•˜์„ธ์š”.

์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฐ ๊ฒ€์ฆ

ํšจ๊ณผ์ ์ธ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฐ ์ž…๋ ฅ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋Š” REST API๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ์ค‘์š”ํ•œ ๊ตฌ์„ฑ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ด€ํ–‰์€ ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  API์˜ ์•ˆ์ •์„ฑ๊ณผ ์œ ์ง€ ๊ด€๋ฆฌ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

์ผ๊ด€๋˜๊ณ  ์˜๋ฏธ ์žˆ๋Š” HTTP ์ƒํƒœ ์ฝ”๋“œ

REST์˜ ์ฃผ์š” ์›์น™ ์ค‘ ํ•˜๋‚˜๋Š” ์ ์ ˆํ•œ HTTP ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API ํ˜ธ์ถœ ๊ฒฐ๊ณผ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. API ์‘๋‹ต์— ํ‘œ์ค€ํ™”๋œ HTTP ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์ฑ„ํƒํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‘๋‹ต ํŽ˜์ด๋กœ๋“œ๋ฅผ ๋” ๊นŠ์ด ํŒŒ๊ณ ๋“ค์ง€ ์•Š๊ณ ๋„ ์‘๋‹ต์˜ ํŠน์„ฑ์„ ๋” ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ HTTP ์ƒํƒœ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • 200 OK: ์š”์ฒญ์ด ์„ฑ๊ณตํ–ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • 201 Created: ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • 204 ์ฝ˜ํ…์ธ  ์—†์Œ: ๋ฐ˜ํ™˜ํ•  ์ถ”๊ฐ€ ์ฝ˜ํ…์ธ  ์—†์ด ์š”์ฒญ์ด ์„ฑ๊ณตํ–ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • 400 ์ž˜๋ชป๋œ ์š”์ฒญ: ํด๋ผ์ด์–ธํŠธ์˜ ํ˜•์‹์ด ์ž˜๋ชป๋˜์—ˆ๊ฑฐ๋‚˜ ์œ ํšจํ•˜์ง€ ์•Š์€ ์ž…๋ ฅ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • 401 Unauthorized: ์ธ์ฆ ์ž๊ฒฉ ์ฆ๋ช…์ด ๋ˆ„๋ฝ๋˜์—ˆ๊ฑฐ๋‚˜ ์ž˜๋ชป๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • 403 ๊ธˆ์ง€๋จ: ์š”์ฒญํ•œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ๋ถ€์กฑํ•จ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • 404 ์ฐพ์„ ์ˆ˜ ์—†์Œ: ์š”์ฒญํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • 500 ๋‚ด๋ถ€ ์„œ๋ฒ„ ์˜ค๋ฅ˜: ์ผ๋ฐ˜์ ์ธ ์„œ๋ฒ„ ์ธก ์˜ค๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์„ค๋ช…์ ์ธ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€

๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋„๋ก ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ์„ค๋ช…์ ์ธ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๋ฅผ ์ผ์œผํ‚ค๋Š” ํŠน์ • ํ•„๋“œ, ์˜ค๋ฅ˜ ์ด์œ , ์ œ์•ˆ๋œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ๋“ฑ์˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

 { "error": { "status": 400, "message": "Invalid email address", "field": "email", "suggestion": "Please provide a valid email address" } }

์ž…๋ ฅ ๊ฒ€์ฆ

API ์ˆ˜์ค€์—์„œ ์ž…๋ ฅ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋ฉด ์ž˜๋ชป๋œ ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์‹œ์Šคํ…œ์— ์ž…๋ ฅ๋˜์–ด ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋ชจ๋“  ์ž…๋ ฅ์ด ํ•„์ˆ˜ ๊ธฐ์ค€์„ ์ถฉ์กฑํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„์ธก ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ•„์ˆ˜ ํ•„๋“œ๊ฐ€ ๋ˆ„๋ฝ๋˜์—ˆ๋Š”์ง€ ๋˜๋Š” ๋ฐ์ดํ„ฐ ์œ ํ˜•์ด ์˜ˆ์ƒ ํ˜•์‹๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ์‹คํŒจํ•˜๋ฉด ์ ์ ˆํ•œ HTTP ์ƒํƒœ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์„ค๋ช…์ด ํฌํ•จ๋œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ œํ•œ ๋ฐ ์†๋„ ์ œํ•œ

ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๋ฐฑ์—”๋“œ ์ƒ์„ฑ
๋†’์€ ํŠธ๋ž˜ํ”ฝ๊ณผ ๋ฌด์ƒํƒœ ์„ฑ๋Šฅ์„ ๊ณ ๋ คํ•ด ์„ค๊ณ„๋œ ์ปดํŒŒ์ผ๋œ Go ๋ฐฑ์—”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”.
๋ฐฑ์—”๋“œ ์ƒ์„ฑ

์ œํ•œ ๋ฐ ์†๋„ ์ œํ•œ์€ ๋‚จ์šฉ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ๊ณผ๋„ํ•œ ๋กœ๋“œ๋กœ๋ถ€ํ„ฐ API๋ฅผ ๋ณดํ˜ธํ•˜๋ฉฐ ๊ณต์ •ํ•œ ์‚ฌ์šฉ์„ ๋ณด์žฅํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ธ ๊ด€ํ–‰์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณด์กดํ•˜๊ณ  API์˜ ์„ฑ๋Šฅ๊ณผ ์•ˆ์ •์„ฑ์„ ๊ฐœ์„ ํ•˜๋ฉฐ DDoS์™€ ๊ฐ™์€ ์•…์˜์ ์ธ ๊ณต๊ฒฉ์œผ๋กœ๋ถ€ํ„ฐ API๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

API ์†๋„ ์ œํ•œ

API ์†๋„ ์ œํ•œ์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํŠน์ • ๊ธฐ๊ฐ„ ๋‚ด์— ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” API ์š”์ฒญ ์ˆ˜๋ฅผ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์ „๋žต์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๊ณ ์ • ์ฐฝ: ์‹œ๊ฐ„ ์ฐฝ ๋‚ด์—์„œ ๊ณ ์ •๋œ ์ˆ˜์˜ ์š”์ฒญ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ์‹œ๊ฐ„๋‹น 1000๊ฐœ์˜ ์š”์ฒญ).
  • ์Šฌ๋ผ์ด๋”ฉ ์ฐฝ: ๊ฐ ์š”์ฒญ ํ›„ ์ฐฝ์„ ์ง€์†์ ์œผ๋กœ ์ƒˆ๋กœ ๊ณ ์ณ ์—ฐ์† ๊ธฐ๊ฐ„์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ๊ฐ ํ˜ธ์ถœ ํ›„ ์ฐฝ์ด ์ƒˆ๋กœ ๊ณ ์ณ์ง€๋Š” ์‹œ๊ฐ„๋‹น 1000๊ฐœ ์š”์ฒญ).
  • ๋ฒ„ํ‚ท(ํ† ํฐ) ๊ธฐ๋ฐ˜: ๊ฐ ์š”์ฒญ์— ์‚ฌ์šฉ๋˜๋Š” ๊ณ ์ •๋œ ์ˆ˜์˜ ํ† ํฐ์„ ํด๋ผ์ด์–ธํŠธ์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ํ† ํฐ์ด ๊ณ ๊ฐˆ๋˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ์ถ”๊ฐ€ ์š”์ฒญ์„ ํ•˜๊ธฐ ์ „์— ํ† ํฐ ๋ณด์ถฉ์„ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

API ์กฐ์ ˆ

API ์ œํ•œ์€ ์š”์ฒญ์ด ์ฒ˜๋ฆฌ๋˜๋Š” ์†๋„๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ๋ฐฐํฌํ•˜์—ฌ ์ˆ˜์š”๊ฐ€ ๋งŽ์€ ๊ธฐ๊ฐ„์—๋„ API๊ฐ€ ํด๋ผ์ด์–ธํŠธ์— ๊ณ„์† ์‘๋‹ตํ•˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์ œํ•œ ๊ธฐ์ˆ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋™์‹œ ์š”์ฒญ: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋™์‹œ์— ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์š”์ฒญ ์ˆ˜๋ฅผ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.
  • ์š”์ฒญ ์šฐ์„ ์ˆœ์œ„ ์ง€์ •: ํด๋ผ์ด์–ธํŠธ ์œ ํ˜•, ์‚ฌ์šฉ ํŒจํ„ด ๋˜๋Š” ๊ฐ€๊ฒฉ ์ฑ…์ • ๊ณ„์ธต๊ณผ ๊ฐ™์€ ์š”์†Œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์š”์ฒญ์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ์ ์‘ํ˜• ์กฐ์ ˆ: ํ˜„์žฌ ์‹œ์Šคํ…œ ๋กœ๋“œ ๋˜๋Š” ์„ฑ๋Šฅ์— ๋”ฐ๋ผ ์†๋„ ์ œํ•œ์„ ๋™์ ์œผ๋กœ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

API ๋ฌธ์„œ์™€ X-RateLimit-* headers ์™€ ๊ฐ™์€ ์‘๋‹ต ํ—ค๋”๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์— ์†๋„ ์ œํ•œ ๋ฐ ์ œํ•œ ์ •์ฑ…์„ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์„œํ™” ๋ฐ ํ…Œ์ŠคํŠธ

๊ฒฐ์ œ์™€ ๋ฉ”์‹œ์ง€ ์—ฐ๊ฒฐ
์ค€๋น„๋œ ๋ชจ๋“ˆ๋กœ Stripe ๊ฒฐ์ œ์™€ Telegram ๋˜๋Š” ์ด๋ฉ”์ผยทSMS ์•Œ๋ฆผ์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”.
๋ชจ๋“ˆ ์ถ”๊ฐ€

๋ช…ํ™•ํ•œ ๋ฌธ์„œ ์ œ๊ณต๊ณผ ์ฒ ์ €ํ•œ ํ…Œ์ŠคํŠธ๋Š” ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜๊ณผ API ์ฑ„ํƒ์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ ๋•Œ๋ฌธ์— API ๊ฐœ๋ฐœ์˜ ์ค‘์š”ํ•œ ์ธก๋ฉด์ž…๋‹ˆ๋‹ค.

API ๋ฌธ์„œ

API๋ฅผ ๋ฌธ์„œํ™”ํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๋Š” API์™€ ์‹ ์†ํ•˜๊ฒŒ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•, ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ endpoints ๋ฐ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์š”์ฒญ ์œ ํ˜•์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. API ๋ฌธ์„œ์— ๋‹ค์Œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์„ธ์š”.

  • ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ ํ”„๋กœ์„ธ์Šค
  • ์˜ˆ์‹œ ์š”์ฒญ ๋ฐ ์‘๋‹ต์ด ํฌํ•จ๋œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ endpoints
  • HTTP ๋ฉ”์†Œ๋“œ, ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ ์˜ˆ์ƒ ์‘๋‹ต ํ˜•์‹
  • ์˜ค๋ฅ˜ ์ฝ”๋“œ ๋ฐ ๋ฉ”์‹œ์ง€
  • ์†๋„ ์ œํ•œ ๋ฐ ์กฐ์ ˆ ์ •๋ณด
  • API ๋ฒ„์ „ ๊ด€๋ฆฌ ์„ธ๋ถ€์ •๋ณด

Swagger(OpenAPI)๋Š” REST API ๋ฌธ์„œํ™”์— ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ํ‘œ์ค€์ž…๋‹ˆ๋‹ค. API ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ JSON ๋˜๋Š” YAML ๊ธฐ๋ฐ˜ ํ˜•์‹์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ API๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ™”ํ˜• ๋ฌธ์„œ๋ฅผ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

API ํ…Œ์ŠคํŠธ

API๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋ฉด API๊ฐ€ ๋‹ค์–‘ํ•œ ์กฐ๊ฑด์—์„œ ์˜ฌ๋ฐ”๋ฅด๊ณ  ์ผ๊ด€๋˜๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ํ…Œ์ŠคํŠธ๋Š” ํด๋ผ์ด์–ธํŠธ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ ์ „์— ๋ฒ„๊ทธ, ์„ฑ๋Šฅ ๋ฌธ์ œ ๋ฐ ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ํฌํ•จํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ํ…Œ์ŠคํŠธ ์ „๋žต์„ ๊ฐœ๋ฐœํ•˜์‹ญ์‹œ์˜ค.

  • ๊ฐœ๋ณ„ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ
  • ๊ตฌ์„ฑ ์š”์†Œ์™€ ์™ธ๋ถ€ ์‹œ์Šคํ…œ ๊ฐ„์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•œ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ
  • ๊ณผ๋ถ€ํ•˜ ์ƒํƒœ์—์„œ ์„ฑ๋Šฅ์„ ์ธก์ •ํ•˜๊ณ  ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ์‹๋ณ„ํ•˜๋Š” ๋กœ๋“œ ํ…Œ์ŠคํŠธ
  • ์ž ์žฌ์ ์ธ ์ทจ์•ฝ์ ์„ ์ฐพ๊ณ  ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ณด์•ˆ ํ…Œ์ŠคํŠธ

Postman, SoapUI ๋ฐ JUnit๊ณผ ๊ฐ™์€ ํ…Œ์ŠคํŠธ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API ํ…Œ์ŠคํŠธ ์ƒ์„ฑ, ์‹คํ–‰ ๋ฐ ์ž๋™ํ™” ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. AppMaster ์™€ ๊ฐ™์€ ํ”Œ๋žซํผ์„ ์‚ฌ์šฉํ•˜๋ฉด REST API ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ์†๋„๋ฅผ ํฌ๊ฒŒ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๊ฐ€ ์—†๋Š” ํ”Œ๋žซํผ์„ ์‚ฌ์šฉํ•˜๋ฉด Swagger ๋ฌธ์„œํ™” ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ž๋™ํ™”ํ•˜๋Š” ๋™์‹œ์— ๋ฐ์ดํ„ฐ ๋ชจ๋ธ, ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค ๋ฐ endpoints ์‹œ๊ฐ์ ์œผ๋กœ ๋””์ž์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ธฐ์ˆ ์  ๋ถ€์ฑ„๊ฐ€ ์ œ๊ฑฐ๋˜๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋” ๋น ๋ฅด๊ฒŒ ์ƒ์„ฑ๋˜๋ฉฐ, ๊ฐœ๋ฐœ ๋น„์šฉ์ด ์ ˆ๊ฐ๋˜์–ด ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋งž๋Š” ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•œ API ์†”๋ฃจ์…˜์ด ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค.

REST API ๊ฐœ๋ฐœ์„ ์œ„ํ•œ AppMaster ์‚ฌ์šฉ

REST API ๊ฐœ๋ฐœ์€ ํŠนํžˆ ๋””์ž์ธ, ํ™•์žฅ์„ฑ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ๊ณ ๋ คํ•  ๋•Œ ์–ด๋ ต๊ณ  ๋ณต์žกํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. AppMaster ์™€ ๊ฐ™์€ ๊ฐ•๋ ฅํ•œ no-code ํ”Œ๋žซํผ์„ ํ™œ์šฉํ•˜๋ฉด API ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ํฌ๊ฒŒ ๊ฐ„์†Œํ™”ํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์•ˆ์ „ํ•œ API ์ƒ์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์„น์…˜์—์„œ๋Š” AppMaster ์–ด๋–ป๊ฒŒ REST API ๊ฐœ๋ฐœ์„ ๊ฐ€์†ํ™”ํ•˜๊ณ , ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์ œ๊ฑฐํ•˜๋ฉฐ, ์ค‘์†Œ๊ธฐ์—… ๋ฐ ๊ธฐ์—…์— ๋ณด๋‹ค ๋น„์šฉ ํšจ์œจ์ ์ธ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ๋ชจ๋ธ, ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค ๋ฐ ์—”๋“œํฌ์ธํŠธ์˜ ์‹œ๊ฐ์  ๋””์ž์ธ

REST API ๊ฐœ๋ฐœ์—์„œ AppMaster ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์š” ์ด์  ์ค‘ ํ•˜๋‚˜๋Š” ์‹œ๊ฐ์  ๋””์ž์ธ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. AppMaster ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ์‹œ๊ฐ์  BP Designer ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๋ชจ๋ธ (๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ) ๋ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง(๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค๋ฅผ ํ†ตํ•ด)์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์„ธ์Šค๋Š” REST API์˜ ๊ฒฌ๊ณ ํ•œ ๊ธฐ๋ฐ˜์„ ๋ณดํ˜ธํ•˜๊ณ  ๋‹ค์–‘ํ•œ ๋ฆฌ์†Œ์Šค ๊ฐ„์˜ ๋ณต์žกํ•œ ๋…ผ๋ฆฌ์™€ ๊ด€๊ณ„์˜ ๊ฐœ๋ฐœ ๋ฐ ํ†ตํ•ฉ์„ ๋‹จ์ˆœํ™”ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ AppMaster ์‚ฌ์šฉํ•˜๋ฉด ์‹œ๊ฐ์  ์—”๋“œํฌ์ธํŠธ ๋””์ž์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ REST API ๋ฐ WSS endpoints ์ •์˜ํ•˜๊ณ  ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด endpoints ์„ค๊ณ„, ํ…Œ์ŠคํŠธ ๋ฐ ์—…๋ฐ์ดํŠธ ์ž‘์—…์ด ๋‹จ์ˆœํ™”๋˜์–ด API๊ฐ€ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ๋”ฐ๋ฅด๊ณ  ํ™•์žฅ์„ฑ๊ณผ ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค.

์ž๋™ํ™”๋œ ์ฝ”๋“œ ์ƒ์„ฑ ๋ฐ ๋ฐฐํฌ

REST API ๊ฐœ๋ฐœ๊ณผ ๊ด€๋ จํ•˜์—ฌ ํšจ์œจ์ ์ด๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์•ˆ์ •์ ์ธ ์ฝ”๋“œ ์ƒ์„ฑ์€ ์„ฑ๊ณต์— ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. AppMaster '๊ฒŒ์‹œ' ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” Go(golang) ๋กœ ์ƒ์„ฑ๋œ ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, Vue3 ํ”„๋ ˆ์ž„์›Œํฌ ๋ฐ JS/TS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, Android์šฉ Kotlin ๋ฐ Jetpack Compose ๋˜๋Š” iOS์šฉ SwiftUI ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๊ทธ ๊ฒฐ๊ณผ, ๊ตฌํ˜„ ์ค‘ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•˜๊ณ  ์˜ค๋ฅ˜ ์œ„ํ—˜์„ ์ค„์ด๋Š” ๊ฐ„์†Œํ™”๋œ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํƒ„์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

Swagger ๋ฌธ์„œํ™” ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

์ผ๊ด€๋˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ๋ฌธ์„œ๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ API ์‚ฌ์šฉ ๋ฐฉ๋ฒ•๊ณผ API์—์„œ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌํ•ญ์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ์ดํ•ด๋ฅผ ์ œ๊ณตํ•˜๋ฏ€๋กœ REST API ๊ฐœ๋ฐœ์— ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. AppMaster ์„œ๋ฒ„ endpoints ์— ๋Œ€ํ•œ Swagger(Open API) ๋ฌธ์„œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด API์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ๋ช…ํ™•ํ•œ ํ†ต์‹  ์ฑ„๋„์ด ๋ณด์žฅ๋˜์–ด ํ†ตํ•ฉ ๋ฌธ์ œ์˜ ์œ„ํ—˜์ด ์ค„์–ด๋“ค๊ณ  API ์ฑ„ํƒ์ด ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.

๋˜ํ•œ AppMaster ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ž‘์—…์„ ๊ด€๋ฆฌํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ ์ผ๊ด€๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ์›ํ™œํ•œ ๋ฐฐํฌ ๋ฐ ํ†ตํ•ฉ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

ํ™•์žฅ์„ฑ ๋ฐ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ๊ธฐ๋Šฅ

ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ์•ˆ์ •์ ์ธ REST API๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์˜ ์ค‘์š”ํ•œ ์ธก๋ฉด์ž…๋‹ˆ๋‹ค. AppMaster ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์€ ๊ธฐ์—… ์ˆ˜์ค€ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•ด ํƒ์›”ํ•œ ์„ฑ๋Šฅ๊ณผ ํ™•์žฅ์„ฑ์„ ๋ณด์—ฌ์ฃผ๋Š” ์ปดํŒŒ์ผ๋œ ์ƒํƒœ ๋น„์ €์žฅ ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ œ๊ณตํ•จ์œผ๋กœ์จ ์ด ๋ถ„์•ผ์—์„œ ๋น›์„ ๋ฐœํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, API๋ฅผ ์ค‘์†Œ๊ธฐ์—…๋ถ€ํ„ฐ ๋Œ€๊ธฐ์—…๊นŒ์ง€ ๋‹ค์–‘ํ•œ ๊ทœ๋ชจ์˜ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์ผ๊ด€๋˜๊ณ  ์•ˆ์ •์ ์ธ API ๊ฒฝํ—˜์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

๋ฒ„์ „ ๊ด€๋ฆฌ๋œ API๋ฅผ ๋” ๋น ๋ฅด๊ฒŒ ๋ฐฐํฌ
์š”๊ตฌ์‚ฌํ•ญ ๋ณ€๊ฒฝ ์‹œ ์—”๋“œํฌ์ธํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ๊น”๋”ํ•œ ์ฝ”๋“œ๋ฅผ ์žฌ์ƒ์„ฑํ•˜์„ธ์š”.
AppMaster ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

REST API ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋น„์šฉ ํšจ์œจ์ ์ด๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์œ ์ง€ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์„ ์ฐพ๊ณ  ์žˆ๋‹ค๋ฉด AppMaster ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ์  ๋””์ž์ธ ๊ธฐ๋Šฅ, ์ž๋™ํ™”๋œ ์ฝ”๋“œ ์ƒ์„ฑ ๋ฐ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ AppMaster API ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ณ  REST API๊ฐ€ ์ตœ๊ณ ์˜ ํ™•์žฅ์„ฑ, ์œ ์ง€ ๊ด€๋ฆฌ์„ฑ ๋ฐ ๋ณด์•ˆ ๊ด€ํ–‰์„ ๋”ฐ๋ฅด๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

AppMaster ์˜ no-code ํ”Œ๋žซํผ์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋ฉด ๋” ์งง์€ ์‹œ๊ฐ„๊ณผ ๋” ์ ์€ ๋ฆฌ์†Œ์Šค๋กœ ๋” ๋‚˜์€ API๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์–ด ์˜ค๋Š˜๋‚  ๋Š์ž„์—†์ด ์ง„ํ™”ํ•˜๋Š” ๊ธฐ์ˆ  ์‚ฐ์—…์—์„œ ๊ฒฝ์Ÿ ์šฐ์œ„๋ฅผ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ AppMaster๋ฅผ ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉํ•ด ๋ณด๊ณ  ์ฐจ์ด์ ์„ ์ง์ ‘ ํ™•์ธํ•ด ๋ณด์„ธ์š”!

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

REST API ๋ชจ๋ฒ” ์‚ฌ๋ก€๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

REST API ๋ชจ๋ฒ” ์‚ฌ๋ก€๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ REST(Representational State Transfer) ์›์น™์— ๋”ฐ๋ผ ํšจ๊ณผ์ ์ด๊ณ  ํšจ์œจ์ ์ธ API๋ฅผ ์„ค๊ณ„, ๊ตฌ์ถ• ๋ฐ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ์ผ๋ จ์˜ ์ง€์นจ ๋ฐ ์›์น™์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ API์˜ ์ตœ์ ์˜ ํ†ต์‹ , ํ™•์žฅ์„ฑ, ๋ณด์•ˆ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

REST API ๋ชจ๋ฒ” ์‚ฌ๋ก€๊ฐ€ ์™œ ์ค‘์š”ํ•œ๊ฐ€์š”?

REST API ๋ชจ๋ฒ” ์‚ฌ๋ก€๋Š” API๊ฐ€ ํ‘œ์ค€ํ™”๋˜๊ณ  ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ์„ค๊ณ„๋˜๋„๋ก ๋ณด์žฅํ•˜์—ฌ ํ–ฅ์ƒ๋œ ์ƒํ˜ธ ์šด์šฉ์„ฑ, ํ–ฅ์ƒ๋œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๋ฐ ๋‹ค์–‘ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์‹œ์Šคํ…œ ๊ฐ„์˜ ํ†ตํ•ฉ ์šฉ์ด์„ฑ์„ ์ด๋Œ์–ด๋ƒ…๋‹ˆ๋‹ค.

REST API ๋””์ž์ธ์˜ ํ•ต์‹ฌ ์›์น™์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

REST API ๋””์ž์ธ์˜ ์ฃผ์š” ์›์น™์—๋Š” ๋ช…ํ™•ํ•˜๊ณ  ์˜๋ฏธ ์žˆ๋Š” URI ๊ตฌ์กฐ ์‚ฌ์šฉ, ์ ์ ˆํ•œ HTTP ๋ฉ”์„œ๋“œ(GET, POST, PUT, DELETE) ํ™œ์šฉ, ๋ฆฌ์†Œ์Šค ํ‘œํ˜„ ์šฐ์„  ์ˆœ์œ„ ์ง€์ •, ์ƒํƒœ ๋น„์ €์žฅ ๋ฐ HATEOAS(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ ์—”์ง„์œผ๋กœ์„œ์˜ ํ•˜์ดํผํ…์ŠคํŠธ)๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๋ช…ํ™•ํ•œ URI ๊ตฌ์กฐ๋Š” REST API ๋””์ž์ธ์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น˜๋‚˜์š”?

๋ช…ํ™•ํ•œ URI ๊ตฌ์กฐ๋Š” API์˜ ๊ฐ€๋…์„ฑ๊ณผ ์ดํ•ด์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ์•ก์„ธ์Šค๋˜๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ˜์˜ํ•˜๊ณ  ๋ถˆํ•„์š”ํ•œ ๋ณต์žก์„ฑ์ด๋‚˜ ๋ชจํ˜ธ์„ฑ์„ ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

REST API ์„ค๊ณ„์—์„œ ์ ์ ˆํ•œ HTTP ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์˜ ์ค‘์š”์„ฑ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ ์ ˆํ•œ HTTP ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด API๊ฐ€ ์˜๋„ํ•œ ์ž‘์—…์„ ์ค€์ˆ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰์—๋Š” GET, ์ƒ์„ฑ์—๋Š” POST, ์—…๋ฐ์ดํŠธ์—๋Š” PUT, ๋ฆฌ์†Œ์Šค ์ œ๊ฑฐ์—๋Š” DELETE๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

REST API ๋””์ž์ธ์—์„œ ๋ฆฌ์†Œ์Šค ํ‘œํ˜„์˜ ์—ญํ• ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

๋ฆฌ์†Œ์Šค ํ‘œํ˜„์€ API ์‘๋‹ต์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ตฌ์กฐํ™”๋˜๊ณ  ํ˜•์‹ํ™”๋˜๋Š” ๋ฐฉ์‹์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ž˜ ์„ค๊ณ„๋œ ํ‘œํ˜„์€ ๋ฐ์ดํ„ฐ ๊ตํ™˜ ํšจ์œจ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์ค„์ž…๋‹ˆ๋‹ค.

REST API ์„ค๊ณ„์—์„œ ๋ฌด์ƒํƒœ๊ฐ€ ์ค‘์š”ํ•œ ์›์น™์ธ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ƒํƒœ ๋น„์ €์žฅ์€ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ๊ฐ API ์š”์ฒญ์„ ๋…๋ฆฝ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์•ˆ์ •์„ฑ, ํ™•์žฅ์„ฑ ๋ฐ ์บ์‹ฑ ๊ฐ€๋Šฅ์„ฑ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.

AppMaster์™€ ๊ฐ™์€ ์ฝ”๋“œ ์—†๋Š” ํ”Œ๋žซํผ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ฒ” ์‚ฌ๋ก€์— ๋”ฐ๋ผ REST API๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

์˜ˆ, AppMaster ์™€ ๊ฐ™์€ no-code ํ”Œ๋žซํผ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์ค€์ˆ˜ํ•˜๋ฉด์„œ REST API๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ”Œ๋žซํผ์€ endpoints ๋ฅผ ์ •์˜ํ•˜๊ณ , ๋ฆฌ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , HTTP ๋ฉ”์„œ๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ , ์ ์ ˆํ•œ ๋ณด์•ˆ์„ ๋ณด์žฅํ•˜๋Š” ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๋ฏ€๋กœ ๊ธฐ์กด ์ฝ”๋”ฉ ๊ธฐ์ˆ  ์—†์ด๋„ ํšจ์œจ์ ์ธ API ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์‰ฌ์šด ์‹œ์ž‘
๋ฉ‹์ง„๋งŒ๋“ค๊ธฐ

๋ฌด๋ฃŒ ์š”๊ธˆ์ œ๋กœ AppMaster๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์„ธ์š”.
์ค€๋น„๊ฐ€ ๋˜๋ฉด ์ ์ ˆํ•œ ๊ตฌ๋…์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๋‹ค
REST API ๋ชจ๋ฒ” ์‚ฌ๋ก€ | AppMaster