Software Architecture/MSA

[MSA ๊ตฌ์ถ•ํ•˜๊ธฐ] 3. Eureka ํด๋ผ์ด์–ธํŠธ ์„ค์ • (Service Discovery)

bu119 2024. 3. 13. 09:00
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ”Š ์šฐ๋ฆฌ๋Š” Spring Cloud๋ฅผ ํ™œ์šฉํ•˜์—ฌ MSA๋ฅผ ๊ตฌ์ถ•ํ•œ๋‹ค.

 

Service Discovery ํŒŒํŠธ 2

 

Service Discovery์˜ ์—ญํ• ์„ ๊ฐ„๋žตํ•˜๊ฒŒ ์ •๋ฆฌํ•˜์ž๋ฉด,

Service Discovery๋ž€?

  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์˜ ์ •๋ณด(์œ„์น˜ ๋“ฑ)๋ฅผ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์™ธ๋ถ€์˜ ์š”์ฒญ์ด๋‚˜ ์„œ๋น„์Šค๊ฐ€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์˜ ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.

Spring Cloud์—์„œ๋Š” Spring Cloud Netflix Eureka๊ฐ€ Service Discovery์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. Eureka๋Š” Eureka Server์™€ Eureka Client๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

 

Eureka ํด๋ผ์ด์–ธํŠธ๋ž€?

MSA๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์š”์†Œ๋“ค ์ค‘ Eureka ์„œ๋ฒ„์—์„œ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๊ด€๋ฆฌ๋ฅผ ์›ํ•˜๋Š” ์š”์†Œ๋ฅผ Eureka ํด๋ผ์ด์–ธํŠธ ์„ค์ •์„ ์ง„ํ–‰ํ•ด์„œ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ”Š ์ด๋ฒˆ์—๋Š”, ์ด์ „์— ์ƒ์„ฑํ•œ ๊ฐ๊ฐ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋“ค์—๊ฒŒ Eureka Client ์„ค์ •์„ ํ•  ๊ฒƒ์ด๋‹ค.

 


๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค Eureka ํด๋ผ์ด์–ธํŠธ ์„ค์ •ํ•˜๊ธฐ

์ƒ์„ฑํ•œ ๋ชจ๋“  ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋“ค์—๊ฒŒ ๋™์ผํ•˜๊ฒŒ ์„ค์ •ํ•œ๋‹ค.

  1. user-service
  2. beverage-service
  3. community-service

 

1. Eureka ํด๋ผ์ด์–ธํŠธ ์„ค์ •์„ ์œ„ํ•œ ์˜์กด์„ฑ ์ถ”๊ฐ€

ํ•„์ˆ˜ ์˜์กด์„ฑ

  • Eureka Discovery Client
// build.gradle

ext {
  set('springCloudVersion', "2023.0.0")
}

dependencies {

  implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
}

dependencyManagement {
  imports {
    mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
  }
}

 

2. Main ํด๋ž˜์Šค ์–ด๋…ธํ…Œ์ด์…˜ ๋“ฑ๋ก

Eureka ํด๋ผ์ด์–ธํŠธ๋กœ ๋™์ž‘ํ•˜๊ธฐ ์œ„ํ•ด @EnableDiscoveryClient ์–ด๋…ธํ…Œ์ด์…˜์„ ๋“ฑ๋กํ•ด์•ผ ํ•œ๋‹ค.

// UserServiceApplication 

package com.caffeinedoctor.userservice;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient // ์œ ๋ ˆ์นด ํด๋ผ์ด์–ธํŠธ๋กœ ๋“ฑ๋ก
public class UserServiceApplication {

	public static void main(String[] args) {
		SpringApplication.run(UserServiceApplication.class, args);
	}

}

 

3. Eureka ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ

application.yml ๋ณ€์ˆ˜ ์„ค์ •์„ ํ†ตํ•ด Eureka ์„œ๋ฒ„์— ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค.

# application.yml

# ํ˜„์žฌ ํ”„๋กœ์ ํŠธ ํฌํŠธ ์ง€์ • (user-service)
server:
  port: 8081

# ํ˜„์žฌ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ์ง€์ •
spring:
  application:
    name: user-service

# eureka ์„ค์ • (eureka ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ)
eureka:
  client:
    # eureka ์„œ๋ฒ„์— ๋“ฑ๋กํ• ์ง€ ์—ฌ๋ถ€
    register-with-eureka: true
    # eureka ์„œ๋ฒ„๋กœ ๋ถ€ํ„ฐ ์ธ์Šคํ„ด์Šค๋“ค์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ธ์ง€ ์„ค์ •ํ•˜๋Š” ์†์„ฑ
    fetch-registry: true
    # eureka ์„œ๋ฒ„ ์ฃผ์†Œ์— ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์ •๋ณด ๋“ฑ๋ก
    service-url:
      defaultZone: http://admin:1234mst@localhost:8761/eureka
  • spring: application: name:
    • ํ”„๋กœ์ ํŠธ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฆ„์„ ์ •ํ•œ๋‹ค.
    • ํ•ด๋‹น ์ด๋ฆ„์œผ๋กœ Gateway์—์„œ ํ˜ธ์ถœํ•˜๋ฏ€๋กœ ํ•„์ˆ˜์ ์œผ๋กœ ์ž…๋ ฅํ•œ๋‹ค.
  • eureka: client: register-with-eureka (๋””ํดํŠธ true)
    • eureka ์„œ๋ฒ„์— ๋“ฑ๋ก ์„ค์ •
  • eureka: client: fetch-registry (๋””ํดํŠธ true)
    • ์™ธ๋ถ€์—์„œ Client๊ฐ€ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ์„ค์ •
  • eureka: client: service-url: defaultZone:
    • eureka ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ๋“ฑ๋กํ•  eureka ์„œ๋ฒ„ ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
    • ์ฆ‰, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ๋“ฑ๋กํ•  eureka ์„œ๋ฒ„ ์ฃผ์†Œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

 

๋ฐ˜์‘ํ˜•

Spring Cloud Eureka ์„œ๋ฒ„  ์‹คํ–‰

 


์ฐธ๊ณ  ์ž๋ฃŒ

https://covenant.tistory.com/251

https://devhan.tistory.com/m/260

https://substantial-park-a17.notion.site/6-Eureka-057c942a7a4041bf87ab5cd3043af021

 

728x90
๋ฐ˜์‘ํ˜•