Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Dynamic Handler
๋์ ํธ๋ค๋ฌ๋ ์น ์๋ฒ์ ๋ชจ๋ base ๊ฒฝ๋ก๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ๋ฏธ๋ค์จ์ด ๋ฐ ํ๋ฌ๊ทธ์ธ, ์๋ํฌ์ธํธ ๊ฐ์ ๊ฒฝ๋ก ์ถฉ๋์ ๋ฐฉ์งํฉ๋๋ค. ๋์ ํธ๋ค๋ฌ๋ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ธ๋์น ํธ๋ค๋ฌ ๋ฐ ๋ฒ์ ํธ๋ค๋ฌ๋ฅผ ์์ฑ ๋ฐ ์ญ์ ํ๋ฉฐ ๋์ ์ผ๋ก ๋ผ์ฐํธ ํ ์ด๋ธ์ ๊ตฌ์ฑํฉ๋๋ค.
๋์ ํธ๋ค๋ฌ๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ๋ผ ๋ฏธ๋ค์จ์ด๋ฅผ ์ํํ๊ณ , ๋ธ๋์น ํธ๋ค๋ฌ๋ก ์์ฒญ์ ํ๋ก์ํฉ๋๋ค.
Branch Handler
๋ธ๋์น ํธ๋ค๋ฌ๋ ํ๊ทธ์ ๋ฐ๋ผ ๋ฒ์ ํธ๋ค๋ฌ๋ก ์์ฒญ์ ํ๋ก์ํฉ๋๋ค.
์ด ๋ธ๋์น ํธ๋ค๋ฌ๋ค์ ์๋์ ๊ท์น์ ๋ฐ๋ผ ์ญ์ ๋ฉ๋๋ค.
master ๋ธ๋์น๋ฅผ ์ ์ธํ๊ณ , 60๋ถ ์ด์ ์คํ๋์ง ์๋ ๋ธ๋์น ํธ๋ค๋ฌ๋ ์ญ์ ๋ฉ๋๋ค.
Version Handler
์๋น์ค API ์คํค๋ง์ ๋ณํฉ์ด ์ผ์ด๋ ๋๋ง๋ค ์๋ก์ด ๋ฒ์ ์ Gateway API ์คํค๋ง๊ฐ ์์ฑ๋ฉ๋๋ค. ๋ณํฉ์ ์ฑ๊ณตํ Gateway API ์คํค๋ง๋ latest ๋ฐ ์ํด์๋ก ํ๊ทธ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์
๋ฐ์ดํธ๋ ์๋ํฌ์ธํธ๋ณ๋ก ์คํค๋ง, ํ๋กํ ์ฝ ํ๋ฌ๊ทธ์ธ, ์ปค๋ฅํฐ๋ฅผ ์ฐ๊ฒฐํด ๊ฐ ํธ๋ค๋ฌ๋ฅผ ์์ฑํฉ๋๋ค. ์
๋ฐ์ดํธ๋์ง ์์ ์คํค๋ง์ ํธ๋ค๋ฌ๋ ๊ฐ๋ฅํ ์ฌ์ฐธ์กฐ๋ฉ๋๋ค.
์ด ๋ฒ์ ํธ๋ค๋ฌ๋ค์ ์๋์ ๊ท์น์ ๋ฐ๋ผ ์ญ์ ๋ฉ๋๋ค.
10๊ฐ๋ฅผ ์ด๊ณผ(๊ธฐ๋ณธ๊ฐ)ํ๋ ๋ฒ์ ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ ์ค๋๋ ์์ผ๋ก ๋ฒ์ ํธ๋ค๋ฌ๊ฐ ์ญ์ ๋ฉ๋๋ค.
Non-Persistence
API ์คํค๋ง์ ๋ธ๋์น ๋ฐ ํ๊ทธ ๊ธฐ๋ฅ์ ๋ฒ์ ๊ด๋ฆฌ(/v1, /v2 ๊ฐ์)๊ฐ ์๋ ๋ถ์ฐ ํ๊ฒฝ์์์ ๊ฐ๋ฐ ํธ์๋ฅผ ์ํด ๊ฐ๋ฐ๋์์ต๋๋ค.
์ฃผ์์ฌํญ
Gateway์๋ Persistence Layer๊ฐ ์กด์ฌํ์ง ์์ต๋๋ค.
Gateway ์ฌ์์์ ๋ธ๋์น, ๋ฒ์ ๋ฐ ํ๊ทธ ์ ๋ณด๊ฐ ๋ณต์๋์ง ์์ต๋๋ค.
Gateway ๋ ธ๋๊ฐ์ ๋ฐ์ดํฐ ๋๊ธฐํ ์ ๋ต์ด ์กด์ฌํ์ง ์์ต๋๋ค.
ํ์ง๋ง Gateway ์ฌ์์ ์ดํ ๋ชจ๋ ์๋น์ค๋ค์ ๋ํ discover๊ฐ ์งํ๋๋ฉด์ ์์ฐ์ค๋ฝ๊ฒ ๊ฐ ๋ธ๋์น์ latest ๋ฒ์ ์๋ ์ต์ Gateway API ์คํค๋ง๊ฐ ๋ณต์๋ฉ๋๋ค. ๊ฐ ๋ธ๋์น์ latest ๋ฒ์ ์ ์ ๋ขฐ์ฑ์ ๋ณด์ฅ๋ฉ๋๋ค.
Integration Process
๋ณํฉ ๊ท์น์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
discover
discover ๋ฐ์ ์ฆ์ ๋ณํฉ ์์ฒญ์ด ์์ฑ๋ฉ๋๋ค.
ํ๋กํ ์ฝ ํ๋ฌ๊ทธ์ธ์ ๋ฐ๋ผ ์คํค๋ง ํฌ๋งท์ ๋ํ ๊ฒ์ฆ์ ๊ฑฐ์นฉ๋๋ค.
ํฌ๋งท ์๋ฌ๋ ๋ณํฉ ์์ฒญ ๋ฉ์ธ์ง ๋ฆฌ์คํธ์ ํฌํจ๋ฉ๋๋ค.
์ ๊ทผ ์ ์ด๋ฅผ ์ฐํํ๋ ์๋ํฌ์ธํธ์ ๋ํ ๊ฒฝ๊ณ ๊ฐ ๋ณํฉ ์์ฒญ ๋ฉ์ธ์ง ๋ฆฌ์คํธ์ ํฌํฉ๋ฉ๋๋ค.
๊ฒ์ฆ ์ฑ๊ณต์ ๋ณํฉ ์์ฒญ์ด ํ์ ์ฝ์ ๋๋ฉด์ ํน์ ์๊ฐ(2์ด๋ฅผ ๊ธฐ๋ณธ๊ฐ) ๋์ debounce ํ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
ํ์์ ํน์ ์๋น์ค์ ๋ํ ๋ณํฉ ์์ฒญ์ด ๋ค์์ธ ๊ฒฝ์ฐ ๋ง์ง๋ง ์์๋ง ์ ํจํฉ๋๋ค.
ํ๋กํ ์ฝ ํ๋ฌ๊ทธ์ธ์์ integrationDependencyResolver๊ฐ ๊ตฌํ๋ ๊ฒฝ์ฐ (eg. GraphQL) ํ ์์์ ์ฒ๋ฆฌ ์์๊ฐ ์กฐ์ ๋ ์ ์์ต๋๋ค.
๊ฒ์ฆ ์คํจ์ report ๋จ๊ณ๋ก ๊ฑด๋ ๋๋๋ค.
hash
์๋น์ค API ์คํค๋ง์์ branch, description, deprecated๋ฑ์ ๋ฉํ ์ ๋ณด๋ฅผ ์ ์ธํ ์คํค๋ง ๊ฐ์ฒด ์ ์ฒด๋ฅผ MD5 ํด์ฑํ์ฌ ๊ณ ์ ํ ๋ฒ์ ํด์๋ฅผ ์์ฑํฉ๋๋ค.
update
master ๋ธ๋์น์ ์คํค๋ง๋ ๊ฒฝ์ฐ์๋ ๋ชจ๋ ๋ธ๋์น์ ๋ณํฉ์ด ์๋๋ฉ๋๋ค.
์ด ๋ master
report
๋ณํฉ ์์ฒญ์ ๋ฉ์ธ์ง ๋ฆฌ์คํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋๋ฒ๊ทธ ๋ฉ์ธ์ง๋ฅผ ์์ฑํฉ๋๋ค.
๋ณํฉ ์์ฒญ์ ์ถ์ฒ ๋
ธ๋๋ก ๋๋ฒ๊ทธ ๋ฉ์ธ์ง๋ฅผ reportํฉ๋๋ค.
Branch Strategy Diagram
๋ธ๋์น๊ฐ ๋ณํฉ ์ ๋ต์ ํ๋ก ๋์ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํ์์ a@v1๋ a ์๋น์ค ์คํค๋ง ์ค v1 ๋ฒ์ ์ ์๋ฏธํฉ๋๋ค.
์๋น์ค ๋ ธ๋์ ์ฐ๊ฒฐ์ด ๋๊ธด ๊ฒฝ์ฐ๋ ์ฐ๊ด๋ ์คํค๋ง์ ๋ ธ๋ํ์์ ๋ ธ๋๋ฅผ ์ญ์ ํฉ๋๋ค.
์ด ๋ ์ฐ๊ด๋ ์คํค๋ง๋ค์์ ๋ ธ๋ํ์ด ๋น ์คํค๋ง๋ค์ ์ ๊ฑฐํ๊ธฐ๋ก ํฉ๋๋ค.
์ด์ธ์ ๋ธ๋์น์ ๋ณํฉํ๋ ๊ฒฝ์ฐ์๋ ์ฃผ์ด์ง ๋ธ๋์น์๋ง ๋ณํฉ์ด ์๋๋ฉ๋๋ค.
ํ๋กํ ์ฝ ํ๋ฌ๊ทธ์ธ์ ๋ฐ๋ผ ๊ฐ ํ๋กํ ์ฝ๋ณ ํธ๋ค๋ฌ๋ฅผ ์์ฑํฉ๋๋ค.
๋ณํฉ์ ์ฑ๊ณตํ๋ฉด ์์ฑ๋ Gateway API ์คํค๋ง ๋ฒ์ ์ latest ํ๊ทธ ๋ฐ 8 ๊ธ์์ ์ ํด์(eg. abcdefgh)๊ฐ ํ๊ทธ๋ก ๋ถ์ฐฉ๋ฉ๋๋ค.
์ต์ ์ด ํ์ฑํ๋ ๊ฒฝ์ฐ ๋ธ๋์น๋ณ API Catalog๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
์ต์ ์ด ํ์ฑํ๋ ๊ฒฝ์ฐ ๋ธ๋์น๋ณ Service Catalog๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
master
dongwook
๋น๊ณ
initial schema
(empty)
N/A
a added to master
a@v1
N/A
a updated to master
a@v2
N/A
b added to dongwook
a@v2
a@v2 b@v1
์๋ก์ด b ์๋น์ค๋ฅผ dongwook ๋ธ๋์น๋ก ๋ถ๊ธฐํด์ ์์
; ์ถฉ๋ํ์ง ์๋ ์คํค๋ง๋ค์ ๋ณต์ ๋์ง ์๊ณ ์ฐธ์กฐ๋ฉ๋๋ค.
a updated to master
a@v3
a@v3 b@v1
master ๋ธ๋์น์ ์
๋ฐ์ดํธ๋ ๋ชจ๋ ๋ธ๋์น๋ก ์ ํ๋ฉ๋๋ค.
a updated to dongwook
a@v3
a@v4 b@v1
master ์ด์ธ์ ๋ธ๋์น์ ์
๋ฐ์ดํธ๋ ์๊ธฐ ๋ธ๋์น๋ก๋ง ์ ํ๋ฉ๋๋ค.
a updated to master
a@v3-2
a@v4 b@v1
์ถฉ๋ํ๋ ๊ฒฝ์ฐ ์๊ธฐ ๋ธ๋์น ์คํค๋ง์ ์ฐ์ ์์๊ฐ ๋์ต๋๋ค.
c added to master
a@v3-2 c@v1
a@v5 b@v1 c@v1
master ๋ธ๋์น์ ์
๋ฐ์ดํธ๋ ๋ชจ๋ ๋ธ๋์น๋ก ์ ํ๋ฉ๋๋ค.
b added to master
a@v3-2 b@v1 c@v1
a@v5 b@v1 c@v1
๊ฐ๋ฐ๋ b ์๋น์ค๋ฅผ dongwook ๋ธ๋์น์์ master ๋ธ๋์น๋ก ๋ณ๊ฒฝ
a updated to master
a@v5 b@v1 c@v1
a@v5 b@v1 c@v1
์์ ๋ a ์๋น์ค๋ฅผ dongwook ๋ธ๋์น์์ master ๋ธ๋์น๋ก ๋ณ๊ฒฝ
dongwook branch removed
a@v5 b@v1 c@v1
N/A
Routing Rule
Gateway ์น ์๋ฒ๋ [/~BRANCH[@TAG]]/<ENDPOINT>์ ๊ท์น๋๋ก API ์๋ํฌ์ธํธ๋ฅผ ๋ผ์ฐํธํฉ๋๋ค. ์ฒซ๋ฒ์งธ ๊ฒฝ๋ก ์กฐ๊ฐ์ ๋ธ๋์น(master๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก)๋ก ๋๋ฒ์งธ ๊ฒฝ๋ก ์กฐ๊ฐ์ ํ๊ทธ(latest๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก)๋ก ์ดํ ๊ฒฝ๋ก๋ฅผ API ์๋ํฌ์ธํธ๋ก ํด์ํฉ๋๋ค.
๋ผ์ฐํธ ์์
๊ฐ๋ต
๋ธ๋์น ํฌํจ
ํ๊ทธ ํฌํจ
GET /players/1
GET /~master/players/1
GET /~master@latest/players/1
-
-
GET /~master@h4g3f2e1/players/1
-
GET /~dongwook/players/1
GET /~dongwook@latest/players/1
-
ํ ์ด๋ธ์ ๊ฐ ํ์ ๋์ผํ ๋ฒ์ ์ ํธ๋ค๋ฌ๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค.
๋ธ๋์น ์ด๋ฆ ๊ท์น
์๋ฌธ ์๋ฌธ์ ๋ฐ ์ซ์, -, _๋ง ํ์ฉ๋ฉ๋๋ค.
๊ธฐ์กด ์คํค๋ง ์๋ํฌ์ธํธ๋ ํ๋ฌ๊ทธ์ธ์ base ๊ฒฝ๋ก์ ์ค๋ณต๋ ์ ์์ต๋๋ค.
ํ๊ทธ ์ด๋ฆ ๊ท์น
์๋ฌธ ์๋ฌธ์ ๋ฐ ์ซ์๋ก๋ง ๊ตฌ์ฑ๋ฉ๋๋ค.
์ด๋ฒคํธ/๋ธ๋์น
-
GET /~dongwook@a4b3c2d1/players/1
POST /graphql
POST /~master/graphql
GET /~master@latest/graphql
-
POST /~dongwook/graphql
GET /~dongwook@latest/graphql
-
GET /~ws-dev/chat
GET /~ws-dev@latest/chat
์๋น์ค API ์คํค๋ง๋ ์๋น์ค ๋ธ๋ก์ปค์ ์์กดํด Gateway๋ก ์์ง๋๊ณ ์ฒ๋ฆฌ๋ฉ๋๋ค. Moleculer ์ด๋ํฐ๋ก ์์ฑ๋ ์๋น์ค ๋ธ๋ก์ปค์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ServiceSchema์ metadata.api ํ๋์์ ์๋น์ค API ์คํค๋ง๊ฐ ์์ง๋๊ธฐ๋ฅผ ๊ธฐ๋ํฉ๋๋ค.
์๋น์ค API ์คํค๋ง์ ๋ณํฉ์ ์๋น์ค ๋
ธ๋์ ์ฐ๊ฒฐ, ์ข
๋ฃ, ์คํค๋ง ๋ณ๊ฒฝ์ ๋ฐ์ํฉ๋๋ค. ์๋น์ค API ์คํค๋ง๋ ์์ ์ ์คํค๋ง๋ฅผ ๋ณํฉ ํ ๋ธ๋์น๋ฅผ ์คํค๋ง์ ๋ช
์ํฉ๋๋ค. Gateway์๋ ๊ธฐ๋ณธ์ ์ผ๋ก master ๋ธ๋์น๊ฐ ์์ฑ๋์ด์์ผ๋ฉฐ, master ๋ธ๋์น๋ ์ ๊ฑฐ ๋ ์ ์์ต๋๋ค.
API Gateway Health Check
Gateway ์น์๋ฒ ์์ฒด์ ์ํ ํ์ธ์ฉ HTTP ์๋ํฌ์ธํธ๋ฅผ ๋ด์ฅํ๊ณ ์์ต๋๋ค. ๋ก๋๋ฐธ๋ฐ์๋ Kubernetes ๋ฑ์ ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ ํ๊ฒฝ์์ ํ์ฉ ํ ์ ์์ต๋๋ค.
GET /~health/liveness ์๋ํฌ์ธํธ์์ ์น ์๋ฒ์ ์ํ๋ฅผ ํ์ธ ํ ์ ์์ต๋๋ค.
GET /~health/readiness ์๋ํฌ์ธํธ์์ ์์ฒญ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ์ง ํ์ธ ํ ์ ์์ต๋๋ค.
Gateway ์ํ์ ๋ฐ๋ฅธ ๊ฐ ์๋ํฌ์ธํธ์ HTTP ์ํ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
API Endpoint Health Check
Gateway API ์คํค๋ง์ ๊ฐ ์๋ํฌ์ธํธ ๋ณ ์ํ ํ์ธ ๊ธฐ๋ฅ์ ๋ด์ฅํ๊ณ ์์ต๋๋ค. ์๋ํฌ์ธํธ์ ์ฐ๊ฒฐ๋ ์ปค๋ฅํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ํ๊ฐ ์ธก์ ๋ฉ๋๋ค. ๋๋ถ๋ถ์ ์ปค๋ฅํฐ์ ์ํ ํ์ธ์ ์๋น์ค ๋ธ๋ก์ปค์๊ฒ ์์๋ฉ๋๋ค. ์์ธํ ์ฌํญ์ ์๋์ ์น์ ์ ์ฐธ์กฐ ํ ์ ์์ต๋๋ค.
API ์๋ํฌ์ธํธ์ ์ํ๋ ์์ฒ๋ผ HTTP๋ก ์ ๊ณต๋์ง ์์ผ๋ฉฐ ์๋์ API Catalog๋ฅผ ํตํด์ ์ ๊ณต๋ฉ๋๋ค.
API Catalog
API Catalog๋ REST, GraphQL, WebSocket ๋ฑ์ Protocol Plugin์ ๋ฐ๋ผ ๊ฐ ์๋ํฌ์ธํธ์ ๋ํ ๋ฌธ์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์
๋๋ค. API Catalog ๊ธฐ๋ฅ์ ํ์ฑํํ๋ฉด ์ ๊ทผ ์ ์ด ์ ์ฑ
์ด ํ์ฑํ๋์ง ์์ API ํ์
์ด GraphQL ์คํค๋ง์ ํตํฉ๋ฉ๋๋ค. ์ ๊ทผ ์ ์ด ์ ์ฑ
์ ํ์ฑํ์ ์ต์
์ผ๋ก ์ฃผ์
ํ ์ ์์ต๋๋ค.
Service Catalog
Service Catalog๋ ๋ถ์ฐ ์์คํ
์ ์๋น์ค๋ค์ ๊ฐ ์๋ํฌ์ธํธ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์
๋๋ค. Service Catalog ๊ธฐ๋ฅ์ ํ์ฑํํ๋ฉด ์ ๊ทผ ์ ์ด ์ ์ฑ
์ด ํ์ฑํ๋์ง ์์ Service ํ์
์ด GraphQL ์คํค๋ง์ ํตํฉ๋ฉ๋๋ค. ์ ๊ทผ ์ ์ด ์ ์ฑ
์ ํ์ฑํ์ ์ต์
์ผ๋ก ์ฃผ์
ํ ์ ์์ต๋๋ค.
200
503
500
Gateway ์ํ
์์์ค
๋ณํฉ์ค
์๋์ค
์ข ๋ฃ์ค
์ค๋ฅ
GET /~health/liveness
200
200
200
200
500
GET /~health/readiness
503
200
ํ๋ฌ๊ทธ์ธ์ ์๋น์ค API ์คํค๋ง์ ํฌ๋งท๊ณผ ๊ธฐ๋ฅ์ ํ์ฅํ๋๋ฐ ์ฐ์ ๋๋ค. ํ๋ฌ๊ทธ์ธ์ ์์๋ ์คํค๋ง์ ๋ํ ๊ฒ์ฆ, ํด์, ์๋ ๋ฐฉ์์ ์ ์ํ๊ณ ๊ตฌํํฉ๋๋ค.
๊ฐ ํ๋กํ ์ฝ ํ๋ฌ๊ทธ์ธ์ ํด๋น ํ๋กํ ์ฝ ์คํค๋ง์ ์์์ ์ ์ํ๊ณ , ์คํค๋ง ๋ณํฉ, ์์ฒญ ํ๋ก์, ์์กด์ฑ ํ์ , ์๋ฒ ํ์ฅ ํธ๋ค๋ฌ ๋ฑ์ ๊ตฌํํฉ๋๋ค.
๊ฐ ์ ๊ทผ ์ ์ด ํ๋ฌ๊ทธ์ธ์ ํด๋น ์ ๊ทผ ์ ์ด ์คํค๋ง์ ์์์ ์ ์ํ๊ณ , call, publish, subscribe ์ปค๋ฅํฐ์ ์ ์ฑ
์ ํด์ํ๊ณ ์ ๊ทผ ์ ์ด๋ฅผ ํ๋จํ๋ ํธ๋ค๋ฌ๋ฅผ ๊ตฌํํฉ๋๋ค.
ํํ ํ ์ฝ ํ๋ฌ๊ทธ์ธ๋ณ ์คํค๋ง ์์์ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค. ์ด ์น์ ์์๋ ๊ธฐ๋ณธ ํ๋ฌ๊ทธ์ธ์ ๊ตฌ๋ ๋ฐฉ์์ ๊ฐ๊ด์ ์ผ๋ก ์ค๋ช ํฉ๋๋ค.
REST ํ๋กํ ์ฝ์ ๋ถ์ฐ ์๋น์ค์ ๋ํ call, publish ์ปค๋ฅํฐ๋ฅผ ํน์ ์๋ํฌ์ธํธ์ ๋งตํํฉ๋๋ค. HTTP ์์ฒญ์ Paylo,ad๋ ๋ฏธ๋ค์จ์ด๋ฅผ ํตํด ํ์ฑ๋์ด params ์ปค๋ฅํฐ๋ฅผ ํตํด ๋ณํ๋์ด call, publish ์ปค๋ฅํฐ๋ก ์ ๋ฌ๋ฉ๋๋ค.
์๋ํฌ์ธํธ๊ฐ ์ค๋ณต๋๋ ๊ฒฝ์ฐ ๋ณํฉ์ ๋ฐ์์ํจ ์ถ์ฒ ๋
ธ๋๋ก ๋๋ฒ๊ทธ ๋ฉ์ธ์ง๊ฐ report๋๋ฉฐ ๋ณํฉ์ ์คํจํฉ๋๋ค.
API Catalog๋ฅผ ํตํด์ ์๋ํฌ์ธํธ ๋ณ ์ ์ฉ๋ ์ ์ฑ ๋ฐ ์ปค๋ฅํฐ์ ๊ทธ ํ๋ผ๋ฏธํฐ์ ๋ํ ์ค๋ช ์ ์ ๊ณตํฉ๋๋ค.
TODO: $headers, $status, $body field for REST response
GraphQL ํ๋กํ ์ฝ์ ๋ถ์ฐ ์๋น์ค์ ๋ํ call ๋ฐ publish, subscribe ์ปค๋ฅํฐ๋ฅผ ํน์ ํ์
์ ํ๋์ ๋งตํํฉ๋๋ค. HTTP ์์ฒญ์ Payload๋ ๋ฏธ๋ค์จ์ด๋ฅผ ํตํด ํ์ฑ๋์ด params ์ปค๋ฅํฐ๋ฅผ ํตํด ๋ณํ๋์ด call, publish, subscribe, map ์ปค๋ฅํฐ๋ก ์ ๋ฌ๋ฉ๋๋ค.
GraphQL ์คํค๋ง ์์ฑ์ ์คํจํ๋ ๊ฒฝ์ฐ ๋ณํฉ์ ๋ฐ์์ํจ ์ถ์ฒ ๋
ธ๋๋ก ๋๋ฒ๊ทธ ๋ฉ์ธ์ง๊ฐ report๋๋ฉฐ ๋ณํฉ์ ์คํจํฉ๋๋ค.
API Catalog๋ฅผ ํตํด์ ๊ฐ GraphQL Type ๋ณ ์ ์ฉ๋ ์ ์ฑ ๋ฐ ์ปค๋ฅํฐ์ ๊ทธ ํ๋ผ๋ฏธํฐ์ ๋ํ ์ค๋ช ์ ์ ๊ณตํฉ๋๋ค.
์๋น์ค API ์คํค๋ง๋ฅผ ํตํด์ GraphQL Custom Scalar ์ ์๋ฅผ ์ถ๊ฐ ํ ์ ์์ต๋๋ค. Gateway ์์ฑ์ ํ๋ฌ๊ทธ์ธ ์ต์
์ ํตํด Scalar ์ ์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ค๋ฒ๋ผ์ด๋ ํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก DateTime, Date, Time, JSON๊ฐ ํฌํจ๋์ด์์ต๋๋ค.
TODO: WIP
์ ๊ทผ ์ ์ด ํ๋ฌ๊ทธ์ธ๋ณ ์คํค๋ง ์์์ Access Control Policy ์น์ ์ ์ฐธ์กฐํ์ญ์์ค. ์ด ์น์ ์์๋ ๊ธฐ๋ณธ ํ๋ฌ๊ทธ์ธ์ ๊ตฌ๋ ๋ฐฉ์์ ๊ฐ๊ด์ ์ผ๋ก ์ค๋ช ํฉ๋๋ค.
ํ๋กํ ์ฝ์ ํ์ฅ์ฑ๊ณผ ์ ๊ทผ์ ์ด ์ ์ฑ ์ ์ ํฉ์ฑ์ ์ํด์, ์ ๊ทผ ์ ์ด ์ ์ฑ ์ ํ๋กํ ์ฝ๋ณ ์๋ํฌ์ธํธ๊ฐ ์๋๋ผ ์ก์ ๊ณผ ์ด๋ฒคํธ๋ฅผ ์ฃผ์ฒด๋ก ์ ์ฉ๋ฉ๋๋ค.
์ ๊ทผ ์ ์ด ์ ์ฑ ์ ํ๊ฐ๋ API Gateway์ ๋ฉ๋ชจ๋ฆฌ์ LRU ๋ฐฉ์์ผ๋ก ์บ์๋๋ฉฐ ํ ์์ฒญ์์ ์ค๋ณต ์ํ๋์ง ์์ต๋๋ค. ์บ์ ํค๋ฅผ ์์ฑ ํ ๋ ์์ฒญ์ ์ ํํ ๊ตฌ๋ถํ๊ธฐ ์ํด์ ์ปจํ ์คํธ(์ธ์ฆ ์ ๋ณด) ๋ฐ ํธ์ถ ํ์ด๋ก๋ ๋ฑ์ ์ ๋ณด๊ฐ ๋ฐ์๋ฉ๋๋ค.
์ ์ฉ๋๋ ํ๋ฌ๊ทธ์ธ์ ์์๋ ์ ํจํฉ๋๋ค. ์ฐ์ ํ๋ ํ๋ฌ๊ทธ์ธ์์ ์คํจ ํ ๊ฒฝ์ฐ ๋ค์ ํ๋ฌ๊ทธ์ธ์ ์ ์ฑ
์ ํ๊ฐ๋์ง ์์ต๋๋ค. ์ ๊ทผ ์ ์ด ํ๋ฌ๊ทธ์ธ์ ๊ธฐ๋ณธ ์ต์
์์ OAuth2 Scope ํ๋ฌ๊ทธ์ธ(scopes)์ด FBAC ํ๋ฌ๊ทธ์ธ(filter)๋ณด๋ค ์ฐ์ ํฉ๋๋ค.
OAuth2 Scope ํ๋ฌ๊ทธ์ธ์ ๊ฐ ์ ์ฑ
์ scopes์ ๋์ด๋ ์ค์ฝํ๋ฅผ context.scopes๊ฐ ํ๋ ์ด์์ ์ค์ฝํ๋ฅผ ํฌํจํ๋ ๊ฒฝ์ฐ ์ ๊ทผ์ ํ์ฉํฉ๋๋ค.
FBAC ํ๋ฌ๊ทธ์ธ์ ๊ฐ ์ ์ฑ
์ filter ํญ๋ชฉ์ ๋งตํ๋ Inline JavaScript Function String์ VM์์ ์คํํ๊ณ ๊ทธ Boolean ๊ฐ์ผ๋ก ์ ๊ทผ ์ ์ด ์ฌ๋ถ๋ฅผ ํ๋จํฉ๋๋ค. ํ๊ฐ์ค ์๋ฌ๊ฐ ๋ฐ์ํ๊ฑฐ๋ Boolean ๊ฐ์ด ๋ฆฌํด๋์ง ์๋ ๊ฒฝ์ฐ, API Gateway์์ ์ถ์ฒ ๋
ธ๋๋ก ์ ๋ฌ๋๋ฉฐ ์ ๊ทผ์ด ๊ฑฐ๋ถ๋ฉ๋๋ค.
๋๋ฒ๊น
์ค์ Inline JavaScript Function String์์ console ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด ๋ฉ์ธ์ง๋ฅผ ์ถ๋ ฅํ๋ ๊ฒฝ์ฐ, ๊ทธ ๋ฉ์ธ์ง๋ console ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉ๋ report ์ปค๋ฅํฐ๊ฐ ์ถ์ฒ ๋
ธ๋๋ก ์ ๋ฌํฉ๋๋ค.