[Spring Boot] Spring Cloud란? / Spring Cloud Gateway

2025. 3. 18. 19:53· BE/Spring Boot
목차
  1. Spring Cloud란?
  2. Spring Cloud의 주요 기능
  3. Spring Cloud을 왜 사용할까?
  4. Spring Cloud Gateway란?
  5. API Gateway를 사용할 때 발생할 수 있는 문제
  6. 엔티티 참조 문제
  7. JWT 인가 처리 문제
728x90

Spring Cloud란?

https://spring.io/projects/spring-cloud

 

Spring Cloud

Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration management, service discovery, circuit breakers, intelligent routing, micro-proxy, control bus, short lived microservices and

spring.io

 

Spring Cloud는 마이크로서비스 아키텍처(MSA)를 구축할 때 필요한 다양한 기능을 제공하는 Spring 프레임워크의 확장 프로젝트

 

마이크로서비스 간의 통신, 분산 환경에서의 서비스 관리, 로드 밸런싱, 서비스 등록 및 발견 등의 기능을 제공하여 대규모 시스템을 쉽게 개발할 수 있도록 도와준다.

 

 


Spring Cloud의 주요 기능

Service Discovery (Eureka, Zookeeper) 마이크로서비스가 동적으로 등록되고 검색될 수 있도록 관리
API Gateway (Spring Cloud Gateway) 모든 요청을 한 곳에서 받아 마이크로서비스로 전달
Load Balancing (Spring Cloud LoadBalancer) 서비스 트래픽을 여러 인스턴스로 분배
Circuit Breaker 장애 발생 시 자동으로 대체 로직 실행
Distributed Configuration (Spring Cloud Config) 애플리케이션 설정을 중앙에서 관리
Messaging & Event-Driven (Spring Cloud Stream, Kafka) 마이크로서비스 간 비동기 메시지 처리
Tracing & Monitoring 서비스 간 호출 추적 및 성능 모니터링

 

 

 

Spring Cloud을 왜 사용할까?

  • 마이크로서비스의 복잡성을 줄여준다.
  • 서비스 간의 통신을 쉽게 구성할 수 있다.
  • 확장성 및 유연한 배포 가능
  • 각 마이크로서비스가 독립적으로 개발 및 배포될 수 있다.

 

 

 

build.gradle에 추가

ext {
set('springCloudVersion', '2024.0.0')
}
dependencyManagement {
imports {
mavenBom("org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}")
}
}

 

 


Spring Cloud Gateway란?

마이크로서비스의 API Gateway 역할을 수행하는 프레임워크

클라이언트의 요청을 적절한 마이크로서비스로 전달하고, 로드밸런싱, 보안 등의 기능을 수행하는 역할을 한다.

 

예를 들어 마이크로서비스에 유저 서비스, 주문 서비스, 결제 서비스 가 있다고 가정할 때,

클라이언트가 각각의 서비스를 호출하려면 각각의 서버 주소를 알아야 하고, 보안 및 로드 밸런싱 관리도 어려워진다.

-> 이 문제를 해결해주는 것이 바로 게이트웨이다.

 

 

 

Spring Cloud Gateway는 클라이언트의 모든 요청을 한 곳에서 받아서 적절한 마이크로서비스로 전달해준다.

클라이언트는 Gateway 하나만 호출하면 된다.

 

 

로드 밸런싱이란?

더보기

로드 밸런싱(Load Balancing)은 여러 개의 서버(서비스)로 트래픽을 분산시켜서 부하를 줄이고, 성능과 안전성을 높이는 기술

 

한 서버가 과부화 걸리지 않도록 여러 서버에 요청을 골고루 나눠주는 것이다.

트래픽을 분산시켜 성능을 높이고, 장애 발생 시 대체 서버로 요청을 보내는 것

 

 

게이트웨이가 8080번,

유저 서비스가 8081번, 주문 서비스가 8082번에서 실행되고 있을 때

 

/user/** 로 요청이 오면 8081 포트로 전달하고,

/order/** 로 요청이 오면 8082 포트로 전달한다.

 

-> 클라이언트는 http://localhost:8080/user 같은 API Gateway만 호출하면 된다.

 

spring:
cloud:
gateway:
routes:
- id: user-service
uri: http://localhost:8081
predicates:
- Path=/user/**
- id: order-service
uri: http://localhost:8082
predicates:
- Path=/order/**

 

 

 

 

build.gradle에 라이브러리 추가

dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
}

 

 

 


API Gateway를 사용할 때 발생할 수 있는 문제

엔티티 참조 문제

게이트웨이를 사용하면 마이크로서비스 간 도메인 모델(Entity) 공유 문제가 발생할 수 있음

 

❌ 문제점

  • 마이크로서비스 간 엔티티 클래스가 중복되거나, 인식되지 않는 문제 발생.
  • @Entity가 각 서비스에서 올바르게 스캔되지 않아 참조 오류 발생 가능.

✅ 해결 방법

  • 컴포넌트 스캔 범위를 지정 → @ComponentScan("패키지 경로")로 필요한 패키지만 스캔.
  • 공통 엔티티 프로젝트(common 프로젝트) 생성 → common 모듈을 따로 만들어 엔티티를 모아두고, 모든 서비스가 의존하도록 설정.

 

 

JWT 인가 처리 문제

게이트웨이를 사용할 때 각 서비스에서 따로 JWT 검증을 할지, 게이트웨이에서 검증할지 결정해야 함.

 

❌ 문제점

  • 모든 서비스에서 따로 JWT를 검증하면 중복 코드 발생 & 성능 저하.
  • 게이트웨이에서만 JWT를 검증하면 내부 서비스에서 추가 검증이 어려울 수도 있음.

✅ 해결 방법

  • 게이트웨이에서 JWT 필터 설정하여 검증 → 인증된 요청만 내부 서비스로 전달.
  • 게이트웨이에서 JWT 검증 후, User 정보를 요청 헤더에 포함하여 내부 서비스에서 활용.
  • 특정 API는 게이트웨이에서 인가하고, 일부 API는 내부 서비스에서 추가 검증 수행.
728x90
저작자표시 비영리 변경금지 (새창열림)

'BE > Spring Boot' 카테고리의 다른 글

[Spring Boot] Eureka란? / 스프링 부트에서 Eureka, Gateway 설정  (0) 2025.03.19
[Spring Boot] 멀티 모듈 프로젝트 생성 / API Gateway 연결  (0) 2025.03.18
[Spring Boot] STOMP란? / 간단한 채팅방 구현  (0) 2025.03.18
[Spring Boot] WebSocket과 Kafka로 실시간 채팅 구현  (0) 2025.03.18
[Spring Boot] 웹 소켓(Web Socket)을 사용해 실시간 채팅 구현  (0) 2025.03.17
  1. Spring Cloud란?
  2. Spring Cloud의 주요 기능
  3. Spring Cloud을 왜 사용할까?
  4. Spring Cloud Gateway란?
  5. API Gateway를 사용할 때 발생할 수 있는 문제
  6. 엔티티 참조 문제
  7. JWT 인가 처리 문제
'BE/Spring Boot' 카테고리의 다른 글
  • [Spring Boot] Eureka란? / 스프링 부트에서 Eureka, Gateway 설정
  • [Spring Boot] 멀티 모듈 프로젝트 생성 / API Gateway 연결
  • [Spring Boot] STOMP란? / 간단한 채팅방 구현
  • [Spring Boot] WebSocket과 Kafka로 실시간 채팅 구현
셰욘
셰욘
셰욘
seiyeon
셰욘
전체
오늘
어제
  • 분류 전체보기 (176)
    • 알고리즘 (46)
      • 프로그래머스 (2)
      • 백준 (37)
      • 문제 유형 (7)
    • CS (41)
      • Linux (6)
      • DB (15)
      • 자료구조 (3)
      • OOP (2)
      • 아키텍처 (0)
    • BE (42)
      • Java (9)
      • Spring Boot (32)
    • FE (6)
      • Next.js (1)
      • JavaScript (5)
      • Vue.js (7)
      • Web (0)
    • 배포 (5)
    • 회고 (19)
      • BEYOND SW 캠프 (19)
    • 기타 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 블로그 관리

공지사항

인기 글

태그

  • dfs
  • 구현
  • 리눅스
  • spring boot
  • Gateway
  • 오블완
  • AWS
  • 네트워크
  • 알고리즘
  • fe
  • 트리
  • 프로그래머스
  • 백트래킹
  • js
  • 주간회고
  • 티스토리챌린지
  • DP
  • 백준
  • 실습
  • db
  • bfs
  • 우선순위 큐
  • Java
  • be
  • 회고
  • cs
  • web
  • 그리디
  • vue
  • 자료구조

최근 댓글

최근 글

250x250
hELLO · Designed By 정상우.v4.2.1
셰욘
[Spring Boot] Spring Cloud란? / Spring Cloud Gateway
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.