๋ฐฑ์๋ ๊ฐ๋ฐ ๋งฅ๋ฝ์์ "์๋ต"์ ์์ฒญ์ ์์ ํ๊ณ ์ฒ๋ฆฌํ ๋ ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ๋ฐํํ๋ ์ถ๋ ฅ ๋๋ ๊ฒฐ๊ณผ๋ฅผ ์๋ฏธํฉ๋๋ค. ์ด ํ๋ก์ธ์ค๋ ํด๋ผ์ด์ธํธ(์: ๋ธ๋ผ์ฐ์ , ๋ชจ๋ฐ์ผ ์ฅ์น ๋๋ ๊ธฐํ ์์ฉ ํ๋ก๊ทธ๋จ)๊ฐ ์๋ฒ์ ํต์ ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ฑฐ๋ ์ฒ๋ฆฌํ๋ ํด๋ผ์ด์ธํธ-์๋ฒ ์ํคํ ์ฒ์ ํตํฉ๋ฉ๋๋ค. ์๋ต์๋ ์์ฒญ ๊ฒฐ๊ณผ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ ๋ฌํ๋ ์ํ ์ฝ๋, ๋ฐ์ดํฐ ๋ฐ ํค๋ ์ ๋ณด์ ๊ฐ์ ์ ๋ณด๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค. ์๋ต ํ์์ ์ฌ์ฉ ์ฌ๋ก ๋๋ ๋ฐ์ดํฐ ๊ตํ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. JSON (JavaScript Object Notation) ๋ฐ XML(eXtensible Markup Language)์ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐํํ๊ณ ๊ตํํ๋ ๋ฐ ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ํ์์ ๋๋ค.
AppMaster ํ๋ซํผ์์ ํด๋ผ์ด์ธํธ๋ REST API ๋ฐ WebSocket API endpoints ํตํด ์๋ฒ ๋ฐฑ์๋์ ํต์ ํฉ๋๋ค. REST(REpresentational State Transfer)๋ ํ์ฅ ๊ฐ๋ฅํ๊ณ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ธฐ ์ํ ์ํํธ์จ์ด ์ํคํ ์ฒ ์คํ์ผ์ ๋๋ค. ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ์๋ต์ ๋ณด๋ผ ๋ HTTP ํ๋กํ ์ฝ ๋ฐ ๊ท์น์ ์์กดํฉ๋๋ค. ๋ฐ๋ฉด WebSocket์ ๋จ์ผ TCP ์ฐ๊ฒฐ์ ํตํด ์ ์ด์ค ํต์ ์ฑ๋์ ๊ฐ๋ฅํ๊ฒ ํ๋ ํต์ ํ๋กํ ์ฝ์ ๋๋ค. ์ด๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์ค์๊ฐ ๋ํ์ ํต์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
์ผ๋ฐ์ ์ธ ์๋ฒ ์๋ต์๋ ๋ค์๊ณผ ๊ฐ์ ์ฌ๋ฌ ์์๊ฐ ํฌํจ๋ฉ๋๋ค.
- ์ํ ์ฝ๋ - ์์ฒญ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด๋ 3์๋ฆฌ ์ซ์ ์ฝ๋์ ๋๋ค. ์ผ๋ฐ์ ์ธ ์ํ ์ฝ๋์๋ 200(์ ์), 201(์์ฑ๋จ), 400(์๋ชป๋ ์์ฒญ), 404(์ฐพ์ ์ ์์) ๋ฐ 500(๋ด๋ถ ์๋ฒ ์ค๋ฅ)์ด ํฌํจ๋ฉ๋๋ค.
- ๋ฐ์ดํฐ - ์๋ฒ์์ ๋ฐํ๋ ๋ฐ์ดํฐ ํ์ด๋ก๋ ๋๋ ์ ๋ณด์ ๋๋ค. ์ฌ๊ธฐ์๋ HTML ์น ํ์ด์ง, JSON ๋๋ XML ํ์์ ๋ฐ์ดํฐ, ํ์ผ ๋๋ ๊ธฐํ ๋ฏธ๋์ด ์ ํ๊ณผ ๊ฐ์ ์ฝํ ์ธ ๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค.
- ํค๋ - ํด๋ผ์ด์ธํธ๊ฐ ํด์ํ ์๋ต์ ๋ํ ๋ฉํ๋ฐ์ดํฐ์ ๋๋ค. ํค๋์๋ ์ฝํ ์ธ ์ ํ, ์ธ์ฝ๋ฉ, ์บ์ ์ค์ , ์ธ์ฆ ํ ํฐ ๋ฑ๊ณผ ๊ฐ์ ์ ๋ณด๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค.
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 ๊ณ ๊ฐ์ ๋ค์ํ ํด๋ผ์ด์ธํธ ์์ฒญ์ ํจ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ ํ์ฅ ๊ฐ๋ฅํ๊ณ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅํ ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ์ฌ ์ค๋๋ ์ ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ์๋๋ฆฌ์ค์ ๋์ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ ์ ์์ต๋๋ค.