Backend/Spring
[Spring] API gateway
carsumin
2026. 1. 26. 14:33
API Gateway๋?
- MSA ์์ ๋ชจ๋ ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋จ์ผ ์ง์ ์ ์ญํ ์ ํ๋ ์๋ฒ
- Spring์์๋ ๋ณดํต Spring Cloud Gateway๋ฅผ ์ฌ์ฉ
- ํด๋ผ์ด์ธํธ -> Gateway -> ๋ด๋ถ ์๋น์ค๋ค
- ์๋น์ค๋ค์ ์ธ๋ถ์ ์ง์ ๋ ธ์ถ๋์ง ์์

API Gateway์ ํ์์ฑ
- ์๋น์ค ์ง์ ๋
ธ์ถ์ ๋ฌธ์
- ์๋น์ค๊ฐ ๋ง์์ง์๋ก ์๋ํฌ์ธํธ ๊ด๋ฆฌ ์ด๋ ค์
- ์ธ์ฆ/์ธ๊ฐ ๋ก์ง์ด ๊ฐ ์๋น์ค์ ์ค๋ณต
- CORS, ๋ก๊น , ๋ชจ๋ํฐ๋ง ๋ถ์ฐ
- Gateway๊ฐ ํด๊ฒฐํ๋ ๊ฒ
- ๊ณตํต ๊ด์ฌ์ฌ ์ค์ํ
- ๋ณด์/์ธ์ฆ ์ผ๊ด์ฑ ํ๋ณด
- ํด๋ผ์ด์ธํธ๋ Gateway๋ง ์๋ฉด ๋จ
Spring Cloud Gateway ํต์ฌ ์ญํ
- ์์ฒญ ๋ผ์ฐํ
(Routing)
- URL, Header, Method ๊ธฐ์ค์ผ๋ก ์๋น์ค ๋ถ๊ธฐ
- /members/** -> member-service
- ์ธ์ฆ/์ธ๊ฐ
- JWT ๊ฒ์ฆ
- ํ ํฐ ์์ผ๋ฉด ์๋น์ค ์ง์ ์ฐจ๋จ
- ํํฐ ์ฒ๋ฆฌ
- ์์ฒญ ์ , ํ ๊ณตํต ๋ก์ง
- ๋ก๊น , ํค๋ ์ถ๊ฐ, ๊ถํ ์ฒดํฌ ๋ฑ
- ํธ๋ํฝ ์ ์ด
Gateway ๋์ ํ๋ฆ
- ํด๋ผ์ด์ธํธ ์์ฒญ ์์
- Predicate๋ก ๋ผ์ฐํ ๋์ ๊ฒฐ์
- Pre Filter ์คํ
- ์ค์ ์๋น์ค๋ก ์์ฒญ ์ ๋ฌ
- Post Filter ์คํ
- ์๋ต ๋ฐํ
์ฃผ์ ๊ฐ๋ ์ ๋ฆฌ
- Route
- id : ๋ผ์ฐํธ ์๋ณ์
- uri : ๋ชฉ์ ์ง ์๋น์ค
- predicates : ์์ฒญ ์กฐ๊ฑด
spring:
cloud:
gateway:
routes:
- id: member-service
uri: lb://MEMBER-SERVICE
predicates:
- Path=/members/**
- Predicate
- ์์ฒญ์ ์ด๋ค ์๋น์ค๋ก ๋ณด๋ผ์ง ๊ฒฐ์ ํ๋ ์กฐ๊ฑด
- Path=/api/orders/**
- Method=POST
- Filter
- ์์ฒญ/์๋ต์ ๊ฐ๊ณตํ๋ ๋ก์ง
- Global Filter : ๋ชจ๋ ์์ฒญ ๊ณตํต
- Custom Filter : ํน์ ๋ผ์ฐํธ ์ ์ฉ
- ์ : JWT ๊ฒ์ฆ, ์ฌ์ฉ์ ์ ๋ณด ํค๋์ ์ฃผ์ , ์๋ต ๋ก๊น
- ์์ฒญ/์๋ต์ ๊ฐ๊ณตํ๋ ๋ก์ง
Spring Cloud Gateway์ ํน์ง
- Non-Blocking (WebFlux ๊ธฐ๋ฐ)
- ๊ณ ์ฑ๋ฅ, ๊ณ ๋์์ฑ ์ฒ๋ฆฌ์ ์ ๋ฆฌ
- Spring ์ํ๊ณ์ ๊ถํฉ ์ข์
- Eureka, Config Server ์ฐ๋
- OAuth2, JWT ์ฐ๊ณ ์ฌ์
- ์ฝ๋ + ์ค์ ๊ธฐ๋ฐ ๋ชจ๋ ๊ฐ๋ฅ
- YML๋ก ๊ฐ๋จ ๊ตฌ์ฑ
Gateway vs Nginx
| ๊ตฌ๋ถ | Spring Cloud Gateway | Nginx |
| ๋ชฉ์ | MSA ๋ด๋ถ ๋ผ์ฐํ | L7 ํ๋ก์ |
| ์ธ์ฆ/์ธ๊ฐ | ๋งค์ฐ ์ ์ฐ | ์ ํ์ |
| ๋น์ฆ๋์ค ๋ก์ง | ๊ฐ๋ฅ | ๋ถ๊ฐ๋ฅ |
| ๋ฌ๋์ปค๋ธ | ์์ | ๋ฎ์ |
์ธ์ ์ฌ์ฉํ๋ฉด ์ข์๊น?
- ์๋น์ค๊ฐ 3๊ฐ ์ด์
- ์ธ์ฆ/์ธ๊ฐ ๊ณตํต ์ฒ๋ฆฌ ํ์
- MSA ๊ตฌ์กฐ ๋์ ๋จ๊ณ
- ํด๋ผ์ด์ธํธ ์ข ๋ฅ๊ฐ ์ฌ๋ฌ ๊ฐ (์น/์ฑ)