Skip to content

Latest commit

ย 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

API Gateway Service

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•ž๋‹จ์—์„œ ๋ชจ๋“  ์™ธ๋ถ€ ์š”์ฒญ์˜ ๋‹จ์ผ ์ง„์ž…์  ์—ญํ• ์„ ํ•˜๋Š” API ๊ฒŒ์ดํŠธ์›จ์ด. ํด๋ผ์ด์–ธํŠธ๋Š” ๋’ค์— ์„œ๋น„์Šค๊ฐ€ ๋ช‡ ๊ฐœ ์žˆ๋“ , ๊ฐ๊ฐ ์–ด๋А ์ฃผ์†Œ์— ๋–  ์žˆ๋“  ์•Œ ํ•„์š” ์—†์ด ๊ฒŒ์ดํŠธ์›จ์ด ํ•œ ๊ณณ๋งŒ ํ˜ธ์ถœํ•œ๋‹ค.

๊ฐ™์€ ์š”๊ตฌ์‚ฌํ•ญ์„ WebFlux์™€ WebMVC ๋‘ ์Šคํƒ์œผ๋กœ ๊ฐ๊ฐ ๊ตฌํ˜„ํ•ด ๋‚˜๋ž€ํžˆ ๋น„๊ตํ•œ๋‹ค.

๋ชจ๋“ˆ

โ”œโ”€โ”€ service-discovery/       :8761   Eureka Server
โ”œโ”€โ”€ gateway-common/                  ๋‘ ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ๊ณต์œ ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
โ”œโ”€โ”€ apigateway-webflux/      :8000   Netty ยท ๋…ผ๋ธ”๋กœํ‚น
โ”œโ”€โ”€ apigateway-webmvc/       :8010   Tomcat ยท ๋ธ”๋กœํ‚น
โ”œโ”€โ”€ alpha-service/           :8081   ๋ผ์šฐํŒ… ๋Œ€์ƒ (JWT ๋ฐœ๊ธ‰ ํฌํ•จ)
โ””โ”€โ”€ beta-service/            :8082   ๋ผ์šฐํŒ… ๋Œ€์ƒ

Spring Boot 4.1.1 / Spring Cloud 2025.1.3 / Java 17.

๋‘ ๊ฒŒ์ดํŠธ์›จ์ด๋Š” ๋™์‹œ์— ๋„์šธ ์ˆ˜ ์žˆ๋‹ค. ๊ฐ™์€ ์š”์ฒญ์„ 8000๊ณผ 8010์— ๊ฐ๊ฐ ๋ณด๋‚ด ์‘๋‹ต๊ณผ ๋กœ๊ทธ๋ฅผ ๋น„๊ตํ•˜๋ฉด ๋œ๋‹ค.


๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ํ•˜๋Š” ์ผ

์—ญํ•  ์„ค๋ช…
๋‹จ์ผ ์ง„์ž…์  ํด๋ผ์ด์–ธํŠธ๋Š” ๊ฒŒ์ดํŠธ์›จ์ด ํฌํŠธ ํ•˜๋‚˜๋งŒ ์•ˆ๋‹ค. ์„œ๋น„์Šค๊ฐ€ ๋Š˜์–ด๋‚˜๋„ ํ˜ธ์ถœ ์ฃผ์†Œ๋Š” ๊ทธ๋Œ€๋กœ๋‹ค.
๋ผ์šฐํŒ… ์š”์ฒญ ๊ฒฝ๋กœ(Path)๋ฅผ ๋ณด๊ณ  ์–ด๋А ์„œ๋น„์Šค๋กœ ๋ณด๋‚ผ์ง€ ํŒ๋ณ„ํ•œ๋‹ค.
์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ ์—ฐ๋™ ๋Œ€์ƒ์„ IPยทํฌํŠธ๊ฐ€ ์•„๋‹Œ lb://ALPHA-SERVICE ๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ง€์ •ํ•œ๋‹ค. ์‹ค์ œ ์ฃผ์†Œ๋Š” Eureka๊ฐ€ ์•Œ๋ ค์ค€๋‹ค.
๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋–  ์žˆ์œผ๋ฉด ์ž๋™์œผ๋กœ ๋ถ„์‚ฐํ•œ๋‹ค.
ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ ์ฒ˜๋ฆฌ ์ธ์ฆยท๋กœ๊น…ยทํ—ค๋” ์กฐ์ž‘์„ ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ๋Œ€์‹  ์ฒ˜๋ฆฌํ•œ๋‹ค. ๊ฐ ์„œ๋น„์Šค๋Š” ์ž๊ธฐ ๋„๋ฉ”์ธ ๋กœ์ง์—๋งŒ ์ง‘์ค‘ํ•œ๋‹ค.

๋งˆ์ง€๋ง‰ ํ•ญ๋ชฉ์ด ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๋‘๋Š” ์‹ค์งˆ์ ์ธ ์ด์œ ๋‹ค. JWT ๊ฒ€์ฆ์„ ์„œ๋น„์Šค๋งˆ๋‹ค ๊ตฌํ˜„ํ•˜๋ฉด ์„œ๋น„์Šค๊ฐ€ 10๊ฐœ์ผ ๋•Œ 10๋ฒŒ์ด ๋˜์ง€๋งŒ, ๊ฒŒ์ดํŠธ์›จ์ด์— ๋‘๋ฉด ํ•œ ๊ณณ์—์„œ ๋๋‚œ๋‹ค.

๋ผ์šฐํŒ… ๊ทœ์น™ (๋‘ ์Šคํƒ ๊ณตํ†ต)

์š”์ฒญ ๊ฒฝ๋กœ ๋Œ€์ƒ ์ฒ˜๋ฆฌ
/alpha-service/secure/** lb://ALPHA-SERVICE Cookie ํ—ค๋” ์ œ๊ฑฐ โ†’ JWT ๊ฒ€์ฆ
/alpha-service/** lb://ALPHA-SERVICE ์š”์ฒญ/์‘๋‹ต ํ—ค๋” ์ถ”๊ฐ€ โ†’ ๋ผ์šฐํŠธ ๋กœ๊น…
/beta-service/** lb://BETA-SERVICE ์š”์ฒญ/์‘๋‹ต ํ—ค๋” ์ถ”๊ฐ€ โ†’ ๋ผ์šฐํŠธ ๋กœ๊น…

๋ผ์šฐํŠธ๋Š” ์œ„์—์„œ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ๊ฒ€์‚ฌํ•œ๋‹ค. /alpha-service/secure/** ๊ฐ€ /alpha-service/** ๋ณด๋‹ค ์œ„์— ์žˆ์–ด์•ผ ๋ณด์•ˆ ๊ฒฝ๋กœ๊ฐ€ ์ธ์ฆ ์—†์ด ํ†ต๊ณผํ•˜์ง€ ์•Š๋Š”๋‹ค.


WebFlux ๊ฒŒ์ดํŠธ์›จ์ด โ€” apigateway-webflux :8000

WebFlux Architecture

implementation 'org.springframework.cloud:spring-cloud-starter-gateway-server-webflux'

Netty ์œ„์—์„œ ๋…ผ๋ธ”๋กœํ‚น์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ์š”์ฒญ ์ฒ˜๋ฆฌ ์ „์ฒด๊ฐ€ Mono ์ฒด์ธ์œผ๋กœ ์ด์–ด์ง€๋ฉฐ, ์Šค๋ ˆ๋“œ๊ฐ€ I/O๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ ์ ์œ ๋˜์ง€ ์•Š๋Š”๋‹ค. Spring Cloud Gateway์˜ ์›์กฐ ๊ตฌํ˜„์ด๊ณ  ๊ธฐ๋Šฅ ์„ฑ์ˆ™๋„๊ฐ€ ๊ฐ€์žฅ ๋†’๋‹ค. ํŠน๋ณ„ํ•œ ์ด์œ ๊ฐ€ ์—†์œผ๋ฉด ์ด์ชฝ์ด ๊ธฐ๋ณธ ์„ ํƒ์ด๋‹ค.

๋ผ์šฐํŠธ ์ •์˜ โ€” application.yml

spring:
  cloud:
    gateway:
      server:
        webflux:              # โ† ์ ‘๋‘์‚ฌ์— ์ฃผ์˜. ํ‹€๋ฆฌ๋ฉด ์—๋Ÿฌ ์—†์ด ๋ผ์šฐํŠธ๊ฐ€ 0๊ฐœ๋กœ ๋œฌ๋‹ค
          routes:
            - id: alpha-service-secure
              uri: lb://ALPHA-SERVICE
              predicates:
                - Path=/alpha-service/secure/**
              filters:
                - RemoveRequestHeader=Cookie
                - AuthorizationHeader

ํ•„ํ„ฐ

ํด๋ž˜์Šค ๋ฐฉ์‹ ์ ์šฉ ๋ฒ”์œ„
GlobalLoggingFilter GlobalFilter ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋งŒ ํ•˜๋ฉด ์ „ ๋ผ์šฐํŠธ ์ž๋™ ์ ์šฉ. yml ์„ค์ • ๋ถˆํ•„์š”
AuthorizationHeaderGatewayFilterFactory AbstractGatewayFilterFactory yml์—์„œ AuthorizationHeader ๋กœ ์ฐธ์กฐ
RequestLoggingGatewayFilterFactory AbstractGatewayFilterFactory yml์—์„œ RequestLogging ์œผ๋กœ ์ฐธ์กฐ

ํด๋ž˜์Šค๋ช…์ด ...GatewayFilterFactory ๋กœ ๋๋‚˜๋ฉด ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ ‘๋ฏธ์‚ฌ๋ฅผ ๋–ผ๊ณ  ์ด๋ฆ„์„ ์ธ์‹ํ•œ๋‹ค. shortcutFieldOrder() ๋ฅผ ์ •์˜ํ•˜๋ฉด - RequestLogging=Alpha route ๊ฐ™์€ ์ถ•์•ฝ ํ‘œ๊ธฐ๋„ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

@Override
public GatewayFilter apply(Config config) {
    return (exchange, chain) -> chain.filter(exchange)
            .then(Mono.fromRunnable(() -> log.info("POST: {}", ...)));
}

ํ•ต์‹ฌ ํƒ€์ž… โ€” ServerWebExchange, Mono<Void>, GatewayFilterChain


WebMVC ๊ฒŒ์ดํŠธ์›จ์ด โ€” apigateway-webmvc :8010

WebMVC Architecture

implementation 'org.springframework.cloud:spring-cloud-starter-gateway-server-webmvc'

์„œ๋ธ”๋ฆฟ(Tomcat) ์œ„์—์„œ ๋ธ”๋กœํ‚น์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ์š”์ฒญ ํ•˜๋‚˜๊ฐ€ ์Šค๋ ˆ๋“œ ํ•˜๋‚˜๋ฅผ ์ ์œ ํ•œ ์ฑ„ ์‘๋‹ต๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค. ์ŠคํƒํŠธ๋ ˆ์ด์Šค๊ฐ€ ๊ทธ๋Œ€๋กœ ์ฝํžˆ๊ณ  ๋””๋ฒ„๊ฑฐ๊ฐ€ ์ •์ƒ ๋™์ž‘ํ•˜๋ฉฐ, ํ•„ํ„ฐ์—์„œ ๋ธ”๋กœํ‚น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(JDBC ์กฐํšŒ, ๋ธ”๋กœํ‚น ์ธ์ฆ SDK ๋“ฑ)๋ฅผ ๊ทธ๋ƒฅ ํ˜ธ์ถœํ•ด๋„ ๋œ๋‹ค. Java 21+ ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋ฅผ ์“ฐ๋ฉด ํ™•์žฅ์„ฑ ์†ํ•ด๋„ ์ƒ๋‹น ๋ถ€๋ถ„ ํšŒ๋ณต๋œ๋‹ค.

๋ผ์šฐํŠธ ์ •์˜ โ€” Java DSL (GatewayRoutesConfig)

@Bean
public RouterFunction<ServerResponse> alphaServiceSecureRoute(JwtTokenValidator validator) {
    return route("alpha-service-secure")
            .route(path("/alpha-service/secure/**"), http())
            .before(removeRequestHeader("Cookie"))
            .filter(authorizationHeader(validator))
            .filter(lb("ALPHA-SERVICE"))
            .build();
}

spring.cloud.gateway.server.webmvc.routes ๋กœ yml์— ์“ธ ์ˆ˜๋„ ์žˆ๋‹ค. ๋‹ค๋งŒ ์ปค์Šคํ…€ ํ•„ํ„ฐ๋ฅผ yml์—์„œ ์ด๋ฆ„์œผ๋กœ ์ฐธ์กฐํ•˜๋ ค๋ฉด FilterSupplier ๋นˆ์„ ๋”ฐ๋กœ ๋“ฑ๋กํ•ด์•ผ ํ•˜๊ณ , ๊ทธ ํ•„ํ„ฐ๋Š” ์ •์  ๋ฉ”์„œ๋“œ์—ฌ์•ผ ํ•ด์„œ ์˜์กด์„ฑ์„ MvcUtils.getApplicationContext() ๋กœ ๊บผ๋‚ด ์จ์•ผ ํ•œ๋‹ค. DSL์„ ์“ฐ๋ฉด ํ•„ํ„ฐ๋ฅผ ๊ทธ๋ƒฅ ๋นˆ์œผ๋กœ ์ฃผ์ž…๋ฐ›์„ ์ˆ˜ ์žˆ์–ด ์—ฌ๊ธฐ์„œ๋Š” DSL์„ ํƒํ–ˆ๋‹ค.

RouterFunction ์€ ๋นˆ ๋“ฑ๋ก ์ˆœ์„œ๋Œ€๋กœ ํ‰๊ฐ€๋˜๋ฏ€๋กœ ๋” ๊ตฌ์ฒด์ ์ธ ๊ฒฝ๋กœ๋ฅผ ๋จผ์ € ์„ ์–ธํ•œ๋‹ค.

ํ•„ํ„ฐ

ํด๋ž˜์Šค ๋ฐฉ์‹ ์ ์šฉ ๋ฒ”์œ„
GlobalLoggingFilter OncePerRequestFilter (์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ) ๋ชจ๋“  ์š”์ฒญ. actuator ๋“ฑ ๊ฒŒ์ดํŠธ์›จ์ด ๋ผ์šฐํŠธ๊ฐ€ ์•„๋‹Œ ๊ฒƒ๋„ ํฌํ•จ
AuthorizationHeaderFilters.authorizationHeader() HandlerFilterFunction DSL์—์„œ .filter(...) ๋กœ ๋ถ€์ฐฉ
RequestLoggingFilters.requestLogging() HandlerFilterFunction DSL์—์„œ .filter(...) ๋กœ ๋ถ€์ฐฉ

Gateway MVC์—๋Š” GlobalFilter ํ™•์žฅ์ ๋„ default-filters ์„ค์ •๋„ ์—†๋‹ค. ์„œ๋ธ”๋ฆฟ ์Šคํƒ์ด๋ฏ€๋กœ ํ‘œ์ค€ ์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ๊ฐ€ ๊ทธ ์ž๋ฆฌ๋ฅผ ๋Œ€์‹ ํ•œ๋‹ค. ์ ์šฉ ๋ฒ”์œ„๊ฐ€ ๋ผ์šฐํŠธ ๋‹จ์œ„๊ฐ€ ์•„๋‹ˆ๋ผ ์ „ ์š”์ฒญ์ด๋ผ๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

public static HandlerFilterFunction<ServerResponse, ServerResponse> requestLogging(String baseMessage) {
    return (request, next) -> {
        log.info("PRE: {} {}", request.method(), request.path());
        ServerResponse response = next.handle(request);   // ๋ธ”๋กœํ‚น
        log.info("POST: {}", response.statusCode());
        return response;
    };
}

ํ•ต์‹ฌ ํƒ€์ž… โ€” ServerRequest, ServerResponse, HandlerFilterFunction, RouterFunction


๋‘ ์Šคํƒ ๋น„๊ต

WebFlux :8000 WebMVC :8010
์Šคํƒ€ํ„ฐ ...-gateway-server-webflux ...-gateway-server-webmvc
๋Ÿฐํƒ€์ž„ Netty, ๋…ผ๋ธ”๋กœํ‚น Tomcat, ๋ธ”๋กœํ‚น
์„ค์ • ์ ‘๋‘์‚ฌ spring.cloud.gateway.server.**webflux**.* spring.cloud.gateway.server.**webmvc**.*
ํŒจํ‚ค์ง€ o.s.c.gateway.* o.s.c.gateway.**server.mvc**.*
๋ผ์šฐํŠธ ์ •์˜ application.yml Java DSL (yml๋„ ๊ฐ€๋Šฅ)
์ „์—ญ ํ•„ํ„ฐ GlobalFilter ๊ตฌํ˜„ ์„œ๋ธ”๋ฆฟ Filter
๋ผ์šฐํŠธ ํ•„ํ„ฐ AbstractGatewayFilterFactory HandlerFilterFunction
์ปค์Šคํ…€ ํ•„ํ„ฐ๋ฅผ yml์—์„œ ์ฐธ์กฐ ๋นˆ ๋“ฑ๋ก๋งŒ ํ•˜๋ฉด ๋จ FilterSupplier ๋นˆ ์ถ”๊ฐ€ ๋“ฑ๋ก ํ•„์š”

๋‘˜์„ ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๊ฐ™์ด ๋„ฃ์„ ์ˆ˜๋Š” ์—†๋‹ค. ํ•˜๋‚˜๋Š” ๋ฆฌ์•กํ‹ฐ๋ธŒ, ํ•˜๋‚˜๋Š” ์„œ๋ธ”๋ฆฟ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋œจ๊ธฐ ๋•Œ๋ฌธ์— ํด๋ž˜์ŠคํŒจ์Šค์— ํ•จ๊ป˜ ๋‘๋ฉด ์ถฉ๋Œํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๋ชจ๋“ˆ์„ ๋‚˜๋ˆด๋‹ค.

์Šคํƒ์„ ๋ฐ”๊ฟ”๋„ ์•ˆ ๋ฐ”๋€Œ๋Š” ๊ฒƒ โ€” gateway-common

ํด๋ž˜์Šค ์—ญํ• 
JwtTokenValidator ํ† ํฐ ์„œ๋ช…ยทsubject ๊ฒ€์ฆ. ์›น ํƒ€์ž…์„ ์ „ํ˜€ ์“ฐ์ง€ ์•Š๋Š”๋‹ค
JwtProperties jwt.secret ๋ฐ”์ธ๋”ฉ + ๊ฒ€์ฆ
GatewayLoggingProperties ์ „์—ญ ๋กœ๊น… ํ•„ํ„ฐ ์„ค์ •

JWT ๊ฒ€์ฆ์„ ํ•„ํ„ฐ์—์„œ ๋ถ„๋ฆฌํ•ด๋‘” ๋•๋ถ„์—, ์›น ์Šคํƒ์„ ํ†ต์งธ๋กœ ๊ฐˆ์•„์—Ž์–ด๋„ ์ด ์ฝ”๋“œ์™€ ํ…Œ์ŠคํŠธ 5๊ฐœ๋Š” ๊ทธ๋Œ€๋กœ ์žฌ์‚ฌ์šฉ๋œ๋‹ค. ์Šคํƒ ์ฐจ์ด๊ฐ€ ํ•„ํ„ฐ 3๊ฐœ์™€ ๋ผ์šฐํŠธ ์ •์˜์—๋งŒ ๊ฐ‡ํžˆ๋Š” ๊ตฌ์กฐ๋‹ค.


์‹คํ–‰

service-discovery ๋ฅผ ๋จผ์ € ๋„์šด๋‹ค. ๋‚˜๋จธ์ง€๋Š” ์ˆœ์„œ ๋ฌด๊ด€.

./gradlew :service-discovery:bootRun
./gradlew :alpha-service:bootRun
./gradlew :beta-service:bootRun
./gradlew :apigateway-webflux:bootRun
./gradlew :apigateway-webmvc:bootRun

๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ Eureka ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ๋ฐ›์•„์˜ค๊ธฐ๊นŒ์ง€ ์ตœ๋Œ€ 30์ดˆ๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค. ๊ทธ ์ „๊นŒ์ง€ ๋‚˜์˜ค๋Š” No servers available for service: ALPHA-SERVICE ๊ฒฝ๊ณ ๋Š” ์ •์ƒ์ด๋‹ค.

Eureka ๋Œ€์‹œ๋ณด๋“œ: http://localhost:8761

ํ˜ธ์ถœ

๊ฐ™์€ ์š”์ฒญ์„ ๋‘ ํฌํŠธ์— ๋ณด๋‚ด ๋น„๊ตํ•œ๋‹ค.

curl http://localhost:8000/alpha-service/welcome    # WebFlux
curl http://localhost:8010/alpha-service/welcome    # WebMVC

curl http://localhost:8000/alpha-service/check      # ์ฒ˜๋ฆฌํ•œ ์ธ์Šคํ„ด์Šค์˜ ์‹ค์ œ ํฌํŠธ๊ฐ€ ์ฐํžŒ๋‹ค
curl http://localhost:8010/beta-service/welcome

์ธ์ฆ์ด ๊ฑธ๋ฆฐ ๊ฒฝ๋กœ:

# ํ† ํฐ ์—†์ด ํ˜ธ์ถœํ•˜๋ฉด 401
curl -i http://localhost:8000/alpha-service/secure/hello

# ํ† ํฐ ๋ฐœ๊ธ‰ ํ›„ ์žฌํ˜ธ์ถœ
TOKEN=$(curl -s -X POST http://localhost:8000/alpha-service/token \
  | python3 -c 'import sys,json;print(json.load(sys.stdin)["accessToken"])')

curl -H "Authorization: Bearer $TOKEN" http://localhost:8000/alpha-service/secure/hello
curl -H "Authorization: Bearer $TOKEN" http://localhost:8010/alpha-service/secure/hello

ํ† ํฐ ๋ฐœ๊ธ‰์€ ์›๋ž˜ ์ธ์ฆ ์ „์šฉ ์„œ๋น„์Šค์˜ ์ฑ…์ž„์ด๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ๊ฒŒ์ดํŠธ์›จ์ด ํ•„ํ„ฐ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด alpha-service ์— ์ตœ์†Œ ๊ตฌํ˜„์œผ๋กœ ๋‘์—ˆ๋‹ค.

๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ ํ™•์ธ

beta-service/src/main/resources/application.yml ์˜ port ๋ฅผ 0 ์œผ๋กœ ๋ฐ”๊พธ๊ณ  ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๋„์šด ๋’ค /beta-service/check ๋ฅผ ๋ฐ˜๋ณต ํ˜ธ์ถœํ•˜๋ฉด, ๊ฒŒ์ดํŠธ์›จ์ด ์„ค์ •์€ ๊ทธ๋Œ€๋กœ์ธ ์ฑ„๋กœ ์‘๋‹ต ํฌํŠธ๊ฐ€ ๋ฒˆ๊ฐˆ์•„ ๋ฐ”๋€๋‹ค.

๊ฒŒ์ดํŠธ์›จ์ด๋Š” ๊ฐ•์ œ๋˜์ง€ ์•Š๋Š”๋‹ค

alpha-service ์™€ beta-service ๋Š” 8081, 8082 ๋กœ ์ง์ ‘ ํ˜ธ์ถœํ•ด๋„ ์‘๋‹ตํ•œ๋‹ค. ๊ฒŒ์ดํŠธ์›จ์ด๋Š” ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ์ผ ๋ฟ ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ€๋กœ์ฑ„์ง€ ์•Š๋Š”๋‹ค.

๋กœ์ปฌ์—์„œ๋Š” ์žฅ์•  ์ง€์ ์„ ๊ฐ€๋ฆฌ๋Š” ๋ฐ ์˜คํžˆ๋ ค ํŽธํ•˜๋‹ค โ€” 8000์ด ์‹คํŒจํ•  ๋•Œ 8081์„ ์ง์ ‘ ๋•Œ๋ ค ๋ณด๋ฉด ์„œ๋น„์Šค๊ฐ€ ์ฃฝ์€ ๊ฒƒ์ธ์ง€ ๋ผ์šฐํŒ…์ด ํ‹€๋ฆฐ ๊ฒƒ์ธ์ง€ ๋ฐ”๋กœ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์šด์˜ ํ™˜๊ฒฝ์ด๋ผ๋ฉด ๊ฒŒ์ดํŠธ์›จ์ด๋งŒ ์™ธ๋ถ€์— ๋…ธ์ถœํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋‚ด๋ถ€๋ง์— ๋‘๊ฑฐ๋‚˜, ์„œ๋น„์Šค๋ฅผ ๋ฃจํ”„๋ฐฑ์—๋งŒ ๋ฐ”์ธ๋”ฉํ•œ๋‹ค.

server:
  address: 127.0.0.1

์„ค์ •

ํ‚ค ์œ„์น˜ ๋น„๊ณ 
jwt.secret ๋‘ ๊ฒŒ์ดํŠธ์›จ์ด, alpha-service ๊ฐ’์ด ๋ชจ๋‘ ๊ฐ™์•„์•ผ ํ•œ๋‹ค. HS256์€ 256bit ์ด์ƒ์„ ์š”๊ตฌํ•˜๋ฏ€๋กœ 32์ž ์ด์ƒ. ์งง์œผ๋ฉด ๊ธฐ๋™ ์‹œ์ ์— ์‹คํŒจํ•œ๋‹ค.
jwt.expiration alpha-service ํ† ํฐ ์œ ํšจ ๊ธฐ๊ฐ„. 24h, 30m ํ˜•์‹
gateway.logging.* ๋‘ ๊ฒŒ์ดํŠธ์›จ์ด ์ „์—ญ ๋กœ๊น… ํ•„ํ„ฐ์˜ ๋ฌธ๊ตฌ์™€ on/off. ์ƒ๋žตํ•˜๋ฉด ๊ธฐ๋ณธ๊ฐ’

Config Server ๋ฅผ ๋ถ™์ด๋ ค๋ฉด spring.config.import: optional:configserver:http://127.0.0.1:8888/ ๋ฅผ ์“ด๋‹ค.

About

๐Ÿ’ป Spring Cloud Gateway๋ฅผ ํ™œ์šฉํ•œ API Gateway ๊ตฌ์„ฑ๊ณผ ๋‹ค์–‘ํ•œ Filter ์ ์šฉ ๋ฐ Eureka ์—ฐ๋™ ํ•™์Šต ์ €์žฅ์†Œ

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages