๐ ์ฐ๋ฆฌ๋ Spring Cloud๋ฅผ ํ์ฉํ์ฌ MSA๋ฅผ ๊ตฌ์ถํ๋ค.
Service Discovery ํํธ 3
Service Discovery์ ์ญํ ์ ๊ฐ๋ตํ๊ฒ ์ ๋ฆฌํ์๋ฉด,
Service Discovery๋?
- ๋ง์ดํฌ๋ก์๋น์ค์ ์ ๋ณด(์์น ๋ฑ)๋ฅผ ๋ฑ๋กํ ์ ์๋ค.
- ์ธ๋ถ์ ์์ฒญ์ด๋ ์๋น์ค๊ฐ ๋ง์ดํฌ๋ก์๋น์ค์ ์ ๋ณด๋ฅผ ๊ฒ์ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
Spring Cloud์์๋ Spring Cloud Netflix Eureka๊ฐ Service Discovery์ ์ญํ ์ ์ํํ๋ค. Eureka๋ Eureka Server์ Eureka Client๋ก ๊ตฌ์ฑ๋๋ค.
Eureka ํด๋ผ์ด์ธํธ๋?
MSA๋ฅผ ๊ตฌ์ฑํ๋ ์์๋ค ์ค Eureka ์๋ฒ์์ ๋ชจ๋ํฐ๋ง ๋ฐ ๊ด๋ฆฌ๋ฅผ ์ํ๋ ์์๋ฅผ Eureka ํด๋ผ์ด์ธํธ ์ค์ ์ ์งํํด์ ๋ฑ๋กํ ์ ์๋ค.
๐ ์ด๋ฒ์๋, ๋ก๋๋ฐธ๋ฐ์ฑ์ ์ฌ์ฉํ๊ธฐ ์ํด Eureka Client์๊ฒ ๋๋ค ํฌํธ๋ฅผ ๋ถ์ฌํ ๊ฒ์ด๋ค.
โ Service Discovery์ Eureka Client๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํด ๊ตฌ๊ธ ๊ฒ์์ ํตํด ๋ง์ ๋ธ๋ก๊ทธ์ ์๋ฃ๋ฅผ ์ฐพ์๋ดค๋ค. ํฌํธ๋ฒํธ๋ฅผ ๋๋ค ํฌํธ๋ก ์ค์ ํ๋ ๋ธ๋ก๊ทธ ๊ธ๋ค์ด ๋ง์ด ์์๋๋ฐ ๊ทธ ์ด์ ์ ๋ํด์๋ ๋ช ํํ์ง ์์๋ค. ์ด์ ๋ฅผ ๋ชจ๋ฅด๊ณ ๊ทธ๋๋ก ์ ์ฉํ ์๋ ์๊ธฐ ๋๋ฌธ์ ์ ๋๋คํฌํธ๋ฅผ ์ ์ฉํ์ฌ ๊ตฌํํ๋์ง ๊ทธ ์ด์ ์ ๋ํด ๋ ํํค์ณค๋ค. ๊ทธ ๊ฒฐ๊ณผ, ๋ก๋๋ฐธ๋ฐ์ฑ์ ์ฌ์ฉํ๊ธฐ ์ํด ๋๋คํฌํธ๋ฅผ ์ค์ ํ๋ค๋ ๊ฒ์ ์ ์ ์์๋ค.
โญ ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค ํฌํธ๋ฅผ ๋ถ์ฌํ๋ ์ด์ ?
๋๋คํฌํธ์ ์ฌ์ฉ ์ฌ๋ถ๋ ๋ง์ดํฌ๋ก์๋น์ค๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์ฌ์ฉ๋๋์ง, LB(๋ก๋๋ฐธ๋์)๋ก ๊ตฌ์ฑ๋์ด ์ฌ์ฉ๋๋์ง, ์ฌ์ฉ ์ ๋ฌธ์ ๊ฐ ๋์์ ๋ ๋ณต๊ทํด์ผ ํ๋ ๊ตฌ์กฐ๋ ์ด๋ป๊ฒ ๋์ด ์๋์ง ๋ฑ์ ๋ฐ๋ผ ๊ฒฐ์ ํ ์ ์๋ค.
์ด ํ๋ก์ ํธ์์ ๋๋คํฌํธ(port: 0)์ ๋ํ ์ค์ ์ LB์ฌ์ฉ์ ๋ณด์ด๊ธฐ ์ํจ์ด๊ณ , ํฌํธ๋ฅผ ๊ณ ์ (port: 8081)์ผ๋ก ์ค์ ํ ์ํ์์ ์งํํด๋ ๋ฌธ์ ๋ ์๋ค.
๋ค๋ง, Service Discovery์์ ๋ฑ๋ก๋ ์๋น์ค๋ค์ด ํฌํธ ๊ฐ์ ์ถฉ๋์ด ๋ฐ์ํ ๊ฒฝ์ฐ, ํด๋น ์๋น์ค๋ฅผ ์ฐํํ ์ ์๋ ํฌํธ๋ฅผ ์ง์ ํ์ฌ ์๋กญ๊ฒ ์คํํ์ง ์๊ณ , ์ถฉ๋์ด ๋ฐ์ํ ์๋น์ค๋ ์ค์ง์์ผ ๋ฒ๋ฆฌ๊ฒ ๋๋ค. ํฌํธ๋ฅผ ์ ๊ตฌ๋ถํ์ฌ ์๋น์ค๋ค์ ๋ฐฐํฌํ๋ค๊ณ ํ์ ๋๋ ๋ฌธ์ ๊ฐ ์์ ์๋ ์๋ค.
๊ทธ๋ฐ๋ฐ, ์๋น์ค์์ LB๋ฅผ ์ฌ์ฉํ๋๋ก ๋์ด ์๋ค๋ฉด, LB์ ์ฐ๊ฒฐ๋๋ ๋ค์์ ๋์ผ ์๋น์ค๋ค์ ๊ฐ์ ํํ(์ฝ๋)๋ก ์์ฑ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ธ๋ฐ, ๋งค๋ฒ ์คํํ ๋๋ง๋ค ํฌํธ๋ฅผ ๋ณ๊ฒฝํ๋ ์์ ์ ํ๊ธฐ์๋ ๋ฒ๊ฑฐ๋ก์ธ ์ ์๋ค. ์ด๋ ๋๋คํฌํธ๋ก ์คํํ๋ฉฐ ์์์ ์ฌ์ฉ๊ฐ๋ฅํ ํฌํธ๊ฐ ํ ๋น๋๊ณ , Service Discovery์ ๋ฑ๋ก๋ ๋๋ ์๋น์ค๋ช ์ผ๋ก ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์, ์ฌ๋ฌ ๊ฐ์ ์๋น์ค๊ฐ ์ฐ๊ฒฐ๋์ด ์์ด๋ ํ๋์ ์๋น์ค๋ช ์ด ์์ฒญ์ ๋ฐ์ ํด๋น ์๋น์ค๋ค์ ์์ฒญ์ฒ๋ฆฌ๋ฅผ ๋ฐฐ๋ถํด ์ค ์ ์๊ฒ ๋๋ค.
์ค์ ๋ก MSA ํํ๋ก ๊ตฌ์ฑ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ค์ ์ปจํ ์ด๋ ๊ฐ์ํ ํํ๋ก ์ด์๋๋ ๊ฒฝ์ฐ๊ฐ ๋๋ถ๋ถ์ธ๋ฐ, Docker๋ Kubernetes์์ ์ปจํ ์ด๋๋ฅผ ๊ธฐ๋ ํ ๋๋ ์ธ๋ถ์ ์ฐ๊ฒฐ๋๊ธฐ ์ํ ํฌํธ๋ฅผ ๋๋คํฌํธ๋ก ์ค์ (๋ฒ์๋ ์ง์ ํ ์ ์์ต๋๋ค)๋์ด ์ฌ์ฉ๋๋ค. ์ปจํ ์ด๋ ์์ฒด๋ ๋ ๋ฆฝ์ ์ธ IP๋ฅผ ๊ฐ์ง๊ณ ์๋ VM์ด๋ผ๊ณ ๋ณด์๋ฉด ๋๊ณ , ์ด ์์์ ์ฌ์ฉ๋๋ ํฌํธ๋ ์ด๋ ํ ํฌํธ๋ก ์ง์ ๋์ด ์๋๋ผ๋ ์๊ด์์ด, ์ปจํ ์ด๋ ์ธ๋ถํ๊ณ ์ ์ฐ๊ฒฐ๋ง ์ ๋์ด ์๋น์ค๋๋ ๊ตฌ์กฐ๋ผ๊ณ ์ดํดํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
Eureka ํด๋ผ์ด์ธํธ ๋๋ค ํฌํธ ์ง์ ํ๊ธฐ
์กด์ฌํ๋ ๋ง์ดํฌ๋ก์๋น์ค ๋ชจ๋์๊ฒ ๋์ผํ๊ฒ ์ค์ ํ๋ค.
- user-service
- baverage-service
- community-service
์ผ๋ฐ์ ์ธ ํ๊ฒฝ์์๋ ์ง์ ๋ PORT๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด์ํ๋ค. ๊ทธ๋ฌ๋ MSA์ ๊ฐ์ด LB ํ๊ฒฝ์ ์ํด ์ฌ๋ฌ ์๋น์ค๋ฅผ ๋ฑ๋กํ๊ฑฐ๋ ์๋์ผ๋ก ์๋น์ค๊ฐ ์ฆ๊ฐ๋์ด์ผ ํ๋ ์ํฉ์์๋ random port๋ฅผ ์ด์ฉํ๋ค. ๋์ผํ ์๋น์ค๋ฅผ ์ฌ๋ฌ ๊ฐ ์คํํ๋ ๊ฒฝ์ฐ๋ผ๋ฉด, ๊ด๋ฆฌ์๊ฐ ๋งค๋ฒ PORT ๋ฒํธ๋ฅผ ์ง์ ํ๋ ๊ฒ๋ ํ๊ณ๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ด๋ค.
์๋์ ์ค์ต์ ํตํด ํ์ธํด ๋ณด์.
๋ง์ฝ, user-service ์ธ์คํด์ค๋ฅผ ์ฌ๋ฌ ๊ฐ ๋์ด๋ค๋ฉด ์๋์ ๊ฐ ๋งค๋ฒ ํฌํธ๋ฒํธ๋ฅผ ๋ฐ๊พธ๊ณ ์คํํ๊ธฐ ๋ถํธํ๋ค.
4. Eureka ํด๋ผ์ด์ธํธ์ ๋๋ค ํฌํธ ํ ๋น
yml ํ์ผ์์ port๋ฒํธ๋ฅผ 0๋ฒ์ผ๋ก ์ค์ ํ๋ฉด ๊ฐ์ ์๋น์ค๊ฐ ์คํ๋ ๋๋ง๋ค ๋๋ค์ผ๋ก ํฌํธ ๋ฒํธ๊ฐ ํ ๋น๋๋ค.
# application.yml
# ํฌํธ๋ฒํธ๋ฅผ 0์ผ๋ก ๋๋ฉด ํฌํธ๋ฒํธ๊ฐ ๋งค๋ฒ ๋๋ค์ผ๋ก ํ ๋น๋๋ค.
server:
port: 0
server port ์ค์ ์ ๋๋ค ํฌํธ๋ก ์ง์ ํด ์ฃผ๋ฉด ์คํํ ๋๋ง๋ค spring boot๊ฐ 50,000 ์ด์์ธ ๋๋ค ํ port ๋ฒํธ๋ฅผ ํ ๋นํด ์ค๋ค.
Spring Cloud Eureka ์๋ฒ ์คํ
Status์ ํฌํธ๋ฒํธ๊ฐ 0์ผ๋ก ๋ณด์ด์ง๋ง, ๋ง์ฐ์ค๋ก ์ด ์ฃผ์์ ์ปค์๋ฅผ ์ฌ๋ ค๋์ผ๋ฉด ์ผ์ชฝ ํ๋จ์
http://desktop-4v4j52s:51873/actuator/info ์ฆ, 51873 ํฌํธ๊ฐ ๋๋ค์ผ๋ก ํ ๋น๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๊ทธ๋ฌ๋, ์์ ๊ฐ์ด ์ค์ ํ ๊ฒฝ์ฐ eureka ์๋ฒ์ ์ธ์คํด์ค ์ด๋ฆ์ 0์ผ๋ก ๊ณ ์ ๋์ด ์๋ฒ๋ฅผ ์ฌ๋ฌ ๊ฐ ๋์ฐ๋๋ผ๋ ESKTOP-4V4J52S:user-service:0 ๋ก ์ธ์คํด์ค๊ฐ ํ ๊ฐ๋ง ๋ฑ๋ก๋๊ฒ ๋๋ค.
ํฌํธ๋ฒํธ๊ฐ 0์ธ user-service๋ฅผ 3๊ฐ ๋์ ์ง๋ง eureka ์๋ฒ์๋ 1๊ฐ๋ก ๋์จ๋ค.
์ฆ, ๋์ผํ service application์ด ์ฌ๋ฌ ๊ฐ ์คํ๋ ๋ yml์์ ์ค์ ํ port์ธ 0์ผ๋ก ์ธ์์ด ๋๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ์ ์๋น์ค๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ด๋ ต๋ค. ๋ฐ๋ผ์, ์ธ์คํด์ค id ๊ฐ์ ์ฌ์ ์ ํด์ผ ํ๋ค.
5. ์ธ์คํด์ค ID ๊ฐ ์ฌ์ ์
random port ์ง์ ์ ์๋น์ค๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด ๊ฐ๊ฐ์ ์๋น์ค๋ฅผ instance-id๋ก ๊ตฌ๋ถํ๋ค.
eureka ํด๋ผ์ด์ธํธ๋ค์ instance-id ๊ฐ์ ๋๋ค์ผ๋ก ๋ถ์ฌํ๋ค.
# application.yml
# eureka ์ค์
eureka:
instance:
# ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ ํธ๋ฅผ ์คํํ ๋ ์ ๋ ์นด ์๋ฒ์์ ๊ฐ๊ฐ์ ์ธ์คํด์ค๋ฅผ ์๋ณํ๊ธฐ ์ํด ์ค์
# 'random.value๋ฅผ ํ์ฉํ์ฌ ๋๋ค ๊ฐ์ ์์ฑํด ๊ฐ ์ธ์คํด์ค๋ฅผ ๊ณ ์ ํ๊ฒ ์๋ณ
instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}
- eureka: instance: instance-id:
- ํ๋ก์ ํธ๋ฅผ eureka ์๋ฒ์ ๋ฑ๋กํ๊ณ ์ ๋ ์นด ์๋ฒ๋ก ์ ์ํด ๋ณด๋ฉด ์์ ๊ฐ์ด ๋ฑ๋ก๋ ์๋น์ค๋ฅผ ํ์ธํ ์ ์๋ค.
- ํ์ง๋ง, ๊ฐ์ ํ๋ก์ ํธ๋ฅผ ์ฌ๋ฌ ๊ฐ ๋์ฐ๊ฒ ๋๋ฉด ํฌํธ๋ฒํธ๊ฐ ๊ฐ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ๊ฐ ๋์์ง๋๋ผ๋ eureka ์๋ฒ์ 1๊ฐ๋ง ํ์๋๋ ํ์์ด ๋ฐ์ํ๋ค.
- ๋ฐ๋ผ์, ์คํ๋๋ ํ๋ก์ ํธ๋ง๋ค ๊ตฌ๋ถํด ์ฃผ๊ธฐ ์ํด ํ๊ธฐ๋๋ instance-id ๊ฐ์ ๋ณ๊ฒฝํด์ ์ ์ฉํด ์ฃผ๋ ์ค์ ์ด๋ค.
- ${spring.cloud.client.hostname}
- ํธ์คํธ ์ด๋ฆ (ip ํ์)
- ${spring.application.instance_id:${random.value}}
- ์ธ์คํด์ค id ๊ฐ์ ๋๋ค์ผ๋ก ์ค์
6. ํ์ฌ๊น์ง ์ต์ข application.yml ํ์ผ
# application.yml
# ํ์ฌ ํ๋ก์ ํธ ๋๋ค ํฌํธ๋ก ์ง์
server:
port: 0
# ํ์ฌ ํ๋ก์ ํธ ์ด๋ฆ ์ง์
spring:
application:
name: user-service
# eureka ์ค์
eureka:
client:
# eureka ๋ฑ๋ก ์ฌ๋ถ
register-with-eureka: true
# eureka ์๋ฒ๋ก ๋ถํฐ ์ธ์คํด์ค๋ค์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ๊ฒ์ธ์ง ์ค์ ํ๋ ์์ฑ
fetch-registry: true
# eureka ์๋ฒ ์ฃผ์์ ๋ง์ดํฌ๋ก์๋น์ค ์ ๋ณด ๋ฑ๋ก
service-url:
defaultZone: http://admin:1234mst@localhost:8761/eureka
instance:
# ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ ํธ๋ฅผ ์คํํ ๋ ์ ๋ ์นด ์๋ฒ์์ ๊ฐ๊ฐ์ ์ธ์คํด์ค๋ฅผ ์๋ณํ๊ธฐ ์ํด ์ค์
# 'random.value๋ฅผ ํ์ฉํ์ฌ ๋๋ค ๊ฐ์ ์์ฑํด ๊ฐ ์ธ์คํด์ค๋ฅผ ๊ณ ์ ํ๊ฒ ์๋ณ
instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}
Spring Cloud Eureka ์๋ฒ ์คํ
instance-id๋ฅผ ๋๋ค์ผ๋ก ๋ถ์ฌํ๋ฉด Eureka server์์ ์ค์ ํ instance-id๋ก ์ธ์คํด์ค๊ฐ ๊ฐ๊ฐ ๋ณด์ด๊ฒ ๋๋ค.
3๊ฐ์ user-service๋ฅผ ์คํ์ํค๋ฉด ๊ฐ๊ฐ instance-id ๊ฐ ๋๋ค์ผ๋ก ์์ฑ๋์ด Eureka server์์ ์ ์์๋ํ๋ค.
์ฐธ๊ณ ์๋ฃ
https://yarisong.tistory.com/42
https://m.blog.naver.com/qjawnswkd/222307979571
https://velog.io/@boo105/MSA-EUREKA-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0
https://devhan.tistory.com/m/260
https://substantial-park-a17.notion.site/6-Eureka-057c942a7a4041bf87ab5cd3043af021
'Software Architecture > MSA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[MSA] Spring Cloud Gateway์ Netflix Zuul์ ์ฐจ์ด์ (API Gateway) (0) | 2024.03.16 |
---|---|
[MSA ๊ตฌ์ถํ๊ธฐ] 5. Spring Cloud Gateway ํ๋ก์ ํธ ์์ฑํ๊ธฐ (API Gateway) (0) | 2024.03.15 |
[MSA ๊ตฌ์ถํ๊ธฐ] 3. Eureka ํด๋ผ์ด์ธํธ ์ค์ (Service Discovery) (1) | 2024.03.13 |
[MSA ๊ตฌ์ถํ๊ธฐ] 2. Eureka ์๋ฒ ๊ตฌ์ถ (Service Discovery) (5) | 2024.03.12 |
[MSA] Service Discovery (0) | 2024.03.12 |