본문 바로가기

Spring

(183)
[Spring Cloud] 서비스간 통신 - Feign Client 이전 장(링크) 에서는 Rest Template을 사용해서 마이크로서비스들 간의 통신(Communication)을 구현해보았다. 이번 장에서는 Spring Cloud Netflix의 Feign Client를 사용하여 마이크로서비스 간의 통신을 구현해본다. 모든 소스 코드는 깃허브 (링크) 에 올려두었다. Feign Client Feign Client는 HTTP Client로써 REST API 호출하는 기능을 추상화 한 Spring Cloud Netflix의 라이브러리다. JPA 리포지토리를 선언하는 것과 유사하게 인터페이스를 생성하고 HTTP Endpoint를 선언하는 것만으로 구현이 완료되며 LoadBalanced를 지원한다. User Service 의존성 추가 build.gradle에 아래의 의존성을..
[Spring Cloud] 서비스간 통신 - Rest Template 이번 장부터는 마이크로서비스들 간의 통신(Communication)에 대해서 알아본다. 이번 장에서는 전통적으로 사용되었던 Rest Template을 통한 통신을 알아본다. 모든 소스 코드는 깃허브 (링크) 에 올려두었다. 개요 마이크로서비스들 간의 통신은 크게 두 가지로 분류된다. 동기 방식(Synchronous)의 HTTP 통신 비동기 방식(Asynchronous)의 AMQP를 통한 통신 비동기 방식을 사용하기 전에 우리는 동기 방식을 통한 통신 방법을 다뤄볼 것이다. 동기 방식 통신에도 Rest Template을 사용하는 방법과 넥플릭스의 FeignClient를 사용하는 방법이 있는데 이번 장에서는 Rest Template를 사용하는 방법에 대해서 알아볼 것이다. 지금까지 우리가 구축한 서비스를 살..
[Spring Cloud] Asymmetric Encryption 이전 장 (링크) 에서는 대칭키를 통해서 Config 서버의 정보를 암호화하는 방식에 대해서 알아보았다. 이번 장에서는 Config 서버의 정보를 비대칭키를 사용하여 암호화하는 방식에 대해서 알아본다. 모든 소스 코드는 깃허브 (링크) 에 올려두었다. Asymmetric Encryption (비대칭키) 적용 및 테스트 Key를 저장할 디렉토리 생성 필자는 Config 서버의 resource 디렉토리에 생성하였다. 비대칭키 생성 1단계에서 생성한 디렉토리로 이동하여 아래의 커맨드를 입력하여 키를 생성한다. CN: Company Name OU: Organization Unit O: Organization L: Location C: Country $ keytool -genkeypair -alias encryp..
[Spring Cloud] Symmetric Encryption 이번 장에서는 Config 서버의 정보를 대칭키를 사용하여 암호화하는 방식에 대해서 알아본다. 모든 소스 코드는 깃허브 (링크) 에 올려두었다. 개요 우리는 이전 장 Spring Cloud Config를 구축하는 방법에 대해서 알아보았다. 여기서 우리가 생각해야하는 부분은 Config 서버가 참조하는 설정 정보가 Config 서버와 같은 사설망에 있다면 큰 문제가 되지 않지만 외부에 있는 경우를 보안적인 측면을 생각해보아야 한다. 대부분의 설정 파일에는 데이터베이스 접속 정보, 메시지 큐 접속정보 등이 포함되어 있다. 이렇게 민감한 정보들이 원격 깃 저장소와 같은 곳에 저장되어 있다고 가정할 때 암호화 없이 설정정보를 읽고 쓰는 것은 상당히 위험한 일이다. 이번 장에서는 설정 정보를 암호화하여 저장하고 ..
[Spring Cloud] Config Server - Bus Refresh 이전 장(링크) 에서는 Spring Actuator의 Refresh 기능을 통해서 설정파일을 갱신하는 방법에 대해서 알아보았다. 각각의 마이크로서비스들의 Actuator를 모두 찾아서 Refresh를 해주는 것도 사실 간단한 방법은 아니다. 이번 장에서는 Spring Actuator보다 더 간편한 Spring Cloud Bus라는 기능을 사용하여 설정파일을 갱신하는 방법에 대해서 알아본다. 모든 소스 코드는 깃허브 (링크) 에 올려두었다. Spring Cloud Bus Spring Cloud Bus는 분산 시스템에서의 각각의 노드를 경량 메시지 브로커와 연결하고 상태 및 구성 정보에 대한 변경 사항을 연결된 노드에게 전달하는 것을 의미한다. 우리는 MSA라는 분산 시스템에서 각각의 마이크로서비스들에게 R..
[Spring Cloud] Config Server - Actuator 이전 장(링크) 에서는 Config 서버를 만들고 애플리케이션을 재실행하여 설정을 적용시키는 방법에 대해서 알아보았다. 이번 장에서는 애플리케이션을 재실행시키지 않고 Spring Actuator를 사용하여 변경된 설정파일을 적용하는 방법에 대해서 알아본다. 모든 소스 코드는 깃허브 (링크) 에 올려두었다. Actuator 설치 이전 장에서 설정파일을 저장하는 저장소는 Local, Remote Git Repository와 Native File Repository가 있다고 학습하였다. 이번 장에서 저장소는 Remote Git Repository로 고정시키고 Actuator를 통한 설정파일 적용 방법을 집중적으로 알아본다. 게이트웨이 서비스 의존성 추가 게이트웨이 서비스의 build.gralde에 actuat..
[Spring Cloud] Config Server - Restart 이번 장에서는 Spring Cloud Config 서버에 대해서 알아본다. 모든 소스 코드는 깃허브 (링크) 에 올려두었다. Spring Cloud Config Spring Cloud Config 서버란 분산 되어있는 서버, 클라이언트의 구성에 필요한 설정 정보(예. application.yml)를 외부 시스템에서 관리하는 것을 의미한다. 하나의 중앙화 된 저장소에서 구성요소를 관리할 수 있으며 각각의 마이크로서비스를 다시 빌드하지 않고 바로 적용이 가능하다. 애플리케이션의 배포 파이프라인을 통해서 운영, 개발, QA등 환경에 맞는 구성 정보를 사용할 수 있다. 애플리케이션에 설정파일을 적용하는 방법은 크게 애플리케이션 재실행, Actuator를 활용한 refresh, Spring Cloud Bus를 활..
[Spring Cloud] Gateway Security - 검증 이번 장에서는 Spring Cloud Gateway - Security 적용 에 이어 적용한 사항이 정상적으로 작동하는지 확인해본다. 모든 소스 코드는 깃허브 (링크) 에 올려두었다. Flow 이전 장에서 살펴본 것과 같이 유저 서비스에서 JWT를 발급받고 게이트웨이에서 JWT를 검증하는 프로세스는 아래와 같다. 클래스들 간의 호출 관계는 아래와 같다. 유저 서비스의 AuthenticationFilter는 사용자의 로그인 요청이 들어오면 사용자가 전달한 로그인 정보로 UsernamePasswordAuthenticationToken 객체를 생성한다. AuthenticationFilter 생성한 객체를 통해서 상위 클래스의 AuthenticationManager의 authenticate 메서드를 호출하여 인..