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

๋ณธ์งˆ์ ์œผ๋กœ REST๋Š” World Wide Web์˜ ๊ธฐ๋ณธ ์›์น™์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ HTTP ํ”„๋กœํ† ์ฝœ๊ณผ ํ‘œ์ค€ ์›น ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•˜์—ฌ ์‹œ์Šคํ…œ ์„ค๊ณ„์— ๋Œ€ํ•œ ์กฐํ™”๋กญ๊ณ  ์ด์ฒด์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ”„๋ŸฐํŠธ์—”๋“œ ๋ฐ ๋ฐฑ์—”๋“œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  GET, POST, PUT, DELETE ๋“ฑ๊ณผ ๊ฐ™์€ HTTP ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ด๋“ค ๊ฐ„์˜ ์›ํ™œํ•œ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๋Š” ๋ชจ๋“ˆ์„ฑ์„ ์ด‰์ง„ํ•˜๊ณ  ๊ฐ•๋ ฅํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

RESTful ๋””์ž์ธ์˜ ์ค‘์š”ํ•œ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜๋Š” ๋ฆฌ์†Œ์Šค ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค๋Š” ๊ฐœ์ฒด, ๋ฌธ์„œ ๋˜๋Š” ์ปฌ๋ ‰์…˜๊ณผ ๊ฐ™์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋“  ์—”ํ„ฐํ‹ฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ URI(Uniform Resource Identifier)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹๋ณ„๋ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ฆฌ์†Œ์Šค๋Š” ๊ณ ์œ ํ•œ URL์„ ํ†ตํ•ด ์•ก์„ธ์Šคํ•˜๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํด๋ผ์ด์–ธํŠธ๋Š” ๋‚ด๋ถ€ ๊ตฌ์กฐ๋‚˜ ๊ตฌํ˜„์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ง€์‹ ์—†์ด๋„ ๋ฆฌ์†Œ์Šค๋ฅผ ์‰ฝ๊ฒŒ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ํ‘œ์ค€ HTTP ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ CRUD(๋งŒ๋“ค๊ธฐ, ์ฝ๊ธฐ, ์—…๋ฐ์ดํŠธ, ์‚ญ์ œ) ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ƒํ˜ธ ์ž‘์šฉ ๋ชจ๋ธ์„ ๋”์šฑ ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

RESTful ์•„ํ‚คํ…์ฒ˜์˜ ํ•„์ˆ˜ ๊ธฐ๋Šฅ์€ ํ‘œ์ค€ ๋ฏธ๋””์–ด ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค์™€ ํ•ด๋‹น ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. JSON(JavaScript Object Notation) ๋ฐ XML(eXtensible Markup Language)์€ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ธ์ฝ”๋”ฉํ•˜๊ณ  ์ „์†กํ•˜๋Š” ๋ฐ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฏธ๋””์–ด ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ ํ‘œํ˜„์˜ ํ‘œ์ค€ํ™”๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜ ๋ฐ ํ†ตํ•ฉ ํ”„๋กœ์„ธ์Šค๋ฅผ ํฌ๊ฒŒ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธฐ์กด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

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

Go(golang)๋กœ ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•˜๋Š” AppMaster ์˜ ์ ‘๊ทผ ๋ฐฉ์‹์€ Vue3 ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ Kotlin, Jetpack Compose ๋ฐ SwiftUI ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ํ•จ๊ป˜ ๊ณ ๊ฐ์ด ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๋ฐ ๊ณ ์„ฑ๋Šฅ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ •๊ตํ•œ ๊ณ ์„ฑ๋Šฅ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. -์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์„œ๋ฒ„ endpoints ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•œ AppMaster ์˜ ์ž๋™ ์ƒ์„ฑ Swagger(OpenAPI) ๋ฌธ์„œ๋Š” ๋ช…ํ™•ํ•˜๊ณ  ๊ฐ„๊ฒฐํ•˜๋ฉฐ ์ตœ์‹  API ๋ฌธ์„œ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„ ๋”์šฑ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

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