/
ym

ym

ย 

ํ˜„์žฌ ๊ตฌ์„ฑ ์š”์•ฝ

  1. ๊ณตํ†ต ์š”์†Œ

    • Hazelcast๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ํด๋Ÿฌ์Šคํ„ฐ๋ง(members, session-mode, backup, async-backup ๋“ฑ).

    • Graceful shutdown ์„ค์ •๊ณผ ๊ธฐ๋ณธ์ ์ธ spring.lifecycle.timeout ๊ด€๋ฆฌ.

    • ๊ณตํ†ต์ ์œผ๋กœ infinispan ์„ค์ • ์‚ฌ์šฉ(cache-server์™€ cache-path๋Š” ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ค๋ฆ„).

  2. application-cache.yml

    • ์บ์‹ฑ ์„œ๋ฒ„์— ํŠนํ™”๋œ ์„ค์ •.

    • cluster.mode๊ฐ€ cache๋กœ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ ๋ณต์ œ ๋ฐ ์„ธ์…˜ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด Hazelcast ์‚ฌ์šฉ.

    • ๋ณ„๋„์˜ ์บ์‹œ ๊ฒฝ๋กœ(/app/ooooo/resource/ooooo/cache_v2)๋ฅผ ์‚ฌ์šฉ.

  3. application-api.yml

    • API ์„œ๋ฒ„์— ํŠนํ™”๋œ ์„ค์ •.

    • cluster.mode๊ฐ€ api๋กœ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉฐ, default-service-group์œผ๋กœ API ๊ด€๋ จ ์„œ๋น„์Šค๋ฅผ ์ง€์ •(์˜ˆ: frontoffice, backoffice ๋“ฑ).

    • Hazelcast ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ฉค๋ฒ„๋กœ ํฌํ•จ๋˜์–ด ์žˆ๊ณ , infinispan ๋ชจ๋“œ๊ฐ€ client๋กœ ์„ค์ •๋˜์–ด ์žˆ์Œ.

  4. application-core.yml

    • Core ์„œ๋น„์Šค์— ํŠนํ™”๋œ ์„ค์ •.

    • cluster.mode๊ฐ€ service๋กœ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉฐ, default-service-group๊ณผ exclude-service-group์œผ๋กœ ์„œ๋น„์Šค ๋ฒ”์œ„๋ฅผ ์ œ์–ด.

    • API ์„œ๋ฒ„์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ infinispan์„ ํด๋ผ์ด์–ธํŠธ ๋ชจ๋“œ๋กœ ์‚ฌ์šฉ.


๊ฒ€ํ†  ๋ฐ ๊ฐœ์„  ์‚ฌํ•ญ

1. Hazelcast ํด๋Ÿฌ์Šคํ„ฐ๋ง

  • ํ˜„์žฌ ์ƒํƒœ:

    • ํด๋Ÿฌ์Šคํ„ฐ๋Š” ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •๋œ members(IP ์ฃผ์†Œ ๋ชฉ๋ก)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์„ฑ.

    • ๋ฐ์ดํ„ฐ ๋ณต์ œ(backup: 1, async-backup: 2)๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์–ด ์žฅ์•  ๋ณต๊ตฌ ๋ฐ ๊ณ ๊ฐ€์šฉ์„ฑ์„ ์ œ๊ณต.

  • ๊ฒ€ํ†  ๋ฐ ์ œ์•ˆ:

    1. ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ ์ž๋™ ํƒ์ง€:

      • 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

      ย 

    2. ์„ธ์…˜ ๋ถ„๋ฆฌ:

      • session-mode๊ฐ€ Hazelcast์— ์ข…์†๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ํŠน์ • Feature์—์„œ ์„ธ์…˜ ๊ด€๋ฆฌ ๋กœ์ง์ด ํ•„์š”ํ•˜๋‹ค๋ฉด, ์„ธ์…˜ ๋ถ„๋ฆฌ๋ฅผ ๊ณ ๋ ค.

      • ์˜ˆ: ํŠน์ • ์„œ๋น„์Šค(Analytics)๊ฐ€ ๋ณ„๋„์˜ ์„ธ์…˜ ๊ด€๋ฆฌ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋…๋ฆฝ์ ์ธ ํด๋Ÿฌ์Šคํ„ฐ๋ง์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ.

2. Infinispan ์„ค์ •

  • ํ˜„์žฌ ์ƒํƒœ:

    • Core ๋ฐ API ์„œ๋ฒ„์—์„œ infinispan์„ ํด๋ผ์ด์–ธํŠธ ๋ชจ๋“œ๋กœ ์„ค์ •.

    • Cache ์„œ๋ฒ„์™€ ๋ถ„๋ฆฌํ•˜์—ฌ API ๋ฐ Core ์„œ๋ฒ„๊ฐ€ ์บ์‹ฑ ์„œ๋ฒ„์— ์ง์ ‘ ์ ‘๊ทผํ•˜๋„๋ก ๊ตฌ์„ฑ.

  • ๊ฒ€ํ†  ๋ฐ ์ œ์•ˆ:

    1. ์บ์‹œ ์ •์ฑ… ์ตœ์ ํ™”:

      • ์บ์‹ฑ ์ •์ฑ…(์˜ˆ: TTL, eviction ์ •์ฑ…)์„ Feature๋ณ„๋กœ ์„ธ๋ถ„ํ™”ํ•  ์ˆ˜ ์žˆ์Œ.

      • ์˜ˆ: Hazelcast ๋‚ด๋ถ€์˜ ๋ถ„์‚ฐ ์บ์‹œ๋ฅผ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜ Infinispan ์„ค์ •์„ ์ถ”๊ฐ€๋กœ ์„ธ๋ถ„ํ™”.

    2. ๋ถ„์‚ฐ ์บ์‹œ ๋ชจ๋‹ˆํ„ฐ๋ง:

      • ์บ์‹œ์˜ ์ ์ค‘๋ฅ (Hit/Miss)์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ , ํ•„์š” ์‹œ Prometheus ๋ฐ Grafana๋ฅผ ์—ฐ๋™ํ•˜์—ฌ ํšจ์œจ์„ฑ ๊ฒ€์ฆ.

3. Feature ๋ณ„ MSA ์ง€์›

  • ํ˜„์žฌ ์ƒํƒœ:

    • default-service-group๊ณผ exclude-service-group์œผ๋กœ ๊ฐ ์„œ๋ฒ„์˜ ์—ญํ• ๊ณผ ํฌํ•จ/์ œ์™ธ๋˜๋Š” Feature๋ฅผ ์ œ์–ด.

  • ๊ฒ€ํ†  ๋ฐ ์ œ์•ˆ:

    1. Feature ์ƒํƒœ๋ฅผ ๋™์ ์œผ๋กœ ์ œ์–ด:

      • ํ˜„์žฌ๋Š” yml ํŒŒ์ผ์„ ํ†ตํ•ด Feature์˜ ํฌํ•จ ์—ฌ๋ถ€๋ฅผ ์ œ์–ดํ•˜์ง€๋งŒ, ๋Ÿฐํƒ€์ž„์—์„œ ๋™์ ์œผ๋กœ ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ์‹๋„ ๊ณ ๋ ค ๊ฐ€๋Šฅ.

      • ์˜ˆ: Spring Profiles ๋˜๋Š” Hazelcast์˜ ๋ถ„์‚ฐ ๋งต์„ ํ™œ์šฉํ•˜์—ฌ Feature ์ƒํƒœ๋ฅผ ๋™์ ์œผ๋กœ ๊ด€๋ฆฌ.

    2. Feature ๊ฐ„ ํ†ต์‹  ์ตœ์ ํ™”:

      • ๊ฐ™์€ ์„œ๋ฒ„ ๋‚ด์—์„œ๋Š” ์ง์ ‘ ํ˜ธ์ถœ, ๋‹ค๋ฅธ ์„œ๋ฒ„ ๊ฐ„ ํ†ต์‹ ์€ REST API๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋กœ์ง์„ ๊ฐ„์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ํ™œ์šฉ ๊ฐ€๋Šฅ.

      • ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, Hazelcast์˜ ๋ถ„์‚ฐ ์ด๋ฒคํŠธ(Pub/Sub)๋ฅผ ํ™œ์šฉํ•œ ํ†ต์‹ ๋„ ๊ณ ๋ ค.

4. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๊ด€๋ฆฌ

  • ํ˜„์žฌ ์ƒํƒœ:

    • ๋ชจ๋“  ์„ค์ •์ด application.yml์— ํฌํ•จ๋˜์–ด ์žˆ์–ด ๊ฐ ์„œ๋ฒ„ ๊ฐ„ ํ™˜๊ฒฝ ์ฐจ์ด๋ฅผ ์ˆ˜๋™์œผ๋กœ ๊ด€๋ฆฌ.

  • ๊ฒ€ํ†  ๋ฐ ์ œ์•ˆ:

    • Spring Cloud Config ๋˜๋Š” HashiCorp Vault๋ฅผ ๋„์ž…ํ•˜์—ฌ ์„ค์ •์„ ์ค‘์•™ํ™”.

    • ์ด๋ฅผ ํ†ตํ•ด ํ™˜๊ฒฝ๋ณ„(dev, stg, prd) ์„ค์ •์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ.


์ถ”๊ฐ€ ๊ณ ๋ ค ์‚ฌํ•ญ

  1. ๋กœ๊ทธ ๊ด€๋ฆฌ

    • ํ˜„์žฌ accesslog ์„ค์ •์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋‚˜, ์ค‘์•™ํ™”๋œ ๋กœ๊น… ์‹œ์Šคํ…œ(์˜ˆ: ELK Stack)์„ ์ถ”๊ฐ€๋กœ ๋„์ž…ํ•˜์—ฌ ํ†ตํ•ฉ ๋กœ๊ทธ ๊ด€๋ฆฌ๋ฅผ ๊ณ ๋ ค.

  2. ํ—ฌ์Šค ์ฒดํฌ ๋ฐ ์žฅ์•  ๊ฐ์ง€

    • management.endpoint.health ์„ค์ •์„ ํ†ตํ•ด ์„œ๋น„์Šค ์ƒํƒœ๋ฅผ ํ™•์ธ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ ค๋ฉด ์ถ”๊ฐ€์ ์ธ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ(์˜ˆ: Prometheus, Hazelcast Management Center)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌ.


๊ฒฐ๋ก 

ํ˜„์žฌ ๊ตฌ์„ฑ์€ Hazelcast๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ MSA๋ฅผ ์ง€์›ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํžˆ ๊ฐ•๋ ฅํ•˜๋ฉฐ, ์ถ”๊ฐ€์ ์ธ ๋ณต์žก์„ฑ์„ ๋„์ž…ํ•˜์ง€ ์•Š๊ณ ๋„ ์•ˆ์ •์ ์œผ๋กœ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ํ™•์žฅ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ๋”์šฑ ๊ฐœ์„ ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  1. Hazelcast์˜ Discovery SPI๋ฅผ ํ™œ์šฉํ•œ ๋™์  ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ.

  2. ๋ถ„์‚ฐ ์บ์‹œ ์ •์ฑ… ์ตœ์ ํ™”.

  3. ๋Ÿฐํƒ€์ž„์—์„œ Feature ์ƒํƒœ๋ฅผ ๋™์ ์œผ๋กœ ์ œ์–ดํ•˜๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€.

  4. Spring Cloud Config๋ฅผ ํ†ตํ•œ ์„ค์ • ๊ด€๋ฆฌ ์ค‘์•™ํ™”.