toy project-msa: Spring Cloud Eureka

bo-yoonยท2021๋…„ 11์›” 4์ผ
0

msa

๋ชฉ๋ก ๋ณด๊ธฐ
5/7
post-custom-banner

๐Ÿค” ์Šคํ”„๋ง ํด๋ผ์šฐ๋“œ ์‹œ๋ฆฌ์ฆˆ!

์Šคํ”„๋ง ํด๋ผ์šฐ๋“œ ์œ ๋ ˆ์นด๋ฅผ ์„ธํŒ…ํ•˜๊ณ  ํ™•์ธํ•ด๋ณด์ž



์œ ๋ ˆ์นด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

์Šคํ”„๋ง ํด๋ผ์šฐ๋“œ ์œ ๋ ˆ์นด๋Š” ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ์ด์ž ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์ด๋‹ค

์ด๋ ‡๊ฒŒ ๋งํ•˜๋ฉด ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ๊ฐ€ ๋ฌด์—‡์ธ์ง€, ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ํ—ท๊ฐˆ๋ฆด ๊ฒƒ์ด๋‹ค.


์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ & ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ

๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค์—์„œ๋Š” ์„œ๋น„์Šค๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์ด๋‹ค. ๋˜ํ•œ ๋ณดํ†ต ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ ๊ตฌ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— autoscale out ์ด๋ผ๋Š” ๊ฐœ๋…์ด ์กด์žฌํ•ด์„œ ์„œ๋น„์Šค๊ฐ€ ๋ถ€ํ•˜๊ฐ€ ์˜ฌ ๊ฒฝ์šฐ ์„œ๋น„์Šค ๊ฐœ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๊ธฐ๋„ ํ˜น์€ ์ค„์–ด๋“ค๊ธฐ๋„ ํ•˜๋ฉฐ IP์™€ Port๊ฐ€ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ๊ฐ์˜ ์„œ๋น„์Šค์˜ ์œ„์น˜(ip์™€ ํฌํŠธ ํ˜น์€ ๋„๋ฉ”์ธ๊ณผ ํฌํŠธ)๋ฅผ ์–ด๋”˜๊ฐ€์— ์ €์žฅํ•ด ์ฐพ์•„๊ฐ€๋ ค๊ณ  ํ• ๋•Œ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์œ„์น˜๋ฅผ ์ €์žฅํ•œ๋‹ค๊ณ  ํ•ด์„œ ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋ผ๊ณ  ํ•˜๊ณ , ์œ„์น˜๋ฅผ ์ฐพ์•„๊ฐ„๋‹ค๊ณ  ํ•ด์„œ ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ ๋ผ๊ณ  ํ•œ๋‹ค. ๊ฒฐ๊ตญ ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ๋ผ๋Š” ๊ฐœ๋… ์•ˆ์— ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๊ฐ€ ์žˆ๋‹ค.

์œ ๋ ˆ์นด๋Š” ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์Šคํ”„๋ง ํด๋ผ์šฐ๋“œ ์ปดํฌ๋„ŒํŠธ์ด๋‹ค



์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ ๊ธฐ๋Šฅ

๊ทธ๋Ÿผ ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ์˜ ๊ธฐ๋Šฅ์€ ์–ด๋–ค๊ฒƒ์ด ์žˆ์„๊นŒ?

์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์œ„์น˜ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•ด์ฃผ์ง€๋งŒ ๊ทธ์™€ ํ•จ๊ป˜ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•ด์ค€๋‹ค. ์œ„์น˜์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ณ„์†์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ•˜๋ ค๋ฉด ๋ชจ๋‹ˆํ„ฐ๋ง์€ ํ•„์ˆ˜ ์ผ ๊ฒƒ์ด๋‹ค. ๋˜ํ•œ ๊ฐ™์€ ๊ฒฐ์ œ์— ๋Œ€ํ•œ ์„œ๋น„์Šค๊ฐ€ autoscale๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๋•Œ ์–ด๋Š ๊ฒƒ์œผ๋กœ ์ฐพ์•„ ๊ฐˆ์ง€์— ๋Œ€ํ•œ ๋ถ€ํ•˜ ๋ถ„์‚ฐ ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•œ๋‹ค.


์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ ๊ตฌํ˜„ ๋ฐฉ์‹

์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ๋Š” 2๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.


Client Side

์ฒซ๋ฒˆ์งธ ๋ฐฉ์‹์€ Client Side ๋ฐฉ์‹์œผ๋กœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—๊ฒŒ ์ฐพ๊ณ ์žํ•˜๋Š” ์„œ๋น„์Šค์˜ ์œ„์น˜๋ฅผ ๋ฌผ์–ด๋ด์„œ ์ง์ ‘ ์„œ๋น„์Šค๋ฅผ ์ฐพ์•„๊ฐ„๋‹ค.

์ด ๋ฐฉ๋ฒ•์€ ๋‹จ์ˆœํ•˜์ง€๋งŒ, ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๊ฐ„์˜ ์˜์กด ๊ด€๊ณ„๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๋˜ํ•œ ํด๋ผ์ด์–ธํŠธ๋Š” ์ฃผ์†Œ๋ฅผ ์•Œ์•„์˜ค๋Š” ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

์œ ๋ ˆ์นด๋Š” ์ด ๋ฐฉ์‹์— ํ•ด๋‹น ๋œ๋‹ค.


Server Side

๋‘ ๋ฒˆ์งธ ๋ฐฉ์‹์€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํด๋ผ์ด์–ธํŠธ ์„œ๋น„์Šค๊ฐ€ ์ผ๋‹จ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—๊ฒŒ ํด๋ผ์ด์–ธํŠธ ์„œ๋น„์Šค๊ฐ€ ์ฐพ์•„๊ฐ€๊ธธ ์›ํ•˜๋Š” ์„œ๋น„์Šค์˜ ์ฃผ์†Œ๋ฅผ ์•Œ์•„๋‚ด์„œ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

์ด ๋ฐฉ๋ฒ•์€ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ ์˜์กด ๊ด€๊ณ„๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋˜ ๋‹ค๋ฅธ ๊ตฌ์„ฑ์š”์†Œ์ธ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ
๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

๋„ทํ”Œ๋ฆญ์Šค OSS์˜ ๋˜ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ์ธ API ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ์ด ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์ค€๋‹ค

์œ ๋ ˆ์นด์˜ ๊ตฌ์„ฑ






๋„ทํ”Œ๋ฆญ์Šค OSS ์œ ๋ ˆ์นด ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

์ด์ œ ์œ ๋ ˆ์นด์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ์ตํ˜”์œผ๋‹ˆ ์‹ค์ œ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•ด๋ณด์ž!

์•ž์„œ ์ด ํ”„๋กœ์ ํŠธ๋Š”
https://velog.io/@borab/Springboot-Project-multi-module
์— ์ด์–ด์ง€๋Š” ๋‚ด์šฉ์ด๋‹ค.


์œ ๋ ˆ์นด ์„œ๋ฒ„

์œ ๋ ˆ์นด ์„œ๋ฒ„ ๊ตฌ์„ฑํ•ด๋ณด๊ธฐ

1. ๋ชจ๋“ˆ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

eureka-server ๋ผ๋Š” ์ด๋ฆ„์˜ ๋ชจ๋“ˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค.


2. build.gradle์— ์˜์กด์„ฑ ์ถ”๊ฐ€

์ฐธ๊ณ  : https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-server


implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-netflix-eureka-server', version: '3.0.4'


3. application.yml ๊ณผ bootstrap.yml์ •์˜

์ฐธ๊ณ  : https://cloud.spring.io/spring-cloud-netflix/reference/html/

application.yml

server:
  port: 8761

eureka:
  client:
    registerWithEureka: false
    fetchRegistry: false
  server:
    waitTimeInMsWhenSyncEmpty: 1000
  • eureka.client.registerWithEureka ๋Š” register์— ๋“ฑ๋กํ• ์ง€ ๋ง์ง€์— ๋Œ€ํ•œ ์„ค์ •์ด๋‹ค.
  • eureka.client.fetchRegistry ๋Š” register์— ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ๊ฑด์ง€์— ๋Œ€ํ•œ ์„ค์ •์ด๋‹ค.
  • eureka.server.waitTimeInMsWhenSyncEmpty ๋Š” ์œ ๋ ˆ์นด์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘๋˜๊ณ  ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ฌ์ˆ˜ ์—†์„๋•Œ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„์ด๋‹ค. (๊ธฐ๋ณธ : 3000)


bootstrap.yml

spring:
  application:
    name: eureka
  cloud:
    config:
      uri: http://localhost:8888

์—ฌ๊ธฐ๊นŒ์ง€ ์„ธํŒ…ํ•ด์ฃผ๊ณ  ๋„์›Œ๋ณด๋ฉด ์ž˜ ํ™”๋ฉด์ด ๋„์›Œ์ง„๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.




์œ ๋ ˆ์นด ํด๋ผ์ด์–ธํŠธ

์œ ๋ ˆ์นด ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌ์„ฑํ•ด๋ณด๊ธฐ!

1. ์˜์กด์„ฑ ์ถ”๊ฐ€

์ฐธ๊ณ  : https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client

    // eureka
    implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-netflix-eureka-client', version: '3.0.4'


2. application.yml ์— ์„ค์ • ์ถ”๊ฐ€

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
    healthcheck:
      enabled: true
  • ์œ ๋ ˆ์นด ์„œ๋ฒ„๋ฅผ ๋ฐ”๋ผ๋ณด๊ณ , ํ—ฌ์Šค์ฒดํฌ๋ฅผ ํ•˜๋Š” ์„ค์ •์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

3. ์‹คํ–‰ํ•ด๋ณด๊ธฐ

์ด์ œ ์‹คํ–‰ํ•ด๋ณด๋ฉด ์ •์ƒ์ ์œผ๋กœ ์„ค์ •ํ•œ ์„œ๋น„์Šค๋“ค์ด ๋“ฑ๋ก๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.



ํ›„๊ธฐ

์ด๋ฒˆ์—๋Š” ์Šคํ”„๋ง ํด๋ผ์šฐ๋“œ ๋„ทํ”Œ๋ฆญ์Šค OSS ์œ ๋ ˆ์นด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋‹ค. ๋‹ค์Œ์—๋Š” ๊ฐ™์€ ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ์ธ API ๊ฒŒ์ดํŠธ์›จ์ด์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž!

profile
๊ฐœ๋ฐœ ๋กœ๊ทธ ๐ŸŽ ๐ŸŽ ๐ŸŽ
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€