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

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

์ผ๋ฐ˜์ ์ธ ์„œ๋ฒ„ ์‘๋‹ต์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฌ๋Ÿฌ ์š”์†Œ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  1. ์ƒํƒœ ์ฝ”๋“œ - ์š”์ฒญ ๊ฒฐ๊ณผ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” 3์ž๋ฆฌ ์ˆซ์ž ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์ƒํƒœ ์ฝ”๋“œ์—๋Š” 200(์ •์ƒ), 201(์ƒ์„ฑ๋จ), 400(์ž˜๋ชป๋œ ์š”์ฒญ), 404(์ฐพ์„ ์ˆ˜ ์—†์Œ) ๋ฐ 500(๋‚ด๋ถ€ ์„œ๋ฒ„ ์˜ค๋ฅ˜)์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  2. ๋ฐ์ดํ„ฐ - ์„œ๋ฒ„์—์„œ ๋ฐ˜ํ™˜๋œ ๋ฐ์ดํ„ฐ ํŽ˜์ด๋กœ๋“œ ๋˜๋Š” ์ •๋ณด์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” HTML ์›น ํŽ˜์ด์ง€, JSON ๋˜๋Š” XML ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ, ํŒŒ์ผ ๋˜๋Š” ๊ธฐํƒ€ ๋ฏธ๋””์–ด ์œ ํ˜•๊ณผ ๊ฐ™์€ ์ฝ˜ํ…์ธ ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ํ—ค๋” - ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•ด์„ํ•  ์‘๋‹ต์— ๋Œ€ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. ํ—ค๋”์—๋Š” ์ฝ˜ํ…์ธ  ์œ ํ˜•, ์ธ์ฝ”๋”ฉ, ์บ์‹œ ์„ค์ •, ์ธ์ฆ ํ† ํฐ ๋“ฑ๊ณผ ๊ฐ™์€ ์ •๋ณด๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

AppMaster ํ”Œ๋žซํผ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋Š” AppMaster ์˜ ์‹œ๊ฐ์  BP ๋””์ž์ด๋„ˆ ๋„๊ตฌ ๋•๋ถ„์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ํ•„์š” ์—†์ด ์‹œ๊ฐ์ ์œผ๋กœ ์„œ๋ฒ„ endpoints ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด API endpoints ์ƒ์„ฑ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ„์†Œํ™”๋˜๊ณ  ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ ํŒ€์›์ด ๋™์ผํ•œ ํ”„๋กœ์ ํŠธ์—์„œ ๋” ์‰ฝ๊ฒŒ ํ˜‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์šฉ์œผ๋กœ ์ƒ์„ฑ๋œ ์†Œ์Šค ์ฝ”๋“œ๋Š” ๋†’์€ ํ™•์žฅ์„ฑ๊ณผ ๋™์‹œ ์š”์ฒญ ์ฒ˜๋ฆฌ ํšจ์œจ์„ฑ์œผ๋กœ ์•Œ๋ ค์ง„ ๊ณ ์„ฑ๋Šฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ธ Go(golang)๋กœ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ AppMaster ํ”Œ๋žซํผ์€ ์„œ๋ฒ„ endpoints ์— ๋Œ€ํ•œ swagger(๊ฐœ๋ฐฉํ˜• API) ๋ฌธ์„œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ OpenAPI ์‚ฌ์–‘์œผ๋กœ ์•Œ๋ ค์ง„ Swagger๋Š” RESTful API๋ฅผ ์„ค๋ช…ํ•˜๊ณ  ๋ฌธ์„œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋„๋ฆฌ ์ฑ„ํƒ๋œ ํ‘œ์ค€์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด API ๋ฌธ์„œ๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜์–ด API ์ž‘๋™ ๋ฐฉ์‹, ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ ์œ ํ˜•, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„ endpoints ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•˜๊ณ  ๊ฐ„๊ฒฐํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ ๋ฌธ์„œ๋Š” ์ „์ฒด ๊ฐœ๋ฐœ ํŒ€์—์„œ API ๋””์ž์ธ์„ ํ‘œ์ค€ํ™”ํ•˜์—ฌ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๊ณ  ํŒ€ ๊ตฌ์„ฑ์› ๊ฐ„์˜ ํšจ๊ณผ์ ์ธ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ์ด‰์ง„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

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

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