arrow-left

All pages
gitbookPowered by GitBook
1 of 7

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Health Check

Schema Registry

hashtag
A. Schema Integration

μ„œλΉ„μŠ€ API μŠ€ν‚€λ§ˆλŠ” μ„œλΉ„μŠ€ λΈŒλ‘œμ»€μ— μ˜μ‘΄ν•΄ Gateway둜 μˆ˜μ§‘λ˜κ³  μ²˜λ¦¬λ©λ‹ˆλ‹€. Moleculer μ–΄λŒ‘ν„°λ‘œ μž‘μ„±λœ μ„œλΉ„μŠ€ 브둜컀의 경우 기본적으둜 ServiceSchema의 metadata.api ν•„λ“œμ—μ„œ μ„œλΉ„μŠ€ API μŠ€ν‚€λ§ˆκ°€ μˆ˜μ§‘λ˜κΈ°λ₯Ό κΈ°λŒ€ν•©λ‹ˆλ‹€.

μ„œλΉ„μŠ€ API μŠ€ν‚€λ§ˆμ˜ 병합은 μ„œλΉ„μŠ€ λ…Έλ“œμ˜ μ—°κ²°, μ’…λ£Œ, μŠ€ν‚€λ§ˆ λ³€κ²½μ‹œ λ°œμƒν•©λ‹ˆλ‹€. μ„œλΉ„μŠ€ API μŠ€ν‚€λ§ˆλŠ” μžμ‹ μ˜ μŠ€ν‚€λ§ˆλ₯Ό 병합 ν•  브랜치λ₯Ό μŠ€ν‚€λ§ˆμ— λͺ…μ‹œν•©λ‹ˆλ‹€. Gatewayμ—λŠ” 기본적으둜 master λΈŒλžœμΉ˜κ°€ μƒμ„±λ˜μ–΄μžˆμœΌλ©°, master λΈŒλžœμΉ˜λŠ” 제거 될 수 μ—†μŠ΅λ‹ˆλ‹€.

Policy Plugin

hashtag
2. Access Control Policy

μ ‘κ·Ό μ œμ–΄ ν”ŒλŸ¬κ·ΈμΈλ³„ μŠ€ν‚€λ§ˆ 양식은 Access Control Policy μ„Ήμ…˜μ„ μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€. 이 μ„Ήμ…˜μ—μ„œλŠ” κΈ°λ³Έ ν”ŒλŸ¬κ·ΈμΈμ˜ ꡬ동 방식을 κ°œκ΄„μ μœΌλ‘œ μ„€λͺ…ν•©λ‹ˆλ‹€.

ν”„λ‘œν† μ½œμ˜ ν™•μž₯μ„±κ³Ό μ ‘κ·Όμ œμ–΄ μ •μ±…μ˜ 정합성을 μœ„ν•΄μ„œ, μ ‘κ·Ό μ œμ–΄ 정책은 ν”„λ‘œν† μ½œλ³„ μ—”λ“œν¬μΈνŠΈκ°€ μ•„λ‹ˆλΌ μ•‘μ…˜κ³Ό 이벀트λ₯Ό 주체둜 μ μš©λ©λ‹ˆλ‹€.

μ ‘κ·Ό μ œμ–΄ μ •μ±…μ˜ ν‰κ°€λŠ” API Gateway의 λ©”λͺ¨λ¦¬μ— LRU λ°©μ‹μœΌλ‘œ μΊμ‹œλ˜λ©° ν•œ μš”μ²­μ—μ„œ 쀑볡 μˆ˜ν–‰λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μΊμ‹œ ν‚€λ₯Ό 생성 ν•  λ•Œ μš”μ²­μ„ μ •ν™•νžˆ κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄μ„œ μ»¨ν…μŠ€νŠΈ(인증 정보) 및 호좜 νŽ˜μ΄λ‘œλ“œ λ“±μ˜ 정보가 λ°˜μ˜λ©λ‹ˆλ‹€.

μ μš©λ˜λŠ” ν”ŒλŸ¬κ·ΈμΈμ˜ μˆœμ„œλŠ” μœ νš¨ν•©λ‹ˆλ‹€. μš°μ„ ν•˜λŠ” ν”ŒλŸ¬κ·ΈμΈμ—μ„œ μ‹€νŒ¨ ν•  경우 λ‹€μŒ ν”ŒλŸ¬κ·ΈμΈμ˜ 정책은 ν‰κ°€λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ ‘κ·Ό μ œμ–΄ ν”ŒλŸ¬κ·ΈμΈμ˜ κΈ°λ³Έ μ˜΅μ…˜μ—μ„œ OAuth2 Scope ν”ŒλŸ¬κ·ΈμΈ(scopes)이 FBAC ν”ŒλŸ¬κ·ΈμΈ(filter)보닀 μš°μ„ ν•©λ‹ˆλ‹€.

hashtag
A. OAuth2 Scope

OAuth2 Scope ν”ŒλŸ¬κ·ΈμΈμ€ 각 μ •μ±…μ˜ scopes에 λ‚˜μ—΄λœ μŠ€μ½”ν”„λ₯Ό context.scopesκ°€ ν•˜λ‚˜ μ΄μƒμ˜ μŠ€μ½”ν”„λ₯Ό ν¬ν•¨ν•˜λŠ” 경우 접근을 ν—ˆμš©ν•©λ‹ˆλ‹€.

hashtag
B. FBAC

FBAC ν”ŒλŸ¬κ·ΈμΈμ€ 각 μ •μ±…μ˜ filter ν•­λͺ©μ— λ§΅ν•‘λœ Inline JavaScript Function String을 VMμ—μ„œ μ‹€ν–‰ν•˜κ³  κ·Έ Boolean κ°’μœΌλ‘œ μ ‘κ·Ό μ œμ–΄ μ—¬λΆ€λ₯Ό νŒλ‹¨ν•©λ‹ˆλ‹€. 평가쀑 μ—λŸ¬κ°€ λ°œμƒν•˜κ±°λ‚˜ Boolean 값이 λ¦¬ν„΄λ˜μ§€ μ•ŠλŠ” 경우, API Gatewayμ—μ„œ 좜처 λ…Έλ“œλ‘œ μ „λ‹¬λ˜λ©° 접근이 κ±°λΆ€λ©λ‹ˆλ‹€.

디버깅 쀑에 Inline JavaScript Function Stringμ—μ„œ console 객체λ₯Ό μ‚¬μš©ν•΄ λ©”μ„Έμ§€λ₯Ό 좜λ ₯ν•˜λŠ” 경우, κ·Έ λ©”μ„Έμ§€λŠ” console 객체에 λ°”μΈλ”©λœ report 컀λ„₯ν„°κ°€ 좜처 λ…Έλ“œλ‘œ μ „λ‹¬ν•©λ‹ˆλ‹€.

Branch, Version, Integration

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 κ²½λ‘œμ™€ 쀑볡될 수 μ—†μŠ΅λ‹ˆλ‹€.

    νƒœκ·Έ 이름 κ·œμΉ™

    • 영문 μ†Œλ¬Έμž 및 숫자둜만 κ΅¬μ„±λ©λ‹ˆλ‹€.

    이벀트/브랜치

    API Handler

    hashtag
    B. API Handler

    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 λ²„μ „μ˜ 신뒰성은 보μž₯λ©λ‹ˆλ‹€.

    Gateway λ…Έλ“œκ°„μ— μ„œλΉ„μŠ€ API μŠ€ν‚€λ§ˆ λ³‘ν•©μ˜ μˆœμ„œκ°€ λ™μΌν•˜κ²Œ 보μž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

    -

    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

    Protocol Plugin

    hashtag
    Plugin

    ν”ŒλŸ¬κ·ΈμΈμ€ μ„œλΉ„μŠ€ API μŠ€ν‚€λ§ˆμ˜ 포맷과 κΈ°λŠ₯을 ν™•μž₯ν•˜λŠ”λ° μ“°μž…λ‹ˆλ‹€. ν”ŒλŸ¬κ·ΈμΈμ€ μœ„μž„λœ μŠ€ν‚€λ§ˆμ— λŒ€ν•œ 검증, 해석, μž‘λ™ 방식을 μ •μ˜ν•˜κ³  κ΅¬ν˜„ν•©λ‹ˆλ‹€.

    각 ν”„λ‘œν† μ½œ ν”ŒλŸ¬κ·ΈμΈμ€ ν•΄λ‹Ή ν”„λ‘œν† μ½œ μŠ€ν‚€λ§ˆμ˜ 양식을 μ •μ˜ν•˜κ³ , μŠ€ν‚€λ§ˆ 병합, μš”μ²­ ν”„λ‘μ‹œ, μ˜μ‘΄μ„± νŒŒμ•…, μ„œλ²„ ν™•μž₯ ν•Έλ“€λŸ¬ 등을 κ΅¬ν˜„ν•©λ‹ˆλ‹€.

    각 μ ‘κ·Ό μ œμ–΄ ν”ŒλŸ¬κ·ΈμΈμ€ ν•΄λ‹Ή μ ‘κ·Ό μ œμ–΄ μŠ€ν‚€λ§ˆμ˜ 양식을 μ •μ˜ν•˜κ³ , call, publish, subscribe 컀λ„₯ν„°μ˜ 정책을 ν•΄μ„ν•˜κ³  μ ‘κ·Ό μ œμ–΄λ₯Ό νŒλ‹¨ν•˜λŠ” ν•Έλ“€λŸ¬λ₯Ό κ΅¬ν˜„ν•©λ‹ˆλ‹€.

    hashtag
    1. Protocol Plugin

    ν”„ν† ν† μ½œ ν”ŒλŸ¬κ·ΈμΈλ³„ μŠ€ν‚€λ§ˆ 양식은 μ„Ήμ…˜μ„ μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€. 이 μ„Ήμ…˜μ—μ„œλŠ” κΈ°λ³Έ ν”ŒλŸ¬κ·ΈμΈμ˜ ꡬ동 방식을 κ°œκ΄„μ μœΌλ‘œ μ„€λͺ…ν•©λ‹ˆλ‹€.

    hashtag
    A. REST

    REST ν”„λ‘œν† μ½œμ€ λΆ„μ‚° μ„œλΉ„μŠ€μ— λŒ€ν•œ call, publish 컀λ„₯ν„°λ₯Ό νŠΉμ • μ—”λ“œν¬μΈνŠΈμ— λ§΅ν•‘ν•©λ‹ˆλ‹€. HTTP μš”μ²­μ˜ Paylo,adλŠ” 미듀웨어λ₯Ό 톡해 νŒŒμ‹±λ˜μ–΄ params 컀λ„₯ν„°λ₯Ό 톡해 λ³€ν™˜λ˜μ–΄ call, publish 컀λ„₯ν„°λ‘œ μ „λ‹¬λ©λ‹ˆλ‹€.

    μ—”λ“œν¬μΈνŠΈκ°€ μ€‘λ³΅λ˜λŠ” 경우 병합을 λ°œμƒμ‹œν‚¨ 좜처 λ…Έλ“œλ‘œ 디버그 λ©”μ„Έμ§€κ°€ report되며 병합에 μ‹€νŒ¨ν•©λ‹ˆλ‹€.

    API Catalogλ₯Ό ν†΅ν•΄μ„œ μ—”λ“œν¬μΈνŠΈ 별 적용된 μ •μ±… 및 컀λ„₯터와 κ·Έ νŒŒλΌλ―Έν„°μ— λŒ€ν•œ μ„€λͺ…을 μ œκ³΅ν•©λ‹ˆλ‹€.

    TODO: $headers, $status, $body field for REST response

    hashtag
    B. GraphQL

    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κ°€ ν¬ν•¨λ˜μ–΄μžˆμŠ΅λ‹ˆλ‹€.

    hashtag
    C. WebSocket

    TODO: WIP

    hashtag

    API Schema

    API Document Generation

    hashtag
    C. Reflection

    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

    Connector

    200