Spring Cloud Netfilx Eureka
์คํ๋ง ํด๋ผ์ฐ๋ ๋ทํ๋ฆญ์ค๋ '์คํ๋ง๋ถํธ ์ ํ๋ฆฌ์ผ์ด์ '์ ๋ํ ํตํฉ ํ๊ฒฝ ๊ตฌ์ฑ์ ์ง์ํ๋ Netfilx OSS ์๋น์ค์ด๋ค.
- Netfilx OSS์ ๋ค์ํ ์๋น์ค
- Eureka : Disocovery Server
- ๊ฐ๊ฐ์ ์๋น์ค ์ธ์คํด์ค๋ค์ด ๋์ ์ผ๋ก ํ์ฅ, ์ถ์ ๋๋๋ผ๋ ์ธ์คํด์ค์ ์ํ๋ฅผ ํ๋์ ์๋น์ค๋ก ๊ด๋ฆฌํ ์ ์๋ ์๋น์ค
- Ribbon : Client Side Load Balancer
- ํธ๋ํฝ์ ๋ถ์ฐ์ํค๋ ๊ธฐ๋ฅ
- Zuul : API Gateway
- ๊ฐ๊ฐ์ ๋ง์ดํฌ๋ก์๋น์ค ์ข ๋จ์ ์ ์ฐ๊ฒฐํ๋ ๋ฆฌ๋ฒ์ค ํ๋ก์
- Hystrix : Circuit Breaker
- ํน์ ์๋น์ค๊ฐ ๊ณผ๋ถํ๊ฐ ๊ฑธ๋ ค ์๋น์ค ์ฅ์ ๋ฅผ ์ ํํ๋ ํน์ฑ์ ํด๊ฒฐํ๋ ๊ธฐ๋ฅ
- ์ด์ธ์๋ ๋ค์ํ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ค.
- Eureka : Disocovery Server
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 ๊ณผ์
๋์์์
- Service Registry ๊ธฐ๋ฅ์ ํ Eureka Server ๊ฐ ์ต์ด์ ๊ธฐ๋๋๋ค.
- Service Registry ์๋ฒ์ธ Eureka Server ์ ๋ฑ๋ก๋ ์๋น์ค๋ค์ด ๊ธฐ๋๋๋ค. ์ฌ๊ธฐ์ ๋ฑ๋ก๋ ์๋น์ค๋ Eureka Client ๋ผ๊ณ ํ๋ค.
- Eureka ์๋ฒ๋ ์์ ์๊ฒ ๋ฑ๋ก๋ Eureka Client ์๊ฒ 30์ด๋ง๋ค Ping์ ๋ณด๋ด๋ฉฐ Health Checking์ ์ํํ๋ค.
- ๋ง์ฝ 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
$> java -jar -Dserver.port=9004 ./target/user-service-0.0.1-SNAPSHOT.jar
๊ทธ๋ฐ๋ฐ ์ด๋ ๊ฒ ํ๋์ฉ ํฌํธ๋ฅผ ์ค์ ํด๊ฐ๋ฉฐ ์คํํ๋ ๊ฒ์ ๋งค์ฐ ๋ถํธํ๋ค.
์คํ๋ง์์ ์ง์ํ๋ ๋๋คํฌํธ๋ฅผ ์ฌ์ฉํด๋ณด์.
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๋ก ์ธ์ํ๊ฒ ๋๋ค.