🌍 닀쀑 μ„œλ²„ ν™˜κ²½μ—μ„œμ˜ μ„Έμ…˜ 관리: μ„Έμ…˜ 뢈일치 ν•΄κ²° 방법

μ„ν˜„Β·2025λ…„ 1μ›” 30일

Issues

λͺ©λ‘ 보기
2/8

였늘의 이야기

졜근 ν”„λ‘œμ νŠΈμ—μ„œ λ‘œλ“œ λ°ΈλŸ°μ„œλ₯Ό μ΄μš©ν•œ 리전별 닀쀑 μ„œλ²„ ν™˜κ²½μ„ κ΅¬μΆ•ν•˜λ©΄μ„œ, μ„Έμ…˜ 관리에 λŒ€ν•œ 정리λ₯Ό ν•œλ²ˆ 해두면 도움이 될 것 κ°™μ•„ μ •λ¦¬ν•΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€. 단일 μ„œλ²„μ—μ„œλŠ” κ°„λ‹¨ν–ˆλ˜ μ„Έμ…˜ 기반 인증이, μ—¬λŸ¬ λŒ€μ˜ μ„œλ²„λ‘œ νŠΈλž˜ν”½μ„ λΆ„μ‚°μ‹œν‚€λŠ” μˆœκ°„ μ„Έμ…˜ 뢈일치(Session Inconsistency) 문제λ₯Ό μ΄ˆλž˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이번 κΈ€μ—μ„œλŠ” 이 문제의 원인과 ν•΄κ²° 방법을 μ •λ¦¬ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.


닀쀑 μ„œλ²„ ν™˜κ²½μ—μ„œμ˜ μ„Έμ…˜ 기반 인증 문제 πŸ€”

단일 μ„œλ²„ ν™˜κ²½ vs. 닀쀑 μ„œλ²„ ν™˜κ²½

  • 단일 μ„œλ²„ ν™˜κ²½μ—μ„œλŠ” μ‚¬μš©μžμ˜ μ„Έμ…˜ 정보가 ν•΄λ‹Ή μ„œλ²„μ— μ €μž₯λ˜λ―€λ‘œ 별닀λ₯Έ λ¬Έμ œκ°€ μ—†μŠ΅λ‹ˆλ‹€.
  • 닀쀑 μ„œλ²„ ν™˜κ²½μ—μ„œλŠ” μ‚¬μš©μžμ˜ μš”μ²­μ΄ μ—¬λŸ¬ μ„œλ²„λ‘œ λΆ„μ‚°λ˜κΈ° λ•Œλ¬Έμ—, μ„Έμ…˜ 정보가 μΌκ΄€λ˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ„Έμ…˜ 뢈일치(Session Inconsistency) 문제

  1. μ‚¬μš©μžκ°€ μ„œλ²„ A에 μ ‘μ†ν•˜μ—¬ λ‘œκ·ΈμΈν•˜λ©΄, ν•΄λ‹Ή μ‚¬μš©μžμ˜ μ„Έμ…˜ μ •λ³΄λŠ” μ„œλ²„ A에 μ €μž₯λ©λ‹ˆλ‹€.
  2. 이후 μ‚¬μš©μžμ˜ μš”μ²­μ΄ λ‘œλ“œ λ°ΈλŸ°μ„œλ₯Ό 톡해 μ„œλ²„ B둜 μ „λ‹¬λ˜λ©΄, μ„œλ²„ Bμ—λŠ” ν•΄λ‹Ή μ‚¬μš©μžμ˜ μ„Έμ…˜ 정보가 μ—†μŠ΅λ‹ˆλ‹€.
  3. λ”°λΌμ„œ μ‚¬μš©μžλŠ” λ‘œκ·Έμ•„μ›ƒλœ μƒνƒœλ‘œ μΈμ‹λ˜κ±°λ‚˜, 인증 λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이 문제λ₯Ό ν•΄κ²°ν•˜λ €λ©΄ 닀쀑 μ„œλ²„ ν™˜κ²½μ—μ„œλ„ μΌκ΄€λœ μ„Έμ…˜ 관리λ₯Ό μœ μ§€ν•  수 μžˆλŠ” 방법이 ν•„μš”ν•©λ‹ˆλ‹€.


μ„Έμ…˜ 뢈일치 문제의 ν•΄κ²° 방법 πŸ› οΈ

1. μŠ€ν‹°ν‚€ μ„Έμ…˜(Sticky Session) 방식 πŸ”„

κ°œλ…: λ‘œλ“œ λ°ΈλŸ°μ„œκ°€ νŠΉμ • μ‚¬μš©μžμ˜ μš”μ²­μ„ 항상 λ™μΌν•œ μ„œλ²„λ‘œ μ „λ‹¬ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

방법:

  • μ‚¬μš©μžμ˜ μΏ ν‚€λ₯Ό 기반으둜 νŠΉμ • μ„œλ²„λ‘œ μš”μ²­μ„ κ³ μ •
  • μ‚¬μš©μžμ˜ IP μ£Όμ†Œλ₯Ό 기반으둜 μš”μ²­μ„ νŠΉμ • μ„œλ²„λ‘œ ν• λ‹Ή

μž₯점

βœ”οΈ κ΅¬ν˜„μ΄ κ°„λ‹¨ν•˜λ©° 좔가적인 μ™ΈλΆ€ μ €μž₯μ†Œκ°€ ν•„μš” μ—†μŒ
βœ”οΈ κΈ°μ‘΄ μ„Έμ…˜ 관리 방식을 κ·ΈλŒ€λ‘œ μ‚¬μš©ν•  수 있음

단점

⚠️ νŠΉμ • μ„œλ²„μ— νŠΈλž˜ν”½μ΄ 집쀑될 수 있음 (λ‘œλ“œ λ°ΈλŸ°μ‹± 효과 κ°μ†Œ)
⚠️ μ„Έμ…˜ 정보λ₯Ό κ°€μ§„ μ„œλ²„κ°€ λ‹€μš΄λ˜λ©΄ ν•΄λ‹Ή μ‚¬μš©μžμ˜ μ„Έμ…˜μ΄ μœ μ‹€λ¨

μ„€μ • 예제 (Nginx)

upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
}

2. μ„Έμ…˜ ν΄λŸ¬μŠ€ν„°λ§(Session Clustering) 방식 🌐

κ°œλ…: ν•œ μ„œλ²„μ—μ„œ μƒμ„±λœ μ„Έμ…˜ 정보λ₯Ό λ‹€λ₯Έ μ„œλ²„μ™€ λ™κΈ°ν™”ν•˜μ—¬ λͺ¨λ“  μ„œλ²„κ°€ λ™μΌν•œ μ„Έμ…˜ 정보λ₯Ό 가지도둝 ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

μž₯점

βœ”οΈ μ–΄λŠ μ„œλ²„λ‘œ μš”μ²­μ΄ 가더라도 λ™μΌν•œ μ„Έμ…˜ 정보λ₯Ό μ‚¬μš©ν•  수 있음
βœ”οΈ μ„œλ²„ μž₯μ•  μ‹œμ—λ„ μ„Έμ…˜ 정보가 μœ μ§€λ¨

단점

⚠️ μ„Έμ…˜ λ™κΈ°ν™”λ‘œ μΈν•œ λ„€νŠΈμ›Œν¬ λΆ€ν•˜ λ°œμƒ κ°€λŠ₯
⚠️ μ„Έμ…˜ 볡제 μ§€μ—°μœΌλ‘œ 인해 μΌμ‹œμ μΈ μ„Έμ…˜ 정보 뢈일치 λ°œμƒ κ°€λŠ₯

μ„€μ • 예제 (Tomcat μ„Έμ…˜ ν΄λŸ¬μŠ€ν„°λ§)

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

3. μ„Έμ…˜ μŠ€ν† λ¦¬μ§€ 뢄리 방식 πŸ—„οΈ

κ°œλ…: μ„Έμ…˜ 정보λ₯Ό μ™ΈλΆ€ μŠ€ν† λ¦¬μ§€(예: Redis, Memcached, λ°μ΄ν„°λ² μ΄μŠ€)에 μ €μž₯ν•˜μ—¬ λͺ¨λ“  μ„œλ²„κ°€ λ™μΌν•œ μ„Έμ…˜ μ €μž₯μ†Œλ₯Ό μ°Έμ‘°ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

μž₯점

βœ”οΈ μ€‘μ•™μ—μ„œ μ„Έμ…˜ 정보λ₯Ό κ΄€λ¦¬ν•˜μ—¬ 일관성을 μœ μ§€ν•  수 있음
βœ”οΈ μ„œλ²„κ°€ μΆ”κ°€λ˜κ±°λ‚˜ κ΅μ²΄λ˜μ–΄λ„ μ„Έμ…˜μ΄ μœ μ§€λ¨

단점

⚠️ μ™ΈλΆ€ μŠ€ν† λ¦¬μ§€κ°€ 단일 μž₯μ•  지점(Single Point of Failure)이 될 수 있음
⚠️ 좔가적인 인프라 ꡬ좕 및 관리가 ν•„μš”ν•¨

μ„€μ • 예제 (Spring Boot + Redis μ„Έμ…˜ μ €μž₯)

@Configuration
@EnableRedisHttpSession
public class HttpSessionConfig {
    // Redis μ„Έμ…˜ μ €μž₯ μ„€μ •
}

βœ… μ–΄λ–€ 방법을 선택해야 ν• κΉŒ?

ν•΄κ²° 방법μž₯점단점
μŠ€ν‹°ν‚€ μ„Έμ…˜κ΅¬ν˜„μ΄ 간단, 좔가적인 μ €μž₯μ†Œ λΆˆν•„μš”νŠΉμ • μ„œλ²„λ‘œ νŠΈλž˜ν”½ 집쀑, μ„œλ²„ μž₯μ•  μ‹œ μ„Έμ…˜ μœ μ‹€
μ„Έμ…˜ ν΄λŸ¬μŠ€ν„°λ§μ„œλ²„ κ°„ μ„Έμ…˜ 곡유 κ°€λŠ₯λ„€νŠΈμ›Œν¬ λΆ€ν•˜, 동기화 μ§€μ—° κ°€λŠ₯
μ„Έμ…˜ μŠ€ν† λ¦¬μ§€ 뢄리쀑앙 μ €μž₯μ†Œμ—μ„œ μ„Έμ…˜ 관리좔가적인 인프라 ν•„μš”, μž₯μ•  λ°œμƒ μ‹œ μœ„ν—˜

πŸš€ μΆ”μ²œν•˜λŠ” 방식

  • μ„œλ²„ κ°œμˆ˜κ°€ 적고, λΉ λ₯΄κ²Œ μ μš©ν•΄μ•Ό ν•˜λŠ” 경우 β†’ μŠ€ν‹°ν‚€ μ„Έμ…˜
  • μ„œλ²„κ°€ 많고, ν™•μž₯성을 κ³ λ €ν•΄μ•Ό ν•˜λŠ” 경우 β†’ μ„Έμ…˜ ν΄λŸ¬μŠ€ν„°λ§
  • λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œμ—μ„œ μ•ˆμ •μ μΈ μ„Έμ…˜ 관리λ₯Ό 원할 경우 β†’ μ„Έμ…˜ μŠ€ν† λ¦¬μ§€ 뢄리 (Redis μΆ”μ²œ)

마치며 🌟

닀쀑 μ„œλ²„ ν™˜κ²½μ—μ„œμ˜ μ„Έμ…˜ κ΄€λ¦¬λŠ” μ‹œμŠ€ν…œμ˜ μ•ˆμ •μ„±κ³Ό μ§κ²°λ˜λŠ” μ€‘μš”ν•œ λ¬Έμ œμž…λ‹ˆλ‹€. μœ„μ—μ„œ μ†Œκ°œν•œ μ„Έ κ°€μ§€ 방법 쀑 μ‹œμŠ€ν…œμ˜ νŠΉμ„±κ³Ό μš”κ΅¬μ‚¬ν•­μ— λ§žλŠ” 방식을 μ„ νƒν•˜μ—¬ μ μš©ν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€. 각 방법은 μž₯단점이 μžˆμœΌλ―€λ‘œ, μΆ©λΆ„ν•œ κ²€ν†  ν›„ κ²°μ •ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.

μ—¬λŸ¬λΆ„μ˜ μ„œλΉ„μŠ€ ν™˜κ²½μ— λ§žλŠ” μ μ ˆν•œ μ„Έμ…˜ 관리 방법을 μ„ νƒν•˜μ—¬, λ”μš± μ•ˆμ •μ μΈ μ‹œμŠ€ν…œμ„ κ΅¬μΆ•ν•΄λ³΄μ„Έμš”! πŸš€

---

0개의 λŒ“κΈ€