{"id":27010563,"url":"https://github.com/nayoung238/api-gateway","last_synced_at":"2025-07-21T00:33:27.900Z","repository":{"id":107723397,"uuid":"598680512","full_name":"nayoung238/API-gateway","owner":"nayoung238","description":"Gateway 기능 테스트","archived":false,"fork":false,"pushed_at":"2025-02-18T01:02:26.000Z","size":1028,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-04T11:05:33.843Z","etag":null,"topics":["api-composition","cqrs-pattern","resilience4j-circuitbreaker","spring-cloud-eureka","spring-cloud-gateway"],"latest_commit_sha":null,"homepage":"","language":"Java","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/nayoung238.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":"2023-02-07T15:48:51.000Z","updated_at":"2024-12-04T11:19:21.000Z","dependencies_parsed_at":"2024-03-03T04:25:08.135Z","dependency_job_id":"22325897-3a80-40a3-9ea1-1e4eb01a0c5c","html_url":"https://github.com/nayoung238/API-gateway","commit_stats":null,"previous_names":["nayoung8142/api-gateway-service","imzero238/api-gateway-service","imzero238/api-gateway","nayoung238/api-gateway"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nayoung238/API-gateway","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nayoung238%2FAPI-gateway","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nayoung238%2FAPI-gateway/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nayoung238%2FAPI-gateway/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nayoung238%2FAPI-gateway/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nayoung238","download_url":"https://codeload.github.com/nayoung238/API-gateway/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nayoung238%2FAPI-gateway/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266221359,"owners_count":23894966,"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","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-composition","cqrs-pattern","resilience4j-circuitbreaker","spring-cloud-eureka","spring-cloud-gateway"],"created_at":"2025-04-04T11:05:37.272Z","updated_at":"2025-07-21T00:33:22.890Z","avatar_url":"https://github.com/nayoung238.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Spring Cloud Gateway\n\n![png](/_img/api-gateway.png)\n\naccount, item, order service 등 여러 Microservice의 포트 번호를 기억하고 있다면, 각 마이크로서비스의 포트 번호를 이용해 접근하면 된다. \n하지만 다양한 Microservice가 생기고, **Scale-out을 위해 여러 인스턴스를 구동한다면 모두 다른 포트 번호를 할당하고 관리하는 것이 번거로울 것**이다. \n이를 위해 Spring Cloud Gateway를 사용한다.\n\u003cbr\u003e\n\nGateway의 포트 번호가 8089번, Item-Service의 포트 번호가 56124번일 경우 다음 2가지 방법으로 Item-Service에 접근할 수 있다.\n\n- ```http://localhost:8089/item-api/...```\n- ```http://localhost:56124/item-api/...```\n\n\u003cbr\u003e\n\n특정 Microservice를 Scale-out 하는 경우도 마찬가지다. 2개의 Item-Service를 실행하면 중복되지 않는 포트 번호를 사용해야 하고, 포트 번호를 일일이 확인하는 과정은 상당히 번거로울 것이다.\n\u003cbr\u003e\n\nSpring Cloud Gateway를 사용하면 Gateway의 포트 번호로 등록된 모든 마이크로서비스에 쉽게 접근할 수 있다.\n\n- ```http://localhost:8089/item-api/items/23```\n- ```http://localhost:8089/order-api/orders/7```\n- ```http://localhost:8089/account-api/account/9584```\n\n\u003cbr\u003e\n\n## Route 등록\n\nSpring Cloud Gateway + Eureka 관련 설정은 https://medium.com/@im_zero/spring-cloud-gateway-eureka-25567532cfcd 에서 자세히 확인할 수 있다.\n\n```yml\n# application.yml\nspring:\n  cloud:\n    gateway:\n      routes:\n        - id: item-service\n          uri: lb://ITEM-SERVICE\n          predicates:\n            - Path=/item-api/**\n          filters:\n            - RewritePath=/item-api/?(?\u003csegment\u003e.*), /$\\{segment}\n```\n\u003cbr\u003e\n\n![png](/_img/eureka_instances.png)\n\nEureka server에 client로 등록한 Microservice, API Gateway를 실행하면 ```http://localhost:8761```에서 등록된 모든 instance를 확인할 수 있다.\n\u003cbr\u003e\n\nAPI Gateway는 8089번 포트 번호로 설정했고, 모든 Microservice는 Random 포트 번호로 설정했기 때문에 실행할 때마다 랜덤하게 할당된다. 포트 번호를 확인하고 싶다면 클릭하거나 마우스 커서를 올려 왼쪽 하단에서 확인할 수 있다.\n\n\u003cbr\u003e\n\n## Circuit Breaker 설정\n\nSpring Cloud Gateway + Circuit Breaker 관련 설정은 https://medium.com/@im_zero/spring-cloud-gateway-circuit-breaker-time-limiter-5e3c26a62b4c 에서 자세히 확인할 수 있다.\n\n![png](/_img/api-gateway-circuit-breaker.png)\n\n특정 서버의 장애가 다른 서버로 전파되는 것을 방지하고, 서버 오류에도 클라이언트에게 빠른 응답을 하기 위해 Circuit Breaker를 설정했다.\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnayoung238%2Fapi-gateway","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnayoung238%2Fapi-gateway","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnayoung238%2Fapi-gateway/lists"}