๐ค ์คํ๋ง ํด๋ผ์ฐ๋ ์๋ฆฌ์ฆ!
์คํ๋ง ํด๋ผ์ฐ๋ ์ ๋ ์นด๋ฅผ ์ธํ ํ๊ณ ํ์ธํด๋ณด์
์คํ๋ง ํด๋ผ์ฐ๋ ์ ๋ ์นด๋ ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ์ด์ ์๋น์ค ๋ ์ง์คํธ๋ฆฌ์ด๋ค
์ด๋ ๊ฒ ๋งํ๋ฉด ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ๊ฐ ๋ฌด์์ธ์ง, ์๋น์ค ๋ ์ง์คํธ๋ฆฌ๊ฐ ๋ฌด์์ธ์ง ํท๊ฐ๋ฆด ๊ฒ์ด๋ค.
๋ง์ดํฌ๋ก ์๋น์ค์์๋ ์๋น์ค๊ฐ ์ฌ๋ฌ๊ฐ์ด๋ค. ๋ํ ๋ณดํต ํด๋ผ์ฐ๋ ํ๊ฒฝ์์ ๊ตฌ์ฑ๋๊ธฐ ๋๋ฌธ์ autoscale out
์ด๋ผ๋ ๊ฐ๋
์ด ์กด์ฌํด์ ์๋น์ค๊ฐ ๋ถํ๊ฐ ์ฌ ๊ฒฝ์ฐ ์๋น์ค ๊ฐ์๊ฐ ๋์ด๋๊ธฐ๋ ํน์ ์ค์ด๋ค๊ธฐ๋ ํ๋ฉฐ IP์ Port๊ฐ ๋์ ์ผ๋ก ๋ณ๊ฒฝ๋๋ค. ๋ฐ๋ผ์ ๊ฐ๊ฐ์ ์๋น์ค์ ์์น(ip์ ํฌํธ ํน์ ๋๋ฉ์ธ๊ณผ ํฌํธ)๋ฅผ ์ด๋๊ฐ์ ์ ์ฅํด ์ฐพ์๊ฐ๋ ค๊ณ ํ ๋ ์ฌ์ฉํด์ผํ๋ค. ๊ทธ๋์ ์์น๋ฅผ ์ ์ฅํ๋ค๊ณ ํด์ ์๋น์ค ๋ ์ง์คํธ๋ฆฌ
๋ผ๊ณ ํ๊ณ , ์์น๋ฅผ ์ฐพ์๊ฐ๋ค๊ณ ํด์ ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ
๋ผ๊ณ ํ๋ค. ๊ฒฐ๊ตญ ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ๋ผ๋ ๊ฐ๋
์์ ์๋น์ค ๋ ์ง์คํธ๋ฆฌ๊ฐ ์๋ค.
์ ๋ ์นด๋ ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์คํ๋ง ํด๋ผ์ฐ๋ ์ปดํฌ๋ํธ์ด๋ค
๊ทธ๋ผ ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ์ ๊ธฐ๋ฅ์ ์ด๋ค๊ฒ์ด ์์๊น?
์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์์น ์ ๋ณด๋ฅผ ์ ๋ฌํด์ฃผ์ง๋ง ๊ทธ์ ํจ๊ป ์๋น์ค์ ๋ํ ๋ชจ๋ํฐ๋ง ๊ธฐ๋ฅ๋ ์ ๊ณตํด์ค๋ค. ์์น์ ๋ํ ์ ๋ณด๋ฅผ ๊ณ์์ ์ผ๋ก ์ ๋ฐ์ดํธ ํ๋ ค๋ฉด ๋ชจ๋ํฐ๋ง์ ํ์ ์ผ ๊ฒ์ด๋ค. ๋ํ ๊ฐ์ ๊ฒฐ์ ์ ๋ํ ์๋น์ค๊ฐ autoscale๋ก ์ฌ๋ฌ ๊ฐ์ผ ๋ ์ด๋ ๊ฒ์ผ๋ก ์ฐพ์ ๊ฐ์ง์ ๋ํ ๋ถํ ๋ถ์ฐ ๊ธฐ๋ฅ๋ ์ ๊ณตํ๋ค.
์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ๋ 2๊ฐ์ง ๋ฐฉ์์ผ๋ก ๊ตฌํํ ์ ์๋ค.
์ฒซ๋ฒ์งธ ๋ฐฉ์์ Client Side ๋ฐฉ์์ผ๋ก ํด๋ผ์ด์ธํธ๊ฐ ์๋น์ค ๋ ์ง์คํธ๋ฆฌ์๊ฒ ์ฐพ๊ณ ์ํ๋ ์๋น์ค์ ์์น๋ฅผ ๋ฌผ์ด๋ด์ ์ง์ ์๋น์ค๋ฅผ ์ฐพ์๊ฐ๋ค.
์ด ๋ฐฉ๋ฒ์ ๋จ์ํ์ง๋ง, ํด๋ผ์ด์ธํธ์ ์๋น์ค ๋ ์ง์คํธ๋ฆฌ ๊ฐ์ ์์กด ๊ด๊ณ๊ฐ ์์ฑ๋๊ณ ๋ํ ํด๋ผ์ด์ธํธ๋ ์ฃผ์๋ฅผ ์์์ค๋ ์์ค์ฝ๋๊ฐ ํ์ํ๋ค.
์ ๋ ์นด๋ ์ด ๋ฐฉ์์ ํด๋น ๋๋ค.
๋ ๋ฒ์งธ ๋ฐฉ์์ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์ด์ฉํ๋ ๋ฐฉ์์ผ๋ก ํด๋ผ์ด์ธํธ ์๋น์ค๊ฐ ์ผ๋จ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ํธ์ถํ๋ฉด ๋ก๋ ๋ฐธ๋ฐ์๊ฐ ์๋น์ค ๋ ์ง์คํธ๋ฆฌ์๊ฒ ํด๋ผ์ด์ธํธ ์๋น์ค๊ฐ ์ฐพ์๊ฐ๊ธธ ์ํ๋ ์๋น์ค์ ์ฃผ์๋ฅผ ์์๋ด์ ์ ๋ฌํ๋ ๋ฐฉ์์ด๋ค.
์ด ๋ฐฉ๋ฒ์ ํด๋ผ์ด์ธํธ์ ์๋น์ค ๋ ์ง์คํธ๋ฆฌ์ ์์กด ๊ด๊ณ๋ฅผ ๋ง์ ์ ์์ง๋ง ๋ ๋ค๋ฅธ ๊ตฌ์ฑ์์์ธ ๋ก๋ ๋ฐธ๋ฐ์
๊ฐ ํ์ํ๋ค.
๋ทํ๋ฆญ์ค OSS์ ๋ ๋ค๋ฅธ ํ๋ ์์ํฌ์ธ API ๊ฒ์ดํธ์จ์ด๊ฐ ์ด ๊ธฐ๋ฅ์ ์ ๊ณตํด์ค๋ค
์ด์ ์ ๋ ์นด์ ๋ํ ๊ฐ๋ ์ ์ตํ์ผ๋ ์ค์ ํ๋ก์ ํธ์ ์ ์ฉํด๋ณด์!
์์ ์ด ํ๋ก์ ํธ๋
https://velog.io/@borab/Springboot-Project-multi-module
์ ์ด์ด์ง๋ ๋ด์ฉ์ด๋ค.
์ ๋ ์นด ์๋ฒ ๊ตฌ์ฑํด๋ณด๊ธฐ
eureka-server ๋ผ๋ ์ด๋ฆ์ ๋ชจ๋ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ค.
implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-netflix-eureka-server', version: '3.0.4'
์ฐธ๊ณ : 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
์ฌ๊ธฐ๊น์ง ์ธํ ํด์ฃผ๊ณ ๋์๋ณด๋ฉด ์ ํ๋ฉด์ด ๋์์ง๊ฒ์ ํ์ธํ ์ ์๋ค.
์ ๋ ์นด ํด๋ผ์ด์ธํธ๋ฅผ ๊ตฌ์ฑํด๋ณด๊ธฐ!
// eureka
implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-netflix-eureka-client', version: '3.0.4'
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
healthcheck:
enabled: true
์ด์ ์คํํด๋ณด๋ฉด ์ ์์ ์ผ๋ก ์ค์ ํ ์๋น์ค๋ค์ด ๋ฑ๋ก๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ด๋ฒ์๋ ์คํ๋ง ํด๋ผ์ฐ๋ ๋ทํ๋ฆญ์ค OSS ์ ๋ ์นด์ ๋ํด ์์๋ณด์๋ค. ๋ค์์๋ ๊ฐ์ ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ์ธ API ๊ฒ์ดํธ์จ์ด์ ๋ํด์ ์์๋ณด์!