본문 바로가기

Spring/Cloud

(33)
[Spring Cloud] Gateway Security - 검증 이번 장에서는 Spring Cloud Gateway - Security 적용 에 이어 적용한 사항이 정상적으로 작동하는지 확인해본다. 모든 소스 코드는 깃허브 (링크) 에 올려두었다. Flow 이전 장에서 살펴본 것과 같이 유저 서비스에서 JWT를 발급받고 게이트웨이에서 JWT를 검증하는 프로세스는 아래와 같다. 클래스들 간의 호출 관계는 아래와 같다. 유저 서비스의 AuthenticationFilter는 사용자의 로그인 요청이 들어오면 사용자가 전달한 로그인 정보로 UsernamePasswordAuthenticationToken 객체를 생성한다. AuthenticationFilter 생성한 객체를 통해서 상위 클래스의 AuthenticationManager의 authenticate 메서드를 호출하여 인..
[Spring Cloud] Gateway Security - 적용 이번 장에서는 Spring Cloud Gateway - 필터 에 이어 Gateway에 Spring Security를 적용시키는 방법에 대해서 알아본다. 모든 소스 코드는 깃허브 (링크) 에 올려두었다. Flow 게이트웨이에 스프링 시큐리티를 적용시키기 위하여 전체적으로 어떠한 흐름으로 요청이 처리되는지 알아본다. JWT를 통한 인증을 처리할 예정이며 JWT에 대해서는 다루지 않으며 적용하는 방법에 대한 내용만 진행한다. 혹시 JWT를 처음 접한다면 글의 가장 하단부에 첨부한 JWT 공식 홈페이지와 인프런 JWT 관련 무료 강의를 첨부하므로 참고하도록 한다. 게이트웨이에 JWT를 검증하는 필터를 적용하면 아래와 같은 프로세스로 처리된다. 최초에 사용자가 로그인하면 유저 서비스에서 JWT 토큰을 발급한다. ..
[Spring Cloud] Gateway - 필터 이번 장에서는 Spring Cloud Gateway - 구성 에 이어 직접 API Gateway에 Filter를 적용하는 방법들에 대해서 알아본다. 모든 소스 코드는 깃허브 (링크) 에 올려두었다. 자바 코드로 적용 Gateway 모듈에 구성을 위한 FilterConfig 클래스 파일을 생성한다. "/test-server-1/" 경로로 들어오는 요청의 헤더에 "test-server-1-request" 키와 "test-server-1-request-header" 값을 가지는 헤더를 추가하고 TEST-SERVER-1 이라는 이름을 가진 애플리케이션에 리다이렉트 한다. "/test-server-2/" 경로로 들어오는 요청의 헤더에 "test-server-2-request" 키와 "test-server-2-re..
[Spring Cloud] Gateway - 구성 이번 장에서는 API Gateway Pattern- 이론 에 이어 직접 Spring Gateway 서버를 구축해본다. 모든 소스 코드는 깃허브 (링크) 에 올려두었다. 프로젝트 구성 Spring Gateway 서버를 구축하기 위해서는 Discovery 서버가 실행되어 있어야한다. 만약 실행되지 않은 상태라면 필자가 이전에 작성한 글 (링크) 를 참고하도록 한다. 1. 테스트 모듈 추가 Spring Gateway 서버를 구축하고 정상적으로 작동하는지 확인하기 위해서는 아래의 이미지와 같이 테스트를 위한 서비스가 필요하다. 테스트 모듈을 생성하는 방법은 Gateway 서버를 구축하는 방법과는 거리가 있으므로 글의 하단부에서 따로 다루도록 한다. 만약 테스트 모듈이 없다면 하단부의 글을 확인하고 테스트 모듈을..
[Spring Cloud] Gateway - 이론 우리는 이전 장 에서 Spring Cloud Netflix Eureka에 대해서 알아보았다. 이번 장에서는 Spring Cloud Gateway를 구축하기에 앞서서 API Gateway란 무엇인지에 대해서 알아본다. 모든 소스 코드는 깃허브 (링크) 에 올려두었다. API Gateway Pattern API Gateway Pattern의 필요성 우리는 이전에 하나의 커다란 서비스가 기능별로 나누어진 마이크로서비스 아키텍처(MSA)에 대해서 알아보았다. MSA를 적용하여 온라인 상점을 구축하고 있는 상황을 예로 들어본다. 우리는 서비스마다 기능을 나누게 될 것이고 Price Service(상품의 가격을 담당하는 서비스), Order Service(주문을 담당하는 서비스), Review Service(리뷰를..
[Spring Cloud] Eureka - 구성 이번 장에서는 Spring Cloud Netflix Eureka - 이론 에 이어 직접 디스커버리(유레카) 서버를 구축해본다. 모든 소스 코드는 깃허브 (링크) 에 올려두었다. 기본 프로젝트 구성 마이크로서비스의 특성상 한 번에 많은 프로젝트를 실행시켜야한다. 수많은 프로젝트를 위해 IDE를 여러개 실행시키기에는 무리가 있으므로 멀티 모듈로 구성하여 진행하도록 한다. 멀티 모듈 프로젝트 구성은 필자가 이전에 작성해놓은 글 (링크) 를 참고하도록 한다. 1. 의존성 추가 유레카 서버를 구축하기 위해 필요한 의존성이므로 전부 추가하도록 한다. ext { set('springCloudVersion', "2021.0.1") } dependencies { implementation 'org...
[Spring Cloud] Eureka - 이론 이번 장에서는 Spring Cloud Netflix Eureka(이하 유레카)에 대해서 알아보고 직접 유레카 서버를 구축해본다. Spring Cloud Netflix Eureka 마이크로서비스 아키텍처에서 유레카란 client-side service discovery라고 할 수 있다. 시스템은 트래픽에 따라 동적으로 늘어날 수도 줄어들 수도 있다. 이러한 환경에서 서비스의 host와 port가 동적으로 변하더라도 서비스 인스턴스를 호출할 수 있도록 해주는 Service Registry를 제공 및 관리해준다. 설계 목적 유레카는 middle-tier load balancer로 정의된다. middle-tier load balancer는 로드밸런싱과 장애복구(failover)가 가능한 middle-tier 서..
[Spring Cloud] Multi Module - 라이브러리 이전 장(링크)에서는 멀티 모듈 프로젝트를 구성하는 방법에 대해서 알아보았다. 실제로 현업에서 프로젝트를 진행하다보면 생각보다 복잡한 의존관계를 많이 접하게 된다. 모듈에 라이브러리를 추가하고 의존관계를 어떻게 설정해야하는지 알아보도록 한다. 예시를 위해서 이전 장에는 없던 secret-util을 추가했고 module간의 관계는 아래와 같다. secret-util은 data-redis, data-mongodb 라이브러리의 의존성을 가지고 있다. util은 secret-util을 의존하고 있으며 data-jpa 라이브러리의 의존성을 가지고 있다. users는 util 모듈에 의존하고 있으며 spring-boot-starter 라이브러리의 의존성을 가지고 있다. 각 모듈들의 build.gradle은 아래와 ..