CS

API Gateway란?

10Biliion 2025. 3. 12. 16:32

 

1. API Gateway란?

API Gateway는 클라이언트와 마이크로서비스 간의 중간 계층 역할을 하는 서버로, 모든 API 요청을 한 곳에서 받아서 적절한 마이크로서비스로 전달하는 기능을 수행합니다.

즉, 클라이언트는 여러 개의 마이크로서비스에 직접 접근하는 대신, API Gateway를 통해 하나의 엔드포인트만 호출하면 됩니다.

📌 API Gateway의 주요 역할

  • 클라이언트 요청을 받아 적절한 서비스로 라우팅
  • 서비스 디스커버리를 통해 동적으로 마이크로서비스 호출
  • 인증 및 권한 관리 적용
  • 로드 밸런싱을 통해 트래픽 분산
  • 캐싱 및 요청 최적화 수행
  • 모니터링 및 로깅 지원
  • 트래픽 제한(rate limiting) 및 보안 기능 제공

2. API Gateway가 필요한 이유

마이크로서비스 아키텍처에서는 서비스가 개별적으로 나뉘어 있기 때문에 클라이언트가 각 서비스를 직접 호출하면 여러 가지 문제가 발생할 수 있습니다.

❌ API Gateway 없이 마이크로서비스 호출 시 문제점

  1. 복잡한 클라이언트 요청
    • 클라이언트가 각 마이크로서비스의 엔드포인트를 알아야 함.
    • 여러 개의 API 호출을 수행해야 할 수도 있음.
  2. 인증/인가 로직의 중복
    • 각 서비스에서 개별적으로 인증/권한 검사를 수행해야 하므로 관리가 어려움.
  3. 로드 밸런싱 및 트래픽 관리 어려움
    • 클라이언트가 특정 서버로 요청을 몰아서 보낼 수도 있음.
  4. 모니터링 및 로깅의 비효율성
    • 개별 서비스별로 로그를 관리해야 하기 때문에 전체적인 API 호출 흐름을 추적하기 어려움.

이런 문제를 해결하기 위해 API Gateway를 도입하면, 클라이언트는 단 하나의 엔드포인트(API Gateway)만 호출하고, Gateway가 내부적으로 마이크로서비스와 통신하는 방식으로 개선할 수 있습니다.


3. API Gateway의 동작 방식

🔹 기본 동작 흐름

  1. 클라이언트가 API Gateway에 요청을 보냄.
  2. API Gateway가 요청을 분석하여 적절한 마이크로서비스로 라우팅.
    • 서비스의 위치는 Eureka 같은 서비스 디스커버리 시스템에서 조회 가능.
  3. 필요한 경우 인증 및 권한 확인을 수행.
  4. 마이크로서비스에서 응답을 받아 클라이언트에게 반환.

🔹 API Gateway 적용 전후 비교

✅ 기존 방식 (API Gateway 없이 클라이언트가 직접 호출)

[ 클라이언트 ] → [ 마이크로서비스 A ]
              → [ 마이크로서비스 B ]
              → [ 마이크로서비스 C ]

✅ API Gateway 적용 후

[ 클라이언트 ] → [ API Gateway ] → [ 마이크로서비스 A ]
                                → [ 마이크로서비스 B ]
                                → [ 마이크로서비스 C ]

API Gateway를 적용하면 클라이언트는 단일 진입점(API Gateway)만 알면 되며, 내부 서비스의 세부 구조를 몰라도 됨.


4. Spring Cloud Gateway를 활용한 API Gateway 구축

Spring Cloud Gateway는 Spring Cloud에서 제공하는 API Gateway 솔루션으로, Netty 기반으로 동작하며 비동기 방식의 고성능 API Gateway를 제공해 줍니다.

✅ Spring Cloud Gateway 설정 방법

1️⃣ 의존성 추가 (Spring Boot 프로젝트 기준)

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

2️⃣ application.yml에서 라우팅 설정

spring:
  cloud:
    gateway:
      routes:
        - id: user-service
          uri: lb://USER-SERVICE  # Eureka에서 등록된 서비스명
          predicates:
            - Path=/user/**
        - id: order-service
          uri: lb://ORDER-SERVICE
          predicates:
            - Path=/order/**

3️⃣ 필터(Filter) 설정 (인증, 로깅, CORS 등)

@Component
public class CustomFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ServerHttpRequest request = exchange.getRequest().mutate()
            .header("Custom-Header", "MyValue")
            .build();
        return chain.filter(exchange.mutate().request(request).build());
    }
    @Override
    public int getOrder() {
        return -1;
    }
}

5. API Gateway와 Eureka Server 연동

API Gateway는 Eureka Server와 연동하여 서비스 디스커버리 기능을 활용할 수 있습니다. 이를 통해 마이크로서비스의 IP와 포트가 변경되더라도 API Gateway가 자동으로 해당 서비스를 찾을 수 있습니다.

✅ Eureka Server 설정

server:
  port: 8761
spring:
  application:
    name: eureka-server
  eureka:
    client:
      register-with-eureka: false
      fetch-registry: false

✅ API Gateway에서 Eureka 사용 설정

spring:
  application:
    name: api-gateway
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true  # Eureka에 등록된 서비스 자동 라우팅

 

 

API Gateway는 마이크로서비스 아키텍처에서 클라이언트와 서비스 간의 중간 다리 역할을 하며, 트래픽 관리, 보안, 인증, 로깅 등 여러 기능을 통합적으로 제공할 수 있습니다.

Spring Cloud Gateway를 사용하면, 설정을 통해 쉽게 라우팅을 관리하고 Eureka와 연동하여 서비스 디스커버리를 활용할 수도 있습니다. 

'CS' 카테고리의 다른 글

Mock(Mocking)란 무엇인가?  (1) 2025.03.12
멀티스레드(Multi-threading)란?  (1) 2025.03.11
해시 테이블(Hash Table) 이란?  (0) 2025.01.23
CPU 스케줄링 이란?  (1) 2025.01.21
프로세스(Process)와 스레드(Thread)  (1) 2025.01.21