Question
๋ชจ๋ API ์ Response Header ์ Server-Port Key ๋ก ํ์ฌ ์คํ์ค์ธ ์๋ฒ์ ํฌํธ๋ฅผ ์ถ๊ฐํด์ฃผ์ธ์.
ํค๋์ ์๋ฒ ํฌํธ ์ถ๊ฐํ๊ธฐ
์ฒ์์๋ API๊ฒ์ดํธ์จ์ด ํ ๋ ํ๋ ๋ฐฉ๋ฒ๋๋ก ๊ฐ ์๋น์ค ์ปจํธ๋กค๋ฌ์ @Value
๋ก server.port
๋ฅผ ๊ฐ์ ธ์ Response Header์ ๋ด์ ๋ณด๋๋ค.
ํ์ง๋ง ๋ชจ๋ ๋ฉ์๋์ ์ถ๊ฐ๋ฅผ ํ๋ ค๊ณ ํ๋ ์ด๊ฒ ๋ง๋...
๋ผ๋ ์๊ฐ์ด ๋ค์๋ค.
๊ทธ๋ฌ๋ค ๋ฌธ๋ ์ด์ฐจํผ ๋ชจ๋ ์๋น์ค๋ค์ ๊ฒ์ดํธ์จ์ด๋ฅผ ํต๊ณผํ๋๋ฐ ๊ฒ์ดํธ์จ์ด ํํฐ์์ ํด์ฃผ๋ฉด ๋๊ฒ ๋ค๊ณ ์๊ฐํ๊ณ ServerWebExchange
์ Request URL์์ port๋ฒํธ๋ฅผ ์ถ์ถํด ํด๊ฒฐํ ์ ์์๋ค.
private final static String HEADER_SERVER_PORT = "Server-Port";
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
return chain.filter(exchange).then(Mono.fromRunnable(() -> addServerPortHeader(exchange)));
}
private void addServerPortHeader(ServerWebExchange exchange) {
URI uri = exchange.getAttribute(ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR);
exchange.getResponse().getHeaders().add(HEADER_SERVER_PORT, uri.getPort() + "");
}
๋ฌธ์ ๋ ํด๊ฒฐํ์ง๋ง ์ด exchange์ ๋ํด ๊ถ๊ธํด์ก๋ค.
ServerWebExchange
ServerWebExchange
Spring WebFlux์์ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค๋ก, HTTP ์์ฒญ๊ณผ ์๋ต์ ์ ์ฒด ์์ ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด
์ฃผ์ ์ญํ
- ์์ฒญ ๋ฐ ์๋ต ๊ด๋ฆฌ
- ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ค์ด์จ HTTP ์์ฒญ๊ณผ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๋ก ๋ฐํํ HTTP ์๋ต์ ๋ชจ๋ ๊ด๋ฆฌํจ
- ์ด ๊ฐ์ฒด๋ฅผ ํตํด ์์ฒญ๊ณผ ์๋ต์ ํค๋์ ๋ณธ๋ฌธ์ ์ฝ๊ฑฐ๋ ์์ ํ ์ ์์
- ์์ฑ ๊ด๋ฆฌ
- ์์ฒญ ์ฒ๋ฆฌ ์ค ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์์ฑ์ผ๋ก ์ ์ฅํ๊ณ ๊บผ๋ด ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ ์ ๊ณต
- ๋น๋๊ธฐ ์ฒ๋ฆฌ
- ๋น๋๊ธฐ๋ฐฉ์์ผ๋ก ์์ฒญ๊ณผ ์๋ต ์ฒ๋ฆฌ
- Mono์ Flux๊ฐ์ ๋ฆฌ์กํฐ๋ธ ํ์ ์ ์ฌ์ฉํด ๋น๋๊ธฐ ์์ ์ํ
- ์น ํํฐ ์ฒด์ธ ๊ด๋ฆฌ
- ์น ํํฐ ์ฒด์ธ ์คํ ๊ด๋ฆฌ
ServerWebExchangeUtils
ServerWebExchangeUtils
ServerWebExchange์ ๊ด๋ จ๋ ๋ค์ํ ์์ ์ ๋์์ฃผ๋ ์ ์ ๋ฉ์๋๋ฅผ ๋ชจ์๋์ ํด๋์ค
์ฃผ์ ์์์ ๋ฉ์๋
GATEWAY_ROUTE_ATTR
: ํ์ฌ ์์ฒญ์ ๋ํด ๋งค์นญ๋ ๋ผ์ฐํธ(Route) ๊ฐ์ฒด๋ฅผ ๋ํ๋ด๋ ์์ฑGATEWAY_REQUEST_URL_ATTR
: ์์ฒญ์ด ๋ผ์ฐํ ๋ ์ต์ข URL์ ๋ํ๋ด๋ ์์ฑGATEWAY_SCHEME_PREFIX_ATTR
: ์์ฒญ์ด ๋ผ์ฐํ ๋ ๋ ์ฌ์ฉ๋ ์คํด(scheme) ์ ๋์ฌ๋ฅผ ๋ํ๋ด๋ ์์ฑPRESERVE_HOST_HEADER_ATTRIBUTE
: ์์ฒญ ์ ํธ์คํธ ํค๋๋ฅผ ์ ์งํ๊ธฐ ์ํ ์์ฑ