๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“”๊ฐ•์˜ ์ •๋ฆฌ ๋…ธํŠธ

[Spring Cloud๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค] Section 1: Service Discovery

Spring Cloud Netfilx Eureka

์Šคํ”„๋ง ํด๋ผ์šฐ๋“œ ๋„ทํ”Œ๋ฆญ์Šค๋Š” '์Šคํ”„๋ง๋ถ€ํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜'์— ๋Œ€ํ•œ ํ†ตํ•ฉ ํ™˜๊ฒฝ ๊ตฌ์„ฑ์„ ์ง€์›ํ•˜๋Š” Netfilx OSS ์„œ๋น„์Šค์ด๋‹ค.

  • Netfilx OSS์˜ ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค
    • Eureka : Disocovery Server
      • ๊ฐ๊ฐ์˜ ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค๋“ค์ด ๋™์ ์œผ๋กœ ํ™•์žฅ, ์ถ•์†Œ ๋˜๋”๋ผ๋„  ์ธ์Šคํ„ด์Šค์˜ ์ƒํƒœ๋ฅผ ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค
    • Ribbon : Client Side Load Balancer
      • ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐ์‹œํ‚ค๋Š” ๊ธฐ๋Šฅ 
    • Zuul : API Gateway
      • ๊ฐ๊ฐ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์ข…๋‹จ์ ์„ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ
    • Hystrix : Circuit Breaker
      • ํŠน์ • ์„œ๋น„์Šค๊ฐ€ ๊ณผ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ ค ์„œ๋น„์Šค ์žฅ์• ๋ฅผ ์ „ํŒŒํ•˜๋Š” ํŠน์„ฑ์„ ํ•ด๊ฒฐํ•˜๋Š” ๊ธฐ๋Šฅ
    • ์ด์™ธ์—๋„ ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

Netfilx - Eureka

์ด ์ค‘์—์„œ `Eureka`์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

 

๊ฐ ํด๋ผ์ด์–ธํŠธ์˜ ์„ค์ • ๋ฐ IP์ •๋ณด๋ฅผ ์ˆ˜๋™์œผ๋กœ ๊ตฌ์„ฑํ•œ๋‹ค๋ฉด CI/CD์™€ Scaling์— ๋งŽ์€ ์ œ์•ฝ์‚ฌํ•ญ์ด ์ƒ๊ธด๋‹ค.

Eureka๋Š” ์„œ๋ฒ„๋Š” ๋“ฑ๋ก๋œ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ƒํƒœ๋ฅผ ๋‹ค๋ฅธ ์„œ๋ฒ„๋กœ ๋ณต์ œํ•  ์ˆ˜ ์žˆ๊ณ  ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑ ๋ฐ ๋ฐฐํฌํ•˜์—ฌ ๊ฐ€์šฉ์„ฑ์„ ๋†’ํžˆ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

 

Eureka์˜ 2๊ฐ€์ง€ ๊ตฌ์„ฑ์š”์†Œ

  • Service Discovery
    • '๋“ฑ๋ก๋œ ์„œ๋ฒ„'์—์„œ ํŠน์ • ์ž‘์—…์„ ์œ„ํ•œ ์„œ๋ฒ„์˜ ์œ„์น˜ ํŒŒ์•…ํ•˜๋Š” ์ž‘์—…
    • Service Discovery๋ฅผ ์œ„ํ•ด Eureka Server๋ฅผ ์‚ฌ์šฉ
  • Service Registry
    • ์ž์‹ ์˜ ์œ„์น˜(IP)์ •๋ณด๋ฅผ ํŠน์ • ์„œ๋ฒ„์— ๋“ฑ๋กํ•˜๋Š” ์ž‘์—…
    • Service Registry๋ฅผ ์œ„ํ•ด Eureka Client๋ฅผ ์‚ฌ์šฉ

Service Disocovery ๊ณผ์ •

https://wonit.tistory.com/495

๋™์ž‘์ˆœ์„œ

  1. Service Registry ๊ธฐ๋Šฅ์„ ํ•  Eureka Server ๊ฐ€ ์ตœ์ดˆ์— ๊ธฐ๋™๋œ๋‹ค.
  2. Service Registry ์„œ๋ฒ„์ธ Eureka Server ์— ๋“ฑ๋ก๋  ์„œ๋น„์Šค๋“ค์ด ๊ธฐ๋™๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ๋“ฑ๋ก๋œ ์„œ๋น„์Šค๋Š” Eureka Client ๋ผ๊ณ  ํ•œ๋‹ค.
  3. Eureka ์„œ๋ฒ„๋Š” ์ž์‹ ์—๊ฒŒ ๋“ฑ๋ก๋œ Eureka Client ์—๊ฒŒ 30์ดˆ๋งˆ๋‹ค Ping์„ ๋ณด๋‚ด๋ฉฐ Health Checking์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  4. ๋งŒ์•ฝ 30์ดˆ๋งˆ๋‹ค ๋ณด๋‚ด๋Š” Heart Heat๊ฐ€ ์ผ์ • ํšŸ์ˆ˜ ์ด์ƒ์œผ๋กœ ๋™์ž‘๋˜์ง€ ์•Š์œผ๋ฉด Eureka Server๋Š” ํ•ด๋‹น Client๋ฅผ ์‚ญ์ œํ•œ๋‹ค.

Eureka๋Š” ์„œ๋น„์Šค ์œ„์น˜๋ฅผ ๋“ฑ๋กํ•˜๊ณ  ์ฐพ์•„์ฃผ๋Š” ์—ญํ• ๋งŒ์„ ๋‹ด๋‹นํ•˜๋ฏ€๋กœ ๋ณดํ†ต Gateway์„œ๋น„์Šค๋‚˜ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ์™€ ํ•จ๊ป˜ ๋™์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค.

 

ํ•˜๋‚˜์˜ ์„œ๋น„์Šค์— 3๊ฐ€์ง€ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐœ๋ฐœ

 

์Šคํ”„๋งํด๋ผ์šฐ๋“œ์— ์„œ๋น„์Šค ๋“ฑ๋ก

 

์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ

- ์š”์ฒญ์ •๋ณด์— ๋”ฐ๋ผ์„œ ํ•„์š”ํ•œ ์„œ๋น„์Šค๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• 

 

application.yml

* ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ๋กœ์จ Eureka ์„œ๋ฒ„์— ๋“ฑ๋ก (์œ ๋ ˆ์นด์„œ๋ฒ„๊ฐ€ ์›น์„œ๋น„์Šคํ˜•ํƒœ๋กœ ๋™์ž‘)

* ๊ฐ๊ฐ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์— ๊ณ ์œ ํ•œ ์—ญํ• ์ง€์ • spring.application.name

* eureka.client์„ค์ • : ์œ ๋ ˆ์นด์„œ๋ฒ„์— ๋“ฑ๋กํ•  ๊ฒƒ์ธ์ง€ true, false

 

์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ํ•˜๋‚˜์˜ ์„œ๋น„์Šค์— ๋“ฑ๋กํ•˜๊ธฐ

application.yml์— server.port 9001 port๋ฅผ ๊ฐ€์ง€๋Š” ์„œ๋ฒ„ ์ธ์Šคํ„ด์Šค๋ฅผ ํ•˜๋‚˜ ์‹คํ–‰์‹œํ‚จ๋‹ค.

 

๋‹ค๋ฅธ ํ•˜๋‚˜๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ๋•Œ ์ธํ…”๋ฆฌ์ œ์ด ์‹คํ–‰์—์„œ๋Š” ํฌํŠธ๋ฒˆํ˜ธ๊ฐ€ ๊ฒน์น˜๋ฏ€๋กœ edit configuration์„ ํ†ตํ•ด VM options์— '-Dserver.port=9002'๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค. ๊ทธ๋Ÿฌ๋ฉด 9002 ํฌํŠธ๋กœ ์ •์ƒ์ž‘๋™๋œ๋‹ค.

์™ธ๋ถ€์—์„œ User-service๋กœ ์š”์ฒญ์ด์˜ค๋ฉด Discovery ์„œ๋น„์Šค ์•ˆ์—์„œ ์‚ด์•„์žˆ๋Š” ์ธ์Šคํ„ด์Šค ์•Œ๋งž์€ ์ธ์Šคํ„ด์Šค๋กœ ๋ถ„์‚ฐ๋˜์–ด ์‹คํ–‰๋˜๊ฒŒ ๋œ๋‹ค.

 

ํ„ฐ๋ฏธ๋„์—์„œ mvn์œผ๋กœ ์‹คํ–‰

$> mvn spring-boot:run -Dspring-boot.run.jvmArguments='-Dserver.port=9003'

ํ„ฐ๋ฏธ๋„์—์„œ ๋นŒ๋“œ ํ›„ ์‹คํ–‰

$> mvn compile package

๋นŒ๋“œ๋œ jarํŒŒ์ผ

$> java -jar -Dserver.port=9004 ./target/user-service-0.0.1-SNAPSHOT.jar

ํ•˜๋‚˜์˜ ์„œ๋น„์Šค์— ์ธ์Šคํ„ด์Šค 4๊ฐœ๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ด๋ ‡๊ฒŒ ํ•˜๋‚˜์”ฉ ํฌํŠธ๋ฅผ ์„ค์ •ํ•ด๊ฐ€๋ฉฐ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๋ถˆํŽธํ•˜๋‹ค.

 

์Šคํ”„๋ง์—์„œ ์ง€์›ํ•˜๋Š” ๋žœ๋คํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์ž.

server:
  port: 0

0๋ฒˆ์€ ๋žœ๋คํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ.

์ด๋ ‡๊ฒŒ ์„ค์ •ํ•˜๋ฉด ๊ฐ๊ฐ์˜ ์ธ์Šคํ„ด์Šค ์‹คํ–‰ ์‹œ ๋žœ๋ค์œผ๋กœ port๋ฒˆํ˜ธ๋ฅผ ํ• ๋‹นํ•˜๊ฒŒ ๋œ๋‹ค.

ํ•˜์ง€๋งŒ Eureka๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•ด๋„ ํฌํŠธ 0๋ฒˆ๋งŒ ๋ณด์ธ๋‹ค.

์ด๊ฒƒ์€ Eureka๊ฐ€ ymlํŒŒ์ผ์— ์žˆ๋Š” ํฌํŠธ ์„ค์ •๋ฒˆํ˜ธ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์ธ์‹ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๋”ฐ๋ผ์„œ, ์šฐ๋ฆฌ๋Š” ymlํŒŒ์ผ์— ์ถ”๊ฐ€์ ์ธ ์ธ์Šคํ„ด์Šค ์ •๋ณด๋ฅผ ๋„ฃ์–ด์ค˜์•ผ๋งŒ ํ•œ๋‹ค.

eureka:
  instance:
    instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}

์œ„ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด Eureka ๊ฐ๊ฐ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ  ํ•ด๋‹น id๋กœ ์ธ์‹ํ•˜๊ฒŒ ๋œ๋‹ค.