다듬어 정리하지 않고, 공부하면서 작성한 내용입니다. 양해 바랍니다..
Spring Cloud Netflix Eureka
Netfilx Eureka는 디스커버리 서비스의 역할을 하는데, 전화번호부 처럼 어떤 서버가 어느 위치에 있는지 등록하여 찾을 수 있다.
클라이언트가, 어떠한 요청을 API Gateway에 요청 정보를 전달하게 되면, 해당 요청 정보는 서비스 디스커버리에 전달이 되고, 서비스 디스커버리는 해당 요청이 필요로 하는 서비스를 알려주는 역할을 하는것이다.
Eureka Discovery Service 등록하기
application.yml
name : 마이크로 서비스의 고유한 ID (식별값)을 등록함
eureka 설정
- register-with-eureka : EUREKA 디스커버리 서버에 해당 마이크로 서비스를 등록할 것인지를 설정. 현재 우리가 만드는 것이 디스커버리 서버이기 때문에 true로 해버리면 자기 자신을 자기 자신에게 등록하는 행위가 된다. 의미 없으므로 false.
- fetch-registry : EUREKA 서버로부터 인스턴스들의 정보를 주기적으로 가져올 것인지를 설정하는 속성이다. true로 설정하면 갱신 된 정보를 받겠다는 설정이다. 이것도 마찬가지로 false
@EnableEurekaServer
서버를 키고 http://localhost:8761/ 이곳으로 이동하자.
다음 화면이 나왔다면 성공이다!!!
샘플 서비스 등록
@EnableEurekaClient 등록
application.yml
register-with-eureka : 현재 만들고 있는 마이크로 서비스를 디스커버리 서버에 등록하여야 하기때문에 register-with-eureka를 true로 해주었다.
fetch-registry : fetch-registry를 true로 설정하여 서버로부터 갱신 된 정보를 받아온다.
service-url : 유레카 서버의 위치를 설정한다.
이제 실행시켜보자.
(실행시킬 때 당연히 eureka 서버도 실행중인 상태여야 한다.)
다음과 같이 USER_SERVICE가 추가된것을 볼 수 있다!
Status가 UP이면 작동중인 것이고, DOWN이면 중지된 상태이다
서비스 1개 더 실행하기
우측 상단의 Edit Configuration 클릭
복사버튼 클릭
실행
그러면 포트번호가 겹친다...
포트 번호 변경하기 (Edit Configuration -> Enviroment -> VM options에 추가)
-Dserver.port=9002
다시 실행해보면 잘 된다!!!!
(사실 이 방법 말고 terminal이랑 cmd에서 하는 방법도 알려주셨는데, gradle이라 maven이라 구조가 달라서 실패했다.. 일단 몰라도 될 거 같으니 넘어가자)
랜덤 포트번호로 실행하기
포트를 0으로 설정하면 스프링부트가 랜덤으로 포트를 할당해준다.
확인(status의 0번 포트번호에 마우스 버튼 올리면 확인 가능)
랜덤 포트번호의 문제점
유레카 서버에서는 ip:서비스이름:포트번호의 형태로 인스턴스를 표시하는데, 랜덤포트는 보여지는 포트가 항상 0이기 때문에 2개를 생성하더라도 하나처럼 보여진다. 이를 해결해보자.
application.yml
eureka:
instance:
instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}
섹션 2 : API Gateway Service
API Gateway Service란?
사용자가 설정한 라우팅 설정에 따라 각각 엔드포인트로 클라이언트 대신 요청을 전달하고, 응답을 받아 다시 클라이언트에게 전달해주는 역할을 한다.
장점
- 인증 및 권한 부여
- 서비스 검색 통합
- 응답 캐싱
- 정책, 회로 차단기 및 QoS 다시 시도
- 속도 제한
- 부하 분산(로드 밸런싱)
- 로깅, 추적, 상관관계
- 헤더, 쿼리 문자열(쿼리 스트링) 및 청구 변환
- IP 허용 목록에 추가
Netflix Ribbon 이란
Spring cloud에서의 MSA간 통신하는 방법1 ) RestTemplate 사용2 ) Feign Client : 마이크로서비스 이름을 통해 서비스 사용 가능
이런 방법을 사용할 때 로드 밸런싱 어디에서 할 것인가에 대한 문제가 생겼고 이를 Ribbon이 해결하였다.
Ribbon : client side Load Balancer
- 서비스 이름으로 호출
- Health Check
그러나 현재 Ribbon은 사용하지 않는 추세이며 Spring boot 2.4에서 Maintenance 상태이다. 현재는 이 대신 Spring Cloud Loadbalancer를 사용한다
Netflix Zuul
Routing, Gateway 역할을 수행.그러나 현제 Netflix Zuul도 부트 2.4에서 Maintencance 상태이다.
현재는 Zuul 대신 Spring cloud gateway를 사용한다.
강의에서는 Zuul을 사용하였는데, 현재는 해당 버전을 사용할 수 없고, 굳이 사용하려고 이미 만들어진 파일을 불러와 사용하기보다는, 그냥 일단 작동 방식만 시청하고, 후에 cloud gateway 문서를 참고하여 공부할 것이다.
Spring cloud gateway 실습
first-service, second-service 생성
컨트롤러 생성
(컨트롤러에 대해서는 이미 알고 있을거라 생각하고 설명 없이 코드만 작성하겠다.)
first-service
@RestController
public class FirstServiceController {
@GetMapping("/first-service/welcome")
public String welcome(){
return "Welcome to first service";
}
}
second-service
(포트만 8082로 변경)
@RestController
public class SecondServiceController {
@GetMapping("/second-service/welcome")
public String welcome(){
return "Welcome to thr Second Service";
}
}
두개 모두 실행시킨 후
http://127.0.0.1:8081/first-service/welcome
http://127.0.0.1:8082/second-service/welcome으로 이동하자
Spring cloud gateway 서비스 생성하기
(강의에선 Zuul로 진행했으나, 혼자서 한번 도전,,)
server:
port: 8000
spring:
application:
name: my-cloud-gateway-service
cloud:
gateway:
routes:
- id: first-service
uri: http://localhost:8081
predicates:
- Path=/first-service/**
- id: second-service
uri: http://localhost:8082
predicates:
- Path=/second-service/**
http://127.0.0.1:8000/first-service/welcome
http://127.0.0.1:8000/second-service/welcome로 요청
중간에 발생한 오류
cloud.gateway.routes.uri= https://localhost:8081 //http가 아닌 https로 설정해서 발생한 문제였다
📔 Reference
[SC07] Spring Cloud Zuul 이란 ?
Zuul 서버 이해 WHY ? Zuul서버는 API Gateway입니다. 먼저 왜 API Gateway가 필요할까 이해하는게 중요합니다. API Gateway는 API의 요청자인 Client(웹어플리케이션 또는 모바일앱)와 API의 제공자인 backend se..
happycloud-lee.tistory.com
Spring Cloud Gateway(SCG)를 활용한 API Gateway 구축
이번 글에서는 Spring Cloud Gateway(SCG)를 활용하여 API Gateway를 구축해 보겠다. 이 글의 순서는 다음과 같다 1. Spring Cloud Gateway란? 2. Spring Cloud Gateway로 API Gateway 구축하기 3. 마치며 1. Spri..
twofootdog.tistory.com
Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) - 인프런 | 강의
Spring framework의 Spring Cloud 제품군을 이용하여 마이크로서비스 애플리케이션을 개발해 보는 과정입니다. Cloud Native Application으로써의 Spring Cloud를 어떻게 사용하는지, 구성을 어떻게 하는지에 대해
www.inflearn.com
'모각코 > 2021 동계 모각코 : 안꿀단지' 카테고리의 다른 글
[회고] 2회차 회고 (0) | 2022.01.03 |
---|---|
[목표] 모각코 2회차 목표 (0) | 2022.01.03 |
[회고] 1회차 회고 (0) | 2021.12.27 |
[목표] 모각코 1회차 목표 (0) | 2021.12.27 |
[모각코] 2021 동계 모각코 활동계획 (0) | 2021.12.23 |