{"id":20136050,"url":"https://github.com/zkfmapf123/api-gateway-architecture","last_synced_at":"2026-05-15T22:01:52.572Z","repository":{"id":234713518,"uuid":"789263957","full_name":"zkfmapf123/API-Gateway-Architecture","owner":"zkfmapf123","description":"api-gateway","archived":false,"fork":false,"pushed_at":"2024-04-27T08:07:40.000Z","size":11959,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-02T22:41:51.840Z","etag":null,"topics":["api-gateway","aws","terraform"],"latest_commit_sha":null,"homepage":"","language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zkfmapf123.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-04-20T04:24:10.000Z","updated_at":"2024-04-27T09:53:58.000Z","dependencies_parsed_at":"2024-04-27T09:30:56.555Z","dependency_job_id":"19200c43-4bbf-46ef-9f65-589ab90ded79","html_url":"https://github.com/zkfmapf123/API-Gateway-Architecture","commit_stats":null,"previous_names":["zkfmapf123/api-gateway-regional","zkfmapf123/api-gateway-architecture"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/zkfmapf123/API-Gateway-Architecture","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zkfmapf123%2FAPI-Gateway-Architecture","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zkfmapf123%2FAPI-Gateway-Architecture/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zkfmapf123%2FAPI-Gateway-Architecture/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zkfmapf123%2FAPI-Gateway-Architecture/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zkfmapf123","download_url":"https://codeload.github.com/zkfmapf123/API-Gateway-Architecture/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zkfmapf123%2FAPI-Gateway-Architecture/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278289492,"owners_count":25962353,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-04T02:00:05.491Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api-gateway","aws","terraform"],"created_at":"2024-11-13T21:17:33.325Z","updated_at":"2025-10-04T08:50:49.508Z","avatar_url":"https://github.com/zkfmapf123.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Architecture\n\n![arch](./public/arch.png)\n\n```\n    terraform init\n    terraform apply --auto-approve\n```\n\n## 구조\n\n- Service-A\n\n    - \u003cb\u003eapi-gateway -\u003e VPC link -\u003e Private Subnet(ALB -\u003e ECS)\u003c/b\u003e\n\n- Service-B\n\n    - \u003cb\u003eapi-gatweay -\u003e Public Subnet(ALB -\u003e ECS)\u003c/b\u003e\n\n## api-gateway proxy 설정하는 법\n\n### api-gateway Route 설정\n\n- public/{proxy+}\n- private/{proxy+}\n\n![3](./public/3.png)\n\n### ALB 구성에서 Path에 {proxy} 추가\n\n- Serivce_A_ALB_DNS/{proxy}\n- Service_B_ALB_DNS/{proxy}\n\n![4](./public/4.png)\n\n### 결과\n\n![5](./public/5.png)\n\n## RateLimit 알고리즘\n\n![api-gateway](./public/1.png)\n\n- Stateful (WebSocket), Stateless (HTTP, REST) API지원\n- REST 기반의 관리기능이 필요하지 않다면, HTTP API를 사용하는 것이 좋음\n- HTTP API의 경우 REST API보다 71% 비용절감 60% 지연절감이 있음\n- Canary 릴리즈 배포가능 (ECS도 가능한가?)\n- CloudWatch 및 액세스 로깅 가능\n- WAF, X-ray와 같은 서비스와 같이 사용할 수 있음\n\n## API Gatewy는 어떻게 가용성을 유지할까? (Rate Limit)\n\n- 과도한 트래픽으로부터 서비스를 보호 + Resource 사용의 대한 서비스 예산을 넘기지 않게 예방\n- \u003cb\u003e아래의 Rate Limit 알고리즘을 활용하여, 회사내의 Traffic Pattern을 파악 후 적절한 알고리즘을 선택해야 함\u003c/b\u003e\n- 사용량이 많아진다면, Rate Limit을 적용하는 것이 좋음 (이건 충분히 공부해봐야 할듯...)\n\n### Leaky Bucket 알고리즘\n\n- Bucket은 일정하게 10개씩 출력을 한다는 가정임, 입력이 10, 100, 1000개가 들어오든 출력은 일정\n- 네트워크 데이터 주입속도의 대한 상한을 정할 수 있음\n- 네트워크의 대한 트래픽 Burst를 일정하게 유지한다\n- 만약 유입의 속도가 너 많다면? (입력 속도 \u003e 출력 속도) -\u003e 넘치는 입력을 버림 (overflow) -\u003e \u003cb\u003e패킷 손실\u003c/b\u003e\n- Nginx가 이와 같음\n\n### Token Bucekt 알고리즘 (*)\n\n![2](./public/2.png)\n\n- 평균 유입속도를 제한하고, \u003cb\u003e처리패킷 손실없이 특정\u003c/b\u003e\n- 특정 수준의 Burst 요청을 처리함\n- API Gateway, EC2, ...\n\n### Fixed Window Counter 알고리즘\n\n- 정해진 시간대의 Window가 만들어지고, 요청건수가 기록되어 요청건수 \u003e 정해진 건수 -\u003e 요청은 처리가 거부됨\n\n## Reference\n\n- apigateway는 테라폼으로 구성할 엄두가 안남\n- \u003ca href=\"https://hub.docker.com/repository/docker/zkfmapf123/donggyu-friends/general\"\u003e zkfmapf123/donggyu-friends public registry \u003c/a\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzkfmapf123%2Fapi-gateway-architecture","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzkfmapf123%2Fapi-gateway-architecture","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzkfmapf123%2Fapi-gateway-architecture/lists"}