| 해당 글은, 문제 해결 경험을 기록하는 글이기 때문에, 개념 및 원리에 대해 구체적으로 설명하지 않습니다.
1. Service Discovery 패턴이란?
MSA 서비스간 통신시, 각각 IP와 Port가 달라 매번 수동으로 관리해줘야 하는 불편함이 있으며, 이를 위해 각 서비스의 IP와 Port에 대해 저장하고 관리하는 것을 말합니다.
서비스의 IP와 Port는 Service Registry에 저장 및 관리됩니다.
2. 구현 방법
구현 방법에는 아래 두가지 방법이 있습니다.
1) Client-Side Discovery Pattern
서비스 클라이언트가 Service Registry에서 서비스의 위치를 찾아서 호출하는 방식
2) Server-Side Discovery Pattern
호출되는 서비스 앞에 로드밸런서를 넣어, 로드밸런서가 Service Register로부터 등록된 서비스의 위치를 전달하는 방식
로드밸런서가 필수적으로 필요한 점, Eureka 참고자료가 많다는 점을 고려하여 Client-Side Discovery Pattern을 적용하기로 했습니다.
3. Eureka를 이용하여 Client-Side Discovery Pattern 적용
Eureka Server를 새로 구성하여, 각 서비스에 대한 정보를 관리할 수 있게 해야합니다.
각각의 서비스에서 다른 서비스의 ip와 port가 필요할 때, Eureka Server의 Service Registry에서 확인할 수 있습니다
[ 더보기 + 확인 ] Eureka 서버 구성 방법 🔽
# application.java
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
# gradle 설정
ext {
set('springCloudVersion', "2024.0.0")
}
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
# application.yml
server:
port: 8761
spring:
application:
name: Eureka
eureka:
client:
register-with-eureka: false
fetch-registry: false
4. 서비스 분리
이제 Eureka Client가 될 서비스를 분리해야합니다.
현재 서버는 아래와 같이 알림 서버를 제외하고 모놀리틱 아키텍처로 하나의 서버에 모든 서비스가 포함되어 있습니다.
이를 분리하기 위해 아래와 같이 크게 3개로 나누었습니다.
- 주요 서비스(project-service) / 땅따먹기 서비스(region-service) / 알림 서비스(notification-service)
주요 서비스 : 유저 서비스, 장소 서비스, 방문 예정 서비스, 리뷰 서비스 등등
땅따먹기 서비스 : 땅따먹기 서비스, 스토리 서비스
알림 서비스 : 알림 서비스
기존에는 위보다 더 세세하게 나누어, 독립적으로 관리하고 싶었으나 이번에 처음으로 분리해보는 것이기 때문에 땅따먹기, 알림 서비스를 먼저 분리할 예정입니다. 주요 서비스는 비즈니스 로직, DB 연관관계가 복잡하게 얽혀있기 때문에 많은 시간이 소요될 것으로 예상되어, 처음에는 크게 나누고 점차 작게 나눌 예정입니다.
5. 땅따먹기 서비스 기능 분리 및 Eureka Client 생성
Project-Service와 Region-Service로 분리하여 클라이언트를 구성하였습니다.
project-service는 회원, 장소 검색, 장소 추천, 장소 리뷰, 장소 방문 예정 등 의 기능이 포함되어 있습니다.
region-service는 땅따먹기, 스토리 기능이 포함되어 있습니다.
| notification-service는 기존에 분리되어 있기 때문에 생략합니다.
땅따먹기 기능 : 해당 지역에서 가장 많은 반려동물 동반 가능 장소를 방문한 유저가 땅 주인이 되는 기능, 해당 장소 방문시 실시간 리뷰를 통해 방문 여부를 인증할 수 있다. 해당 지역의 땅 주인이되면, 스토리를 업로드할 수 있는 혜택을 가질 수 있습니다.
[ 더보기 + 확인 ] Eureka Client 구성 방법 🔽
Region-Service Client
# application.java
@EnableDiscoveryClient
@SpringBootApplication
public class RegionApplication {
public static void main(String[] args) {
SpringApplication.run(ProjectApplication.class, args);
}
}
# gradle 설정
ext {
set('springCloudVersion', "2023.0.4")
}
dependencies {
//eureka
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
# application.yml
eureka:
instance:
prefer-ip-address: true
client:
register-with-eureka: true
fetch-registry: true
serviceUrl:
defaultZone: http://localhost:8761/eureka/
management:
endpoints:
web:
exposure:
include: "*"
'댕댕어디가 프로젝트 > MSA' 카테고리의 다른 글
[댕댕어디가] MSA 아키텍처 전환기(6) - 서비스간 동기 통신(Spring Cloud Open Feign) (0) | 2025.01.12 |
---|---|
[댕댕어디가] MSA 아키텍처 전환기(5) - 서비스간 비동기 통신 (kafka 연결) (0) | 2025.01.11 |
[댕댕어디가] MSA 아키텍처 전환기(4) - 서비스간 비동기 통신하기 (0) | 2025.01.08 |
[댕댕어디가] MSA 아키텍처 전환기(3) - API Gateway 구현 (0) | 2025.01.07 |
[댕댕어디가] MSA 아키텍처 전환기(1) - MSA 전환 이유 (0) | 2024.12.29 |