
마이크로 서비스에 대한 간단한 단위 테스트를 개발한다. gitlab, jenkins를 통해 테스트 자동화를 위해서도 JUnit 단위 테스트 개발이 필요하다. item-service 프로젝트에 test 패키지에 ItemServiceApplicationTests 클래스가 존재한다. 해당 클래스의 @SpringBootTest 어노테이션은 SpringBoot를 실행할 때 사용되는 환경들과 의존성들을 전부 load 해주는 기능을 가지고 있다. SpringBoot가 실제로 실행되는 환경처럼 실행된 다음 그 환경에서 테스트를 하고 테스트가 끝나면 중지되는 절차를 제공해준다. 실제로 실행되려면 config-server가 실행되어야 mariadb와 연동해서 테스트가 가능하니 config-server를 실행하고 conte..

헤더에 담긴 사용자 ID를 마이크로서비스에서 조회하여 물품 등록시 사용자 ID를 데이터에 입력한다. item-service 마이크로서비스 프로젝트 ItemController에서 물품등록 API인 add메서드에서 로직을 구현한다. Header 값을 가져오기 위해 파라미터에 request 객체를 받아온다. Item 도메인에 accountId 추가 ItemService에 insertItem 메서드에 accountId 인자를 더 받아서 accountId를 추가한 item객체로 데이터에 저장한다. 다시 ItemController의 add 메서드에서 insertItem 메서드에 header에서 받아온 accountId를 전달한다. config -> eureka -> gateway -> authentication -..

인증서버에서 발급된 토큰과 사용자ID를 가지고 gateway server에서 검증을 진행한 후 검증 통과시 마이크로 서비스를 진행하고 실패시 에러 메세지를 반환하는 로직 구현 gateway server에 build.gradle 에 필요한 의존성 추가 domain 패키지 추가하여 authentication-server에 Account 도메인 복사하여 붙여넣어준다. repository 패키지 추가하여 AccountRepository 인터페이스를 추가한다. existsByAccountIdAndToken 메서드는 account 테이블에 사용자 ID와 token 값으로 데이터가 존재하는지 검색하기 위해 사용한다. service 패키지 추가하여 AccountService 클래스를 추가한다. gateway serve..

JWT(Json Web Token) 기술을 이용하여 인증키를 발급받고 인증키를 이용해서 인증처리를 진행하는 기능을 개발한다. JWT는 Json 포맷을 이용하여 사용자에 대한 정보를 관리하는 Web Token 이다. 인증처리 과정 클라이언트가 API 사용을 위해 인증키 발급 요청 인증키가 이미 생성되어 있는지 account DB 테이블에서 조회 인증키가 존재할 경우 인증키 정보를 조회하고 없다면 JWT를 새로 생성하여 account DB 테이블에 저장 인증키 정보를 클라이언트에 전달 발급받은 토큰 값을 item 등록 요청하면서 HTTP Header 값에 JWT 값을 함께 전송 Gateway Server에서 Header에 들어온 JWT 값을 가지고 account 테이블에서 조회해서 존재하는 인증키인지 검증 ..

모든 마이크로서비스에 대한 요청과 응답에 대한 JSON 데이터를 Gateway Server 로그에 출력하는 로직을 추가한다. 로그를 남기기 위해 사용하는 Slf4j 라이브러리를 사용할 수 있는 lombok 라이브러리를 gateway-server build.gradle에 추가한다. gateway-server에 filter 패키지 추가 후 LoggingFilter 클래스 추가 package org.msa.gatewayserver.filter; import java.io.ByteArrayOutputStream; import java.nio.channels.Channels; import java.nio.charset.StandardCharsets; import org.reactivestreams.Publishe..

Spring Cloud Gateway Gateway란 클라이언트의 요청을 직접받아 직접 서비스 모듈에서 처리하는 것이 아닌 Gateway에서 모든 요청을 받아 공통된 로직처리, 인증 및 인가, 로드밸런싱, 라우팅등을 처리 하고 알맞은 요청을 각 서비스에 분산시키는 역할을 한다. Spring Cloud Gateway는 Spring 생태계 기반의 API Gateway를 제공해주는 라이브러리로 간단하지만 효율적인 방법으로 API를 라우팅하는 방법을 제공한다. 작동 원리 클라이언트가 Spring Cloud Gateway에 요청하면 Gateway Handler Mapping에서 요청이 경로와 일치한다고 판단한 경우 Gateway Web Handler로 요청이 전송된다. 이 핸들러는 요청과 관련된 Filter Ch..

설치된 Eureka 서버에 item-service 마이크로 서비스를 연동한다. item-service-local.yml 을 열어서 eureka 연동 설정을 추가한다. eureka.instance.prefer-ip-address: true로 설정하여 IP주소를 이용하여 Eureka 서버에 등록한다. eureka.client.register-with-eureka: item-service를 eureka-server에 등록해야 하니 true 설정 eureka.client.fetch-registry: item-service에 대한 저장 내용을 출력해야 하니 true 설정 Eureka에 연동해서 registry에 등록할 마이크로 서비스는 spring-cloud-starter-netflix-eureka-client ..

Spring Cloud Eureka Server 마이크로서비스에 대해 모니터링하는 서버로 마이크로 서비스의 IP나 PORT 정보를 사용하지 않고 간단하게 서비스명을 통해 마이크로 서비스를 사용할 수 있다. Eureka Server 에서 제공하는 대시보드를 통해 마이크로 서비스가 실행중인지 중지 상태인지 확인할 수 있다. https://cjw-awdsd.tistory.com/52 [Spring Cloud] Eureka 개념 및 예제 최근 Spring Cloud에 대해 학습한 것을 정리하고자한다. 이번 글에서는 Eureka개념과 Eureka Server 생성 예제를 정리한다. Eureka는 무엇인가? Eureka는 클라우드 환경의 다수의 서비스(예: API 서버)들의 로 cjw-awdsd.tistory.co..

데이터베이스 비밀번호 암호화 설정파일에 비밀번호와 같은 값이 그대로 노출될 경우를 방지하기 위해 암호화된 값으로 치환하여 작성하고 실제 사용시엔 복호화하여 사용할 수 있도록 한다. 암호화 사용을 위해 config-server 모듈에서 resources 하위에 bootstrap.yml 파일을 만들고 암호화 설정을 적어준다. bootstrap을 통해 암복호화 기능에 필요한 라이브러리 의존성 추가 현재 local 프로필에서 사용중인 item-service-local.yml 파일에 DB 비밀번호는 !qwer1234이다. config-server 모듈을 실행시키고 postman을 열어 http://localhost:8080/encrypt URI 경로로 body에 비밀번호를 보내면 암호화한 코드가 응답된다. 해당 ..

마이크로 서비스의 설정들을 관리하는 Config Server 생성. Spring Cloud Config 는 분산 시스템에서 설정 정보(application.yml) 를 외부에 보관할 수 있도록 지원해주는 서비스이다. 분산되어 있는 마이크로 서비스에대한 설정을 한 곳에서 관리하면 찾아가기도 쉽고 실행 포인트를 설정 구분을 통해 관리할 수 있다. 보통 어플리케이션 개발시 로컬, 개발, staging, 운영 등등 나뉠 수 있는데 미리 지정한 설정 파일로 각각 용도에 맞게 실행시킬 수 있다. 또한 서버를 재배포 하지 않고 설정 파일의 변경 사항을 반영할 수도 있다. 각각 Microservice A, Microservice B는 Config Server와 통신하여 각 서비스에 대한 yaml 파일을 참조하여 실행하..