Spring Cloud 특징
1. centralized configuration management
sping cloud config server 를 사용하여 설정 정보를 외부에 저장한다.
2. Location transparency
서비스 등록, 위치정보 확인, 검색 등 -> 넷플릭스의 유레카서버 사용 가능
3. Load Distribution (Load Balancing) / 또는 API Gateway
서버 요청정보 분산. Ribbon, Spring Cloud Gateway
4. Easier Rest Clinents
서비스 디스커버리: Eureka
로드밸런서?
서비스 디스커버리?
외부의 다른 서비스들이 마이크로 서비스를 검색하기 위해 사용되는 개념이다.
서버/서비스가 어떤 위치에 있는지 저장하여 검색에 관련된 작업을 수행한다.
- 정보는 key-value로 이루어져있다.
- 클라이언트 - 로드밸런서 - 서비스 디스커버리 이렇게 이루어져있다.
즉, 로드밸런서가 서비스디스커버리에 위치를 질의한다.
프로젝트 구성
spring boot 3.3.7
maven
spring cloud eureka
Application설정
@EnableEurekaServer
@SpringBootApplication
@EnableDiscoveryClient
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
}
application.yml 설정
eureka:
client:
register-with-eureka: false
fetch-registry: false
기본값은 true -> 자신의 정보를 자신에게 등록하는 동작을 하게되어 false로 지정
유레카 서버 자체는 기동하되, 자기 자신의 정보를 외부에 있는 다른 마이크로서비스가 유레카 서버로부터 정보를 주고받는 역할을 할 필요가 없기 때문에 서버로서 기동만 하면 됨
마이크로서비스 설정
어플리케이션설정
@EnableDiscoveryClient
eureka:
client:
register-with-eureka: true
fetch-registry: true
register-with-eureka : true -> 현재 만들고 있는 마이크로서비스를 유레카 클라이언트로 등록
fetch-registery : eureka 서버로부터 인스턴스들의 정보를 주기적으로 가져올 것인지 설정. true -> 갱신된 정보를 받겠다
service-url : 유레카 서버 위치 지정
- defaultZone: 유레카서버 엔드포인트 지정. 마이크로서비스 정보를 등록할 유레카서버
유레카 서버에서 확인하기
같은 서비스를 여러개 띄우는 방법 =>
1) 포트 번호를 다르게 실행한다.
1. 다른 포트로 같은것을 여러개 띄우면(spring boot 실행 옵션으로 포트를 변경해준다. (-Dserver.port=) (yml을 변경하지 않는다) 같은 어플리케이션(서비스) 여러개를 유레카가 모두 관리할 수 있다.
2. 쉘스크립트 커맨드로 직접 메이븐 빌드
윈도우의 경우
$env:JAVA_HOME="C:\Users\dailycode\Desktop\openjdk-11.0.2_windows-x64_bin"
.\mvnw spring-boot:run
JAVA_HOME의 환경변수를 설정해주고, run을 해준다.
2) 스프링부트의 yml파일에 랜덤포트로 지정한다.
server:
port: 0
인스턴스 id는 yml파일을 기준으로 가져오기 때문에 포트를 0으로 지정하면 여러개의 인스턴스를 띄우더라도 유레카에서는 1개만 노출된다.
따라서 인스턴스 아이디를 따로 지정해야한다.
eureka:
instance:
instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}
이렇게 여러개의 인스턴스로 띄워진 것을 유레카는 자동으로 연결해준다.
'프로젝트 Project' 카테고리의 다른 글
MSA 앱 만들기 - 1. 서버 구성 (0) | 2025.01.07 |
---|---|
API 명세서 - Swagger + Rest Docs (4) | 2024.08.06 |
API 명세서 - Swagger 적용하기 (feat. Spring security) (2) | 2024.08.06 |
테스트코드 작성하기 (0) | 2024.08.06 |
OAuth2 로그인 구현하기 (1) | 2024.08.06 |