Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
μλΉμ€ API μ€ν€λ§λ μλΉμ€ λΈλ‘컀μ μμ‘΄ν΄ Gatewayλ‘ μμ§λκ³ μ²λ¦¬λ©λλ€. Moleculer μ΄λν°λ‘ μμ±λ μλΉμ€ λΈλ‘컀μ κ²½μ° κΈ°λ³Έμ μΌλ‘ ServiceSchemaμ metadata.api νλμμ μλΉμ€ API μ€ν€λ§κ° μμ§λκΈ°λ₯Ό κΈ°λν©λλ€.
μλΉμ€ API μ€ν€λ§μ λ³ν©μ μλΉμ€ λ
Έλμ μ°κ²°, μ’
λ£, μ€ν€λ§ λ³κ²½μ λ°μν©λλ€. μλΉμ€ API μ€ν€λ§λ μμ μ μ€ν€λ§λ₯Ό λ³ν© ν λΈλμΉλ₯Ό μ€ν€λ§μ λͺ
μν©λλ€. Gatewayμλ κΈ°λ³Έμ μΌλ‘ master λΈλμΉκ° μμ±λμ΄μμΌλ©°, master λΈλμΉλ μ κ±° λ μ μμ΅λλ€.
μ κ·Ό μ μ΄ νλ¬κ·ΈμΈλ³ μ€ν€λ§ μμμ 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 컀λ₯ν°κ° μΆμ² λ
Έλλ‘ μ λ¬ν©λλ€.
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 κ²½λ‘μ μ€λ³΅λ μ μμ΅λλ€.
νκ·Έ μ΄λ¦ κ·μΉ
μλ¬Έ μλ¬Έμ λ° μ«μλ‘λ§ κ΅¬μ±λ©λλ€.
μ΄λ²€νΈ/λΈλμΉ
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 λ²μ μ μ λ’°μ±μ 보μ₯λ©λλ€.
-
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 μ€ν€λ§μ ν¬λ§·κ³Ό κΈ°λ₯μ νμ₯νλλ° μ°μ λλ€. νλ¬κ·ΈμΈμ μμλ μ€ν€λ§μ λν κ²μ¦, ν΄μ, μλ λ°©μμ μ μνκ³ κ΅¬νν©λλ€.
κ° νλ‘ν μ½ νλ¬κ·ΈμΈμ ν΄λΉ νλ‘ν μ½ μ€ν€λ§μ μμμ μ μνκ³ , μ€ν€λ§ λ³ν©, μμ² νλ‘μ, μμ‘΄μ± νμ , μλ² νμ₯ νΈλ€λ¬ λ±μ ꡬνν©λλ€.
κ° μ κ·Ό μ μ΄ νλ¬κ·ΈμΈμ ν΄λΉ μ κ·Ό μ μ΄ μ€ν€λ§μ μμμ μ μνκ³ , 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
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