API Gateway
REST λ° WebSocket APIλ₯Ό μμ±, κ²μ, μ μ§, λͺ¨λν°λ§ λ° λ³΄νΈνκΈ° μν AWS μλΉμ€API κ°λ°μλ AWS λλ λ€λ₯Έ μΉ μλΉμ€λ₯Ό λΉλ‘―ν΄ AWS ν΄λΌμ°λμ μ μ₯λ λ°μ΄ν°μ μ‘μΈμ€νλ APIλ₯Ό μμ±ν μ μμ
API Gateway Architecture
API Gateway κΈ°λ₯
Amazon API Gatewayλ λ€μκ³Ό κ°μ κΈ°λ₯μ μ 곡
μν μ μ₯(WebSocket) λ° μν λΉμ μ₯(HTTP λ° REST) APIμ λν μ§μ
κ°λ ₯νκ³ μ μ°ν μΈμ¦ λ©μ»€λμ¦(μ: AWS Identity and Access Management μ μ± , Lambda κΆν λΆμ¬μ ν¨μ, Amazon Cognito μ¬μ©μ ν λ±)
APIλ₯Ό κ²μνκΈ° μν κ°λ°μ ν¬νΈ
λ³κ²½ μ¬νμ μμ νκ² λ‘€μμνκΈ° μν Canary λ¦΄λ¦¬μ€ λ°°ν¬
API μ¬μ© λ° API λ³κ²½μ λν CloudTrail λ‘κΉ λ° λͺ¨λν°λ§
경보 μ€μ κΈ°λ₯μ ν¬ν¨ν CloudWatch μ‘μΈμ€ λ‘κΉ λ° μ€ν λ‘κΉ
AWS CloudFormation ν νλ¦Ώμ μ¬μ©νμ¬ API μμ±μ νμ±νν μ μλ κΈ°λ₯
μ¬μ©μ μ§μ λλ©μΈ μ΄λ¦ μ§μ
μΌλ°μ μΈ μΉ μ΅μ€νλ‘μμΌλ‘λΆν° APIλ₯Ό 보νΈνκΈ° μν΄ AWS WAFμ ν΅ν©
μ±λ₯ μ§μ° μκ° νμ λ° νμ΅μ μν΄ AWS X-Rayμ ν΅ν©
μλ²λ¦¬μ€ μν€ν
μ²μ μΌλΆλ‘ ꡬμ±
API Gatewayλ AWS Lambda λ° HTTP μλν¬μΈνΈμ κ°μν νλ‘μ ν΅ν©μ μ§μνκΈ° λλ¬Έμ AWS μλ²λ¦¬μ€ μΈνλΌμ μ± νμ΄μ±(app-facing) λΆλΆμ κ΅¬μ± κ°λ₯
μ¬μ© λμ
API Gatewayλ₯Ό μ¬μ©νλ κ°λ°μλ λ€μκ³Ό κ°μ
API κ°λ°μ APIλ₯Ό μμ±νκ³ λ°°ν¬νμ¬ API Gatewayμμ νμν κΈ°λ₯μ ꡬν API κ°λ°μλ AWS κ³μ λ΄μμ APIλ₯Ό μμ ν IAM μ¬μ©μμ¬μΌ ν¨
μ± κ°λ°μ API Gatewayμμ API κ°λ°μκ° μμ±ν WebSocket λλ REST APIλ₯Ό νΈμΆνμ¬ AWS μλΉμ€λ₯Ό νΈμΆνκΈ°μ ν¨κ³Όμ μΈ μ ν리μΌμ΄μ μ ꡬμΆ
μ± κ°λ°μλ API κ°λ°μμ κ³ κ°μ΄κΈ°μ, APIμ IAM κΆνμ΄ νμνμ§ μκ±°λ Amazon Cognito μ¬μ©μ ν μ격 μ¦λͺ μ°λμμ μ§μνλ νμ¬ μ°λ μ격 μ¦λͺ 곡κΈμλ₯Ό ν΅ν΄ μ¬μ©μ κΆν λΆμ¬λ₯Ό μ§μνλ κ²½μ°, μ± κ°λ°μλ AWS κ³μ μ 보μ ν νμκ° μμ
API Gateway κ°λ
API Gateway
λ°±μλ HTTP μλν¬μΈνΈ, AWS Lambda ν¨μ λλ κΈ°ν AWS μλΉμ€λ₯Ό λ ΈμΆνκΈ° μν RESTful μ ν리μΌμ΄μ νλ‘κ·Έλλ° μΈν°νμ΄μ€(API)μ μμ±, λ°°ν¬ λ° κ΄λ¦¬
AWS Lambda ν¨μ λλ κΈ°ν AWS μλΉμ€λ₯Ό λ ΈμΆνκΈ° μν WebSocketμ μμ±, λ°°ν¬ λ° κ΄λ¦¬
νλ°νΈ μλ HTTP λ° WebSocket μλν¬μΈνΈλ₯Ό ν΅ν΄ λ ΈμΆλ API λ©μλ νΈμΆ
API Gateway HTTP API λ°±μλ HTTP μλν¬μΈνΈ λλ Lambda ν¨μμ ν΅ν©λ λΌμ°ν λ° λ©μλμ λͺ¨μ μ΄ λͺ¨μμ νλ μ΄μμ μ€ν μ΄μ§λ‘ λ°°ν¬ν μ μμ κ° λΌμ°ν μ API Gatewayμμ μ§μλλ κ³ μ μ HTTP λμ¬λ₯Ό κ°μ§ API λ©μλλ₯Ό νλ μ΄μ λ ΈμΆλ¨
API Gateway REST API λ°±μλ HTTP μλν¬μΈνΈ, Lambda ν¨μ λλ κΈ°ν AWS μλΉμ€μ ν΅ν©λμ΄ μλ HTTP 리μμ€μ λ©μλμ λͺ¨μ μ΄ λͺ¨μμ νλ μ΄μμ μ€ν μ΄μ§λ‘ λ°°ν¬ν μ μμ κ° API 리μμ€λ API Gatewayμμ μ§μνλ μ μ© HTTP λμ¬κ° μλ API λ©μλλ₯Ό νλ μ΄μ νμ κ°λ₯
API Gateway WebSocket API λ°±μλ HTTP μλν¬μΈνΈ, Lambda ν¨μ λλ κΈ°ν AWS μλΉμ€μ ν΅ν©λμ΄ μλ WebSocket λΌμ°ν κ³Ό λΌμ°ν ν€μ λͺ¨μ μ΄ λͺ¨μμ νλ μ΄μμ μ€ν μ΄μ§λ‘ λ°°ν¬ν μ μμ API λ©μλλ νλ°νΈ μλ WebSocket μ°κ²°μ ν΅ν΄ νΈμΆλλ©°, μ΄ μλν¬μΈνΈλ₯Ό λ±λ‘λ μ¬μ©μ μ§μ λλ©μΈ μ΄λ¦κ³Ό μ°κ²°ν μ μμ
API λ°°ν¬ API Gateway APIμ νΉμ μμ μ€λ μ· ν΄λΌμ΄μΈνΈκ° μ¬μ©ν μ μκ² νλ €λ©΄ λ°°ν¬κ° νλ μ΄μμ API λ¨κ³μ μ°κ²°λμ΄ μμ΄μΌ ν¨
API κ°λ°μ API Gateway λ°°ν¬λ₯Ό μμ ν AWS κ³μ (μ: νλ‘κ·Έλλ° μ‘μΈμ€λ μ§μνλ μλΉμ€ 곡κΈμ)
API μλν¬μΈνΈ νΉμ 리μ μ λ°°ν¬λλ API Gatewayμ API νΈμ€νΈ μ΄λ¦ νΈμ€νΈ μ΄λ¦μ {api-id}.execute-api.{region}.amazonaws.com. λ€μκ³Ό κ°μ μ νμ API λμ μ΄ μ§μλ¨
μ£μ§ μ΅μ ν API μλν¬μΈνΈ
νλΌμ΄λΉ API μλν¬μΈνΈ
리μ API μλν¬μΈνΈ
API ν€ μμ«μ λ¬Έμμ΄λ‘ API Gateway μ¬μ©νμ¬ μ± REST λλ websocket APIλ₯Ό μ¬μ©νλ κ°λ°μ API Gateway λ₯Ό λμ νμ¬ API ν€λ₯Ό μμ±νκ±°λ CSV νμΌμμ κ°μ Έμ¬ μ μμ API ν€μ Lambda κΆν λΆμ¬μ λλ μ¬μ©λ κ³νμ ν¨κ» μ¬μ©νμ¬ API μ‘μΈμ€λ₯Ό μ μ΄ν μ μμ
API λ¨κ³ APIμ μλͺ μ£ΌκΈ° μνμ λν λ Όλ¦¬μ μ°Έμ‘°(μ: 'dev', 'prod', 'beta', 'v2') API λ¨κ³λ API IDμ λ¨κ³ μ΄λ¦μΌλ‘ μλ³λ¨
μ± κ°λ°μ API κ°λ°μκ° λ°°ν¬ν APIμ μνΈ μμ©νλ©° AWS κ³μ μ΄ μκ±°λ μμ μλ μλ μ± μμ±μ μ± κ°λ°μλ μΌλ°μ μΌλ‘ API ν€λ‘ μλ³λκ² λ¨
μ½λ°± URL μ ν΄λΌμ΄μΈνΈκ° WebSocket μ°κ²°μ ν΅ν΄ μ°κ²°λλ©΄ API Gatewayμμ ν΅ν©μ νΈμΆνμ¬ ν΄λΌμ΄μΈνΈμ μ½λ°± URLμ μ μ₯ν μ μμ μ΄ μ½λ°± URLμ μ¬μ©νμ¬ λ°±μλ μμ€ν μμ ν΄λΌμ΄μΈνΈλ‘ λ©μμ§λ₯Ό λ³΄λΌ μ μμ
κ°λ°μ ν¬νΈ κ³ κ°μ΄ API μ ν(API κ²μ΄νΈμ¨μ΄ μ¬μ©λ κ³ν)μ λ±λ‘, κ²μ λ° κ΅¬λ νκ³ , API ν€λ₯Ό κ΄λ¦¬νκ³ , APIμ λν μ¬μ© μ§νλ₯Ό λ³Ό μ μκ² ν΄μ£Όλ μ ν리μΌμ΄μ
μ£μ§ μ΅μ ν API μλν¬μΈνΈ AWS 리μ μμ μΌλ°μ μΌλ‘ μμ½κ² ν΄λΌμ΄μΈνΈ μ‘μΈμ€κ° κ°λ₯νλλ‘ CloudFront λ°°ν¬νμ μ¬μ©ν λ μ§μ λ 리μ μ λ°°ν¬λλ API Gateway APIμ κΈ°λ³Έ νΈμ€νΈ μ΄λ¦ API μμ²μ μ§λ¦¬μ μΌλ‘ λ€μν ν΄λΌμ΄μΈνΈλ₯Ό μν΄ μ°κ²° μκ°μ μΌλ°μ μΌλ‘ ν₯μμν€λ κ°μ₯ κ°κΉμ΄ CloudFront μ μ§ μ§μ (POP)μΌλ‘ λΌμ°ν λ¨
ν΅ν© μμ² API Gatewayμμ WebSocket API λΌμ°ν λλ REST API λ©μλμ λ΄λΆ μΈν°νμ΄μ€λ‘, μ¬κΈ°μμ λΌμ°ν μμ²μ λ³Έλ¬Έ λλ λ©μλμ λ³Έλ¬Έ λ° νλΌλ―Έν°λ₯Ό λ°±μλμμ μꡬνλ νμμΌλ‘ 맀νν¨
ν΅ν© μλ΅ API Gatewayμμ WebSocket API λΌμ°ν λλ REST API λ©μλμ λ΄λΆ μΈν°νμ΄μ€λ‘, λ°±μλμμ ν΄λΌμ΄μΈνΈ μ±μΌλ‘ λ°νλλ μλ΅ νμμΌλ‘ λ°μ μν μ½λ, ν€λ, νμ΄λ‘λλ₯Ό μ¬κΈ°μμ 맀νν¨
맀ν ν νλ¦Ώ VTL(Velocity Template Language)μ λμ¨ μ€ν¬λ¦½νΈλ‘, νλ°νΈμλ λ°μ΄ν° νμμΌλ‘ λ μμ² λ³Έλ¬Έμ λ°±μλ λ°μ΄ν° νμμΌλ‘ λ³ννκ±°λ λ°±μλ λ°μ΄ν° νμμΌλ‘ λ μλ΅ λ³Έλ¬Έμ νλ°νΈμλ λ°μ΄ν° νμμΌλ‘ λ³ν ν΅ν© μμ² λλ ν΅ν© μλ΅μ 맀ν ν νλ¦Ώμ΄ μ§μ λ μ μμ μ΄λ€μ μ€ν μκ°μ 컨ν μ€νΈ λ° μ€ν μ΄μ§ λ³μλ‘ μ 곡λλ λ°μ΄ν°λ₯Ό μ°Έμ‘°ν μ μμ 맀νμ μμ²μ λν΄ ν΄λΌμ΄μΈνΈμμ λ°±μλλ‘ ν΅ν©μ ν΅ν΄ ν€λλ λ³Έλ¬Έμ μ λ¬νλ μ격 μ¦λͺ λ³νλ§νΌ κ°λ¨ν μ μμ λ°±μλμμ ν΄λΌμ΄μΈνΈλ‘ νμ΄λ‘λκ° μ λ¬λλ μλ΅μ κ²½μ°λ λ§μ°¬κ°μ§
λ©μλ μμ² API λ°©λ²μ κ³΅μ© μΈν°νμ΄μ€ API Gateway μ ν리μΌμ΄μ κ°λ°μκ° APIλ₯Ό ν΅ν΄ λ°±μλμ μ‘μΈμ€νκΈ° μν΄ μ μ‘ν΄μΌ νλ λ§€κ° λ³μ λ° λ³Έμ²΄λ₯Ό μ μ
λ©μλ μλ΅ REST APIμ νΌλΈλ¦ μΈν°νμ΄μ€λ‘, μ± κ°λ°μκ° APIμ μλ΅μ κΈ°λνλ λ³Έλ¬Έ λͺ¨λΈ, ν€λ, μν μ½λλ₯Ό μ¬κΈ°μ μ μ
λͺ¨μ ν΅ν© λͺ¨μ ν΅ν©μμλ ν΅ν© λ°±μλκ° μμ΄λ API Gatewayμμ μ§μ API μλ΅μ΄ μμ±λ¨ API κ°λ°μλ API Gatewayκ° λͺ¨μ ν΅ν© μμ²μ μλ΅νλ λ°©λ²μ κ²°μ λλ©°, μ΄λ₯Ό μν΄, λ©μλμ ν΅ν© μμ² λ° ν΅ν© μλ΅μ ꡬμ±νμ¬ μ ν΄μ§ μν μ½λμ μλ΅μ μ°κ²°ν¨
λͺ¨λΈ μμ² λλ μλ΅ νμ΄λ‘λμ λ°μ΄ν° ꡬ쑰λ₯Ό μ§μ νλ λ°μ΄ν° μ€ν€λ§ λͺ¨λΈμ APIμμ κ°λ ₯ν νμμ SDKλ₯Ό μμ±νλ λ° νμνλ©°, νμ΄λ‘λλ₯Ό νμΈνλ λ°μλ μ¬μ©λ¨ λͺ¨λΈμ μν 맀ν ν νλ¦Ώμ μμ±ν΄ νλ‘λμ 맀ν ν νλ¦Ώ μμ±μ μμνκΈ°μ νΈλ¦¬ν λꡬλ‘, μμΌλ©΄ μ μ©νκΈ°λ νμ§λ§ 맀ν ν νλ¦Ώμ μμ±ν λ λͺ¨λΈμ νμνμ§ μμ
νλΌμ΄λΉ API μλν¬μΈνΈ μΈν°νμ΄μ€ VPC μλν¬μΈνΈλ₯Ό ν΅ν΄ λ ΈμΆλκ³ ν΄λΌμ΄μΈνΈκ° VPC λ΄λΆμ νλΌμ΄λΉ API 리μμ€μ μμ νκ² μ‘μΈμ€ν μ μλλ‘ ν΄μ£Όλ API μλν¬μΈνΈ νλΌμ΄λΉ APIλ νΌλΈλ¦ μΈν°λ·κ³Ό 격리λμ΄ μμΌλ©°, μ‘μΈμ€ κΆνμ΄ μλ API Gatewayμ VPC μλν¬μΈνΈλ₯Ό μ¬μ©ν΄μΌλ§ μ‘μΈμ€ν μ μμ
νλΌμ΄λΉ ν΅ν© 리μμ€λ₯Ό νΌλΈλ¦ μΈν°λ·μ λ ΈμΆνμ§ μκ³ , ν΄λΌμ΄μΈνΈκ° νλΌμ΄λΉ REST API μλν¬μΈνΈλ₯Ό ν΅ν΄ κ³ κ° VPC λ΄λΆμ 리μμ€μ μ‘μΈμ€ν μ μλ API Gateway ν΅ν© μ νμ
νλ‘μ ν΅ν© κ°μνλ API Gateway ν΅ν© ꡬμ±. HTTP νλ‘μ ν΅ν© λλ Lambda νλ‘μ ν΅ν©μΌλ‘ νλ‘μ ν΅ν©μ μ€μ ν μ μμ HTTP νλ‘μ ν΅ν©μμ API Gatewayλ νλ°νΈ μλμ HTTP λ°±μλ κ°μ μ 체 μμ² λ° μλ΅μ μ λ¬ν¨ Lambda νλ‘μ ν΅ν©μμ API Gatewayλ μ 체 μμ²μ λ°±μλ Lambda ν¨μμ μ λ ₯κ°μΌλ‘ μ μ‘ν¨ κ·Έλ° λ€μ API Gatewayλ Lambda ν¨μ μΆλ ₯μ νλ°νΈ μλ HTTP μλ΅μΌλ‘ λ³νν¨ REST APIμμ νλ‘μ ν΅ν©μ νλ‘μ 리μμ€μμ κ°μ₯ λ§μ΄ μ¬μ©λλ©°, 볡μ‘ν κ²½λ‘ λ³μ(μ: {proxy+})μ catch-all ANY λ©μλλ‘ νμλ¨
λΉ λ₯Έ μμ± λΉ λ₯Έ μμ±μ μ¬μ©νμ¬ HTTP API μμ±μ κ°μνν μ μμ΅λλ€. λΉ λ₯Έ μμ±μ Lambda λ HTTP ν΅ν©, κΈ°λ³Έ catch-all λΌμ°ν , λ³κ²½ μ¬νμ μλ λ°°ν¬νλλ‘ κ΅¬μ±λ κΈ°λ³Έ μ€ν μ΄μ§λ₯Ό μ¬μ©νμ¬ APIλ₯Ό μμ±
리μ API μλν¬μΈνΈ νΉμ 리μ μ λ°°ν¬λκ³ λμΌν AWS 리μ μμ EC2 μΈμ€ν΄μ€μ κ°μ ν΄λΌμ΄μΈνΈμ μλΉμ€λ₯Ό μ 곡νλ APIμ νΈμ€νΈ μ΄λ¦μΌλ‘, API μμ²μ CloudFront λ°°ν¬νμ κ±°μΉμ§ μκ³ λ¦¬μ λ³ API Gatewayλ‘ μ§μ μ§μ λ¨ λ¦¬μ λ΄ μμ²μ κ²½μ° λ¦¬μ μλν¬μΈνΈλ CloudFront λ°°ν¬νμ λν λΆνμν μ볡μ μ°νν¨ λΏλ§ μλλΌ, 리μ μλν¬μΈνΈμ μ§μ° μκ° κΈ°λ° λΌμ°ν μ μ μ©νμ¬ λμΌν 리μ API μλν¬μΈνΈ ꡬμ±μ μ¬μ©ν΄ μ¬λ¬ 리μ μ APIλ₯Ό λ°°ν¬νκ³ , λ°°ν¬λ κ° APIμ λμΌν μ¬μ©μ μ§μ λλ©μΈ μ΄λ¦μ μ€μ νκ³ , ν΄λΌμ΄μΈνΈ μμ²μ μ§μ° μκ°μ΄ κ°μ₯ 짧μ 리μ μ λΌμ°ν νλλ‘ Route 53μμ μ§μ° μκ° κΈ°λ° DNS λ μ½λλ₯Ό ꡬμ±ν μλ μμ
λΌμ°ν API Gatewayμμ WebSocket λΌμ°ν μ μμ λ©μμ§λ₯Ό λ©μμ§ λ΄μ©μ λ°λΌ AWS Lambda ν¨μ κ°μ νΉμ ν΅ν©μΌλ‘ μ°κ²°νλ λ° μ¬μ©λ¨ WebSocket APIλ₯Ό μ μν λ λΌμ°ν ν€μ ν΅ν© λ°±μλλ₯Ό μ§μ νλ©°, λΌμ°ν ν€λ λ©μμ§ λ³Έλ¬Έμ μμ±μ μμ λ©μμ§μμ λΌμ°ν ν€κ° μΌμΉνλ©΄ ν΅ν© λ°±μλκ° νΈμΆλ¨ μΌμΉνμ§ μλ λΌμ°ν ν€μ λν΄ κΈ°λ³Έ λΌμ°ν μ μ€μ νκ±°λ, λΌμ°ν μ μννκ³ μμ²μ μ²λ¦¬νλ λ°±μλ κ΅¬μ± μμλ‘ λ©μμ§λ₯Ό μ λ¬νλ νλ‘μ λͺ¨λΈμ μ§μ ν μλ μμ
λΌμ°ν μμ² API Gatewayμ μλ WebSocket API λ©μλμ νΌλΈλ¦ μΈν°νμ΄μ€λ‘, λ³Έλ¬Έμ μ μ μ± κ°λ°μκ° APIλ₯Ό ν΅ν΄ λ°±μλμ μ‘μΈμ€νλ €λ©΄ λ°λμ μ΄ νλΌλ―Έν°μ λ³Έλ¬Έμ μμ²μ ν¬ν¨μμΌ λ³΄λ΄μΌ ν¨
λΌμ°ν μλ΅ WebSocket APIμ νΌλΈλ¦ μΈν°νμ΄μ€λ‘, μ± κ°λ°μκ° API Gatewayμ κΈ°λνλ λ³Έλ¬Έ λͺ¨λΈ, ν€λ, μν μ½λλ₯Ό μ¬κΈ°μ μ μνκ² λ¨
μ¬μ©λ κ³ν μ¬μ©λ κ³νμ μ νν API ν΄λΌμ΄μΈνΈμκ² νλ μ΄μμ λ°°ν¬λ REST λλ WebSocket APIμ λν μ‘μΈμ€λ₯Ό μ 곡νκ³ , μ¬μ©λ κ³νμ μ¬μ©ν΄ μ‘°μ λ° ν λΉλ μ νμ ꡬμ±ν μ μμΌλ©°, μ΄λ κ°λ³ ν΄λΌμ΄μΈνΈ API ν€μ μ μ©λ¨
WebSocket μ°κ²° API Gatewayλ ν΄λΌμ΄μΈνΈμ API Gateway μ체 μ¬μ΄μ μꡬμ μΈ μ°κ²°μ μ μ§ API Gatewayκ³Ό Lambda ν¨μμ κ°μ λ°±μλ ν΅ν© κ°μλ μ§μμ μΈ μ°κ²°μ΄ μμΌλ©°, λ°±μλ μλΉμ€λ ν΄λΌμ΄μΈνΈμμ μμ ν λ©μμ§μ λ΄μ©μ λ°λΌ νμ μ νΈμΆλ¨
API Gateway μ’
λ₯
HTTP API REST APIλ³΄λ€ λκΈ° μκ°μ΄ μ§§κ³ λΉμ©μ΄ μ λ ΄νκ² RESTful APIλ₯Ό κ΅¬μ± κ°λ₯ AWS Lambda ν¨μ λλ κ³΅κ° λΌμ°ν μ΄ κ°λ₯ν HTTP μλν¬μΈνΈμ μμ²μ μ μ‘ν μ μμ HTTP APIλ OpenID Connect λ° OAuth 2.0 κΆν λΆμ¬λ₯Ό μ§μ λν CORS(Cross-Origin Resource Sharing) λ° μλ λ°°ν¬κ° κΈ°λ³Έμ μΌλ‘ μ§μλ¨
REST API API Gateway REST APIλ 리μμ€μ λ©μλλ‘ κ΅¬μ± λ¦¬μμ€λ μ±μ΄ 리μμ€ κ²½λ‘λ₯Ό ν΅ν΄ μ‘μΈμ€ν μ μλ λ Όλ¦¬μ μν°ν° λ©μλλ API μ¬μ©μκ° μ μΆν REST API μμ² λ° μ¬μ©μμκ² λ°νλλ μλ΅
μ±μ λ°±μλμμ μμ²λ λ°μ΄ν°λ₯Ό μ μ₯νκ³ κ°μ Έμ€λ μμΉλ₯Ό μ νμκ° μμΌλ©°, API Gateway REST APIμμ νλ°νΈμλλ λ©μλ μμ² λ° λ©μλ μλ΅μΌλ‘ μΊ‘μνλκ³ APIλ integration requests(ν΅ν© μμ²) λ° integration responses(ν΅ν© μλ΅)μ μ΄μ©ν΄ λ°±μλμ ν΅μ νκ² λ¨
ν΅ν© μλ΅μ ν΄λΌμ΄μΈνΈμ λν (ν΄λΉ HTTP μν μ½λμ) μ μ ν λ©μλ μλ΅μΌλ‘ λΌμ°ν νλ €λ©΄, ν΅ν©μμ λ©μλλ‘ νμν μλ΅ νλΌλ―Έν°λ₯Ό 맀ννλλ‘ ν΅ν© μλ΅μ ꡬμ±νλ©΄ λ¨ κ·Έλ° λ€μ, νμμ λ°λΌ λ°±μλμ μΆλ ₯ λ°μ΄ν° νμμ νλ°νΈμλμ νμμΌλ‘ λ³ν API Gatewayλ₯Ό μ¬μ©νλ©΄ νμ΄λ‘λμ μ€ν€λ§λ λͺ¨λΈμ μ μνμ¬ λ³Έλ¬Έ 맀ν ν νλ¦Ώμ μμ½κ² μ€μ κ°λ₯
WebSocket API WebSocket APIμμ ν΄λΌμ΄μΈνΈμ μλ²λ μΈμ λ μλ‘ λ©μμ§λ₯Ό λ³΄λΌ μ μμ λ°±μλ μλ²λ 볡μ‘ν ν΄λ§ λ©μ»€λμ¦μ ꡬνν νμ μμ΄ μ°κ²°λ μ¬μ©μ λ° μ₯μΉλ‘ λ°μ΄ν°λ₯Ό μ½κ² νΈμν μ μμ
API Gateway WebSocket APIλ₯Ό μ¬μ©νλ©΄ μ°κ²°μ΄λ λμ©λ λ°μ΄ν° κ΅νμ κ΄λ¦¬νκΈ° μν΄ μλ²λ₯Ό νλ‘λΉμ λνκ±°λ κ΄λ¦¬νμ§ μκ³ λ μμ ν μ€μκ° ν΅μ μ ν리μΌμ΄μ μ ꡬμΆν μ μμ
μ±ν μ ν리μΌμ΄μ
μ£Όμ μμΈ νμκΈ°μ κ°μ μ€μκ° λμ 보λ
μ€μκ° κ²½κ³ λ° μλ¦Ό
HTTP APIμ REST API λΉκ΅
HTTP APIλ λκΈ° μκ°μ΄ μ§§κ³ λΉμ© ν¨κ³Όμ μΈ AWS Lambda νλ‘μ λ° HTTP νλ‘μ APIλ₯Ό μν΄ μ€κ³λ¨ HTTP APIλ OIDC λ° OAuth 2.0 μΈμ¦μ μ§μνλ©° CORS λ° μλ λ°°ν¬μ λν κΈ°λ³Έ μ§μμ μ 곡νκ³ , μ΄μ μΈλ REST APIλ νμ¬ λ λ§μ κΈ°λ₯μ μ 곡νλ©° API μμ² λ° μλ΅μ μμ ν μ μ΄κ° κ°λ₯
κΆν λΆμ¬μ | ||
HTTP API | REST API | |
AWS Lambda | β | |
IAM | β | |
Amazon Cognito | β* | β |
OpenID Connect/OAuth 2.0 | β | |
* Amazon Cognitoλ₯Ό JWT λ°κΈμλ‘ μ¬μ© | ||
Integration | ||
HTTP API | REST API | |
HTTP νλ‘μ | β | β |
Lambda νλ‘μ | β | β |
HTTP | β | |
AWS μλΉμ€ | β | β |
νλΌμ΄λΉ ν΅ν© | β | β |
λͺ¨μ | β | |
API κ΄λ¦¬ | ||
HTTP API | REST API | |
μ¬μ©λ κ³ν | β | |
API ν€ | β | |
μ¬μ©μ μ§μ λλ©μΈ μ΄λ¦ | β* | β |
* HTTP API TLS 1.0 μ§μ μλ¨ | ||
κ°λ° | ||
HTTP API | REST API | |
Cache | β | |
λ³ν μμ² | β | |
μμ²/μλ΅ κ²μ¦ | β | |
νΈμΆ ν μ€νΈ | β | |
CORS κ΅¬μ± | β | |
μλ λ°°ν¬ | β | |
κΈ°λ³Έ λ¨κ³ | β | |
κΈ°λ³Έ κ²½λ‘ | β | |
Security | ||
HTTP API | REST API | |
ν΄λΌμ΄μΈνΈ μΈμ¦μ | β | |
AWS WAF | β | |
리μμ€ μ μ± | β | |
API μ ν | ||
HTTP API | REST API | |
리μ | β | β |
μ£μ§ μ΅μ ν | β | |
νλΌμ΄λΉ | β | |
Monitoring | ||
HTTP API | REST API | |
Amazon CloudWatch Logsμ λν μ‘μΈμ€ λ‘κ·Έ | β | β |
Amazon Kinesis Data Firehoseμ λν μ‘μΈμ€ λ‘κ·Έ | β | |
μ€ν λ‘κ·Έ | β | |
Amazon CloudWatch μ§ν | β | β |
AWS X-Ray | β | |
HTTP API
κ°λ°
μμ±
ν¨μ APIλ₯Ό μμ±νλ €λ©΄ μ΅μ νλ μ΄μμ λΌμ°ν , ν΅ν©, μ€ν μ΄μ§ λ° λ°°ν¬κ° μμ΄μΌ ν¨
λΌμ°ν
μμ API μμ²μ λ°±μλ 리μμ€λ‘ μ§μ λΌμ°ν κ²½λ‘λ HTTP λ©μλμ 리μμ€ κ²½λ‘(μ: GET /pets)λΌλ λ λΆλΆμΌλ‘ κ΅¬μ± λΌμ°ν μ λν νΉμ HTTP λ©μλλ₯Ό μ μν μ μμΌλ, ANY λ©μλλ₯Ό μ¬μ©νμ¬ λ¦¬μμ€μ λν΄ μ μνμ§ μμ λͺ¨λ λ©μλμ μΌμΉμν¬ μλ μμ λ€λ₯Έ κ²½λ‘μ μΌμΉνμ§ μλ μμ²μ λν΄ catch-all μν μ νλ $default κ²½λ‘λ₯Ό μμ±ν μ μμ
κ²½λ‘ λ³μ μμ HTTP API λΌμ°ν μμ κ²½λ‘ λ³μλ₯Ό μ¬μ©
μ)
GET /pets/{petID}
λΌμ°ν μ ν΄λΌμ΄μΈνΈκ°https://api-id.execute-api.us-east-2.amazonaws.com/pets/6
μ μ μΆνλGET
μμ²μ ν¬μ°©λ³΅μ‘ν κ²½λ‘ λ³μλ λΌμ°ν μ λͺ¨λ νμ 리μμ€λ₯Ό ν¬μ°©νκ² λ¨ λ³΅μ‘ν κ²½λ‘ λ³μλ₯Ό μμ±νλ €λ©΄ λ³μ μ΄λ¦μ
+
μ μΆκ° (μ:{proxy+}
) 볡μ‘ν κ²½λ‘ λ³μλ 리μμ€ κ²½λ‘μ λμ μμ΄μΌν¨μΏΌλ¦¬ λ¬Έμμ΄ νλΌλ―Έν° μμ HTTP APIμ λν μμ²μ ν¬ν¨λ κ²½μ° API Gatewayμμλ κΈ°λ³Έμ μΌλ‘ 쿼리 λ¬Έμμ΄ νλΌλ―Έν°λ₯Ό λ°±μλ ν΅ν©μΌλ‘ 보λ
μ) ν΄λΌμ΄μΈνΈκ° μμ²μ
https://api-id.execute-api.us-east-2.amazonaws.com/pets?id=4&type=dog
μ 보λ΄λ κ²½μ° μΏΌλ¦¬ λ¬Έμμ΄ νλΌλ―Έν°?id=4&type=dog
κ° ν΅ν©μ μ μ‘λκ² λ¨$default λΌμ°ν μμ
$default
λΌμ°ν μ APIμ λ€λ₯Έ λΌμ°ν κ³Ό λͺ μμ μΌλ‘ μΌμΉνμ§ μλ μμ²μ ν¬μ°©$default
λΌμ°ν μ΄ μμ²μ λ°λ κ²½μ° API Gatewayμμ μ 체 μμ² κ²½λ‘λ₯Ό ν΅ν©μ 보λ μ)$default
λΌμ°ν λ§ μλ APIλ₯Ό μμ±νμ¬https://petstore-demo-endpoint.execute-api.com
HTTP μλν¬μΈνΈκ° μλ ANY λ©μλμ ν΅ν©ν μ μμ μμ²μhttps://api-id.execute-api.us-east-2.amazonaws.com/store/checkout
μ 보λ΄λ κ²½μ° API Gatewayμμ μμ²μhttps://petstore-demo-endpoint.execute-api.com/store/checkout
μ 보λAPI μμ² λΌμ°ν ν΄λΌμ΄μΈνΈκ° API μμ²μ 보λ΄λ κ²½μ° API Gatewayμμ λ¨Όμ μμ²μ λΌμ°ν ν λ¨κ³λ₯Ό κ²°μ νκ² λ¨ μμ²μ΄ λ¨κ³μ λͺ μμ μΌλ‘ μΌμΉνλ κ²½μ° API Gatewayλ μμ²μ ν΄λΉ λ¨κ³λ‘ 보λ΄κ² λλ©°, μμ²κ³Ό μμ ν μΌμΉνλ λ¨κ³κ° μλ κ²½μ° API Gatewayλ μμ²μ $default λ¨κ³λ‘ 보λ΄κ² λ¨ λ§μ½ $default λ¨κ³κ° μμΌλ©΄ APIκ° {"message":"Not Found"}λ₯Ό λ°ννκ² λ¨
API Gateway λΌμ°ν μ°μ μμ 1. λΌμ°ν λ° λ©μλμ μμ ν μΌμΉ 2. 볡μ‘ν κ²½λ‘ λ³μ(
{proxy+}
)κ° μλ λΌμ°ν λ° λ©μλμ μΌμΉ 3.$default
λΌμ°νλΌμ°ν μμ 1.
GET /pets/dog/{id}
2.GET /pets/{proxy+}
3.ANY /{proxy+}
4.$default
μμ²
μ νν λΌμ°ν
μ€λͺ
GET /pets/dog/{id}
μμ ν μΌμΉ
GET /pets/{proxy+}
μμ²μ΄ λΌμ°ν κ³Ό μμ ν μΌμΉνμ§ μμΌλ, GET λ©μλμ 볡μ‘ν κ²½λ‘ λ³μκ° μλ λΌμ°ν ν¬μ°©
ANY /{proxy+}
ANY λ©μλλ λΌμ°ν μ λν΄ μ μνμ§ μμ λͺ¨λ λ©μλμ μΌμΉν¨. 볡μ‘ν κ²½λ‘ λ³μκ° μλ λΌμ°ν μ $default λΌμ°ν λ³΄λ€ μ°μ μμκ° λκ² λ¨
μ‘μΈμ€ μ μ΄
JWT(JSON Web Token)λ₯Ό OIDC(OpenID Connect) λ° OAuth 2.0 νλ μμν¬μ μΌλΆλ‘ μ¬μ©νμ¬ APIμ λν ν΄λΌμ΄μΈνΈ μ‘μΈμ€λ₯Ό μ ν APIμ κ²½λ‘μ λν΄ JWT κΆν λΆμ¬μλ₯Ό ꡬμ±νλ©΄ API Gatewayλ ν΄λΌμ΄μΈνΈκ° API μμ²κ³Ό ν¨κ» μ μΆνλ JWTλ₯Ό κ²μ¦
API μμ² κΆν λΆμ¬
API Gatewayλ λ€μκ³Ό κ°μ μΌλ° μν¬νλ‘μ°
ν ν°μ λν identitySourceλ₯Ό νμΈ identitySourceμλ ν ν°λ§ ν¬ν¨νκ±°λ Bearer μ λμ¬κ° λΆμ ν ν°λ§ ν¬ν¨λ μ μμ
ν ν° λμ½λ©
λ°νμμ jwks_uriμμ κ°μ Έμ¨ νΌλΈλ¦ ν€λ₯Ό μ¬μ©νμ¬ ν ν°μ μκ³ λ¦¬μ¦κ³Ό μλͺ μ νμΈ νμ¬ RSA κΈ°λ° μκ³ λ¦¬μ¦λ§ μ§μ
ν΄λ μμ κ²μ¦ API Gatewayλ λ€μκ³Ό κ°μ ν ν° ν΄λ μμ νκ°
kid β ν ν°μλ ν ν°μ μλͺ ν jwks_uriμ ν€μ μΌμΉνλ ν€λ ν΄λ μ μ 무
iss β κΆν λΆμ¬μμ λν΄ κ΅¬μ±λ issuerμ μΌμΉ
aud λλ client_id β κΆν λΆμ¬μμ λν΄ κ΅¬μ±λ audience νλͺ© μ€ νλμ μΌμΉ
exp β νμ¬ μκ°(UTC κΈ°μ€) μ΄ν μ¬λΆ
nbf β νμ¬ μκ°(UTC κΈ°μ€) μ΄μ μ¬λΆ
iat β νμ¬ μκ°(UTC κΈ°μ€) μ΄μ μ¬λΆ
scope λλ scp β ν ν°μ λΌμ°ν μ authorizationScopes λ²μ μ€ νλ μ΄μμ΄ ν¬ν¨ μ¬λΆ
μ΄λ¬ν λ¨κ³ μ€ νλλΌλ μ€ν¨νλ©΄ API Gatewayλ API μμ²μ κ±°λΆ
JWTλ₯Ό κ²μ¦ν ν API Gatewayλ ν ν°μ ν΄λ μμ API κ²½λ‘μ ν΅ν©μ μ λ¬
Lambda ν¨μμ κ°μ λ°±μλ 리μμ€λ $context.authorizer.claims
μ JWT ν΄λ μμ μ‘μΈμ€ κ°λ₯
ν΅ν©(Integration)
ν΅ν© λ°±μλ 리μμ€μ λΌμ°νΈλ₯Ό μ°κ²° HTTP APIs, Lambda νλ‘μ, AWS μλΉμ€ λ° HTTP νλ‘μ ν΅ν© μ§μ
HTTP API λΌμ°ν μ 곡κ°μ μΌλ‘ λΌμ°ν ν μ μλ HTTP μλν¬μΈνΈμ μ°κ²°ν μ μμ API Gatewayμ΄ νλ°νΈ μλμ λ°±μλ μ¬μ΄μ μ 체 μμ² λ° μλ΅μ μ λ¬
κ²½λ‘ λ³μμμ HTTP νλ‘μ ν΅ν© HTTP API λΌμ°ν μμ κ²½λ‘ λ³μλ₯Ό μ¬μ© μ) λΌμ°ν
/pets/{petID}
μ/pets/6
μ λν μμ²μ ν¬μ°©Lambda ν΄λΌμ΄μΈνΈκ° APIλ₯Ό νΈμΆνλ©΄ API Gatewayλ Lambda ν¨μμ μμ²μ μ μ‘νκ³ ν¨μμ μλ΅μ ν΄λΌμ΄μΈνΈμ λ°ν
νμ΄λ‘λ νμ λ²μ API Gatewayμμ Lambda ν΅ν©μΌλ‘ μ μ‘νλ λ°μ΄ν°μ νμκ³Ό API Gatewayμ΄ Lambdaμμ μλ΅μ ν΄μνλ λ°©λ²μ μ§μ
Version 2.0 (Default)
Version 1.0
Lambda ν¨μ μλ΅ νμ νμ΄λ‘λ νμ λ²μ μ λ°λΌ Lambda ν¨μκ° λ°νν΄μΌ νλ μλ΅ κ΅¬μ‘°λ₯Ό κ²°μ νκ² λ¨
Version 1.0
Version 2.0 API Gatewayμ Lambda ν¨μκ° μ ν¨ν JSONμ λ°ννκ³ statusCodeλ₯Ό λ°ννμ§ μμΌλ©΄ λ€μκ³Ό κ°μ΄ κ°μ νκ² λ¨
isBase64Encoded = false
statusCode = 200
content-type = application/json
bodyμ ν¨μμ μλ΅
AWS μλΉμ€ ν΄λΌμ΄μΈνΈκ° μΌλ₯ ν΅ν©(first-class intergration)μΌλ‘ λ·λ°μΉ¨λλ κ²½λ‘λ₯Ό νΈμΆνλ κ²½μ°, API Gateway νΈμΆμ AWS μλΉμ€ APIλ₯Ό μ 곡
맀ν μμ² λ§€κ° λ³μ
μ ν
μ
μ°Έκ³
ν€λ κ°
$request.header.name
ν€λ μ΄λ¦μ λ/μλ¬Έμλ₯Ό ꡬλΆνμ§ μμ. API Gateway μλ₯Ό λ€μ΄ μ¬λ¬ ν€λ κ°μ μΌνλ‘ κ²°ν©. "header1": "value1,value2".
쿼리 λ¬Έμμ΄ κ°
$request.querystring.name
쿼리 λ¬Έμμ΄ μ΄λ¦μ λ/μλ¬Έμλ₯Ό ꡬλΆν©λλ€. API Gateway μλ₯Ό λ€μ΄ μ¬λ¬ κ°μ μΌνλ‘ κ²°ν© "querystring1": "Value1,Value2"
κ²½λ‘ λ§€κ°λ³μ
$request.path.name
μμ² μμ κ²½λ‘ λ§€κ° λ³μμ κ°. μ) κ²½λ‘κ° /pets/{petId}μ(λ₯Ό) 맀νκ°λ₯. petId μμ²μ λ§€κ° λ³μ $request.path.petId.
λ°λ ν¨μ€ μμ²
$request.body
API Gateway λ₯Ό ν΅ν΄ μ 체 μμ² λ³Έμ²΄λ₯Ό μ λ¬
μμ² λ³Έλ¬Έ
$request.body.name
A JSON κ²½λ‘ νν. μ¬λ°μ± νκ°($request.body..name) λ° νν° ννμ(?(expression))μ(λ₯Ό) μ§μνμ§ μμ
컨ν μ€γ νΈ λ³μ
contextvariableName
μ§μλλ 컨ν μ€νΈ λ³μ
λ¨κ³ λ³μ
$stagevariables.variableName
λ¨κ³ λ³μ
μ μ κ°
string
μΌμ ν κ°.
νλΌμ΄λΉ νλΌμ΄λΉ ν΅ν©μ μ¬μ©νλ©΄ VPCμ νλΌμ΄λΉ 리μμ€(μ: Application Load Balancer λλ Amazon ECS 컨ν μ΄λ κΈ°λ° μ ν리μΌμ΄μ )μμ API ν΅ν©μ μμ± κ°λ₯ νλΌμ΄λΉ ν΅ν©μ μμ±νλ €λ©΄ λ¨Όμ VPC λ§ν¬κ° νμν¨ κΈ°λ³Έμ μΌλ‘ νλΌμ΄λΉ ν΅ν© νΈλν½μ HTTP νλ‘ν μ½μ μ¬μ©νλ©°,
tlsConfig
λ₯Ό μ§μ νμ¬ HTTPSλ₯Ό μ¬μ©ν μ μμApplication Load Balancer λλ Network Load Balancerλ₯Ό μ¬μ©
AWS Cloud Map μλΉμ€ κ²μμ μ¬μ© Amazon ECSλ₯Ό μ¬μ©νμ¬ AWS Cloud Mapμμ νλͺ©μ μ±μ°λ κ²½μ°, SRV λ μ½λλ₯Ό μ¬μ©νλλ‘ Amazon ECS μμ μ ꡬμ±ν΄μΌ νλ©°, βAβ λ μ½λλ μ§μλμ§ μμ
CORS(Cross-Origin Resource Sharing)
λΈλΌμ°μ μμ μ€ν μ€μΈ μ€ν¬λ¦½νΈμμ μμλλ HTTP μμ²μ μ ννλ λΈλΌμ°μ 보μ κΈ°λ₯
CORSλ μΌλ°μ μΌλ‘ λ€λ₯Έ λλ©μΈμ΄λ μ€λ¦¬μ§μ νΈμ€ν
λ APIμ μ‘μΈμ€νλ μΉ μ ν리μΌμ΄μ
μ λΉλνλ λ° νμ
CORSλ₯Ό νμ±ννμ¬ λ€λ₯Έ λλ©μΈμ νΈμ€ν
λ μΉ μ ν리μΌμ΄μ
μμ APIμ λν μμ²μ νμ©ν μ μμ
μ) APIκ° https://{api_id}.execute-api.{region}.amazonaws.com/
μ νΈμ€ν
λκ³ example.com
μ νΈμ€ν
λ μΉ μ ν리μΌμ΄μ
μμ APIλ₯Ό νΈμΆνλ €λ κ²½μ° APIκ° CORSλ₯Ό μ§μν΄μΌ ν¨
CORS μμ²μ κ²½μ° API Gatewayλ ꡬμ±λ CORS ν€λλ₯Ό ν΅ν©μ μλ΅μ μΆκ°νκ² λλ©°, CORS ꡬμ±μμ λ€μκ³Ό κ°μ λ§€κ° λ³μλ₯Ό μ§μ ν μ μμ
CORS ν€λ | CORS κ΅¬μ± μμ± | μμ κ° |
Access-Control-Allow-Origin | allowOrigins | https://www.example.com
|
Access-Control-Allow-Credentials | allowCredentials | TRUE |
Access-Control-Expose-Headers | exposeHeaders | Date, x-api-id |
Access-Control-Max-Age | maxAge | 300 |
Access-Control-Allow-Methods | allowMethods | GET, POST, DELETE, * |
Access-Control-Allow-Headers | allowHeaders | Authorization, * |
Publish
μ€ν μ΄μ§ λ° μ¬μ©μ μ§μ λλ©μΈ μ΄λ¦μ μ¬μ©νμ¬ ν΄λΌμ΄μΈνΈκ° νΈμΆν μ μλλ‘ APIλ₯Ό κ²μνκ² λ¨
Stages
API λ¨κ³λ APIμ μλͺ μ£ΌκΈ° μνμ λν λ Όλ¦¬μ μ°Έμ‘°μ (μ: dev, prod, beta, v2)
μ¬μ©μ μ§μ λλ©μΈ μ΄λ¦μ μ¬μ©νμ¬ ν΄λΌμ΄μΈνΈκ° APIλ₯Ό νΈμΆν μ μλλ‘ κΈ°λ³Έ URLμΈ https://api-id.execute-api.region.amazonaws.com/stage
λ³΄λ€ λ κ°λ¨νκ³ μ§κ΄μ μΈ URLμ μ¬μ©ν μ μμ
λ°°ν¬λ API ꡬμ±μ μ€λ μ·μΌλ‘ λ¨κ³μ APIλ₯Ό λ°°ν¬ν νμλ ν΄λΌμ΄μΈνΈκ° APIλ₯Ό νΈμΆν μ μμ
λ³κ²½ μ¬νμ μ μ©νλ €λ©΄ APIλ₯Ό λ°°ν¬ν΄μΌ νκ³ , μλ λ°°ν¬λ₯Ό νμ±ννλ©΄ APIμ λν λ³κ²½ μ¬νμ΄ μλμΌλ‘ 릴리μ€λκ² λ¨
λ¨κ³ λ³μ
λ¨κ³ λ³μλ HTTP APIμ λ¨κ³μ λν΄ μ μν μ μλ ν€-κ° νμ΄ νκ²½ λ³μμ λΉμ·ν μν μ νλ©°, API μ€μ μ μ¬μ©νκ² λ¨
Protect
λ무 λ§μ μμ²μΌλ‘ μΈν΄ APIκ° κ°λ μ°¨λ κ²μ λ°©μ§νκΈ° μν΄ Amazon API Gatewayμμλ ν ν° λ²ν· μκ³ λ¦¬μ¦μ μ¬μ©νμ¬ APIμ λν μμ²μ μ‘°μ
API Gatewayμμ νλ μ΄κ³Ό μμ²μ μ€ν¨νκ³ 429 Too Many Requests
μ€λ₯ μλ΅μ ν΄λΌμ΄μΈνΈμ λ°ννκ² λ¨
κ³μ μμ€ μ‘°μ
κΈ°λ³Έμ μΌλ‘ API Gatewayμμλ μμ μ μΈ μνμ μμ² μλλ₯Ό 10,000rps(μ΄λΉ μμ² μ)λ‘ μ ν, AWS κ³μ λ΄ λͺ¨λ APIμ λν΄ λ²μ€νΈ(μ¦, μ΅λ λ²ν· ν¬κΈ°)λ₯Ό 5,000 μμ²μΌλ‘ μ ν
λΌμ°ν
μμ€ μ‘°μ
APIμ νΉμ λ¨κ³ λλ κ°λ³ λΌμ°ν μ λν΄ κ³μ μμ€ μμ² μ€λ‘ν νλλ₯Ό μ¬μ μ κ³μ μμ€ μ‘°μ μ λμ΄κ°μλ μμ
REST API
To Be Continued
Websocket API
To Be Continued
Last updated