ym
ย
ํ์ฌ ๊ตฌ์ฑ ์์ฝ
๊ณตํต ์์
Hazelcast๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ํด๋ฌ์คํฐ๋ง(
members
,session-mode
,backup
,async-backup
๋ฑ).Graceful shutdown ์ค์ ๊ณผ ๊ธฐ๋ณธ์ ์ธ
spring.lifecycle.timeout
๊ด๋ฆฌ.๊ณตํต์ ์ผ๋ก
infinispan
์ค์ ์ฌ์ฉ(cache-server
์cache-path
๋ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ค๋ฆ).
application-cache.yml
์บ์ฑ ์๋ฒ์ ํนํ๋ ์ค์ .
cluster.mode
๊ฐcache
๋ก ์ค์ ๋์ด ์์ผ๋ฉฐ, ๋ฐ์ดํฐ ๋ณต์ ๋ฐ ์ธ์ ๊ด๋ฆฌ๋ฅผ ์ํด Hazelcast ์ฌ์ฉ.๋ณ๋์ ์บ์ ๊ฒฝ๋ก(
/app/ooooo/resource/ooooo/cache_v2
)๋ฅผ ์ฌ์ฉ.
application-api.yml
API ์๋ฒ์ ํนํ๋ ์ค์ .
cluster.mode
๊ฐapi
๋ก ์ค์ ๋์ด ์์ผ๋ฉฐ,default-service-group
์ผ๋ก API ๊ด๋ จ ์๋น์ค๋ฅผ ์ง์ (์:frontoffice
,backoffice
๋ฑ).Hazelcast ํด๋ฌ์คํฐ์ ๋ฉค๋ฒ๋ก ํฌํจ๋์ด ์๊ณ ,
infinispan
๋ชจ๋๊ฐclient
๋ก ์ค์ ๋์ด ์์.
application-core.yml
Core ์๋น์ค์ ํนํ๋ ์ค์ .
cluster.mode
๊ฐservice
๋ก ์ค์ ๋์ด ์์ผ๋ฉฐ,default-service-group
๊ณผexclude-service-group
์ผ๋ก ์๋น์ค ๋ฒ์๋ฅผ ์ ์ด.API ์๋ฒ์ ๋ง์ฐฌ๊ฐ์ง๋ก
infinispan
์ ํด๋ผ์ด์ธํธ ๋ชจ๋๋ก ์ฌ์ฉ.
๊ฒํ ๋ฐ ๊ฐ์ ์ฌํญ
1. Hazelcast ํด๋ฌ์คํฐ๋ง
ํ์ฌ ์ํ:
ํด๋ฌ์คํฐ๋ ๋ช ์์ ์ผ๋ก ์ค์ ๋
members
(IP ์ฃผ์ ๋ชฉ๋ก)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ฑ.๋ฐ์ดํฐ ๋ณต์ (
backup: 1
,async-backup: 2
)๊ฐ ์ค์ ๋์ด ์์ด ์ฅ์ ๋ณต๊ตฌ ๋ฐ ๊ณ ๊ฐ์ฉ์ฑ์ ์ ๊ณต.
๊ฒํ ๋ฐ ์ ์:
ํด๋ฌ์คํฐ ๋ ธ๋ ์๋ ํ์ง:
members
๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํ๋ ๋์ Hazelcast์ Discovery SPI๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋๋ฅผ ์๋์ผ๋ก ํ์งํ๋๋ก ๊ตฌ์ฑ ๊ฐ๋ฅ.์: AWS, Kubernetes ๋ฑ์ ํด๋ผ์ฐ๋ ํ๊ฒฝ์์๋ ๋์ ํด๋ฌ์คํฐ ๊ด๋ฆฌ๊ฐ ์ ๋ฆฌ.
hazelcast: network: join: multicast: enabled: false tcp-ip: enabled: true members: - cache-prd-ooooo.internal - core-prd-ooooo.internal
ย
์ธ์ ๋ถ๋ฆฌ:
session-mode
๊ฐ Hazelcast์ ์ข ์๋์ด ์์ผ๋ฏ๋ก, ํน์ Feature์์ ์ธ์ ๊ด๋ฆฌ ๋ก์ง์ด ํ์ํ๋ค๋ฉด, ์ธ์ ๋ถ๋ฆฌ๋ฅผ ๊ณ ๋ ค.์: ํน์ ์๋น์ค(Analytics)๊ฐ ๋ณ๋์ ์ธ์ ๊ด๋ฆฌ ๋ฐฉ์์ ์ฌ์ฉํ๊ฑฐ๋ ๋ ๋ฆฝ์ ์ธ ํด๋ฌ์คํฐ๋ง์ด ํ์ํ ๊ฒฝ์ฐ.
2. Infinispan ์ค์
ํ์ฌ ์ํ:
Core ๋ฐ API ์๋ฒ์์
infinispan
์ ํด๋ผ์ด์ธํธ ๋ชจ๋๋ก ์ค์ .Cache ์๋ฒ์ ๋ถ๋ฆฌํ์ฌ API ๋ฐ Core ์๋ฒ๊ฐ ์บ์ฑ ์๋ฒ์ ์ง์ ์ ๊ทผํ๋๋ก ๊ตฌ์ฑ.
๊ฒํ ๋ฐ ์ ์:
์บ์ ์ ์ฑ ์ต์ ํ:
์บ์ฑ ์ ์ฑ (์: TTL, eviction ์ ์ฑ )์ Feature๋ณ๋ก ์ธ๋ถํํ ์ ์์.
์: Hazelcast ๋ด๋ถ์ ๋ถ์ฐ ์บ์๋ฅผ ํ์ฉํ๊ฑฐ๋ Infinispan ์ค์ ์ ์ถ๊ฐ๋ก ์ธ๋ถํ.
๋ถ์ฐ ์บ์ ๋ชจ๋ํฐ๋ง:
์บ์์ ์ ์ค๋ฅ (Hit/Miss)์ ๋ชจ๋ํฐ๋งํ๊ณ , ํ์ ์ Prometheus ๋ฐ Grafana๋ฅผ ์ฐ๋ํ์ฌ ํจ์จ์ฑ ๊ฒ์ฆ.
3. Feature ๋ณ MSA ์ง์
ํ์ฌ ์ํ:
default-service-group
๊ณผexclude-service-group
์ผ๋ก ๊ฐ ์๋ฒ์ ์ญํ ๊ณผ ํฌํจ/์ ์ธ๋๋ Feature๋ฅผ ์ ์ด.
๊ฒํ ๋ฐ ์ ์:
Feature ์ํ๋ฅผ ๋์ ์ผ๋ก ์ ์ด:
ํ์ฌ๋
yml
ํ์ผ์ ํตํด Feature์ ํฌํจ ์ฌ๋ถ๋ฅผ ์ ์ดํ์ง๋ง, ๋ฐํ์์์ ๋์ ์ผ๋ก ์ค์ ์ ๋ณ๊ฒฝํ๋ ๋ฐฉ์๋ ๊ณ ๋ ค ๊ฐ๋ฅ.์: Spring Profiles ๋๋ Hazelcast์ ๋ถ์ฐ ๋งต์ ํ์ฉํ์ฌ Feature ์ํ๋ฅผ ๋์ ์ผ๋ก ๊ด๋ฆฌ.
Feature ๊ฐ ํต์ ์ต์ ํ:
๊ฐ์ ์๋ฒ ๋ด์์๋ ์ง์ ํธ์ถ, ๋ค๋ฅธ ์๋ฒ ๊ฐ ํต์ ์ REST API๋ก ์ฒ๋ฆฌํ๋ ๋ก์ง์ ๊ฐ์ํํ๊ธฐ ์ํด ์๋น์ค ๋ ์ง์คํธ๋ฆฌ๋ฅผ ํ์ฉ ๊ฐ๋ฅ.
์๋น์ค ๋ ์ง์คํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ, Hazelcast์ ๋ถ์ฐ ์ด๋ฒคํธ(Pub/Sub)๋ฅผ ํ์ฉํ ํต์ ๋ ๊ณ ๋ ค.
4. ํ๊ฒฝ ๋ณ์ ๊ด๋ฆฌ
ํ์ฌ ์ํ:
๋ชจ๋ ์ค์ ์ด
application.yml
์ ํฌํจ๋์ด ์์ด ๊ฐ ์๋ฒ ๊ฐ ํ๊ฒฝ ์ฐจ์ด๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌ.
๊ฒํ ๋ฐ ์ ์:
Spring Cloud Config ๋๋ HashiCorp Vault๋ฅผ ๋์ ํ์ฌ ์ค์ ์ ์ค์ํ.
์ด๋ฅผ ํตํด ํ๊ฒฝ๋ณ(
dev
,stg
,prd
) ์ค์ ์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌ ๊ฐ๋ฅ.
์ถ๊ฐ ๊ณ ๋ ค ์ฌํญ
๋ก๊ทธ ๊ด๋ฆฌ
ํ์ฌ
accesslog
์ค์ ์ด ํฌํจ๋์ด ์์ผ๋, ์ค์ํ๋ ๋ก๊น ์์คํ (์: ELK Stack)์ ์ถ๊ฐ๋ก ๋์ ํ์ฌ ํตํฉ ๋ก๊ทธ ๊ด๋ฆฌ๋ฅผ ๊ณ ๋ ค.
ํฌ์ค ์ฒดํฌ ๋ฐ ์ฅ์ ๊ฐ์ง
management.endpoint.health
์ค์ ์ ํตํด ์๋น์ค ์ํ๋ฅผ ํ์ธ ๊ฐ๋ฅํ์ง๋ง, ํด๋ฌ์คํฐ ์ ์ฒด์ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ๋ ค๋ฉด ์ถ๊ฐ์ ์ธ ๋ชจ๋ํฐ๋ง ๋๊ตฌ(์: Prometheus, Hazelcast Management Center)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ๋ฆฌ.
๊ฒฐ๋ก
ํ์ฌ ๊ตฌ์ฑ์ Hazelcast๋ฅผ ๊ธฐ๋ฐ์ผ๋ก MSA๋ฅผ ์ง์ํ๊ธฐ์ ์ถฉ๋ถํ ๊ฐ๋ ฅํ๋ฉฐ, ์ถ๊ฐ์ ์ธ ๋ณต์ก์ฑ์ ๋์ ํ์ง ์๊ณ ๋ ์์ ์ ์ผ๋ก ์ด์ํ ์ ์๋ ๊ตฌ์กฐ์ ๋๋ค. ๋ค๋ง, ํ์ฅ์ฑ๊ณผ ์ ์ง๋ณด์๋ฅผ ๋์ฑ ๊ฐ์ ํ๋ ค๋ฉด ๋ค์์ ๊ณ ๋ คํ ์ ์์ต๋๋ค:
Hazelcast์ Discovery SPI๋ฅผ ํ์ฉํ ๋์ ํด๋ฌ์คํฐ ๊ตฌ์ฑ.
๋ถ์ฐ ์บ์ ์ ์ฑ ์ต์ ํ.
๋ฐํ์์์ Feature ์ํ๋ฅผ ๋์ ์ผ๋ก ์ ์ดํ๋ ๊ธฐ๋ฅ ์ถ๊ฐ.
Spring Cloud Config๋ฅผ ํตํ ์ค์ ๊ด๋ฆฌ ์ค์ํ.