Eureka 유레카의 역할은 Service Discovery의 역할로써 각 서비스들의 상태와 연결 주소값을 가지고 있는 역할을 한다. (=전화번호 목록 같이) Service Discovery 프로젝트 생성 다른 Dependencies들은 선택할 필요 없이 Eure
우측에 선택된 의존성과 같이 설정해준다.@EnableDiscoveryClient 어노테이션을 추가하여 Client라고 선언한다. 다른 어노테이션 중 Eureka Client 어노테이션도 존재하는데 둘 중 어느것을 사용해도 상관 없으나 규격에 해당하는 것은 @Enable
매번 서비스를 실행할 때 port를 지정해주고 실행한다면 개발자는 포트번호를 매번 확인해야하며 서비스를 갑자기 확장해야할 때 귀찮은 일이 많아진다. 그래서 Spring boot에서 자체적으로 제공하는 랜덤 포트 방법을 적용시켜서 실행시켜보자.지난 포스트에서 작성한 us
다음과 같이 3개의 의존성을 추가해서 생성한다.yml 파일을 설정한 뒤에 서버를 실행해보자!그럼 정상적으로 실행되며 was가 Tomcat(동기)이 아닌 Netty(비동기)로 실행됨을 확인할 수 있다. was가 Netty로 실행됨을 확인할 수 있으며 gateway 서버는
기존의 작성한 yml 설정을 모두 주석처리를 한다.그리고 config 패키지를 만들어 FilterConfig java 파일을 생성한 뒤다음과 같이 설정해주면 기존의 yml 설정과 동일한 설정에 filter를 주어 header에 해당 값들을 넣어줄 수 있다.기존의 코드에
이전에 필터 설정 부분을 직접 작성하여 적용했던 방법과 달리 CustomFilter java 파일을 생성하여 처리해보려고 한다. 위의 yml 파일의 내용을 수정하기 전에 CustomFilter java 파일을 먼저 생성하자.CustomFilter 파일을 다음과 같이 작
GlobalFilter는 저번 포스트에서 적용된 CustomFilter와 조금 다르다. 다른 점은 CustomFilter는 yml에서 각 서비스마다 직접 하나씩 등록을 해주어야한다.하지만 Global Filter는 따로 적용하지 않아도 자동으로 모든 Custom Fil
우리가 이전 포스트들에서 항상 아무생각 없이 override하여 사용했던 apply를 뜯어보자.다음과 같이 exchange와 chain 매개변수를 받아서 람다식으로 풀어서 사용했는데 우리가 사용하는 exchange와 chain은 어디서 오는 것일까?우리가 지금까지 람다
gateway를 통해서 service를 구동하는 방법을 이전 포스트까지 진행했다. 그럼 이전에 사용했던 Eureka를 사용하여 Gateway와 service, Eureka를 모두 연결해서 사용해보자!사용자의 요청 -> Gateway -> Eureka로부터 서비스의 위치
프로젝트 생성 후 @EnableDiscoveryClient를 통해 Eureka Client로 등록시켜준다.yml에 설정도 해준다.서비스 상태 체크를 위한 health check url을 만들자.서비스를 실행하여 Eureka에서 서비스를 확인할 수 있다.실제 health
ModelMapper 추가Dto > Entity로 혹은 Dto > Vo로 변환할 때 set이나 생성자를 통해서 해도 되지만 좀 더 간편하게 변경하기 위한 라이브러리실제로 데이터를 전송하면 Create User!를 반환받으며db에도 정상적으로 데이터가 들어갔다.Strin
Security를 위한 class 파일 하나를 생성하여 설정 내용을 적고서버를 실행시키는 Application 파일에 bean으로 등록할 passwordEncoder를 설정해준다. 이 설정은 꼭 여기서가 아니라 하나의 java 파일로 만들어서 등록해도 된다.비밀번호를
pom 수정 및 추가데이터 정상 반환 확인
이전에 작성한 글과 pom 수정까지 동일하게 생성해준다.마지막의 order-service를 추가해준다.유레카에서 모든 서비스들이 정상 등록된것을 확인하고정상적으로 주문이 요청되었다.정상적으로 주문 조회도 가능해졌다.
security의 UsernamePasswordAuthenticationFilter를 구현하여 로그인 요청을 보냈을 때와 로그인을 성공 했을 때 로직을 정의한다.기존의 모두 permit()해주던 코드에서 filter를 통해 거르도록 설정을 변경해 주었다. 여기서 중요한
지난 포스트에서 security를 설정하고 이메일과 비밀번호로 인증이 되는것 까진 확인을 했다. 하지만 security가 모두 자동으로 처리하는 탓에 어떻게 돌아가는지 정확한 구조를 확인하지 못했다. 그래서 이번에는 디버그 모드로 실행하여 break point를 찍어서
jwt를 추가하기 전에 UserDto값을 반환 받아서 토큰 값으로 만들 userId값을 가져와야한다.기존의 log만 찍었던 로직을 다음과 같이 입력 받은 email 값으로 userId값을 받아올 수 있도록 변경한다.하지만 여기서 getUserDetailsByEmail(
user service에서 jwt를 통해 토큰을 발급받는 기능을 추가했으니 gateway에서 filter 기능을 통해 로그인 인증 처리를 해보자.jwt를 추가해준다.javax.xml.bind의 경우 아래 예제를 진행하다보면 getBody() 메서드를 실행했을 때 해당
Spring Config는 MSA 구조에서 여러 서비스들의 설정 값을 하나의 서버에 등록해두고 여러 서버에서 해당 서버에 설정된 값을 가져와서 사용할 수 있도록 사용할 수 있게 해주는 기술이다.yml 파일 하나를 생성하고 git으로 관리하도록 commit 단계까지만 진
의존성을 먼저 추가해준다.bootstrap.yml 파일을 생성하여 내용을 입력해준다.application.yml에 config 사용을 위한 설정을 추가해준다. 이번에 httpstrace 옵션을 추가해보자httpstrace를 사용하기 위해 application 파일에 H
설정 파일은 개발 환경(local, dev, test, prod 등)에 따라 설정값을 나누고 실행할 수 있다. Spring Config에서도 동일한 기능을 지원하는데 확인해보자.dev와 prod 두개의 파일을 각각 ecommerce-dev ecommerce-prod로
Spring Config를 이용하면서 장점은 모든 서비스의 설정을 하나의 서버에서 관리할 수 있다. 였지만 단점으로는 서버의 설정 값이 변경되면 모든 서버를 재부팅하거나 모든 서버의 refresh를 주어야 설정을 변경할 수 있었다. 그런 귀찮은 점을 개선하기 위한 기술
💭Microservice 통신? MSA를 구성하다보면 service간의 통신이 필요할 때가 있다. 예를 들어 유저의 주문 정보를 가져올때는 user-service에서 주문 정보를 가지고 있는게 아니라 order-service에서 정보를 가져와서 user-service
FeignClient는 Rest Call을 추상화한 Spring Cloud Netflix 라이브러리로 이전에 학습한 RestTemplate보다 훨씬 직관적이고 사용하기도 쉽다.의존성 추가하고@EnableFeignClients을 추가해준다.그 후 OrderServiceC
🔨Kafka 설치 https://kafka.apache.org/downloads 에 접근하여 다운 받으면 된다. 압축을 풀고 bin 내부에 파일을 확인하면 여러 Shell Script가 존재한다. window의 경우 windows 내부의 bat 파일을 실행하면 된
🔨Maria DB 설정 을 통해 Maria DB에 mydb라는 테이블을 하나 만들어두자. order-service에 mariaDB driver를 추가해주자 3.x가 나왔지만 잘 모르니까 2.7.2로 설치했다. 그후에 2개의 테이블을 생성해준다. 🔨Kafka
Kafka의 동작 구조를 살펴봤으니 실제로 Spring Cloud에서는 어떻게 사용하는지 직접 만들어서 사용해보자.우리가 지금까지 만들었던 catalog-service와 order-service를 사용하여 주문이 발생했을 때 catalog-service에 존재하는 재고
maria db에 쿼리문을 통해 orders 테이블을 추가한다.설정 yml 파일에 다음과 같은 내용으로 변경한다.의존성에 mariadb 의존성이 추가되어 있을 경우에 가능하다.그리고 서비스들을 실행시켜 다음과 같이 주문을 생성했다.maria db에서도 정상적으로 전송된
현재 order-serivce를 실행시키지 않고 요청했을 경우 getOrders()를 호출하는 과정에서 에러가 발생하여 user-service로부터 500 에러를 반환받는다. 어찌보면 getOrders() 메서드가 에러가 발생하면서 500이 떨어지는게 맞는거 같지만 하
spring에서 기본적으로 제공해주는 micrometer를 사용해보자.의존성을 추가해주고yml 설정파일에 info, metrix, prometheus를 추가해주었다.@Timed 어노테이션을 추가해주고 value는 우리가 구분할 이름이다.의존성 추가해주고yml 설정파일에
🔨Network 생성하기 네트워크를 통해 컨테이너를 묶어주면 ip로 따로 통신하지 않고 컨테이너의 이름으로 서로 통신이 가능하게 만들어준다. 위 명령어로 네트워크를 생성할 수 있다. > 따로 설정하지 않고 컨테이너를 그냥 실행하면 자동으로 default netw
예전에 만들어놨던 node.js 기반의 포트폴리오 사이트가 있는데 수정해서 jenkins에 등록해놓고 사용하려고 한다. 🐋Docker network 생성 프론트 프로젝트는 최대한 aws에 올리려고 한다. 그래서 우선 network부터 다시 세팅해야한다. 🐋Doc