개발 지식/WEB 지식

🌐 μ„Έμ…˜(Session) 뢈일치 문제 및 ν•΄κ²° 방법

인파_ 2022. 6. 28. 08:28

session-μ„Έμ…˜-뢈일치

μ„œλ²„ 닀쀑화 ν™˜κ²½μ—μ„œμ˜ μ„Έμ…˜ 뢈일치

단일 μ„œλ²„ ν™˜κ²½μ—μ„œλŠ” session을 ν†΅ν•œ λ‘œκ·ΈμΈμ„ κ΅¬ν˜„ν• λ•Œ session 뢈일치 문제λ₯Ό μ‹ κ²½μ“Έ ν•„μš”κ°€ μ—†λ‹€.

ν•˜μ§€λ§Œ μ„œλΉ„μŠ€κ°€ 컀짐에 따라 ν•œλŒ€μ˜ μ„œλ²„λ‘œ μš΄μ˜ν•˜λŠ”κ²ƒμ΄ λΆˆκ°€λŠ₯ν•΄μ‘Œλ‹€κ³  κ°€μ •ν•΄λ³΄μž. κ·Έλž˜μ„œ μ„œλ²„λ₯Ό μ—…κ·Έλ ˆμ΄λ“œ ν•΄μ•Όλ˜λŠ”λ° λ‹€μŒκ³Ό 같이 두가지 방식이 μ‘΄μž¬ν•œλ‹€.

 

첫번째 방법은 scale-up 방식이닀.

μ„œλ²„ 자체 μ„±λŠ₯을 늘렀 λΆ€ν•˜λ₯Ό κ²¬λ”œμˆ˜ 있게 ν•˜λŠ” λ°©μ‹μ΄μ§€λ§Œ, μ—¬μ „νžˆ μ„œλ²„ ν•œ λŒ€μ— λͺ¨λ“  νŠΈλž˜ν”½μ΄ μ§‘μ€‘λ˜λ―€λ‘œ λ§ŒμΌμ— μ„œλ²„ μž₯μ• κ°€ μƒκΈΈμ‹œ μ„œλ²„κ°€ 볡ꡬ될 λ•ŒκΉŒμ§€ μ„œλΉ„μŠ€λ₯Ό 쀑단해야 ν•˜λŠ” 상황이 λ°œμƒν•  수 μžˆλŠ” μœ„ν—˜μ΄ μžˆλ‹€. μ‚¬μš©ν•˜λ €λ˜ μ„œλΉ„μŠ€κ°€ μ€‘λ‹¨λœλ‹€λ©΄ μ—„μ²­λ‚œ λΉ„μ¦ˆλ‹ˆμŠ€ 손싀(수읡 손싀)이 생길 수 μžˆλ‹€.

 

λ‘λ²ˆμ§Έ 방법은 scale-out λ°©μ‹μ΄λ‹€.

μ„œλ²„λ₯Ό μ—¬λŸ¬λŒ€λ‘œ λŠ˜λ €μ„œ 각 μ„œλ²„μ— λ‘œλ“œλ°ΈλŸ°μ‹±μœΌλ‘œ νŠΈλž˜ν”½μ„ λΆ„μ‚°ν•˜κ²Œ ν•œλ‹€. κ·Έλž˜μ„œ μ„œλ²„ ν•œλŒ€μ— μž₯μ• κ°€ 생겨도 λ‹€λ₯Έ μ„œλ²„λŠ” μ‚΄μ•„μžˆμœΌλ‹ˆ μ„œλΉ„μŠ€ λ¬Έμ œκ°€ 생기지 μ•ŠλŠ”λ‹€.

κ·ΈλŸ¬λ‚˜ μ΄λ•Œ μ„œλΉ„μŠ€ μ΄μš©μ— λ°œμƒν•˜λŠ” μ»€λ‹€λž€ 문제점이 μžˆλŠ”λ° λ°”λ‘œ 데이터 μ •ν•©μ„±, μ„Έμ…˜ 뢈일치 λ¬Έμ œλ‹€. 

μ™œλƒν•˜λ©΄ μ—¬λŸ¬ λŒ€μ˜ μ„œλ²„κ°€ 각각 μ„Έμ…˜ μ €μž₯μ†Œλ₯Ό λ…λ¦½μ μœΌλ‘œ κ°–κΈ° λ•Œλ¬Έμ— 데이터 뢈일치 λ¬Έμ œκ°€ λ°œμƒν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

Scale-Up : μ„œλ²„μ˜ μŠ€νŽ™μ„ λŠ˜λ¦¬λŠ” 방식. (μ„œλ²„μ˜ λ©”λͺ¨λ¦¬μΉ΄λ“œλ‚˜ cpu λΆ€ν’ˆμ„ μ—…κ·Έλ ˆμ΄λ“œν•˜μ—¬ λΆ€ν•˜λ₯Ό μ΅œμ†Œν™”)
Scale-Out : μ„œλ²„μ˜ 갯수λ₯Ό λŠ˜λ¦¬λŠ” 방식. (μ—¬λŸ¬λŒ€μ˜ μ„œλ²„λ₯Ό 두어 λΆ€ν•˜λ₯Ό λΆ„μ‚°)
λ‘œλ“œλ°ΈλŸ°μ‹± μ΄λž€?
μ—¬λŸ¬ λŒ€μ˜ μ„œλ²„λ₯Ό 두고 νŠΈλž˜ν”½μ„ λΆ„μ‚°μ²˜λ¦¬ν•˜μ—¬ μ„œλ²„μ˜ λ‘œλ“œμœ¨ 증가, λΆ€ν•˜λŸ‰, μ†λ„μ €ν•˜ 등을 ν•΄κ²°ν•΄μ£ΌλŠ” μ„œλΉ„μŠ€.
νŒ€μ˜ 업무λ₯Ό νŒ€μž₯이 νŒ€μ›λ“€μ—κ²Œ λ°°λΆ„ν•˜λŠ”κ²ƒκ³Ό 같은 μ΄μΉ˜μ΄λ‹€.

 

μ΄ν•΄ν•˜κΈ° μ‰½κ²Œ 그림으둜 μ˜ˆμ‹œλ₯Ό λ“€μ–΄λ³΄μž.

 

1. μ„œλ²„λ₯Ό 3λŒ€λ₯Ό μ¦κ°•μ‹œν‚€κ³  λ‘œλ“œλ°ΈλŸ°μ„œλ‘œ 각 μ„œλ²„λ‘œ νŠΈλž˜ν”½ 뢄산이 되게 μš΄μ˜μ€‘μ΄λ‹€. 

session-μ„Έμ…˜-뢈일치

 

2. μ΄λ•Œ μ‚¬μš©μžκ°€ μ„œλ²„1에 접속해 λ‘œκ·ΈμΈμ„ 진행해 μ„œλ²„1에 μ„Έμ…˜μ΄ μ €μž₯λœλ‹€

session-μ„Έμ…˜-뢈일치

 

3. λ‘œκ·ΈμΈ ν•œν›„ κ²Œμ‹œνŒμ— 글을 μ“°κΈ° μœ„ν•΄ μ„œλ²„μ— μš”μ²­ν–ˆλŠ”λ°, λ‘œλ“œλ°ΈλŸ°μ‹± μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ 인해 μ„œλ²„1이 μ•„λ‹Œ μ„œλ²„2둜 μš”μ²­λ˜μ–΄μ§„λ‹€.

session-μ„Έμ…˜-뢈일치

 

4. ν•˜μ§€λ§Œ μ„œλ²„2μ—λŠ” μ‚¬μš©μžμ˜ 둜그인 μ„Έμ…˜μ΄ μ—†κΈ°λ•Œλ¬Έμ— 또 λ‘œκ·ΈμΈν•˜λΌλŠ” 응닡을 λ³΄λ‚΄κ²Œ λœλ‹€. (방금 둜그인 ν–ˆλŠ”λ°?)

session-μ„Έμ…˜-뢈일치

 

이 처럼, μ„œλΉ„μŠ€ μ•ˆμ •μ„ μœ„ν•΄ μ„œλ²„λ₯Ό λŠ˜λ €λ†¨λ”λ‹ˆ μ„œλΉ„μŠ€ ν’ˆμ§ˆ μžμ²΄κ°€ λ–¨μ–΄μ§€λŠ” κ²°κ³Όλ₯Ό λ§žμ΄ν•΄ 버렸닀.

μ΄λŸ¬ν•œ μ„Έμ…˜μ˜ 데이터 μ •ν•©μ„± 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ λ°©λ²•μ—λŠ” 무엇이 μžˆλŠ”μ§€ μ‚΄νŽ΄λ³΄μž.

데이터 μ •ν•©μ„± (data consistency) μ΄λž€?
μ–΄λ–€ λ°μ΄ν„°λ“€μ˜ 값이 μ„œλ‘œ μΌμΉ˜ν•¨
μ„Έμ…˜ κ°μ²΄λŠ” μ–΄λ–€ ν˜•νƒœλ‘œ 이루어져 μžˆμ„κΉŒ ?
μ„Έμ…˜ κ°μ²΄λŠ” Key에 ν•΄λ‹Ήν•˜λŠ” SESSION ID와 이에 λŒ€μ‘ν•˜λŠ” Value둜 κ΅¬μ„±λ˜μ–΄ μžˆλ‹€.
Valueμ—λŠ” μ„Έμ…˜ 생성 μ‹œκ°„, λ§ˆμ§€λ§‰ μ ‘κ·Ό μ‹œκ°„ 및 Userκ°€ μ €μž₯ν•œ 속성 λ“± 이 Map ν˜•νƒœλ‘œ μ €μž₯λœλ‹€.
μ„Έμ…˜ 객체

μ„Έμ…˜μ˜ 뢈일치 ν•΄κ²° 방법

 

Sticky Session 방식

κ°„λ‹¨ν•˜κ²Œ 생각해보면 λ‘œλ“œλ°ΈλŸ°μ„œκ°€ 랜덀으둜 아무 μ„œλ²„μ—κ²Œ μš”μ²­μ„ λ³΄λ‚΄μ„œ λ°œμƒλœ λ¬Έμ œμ΄λ‹ˆκΉŒ, 만일 ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ΄ μ–΄λŠ ν•œ μ„œλ²„μ— 도달해 μ„Έμ…˜ 데이터가 생겼닀면, μ•žμœΌλ‘œ 이 μ„œλ²„λŠ” ν•΄λ‹Ή ν΄λΌμ΄μ–ΈνŠΈλ§Œμ˜ μš”μ²­/μ‘λ‹΅λ§Œ μ²˜λ¦¬ν•˜λ„λ‘ κ³ μ •ν•΄μ£Όλ©΄ λœλ‹€.

Sticky Session

Sticky Sessionμ΄λž€ 말 κ·ΈλŒ€λ‘œ κ³ μ •λœ μ„Έμ…˜μ„ μ˜λ―Έν•œλ‹€.

Stickyλž€ λ²ˆμ—­ν•˜λ©΄ λˆμ μž„, κ»Œλ”±μ§€ λΌλŠ” λœ»μ΄λ‹€. μ‰½κ²Œ λ§ν•΄μ„œ ν•΄λ‹Ή μ„œλ²„μ— κ»Œλ”±μ§€μ²˜λŸΌ λΆ™μ–΄μžˆλ‹€κ³  μƒκ°ν•˜λ©΄ λœλ‹€.

 

λ‹€μŒμ€ sticky session λ°©μ‹μœΌλ‘œ μ–΄λ–»κ²Œ λ‘œλ“œ λ°ΈλŸ°μ„œκ°€ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„μ˜ 연결을 μ§€μ†μ‹œν‚¬μˆ˜ μžˆλŠ”μ§€μ˜ 과정이닀.

Sticky Session

  1. ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„μ—κ²Œ 처음 μš”μ²­μ„ μ „λ‹¬ν•œλ‹€.
    그러면 λ‘œλ“œλ°ΈλŸ°μ„œλŠ” μ„œλ²„λ“€ 쀑 ν•˜λ‚˜μ—κ²Œ μš”μ²­μ„ 보내 μ²˜λ¦¬ν•œλ‹€.
  2. μ„œλ²„μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈμ— 응닡을 보낼 λ•Œ, Set Cookie : SERVERID=μ„œλ²„1 이런 ν˜•νƒœλ‘œ 정보λ₯Ό 쿠킀에 λ‹΄μ•„ 보낸닀.
    μ‰½κ²Œ 말해 λ„ˆλ₯Ό λ‹΄λ‹Ήν•œ μ„œλ²„ 정보λ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ˜ 쿠킀에 μ €μž₯ν•˜λŠ” 것이닀.
  3. 이후, ν΄λΌμ΄μ–ΈνŠΈκ°€ λ‹€μ‹œ μ„œλ²„μ— μš”μ²­μ„ λ³΄λ‚Όλ•Œ Cookie : SERVERID=μ„œλ²„1 μ„ ν•¨κ»˜ 보낸닀
    그러면 λ‘œλ“œ λ°ΈλŸ°μ„œκ°€ μš°μ„ μ μœΌλ‘œ μš”μ²­μ— μΏ ν‚€ 정보가 μžˆλŠ”μ§€ λΆ€ν„° ν™•μΈν•˜κ³ , μΏ ν‚€μ˜ 정보λ₯Ό ν™•μΈν–ˆλ‹€λ©΄ ν•΄λ‹Ή μš”μ²­μ€ ν•΄λ‹Ή μΏ ν‚€κ°€ μƒμ„±λ˜μ–΄ μžˆλŠ” μ„œλ²„λ‘œ λ³΄λ‚΄μ§€κ²Œ λœλ‹€.
  4. λ§Œμ•½ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 쿠킀라면, λ‘œλ“œ λ°ΈλŸ°μ„œμ˜ μ•Œκ³ λ¦¬μ¦˜μ— μ˜ν•΄ μ„ μ •λœ λ‹€λ₯Έ μ„œλ²„μ— μΏ ν‚€κ°€ μƒμ„±λ˜μ–΄ λ‹€μŒμ— λ˜‘κ°™μ€ μš”μ²­μ΄ 였면 같은 경둜둜 λ§΅ν•‘μ‹œμΌœ 쀄 수 μžˆλ„λ‘ ν•œλ‹€.

 

μ΄λ ‡κ²Œ λ™μΌν•œ μ‚¬μš©μžκ°€ μ„Έμ…˜μ΄ μžˆλŠ” ν•΄λ‹Ή μ„œλ²„μ— 계속 μš”μ²­μ„ 보낼 수 μžˆλ„λ‘, μ§€μ†μ μœΌλ‘œ μ„œλ²„ 정보가 μΏ ν‚€λ₯Ό 톡해 응닡에 μ‚½μž…λ˜μ–΄ λ³΄λ‚΄μ§€κ²Œ λ˜μ–΄, ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°€ μ„œλ‘œ 연결을 μœ μ§€ν• μˆ˜ μžˆλŠ” 것이닀.

μ΄λŸ¬ν•œ 방식을 μ‚¬μš©ν•˜λ©΄ μœ μ €λŠ” μ„Έμ…˜μ— λŒ€ν•œ 데이터 뢈일치 λ¬Έμ œμ—μ„œ μžμœ λ‘œμ›Œμ§ˆ 수 있게 λœλ‹€.

λŒ€ν‘œμ μœΌλ‘œ AWS ELB(Elastic Load Balancer)λŠ” Sticky session을 ν™œμš©ν•œ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•œλ‹€.

Sticky Session λ¬Έμ œμ 

  • νŠΉμ • μ„œλ²„μ— νŠΈλž˜ν”½μ΄ μ§‘μ€‘λ˜λŠ” 문제 
    κ³ μ •λœ μ„Έμ…˜μ„ μ‚¬μš©ν•œλ‹€λŠ” 말은 μ‚¬μš©μžκ°€ 접속해야 ν•˜λŠ” μ„œλ²„κ°€ κ³ μ •λ˜μ–΄ 있기 λ•Œλ¬Έμ— ν•˜λ‚˜μ˜ μ„œλ²„μ— νŠΈλž˜ν”½μ΄ 집쀑될 수 μžˆλ‹€λŠ” μœ„ν—˜μ„±μ„ κ°–κ³  μžˆλ‹€λŠ” 말이닀.
    즉, 본래 λͺ©μ μΈ λ‘œλ“œ λ°ΈλŸ°μ‹±μ΄ μ œλŒ€λ‘œ 이뀄지지 μ•Šμ„ 수 μžˆλ‹€.

  • μ„Έμ…˜ μ •λ³΄μ˜ μœ μ‹€
    μ„œλΉ„μŠ€ 쀑에 만일 ν•˜λ‚˜μ˜ μ„œλ²„μ— μž₯μ• κ°€ λ°œμƒν•˜κ²Œ 되면 ν•΄λ‹Ή μ„œλ²„λ₯Ό μ‚¬μš©ν•˜λŠ” μ‚¬μš©μžλ“€μ€ μ„Έμ…˜ 정보λ₯Ό λͺ¨λ‘ μžƒκ²Œ λœλ‹€.
    μ΄λ ‡κ²Œ 되면 λ‹€λ₯Έ μ„œλ²„μ—μ„œ μ„Έμ…˜ 인증을 λ‹€μ‹œ ν•΄μ•Ό ν•˜λŠ” 문제
    κ°€ μƒκΈ°κ²Œλœλ‹€.

이처럼 Sticky sessionμ—μ„œλŠ” μ‚¬μš©μžμ™€ μ„Έμ…˜ 정보λ₯Ό κ°–κ³  μžˆλŠ” μ„œλ²„λ₯Ό 1:1둜 맀핑해주어 μ„Έμ…˜ 뢈일치λ₯Ό ν•΄κ²°ν•΄μ§€λ§Œ, λ¬Έμ œκ°€ λ°œμƒν•˜λ©΄ Scale out의 μž₯점인 νŠΈλž˜ν”½ λΆ„μ‚°κ³Ό κ°€μš©μ„±μ„ μ œλŒ€λ‘œ ν™œμš©ν•˜μ§€ λͺ»ν•˜κ²Œ λ˜λŠ” κ²½μš°κ°€ λ°œμƒν•  수 있게 λœλ‹€.


Session Clustering 방식

μ•žμ„œ sticky μ„Έμ…˜μ€ 각 μ„œλ²„μ— μ„Έμ…˜μ„ μ €μž₯ν•΄λ†“μ•˜λ”λ‹ˆ μ„Έμ…˜ λΆˆμΌμΉ˜λŠ” ν•΄κ²°λ˜μ—ˆμ§€λ§Œ 도리어 μ„±λŠ₯이 μ•ˆμ’‹μ•„μ§„λ‹€λŠ” κ²°κ³Όλ₯Ό λ‚³μ•˜λ‹€.

그러면 μ„Έμ…˜ 정보λ₯Ό 각 μ„œλ²„λ§ˆλ‹€ μ €μž₯ν•˜λŠ”κ²Œ μ•„λ‹Œ μ„Έμ…˜ 데이터λ₯Ό 볡사해 μ„œλ²„λ“€μ—κ²Œ μ „νŒŒν•΄ κ°€μ Έλ‹€ μ“Έμˆ˜ 있으면 λ˜μ§€ μ•Šμ„κΉŒ?

Session Clustering

μ„Έμ…˜ ν΄λŸ¬μŠ€ν„°λ§μ€ μ„œλ²„λ“€μ„ ν•˜λ‚˜μ˜ ν΄λŸ¬μŠ€ν„°λ‘œ λ¬Άμ–΄ κ΄€λ¦¬ν•˜κ³ , ν΄λŸ¬μŠ€ν„° λ‚΄μ˜ μ„œλ²„λ“€μ΄ μ„Έμ…˜μ„ κ³΅μœ ν•  수 μžˆλ„λ‘ ν•˜λŠ” 방식이닀. 

예λ₯Όλ“€μ–΄ μ„œλ²„1μ—μ„œ login session이 μ €μž₯λ˜μ—ˆλ‹€λ©΄, μ„œλ²„2와 μ„œλ²„3에도 μ„œλ²„1에 μ €μž₯λ˜μ–΄μžˆλŠ” μ„Έμ…˜μ„ μ „νŒŒ(볡사)ν•˜λŠ” 것이닀. 

 

WASλ§ˆλ‹€ session clustering을 μ§€μ›ν•˜λŠ” 방식이 μ‘°κΈˆμ”© λ‹€λ₯Έλ°,

그쀑 κ°€μž₯ λŒ€ν‘œμ  WAS인 ν†°μΊ£(Tomcat) μ—μ„œλŠ” μ–΄λ–»κ²Œ Session Clustering을 κ΅¬ν˜„ν•˜κ³  μžˆλŠ”μ§€ μ•Œμ•„λ³΄μž.


Tomcat Session Clustering

Tomcatμ—μ„œλŠ” 크게 두 가지 λ°©μ‹μœΌλ‘œ Session Clustering을 κ΅¬ν˜„ κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€.

 

1. All-to-All Session Replication

Session Clustering

All-to-All 방식은 ν•˜λ‚˜μ˜ μ„Έμ…˜ ν΄λŸ¬μŠ€ν„° λ‚΄μ—μ„œ 데이터가 λ³€κ²½λ˜λ©΄ λ³€κ²½λœ 사항이 λ‹€λ₯Έ λͺ¨λ“  μ„œλ²„λ‘œ 볡제 λ˜λŠ” λ°©μ‹μœΌλ‘œ, ν†°μΊ£μ—μ„œ μ œκ³΅ν•˜λŠ” DeltaManager 클래슀λ₯Ό 톡해 κ΅¬ν˜„λœλ‹€.

 

νŠΉμ • μ„œλ²„μ— μƒμ„±λœ μ„Έμ…˜μ„ ν΄λŸ¬μŠ€ν„°λ₯Ό μ΄λ£¨λŠ” λͺ¨λ“  μ„œλ²„μ— μ„Έμ…˜μ„ λ³΅μ œν•˜κΈ° λ•Œλ¬Έμ— ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ ν•œ 곳으둜 μ§€μ •ν•˜μ§€ μ•Šμ•„λ„ 되고 λ‹€λ₯Έ μ„œλ²„λ‘œ μš”μ²­μ„ 보내더라도 같은 μ„Έμ…˜μ„ μœ μ§€ν•  수 μžˆλ‹€. 

만일 μ΄μš©ν•˜κ³  μžˆλŠ” μ„œλ²„μ— μž₯μ• κ°€ λ°œμƒν•΄λ„ λ‹€λ₯Έ μ„œλ²„μ—μ„œ μ„Έμ…˜μ„ μœ μ§€ν•˜κ³  있기 λ•Œλ¬Έμ— ν΄λΌμ΄μ–ΈνŠΈλŠ” λ™μΌν•œ μ„œλΉ„μŠ€ ν™˜κ²½μ„ μ œκ³΅λ°›μ„ 수 있게 λœλ‹€.

 

ν•˜μ§€λ§Œ All-to-All λ°©μ‹μ—μ„œλŠ” λͺ¨λ“  μ„œλ²„κ°€ 전체 μ„Έμ…˜ 데이터λ₯Ό μœ μ§€ν•˜κ³  있기 λ•Œλ¬Έμ—, λ‹€λ₯Έ μ„œλ²„μ—μ„œ μ„Έμ…˜μ„ μ°ΎκΈ° μœ„ν•œ 좔가적인 λ„€νŠΈμ›ŒνŠΈ I/Oκ°€ λ°œμƒν•˜μ§„ μ•Šμ§€λ§Œ, 그만큼 λ§Žμ€ λ©”λͺ¨λ¦¬κ°€ ν•„μš”ν•˜λ‹€λŠ” 단점이 μžˆλ‹€.

그리고 μ„Έμ…˜μ„ μ €μž₯ν•  λ•Œ μ„œλ²„ 수 만큼 λ³΅μ œν•˜κ³  각 μ„œλ²„μ— 전달, μ €μž₯ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ— μ„œλ²„ μˆ˜μ— λΉ„λ‘€ν•˜μ—¬ λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½μ΄ μ¦κ°€ν•˜κ²Œ λ˜κΈ°λ„ ν•œλ‹€.

μΆ”κ°€μ μœΌλ‘œ μ„Έμ…˜ μ „νŒŒ μž‘μ—… 쀑 λͺ¨λ“  μ„œλ²„μ— μ„Έμ…˜μ΄ μ „νŒŒλ˜κΈ°κΉŒμ§€μ˜ μ‹œκ°„μ°¨λ‘œ μΈν•œ μ„Έμ…˜ 뢈일치 λ¬Έμ œμ™€ 같은 μ˜ˆμƒμΉ˜ λͺ»ν•œ λ¬Έμ œκ°€ λ°œμƒν•  κ°€λŠ₯성이 μ‘΄μž¬ν•œλ‹€.

ν†°μΊ£ 곡식 λ¬Έμ„œμ—μ„œλ„ All-to-All 방식은 μ†Œκ·œλͺ¨ ν΄λŸ¬μŠ€ν„° ν™˜κ²½(λ…Έλ“œκ°€ 4개 미만)μ—μ„œ μ’‹κ³ , 이보닀 큰 ν΄λŸ¬μŠ€ν„° ν™˜κ²½μ—μ„œλŠ” μΆ”μ²œν•˜μ§€ μ•ŠλŠ”λ‹€κ³  ν•œλ‹€.
그리고 DeltaManagerλ₯Ό μ‚¬μš©ν•œ 방식은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λ°°ν¬λ˜μ§€ μ•Šμ€ λ…Έλ“œμ—λ„ 볡제λ₯Ό μ‹œλ„ν•˜κΈ° λ•Œλ¬Έμ— λΆˆν•„μš”ν•œ νŠΈλž˜ν”½μ„ μ„œλ²„μ— λ°œμƒμ‹œν‚€λŠ” λ¬Έμ œλ„ μ‘΄μž¬ν•œλ‹€.
Tomcatμ—μ„œλŠ” μ΄λŸ¬ν•œ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ‹€μŒμœΌλ‘œ μ†Œκ°œν•  BackupManagerλ₯Ό μ΄μš©ν•œ 방법도 μ œκ³΅ν•΄μ€€λ‹€.

 

2. Primary-Secondary Session Replication

Session Clustering

Primay-Secondary 방식은 Primary μ„œλ²„μ˜ μ„Έμ…˜ 데이터λ₯Ό Secondary(Backup) μ„œλ²„μ—λ§Œ 전체 λ³΅μ œν•˜μ—¬ μ €μž₯ν•˜λŠ” λ°©μ‹μœΌλ‘œ, BackupManager 클래슀λ₯Ό 톡해 이 방식을 μ œκ³΅ν•˜κ³  μžˆλ‹€.


All-to-All Session Replication 방식은 κ·Έλƒ₯ λ¬΄μ‹ν•˜κ²Œ λͺ¨λ“  μ„œλ²„μ— λ³΅μ œν•˜κ³  μ €μž₯ν•˜λŠ” 것과 달리, Primary μ„œλ²„μ™€ Secondary(Backup) μ„œλ²„μ—λ§Œ 전체 μ„Έμ…˜μ„ λ³΅μ œν•˜μ—¬ μ €μž₯ν•˜λ˜, λ‚˜λ¨Έμ§€ μ΄μ™Έμ˜ μ„œλ²„λ“€μ—λŠ” μ„Έμ…˜μ˜ Key에 ν•΄λ‹Ήν•˜λŠ” JSESSIONID만 볡제, μ €μž₯ν•¨μœΌλ‘œμ¨ λ©”λͺ¨λ¦¬λ₯Ό μ ˆμ•½ν•  수 μžˆλŠ” 방식이닀.


ν•˜μ§€λ§Œ 만일 Primary, Secondary μ„œλ²„λ₯Ό μ œμ™Έν•œ λ‹€λ₯Έ μ„œλ²„μ— μ„Έμ…˜ 정보λ₯Ό μš”μ²­ν•  경우 λ‹€μ‹œ μ˜¨μ „ν•œ μ„Έμ…˜ 정보λ₯Ό μ–»κΈ° μœ„ν•΄μ„œλŠ” Primary, Secondary에 λ‹€μ‹œ μš”μ²­μ„ λ³΄λ‚΄μ•Όν•œλ‹€λŠ”, μ„Έμ…˜ 볡제λ₯Ό μœ„ν•œ 과정이 μˆ˜ν–‰λ˜λŠ” 문제점이 μ‘΄μž¬ν•œλ‹€.

Primary-Secondary Session Replication 방식은 비ꡐ적 λŒ€κ·œλͺ¨ ν΄λŸ¬μŠ€ν„° ν™˜κ²½μ—μ„œ μ ν•©ν•œ 방식이라고 ν•œλ‹€.

Session Clustering 문제점

μœ„μ—μ„œ ν†°μΊ£ μ„Έμ…˜ ν΄λŸ¬μŠ€ν„°λ§μ„ μ„€λͺ…ν•˜λ©΄μ„œ κ°„κ°„νžˆ λ¬Έμ œμ μ— λŒ€ν•΄ μ–ΈκΈ‰ν–ˆμ§€λ§Œ μ·¨ν•©ν•˜μ—¬ μ •λ¦¬ν•˜μžλ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

  • μ„œλ²„ μ„ΈνŒ…μ˜ 어렀움
    이 방식은 scale out κ΄€μ μ—μ„œ μƒˆλ‘œμš΄ μ„œλ²„κ°€ ν•˜λ‚˜ 뜰 λ•Œλ§ˆλ‹€ 기쑴에 μ‘΄μž¬ν•˜λ˜ WAS에 μƒˆλ‘œμš΄ μ„œλ²„μ˜ IP/Portλ₯Ό μž…λ ₯ν•΄μ„œ ν΄λŸ¬μŠ€ν„°λ§ ν•΄μ€˜μ•Ό ν•˜λŠ” λΆˆνŽΈν•¨μ΄ μžˆλ‹€.

  • μΆ”κ°€ λ©”λͺ¨λ¦¬ λΉ„μš©
    μ„œλ²„λ§ˆλ‹€ λ™μΌν•œ μ„Έμ…˜ 정보λ₯Ό 가지고 μžˆμ–΄μ•Ό 되기 λ•Œλ¬Έμ—, μ„œλ²„κ°€ ν™•μž₯될 수둝 λ³΅μ œν•΄μ•Ό ν•  μ„Έμ…˜ 데이터가 λŠ˜μ–΄λ‚˜κ³  μ΄λŠ” 좔가적인 μ˜€λ²„ν—€λ“œλ‘œ 이어진닀.
    Tomcat을 예둜 λ“€μ—ˆμ„ λ•Œ, λͺ¨λ“  데이터λ₯Ό 각각의 Tomcat λ…Έλ“œμ—κ²Œ 전달해야 ν•΄μ•Ό ν•˜κ³  λ°°ν¬ν•˜λŠ” λ…Έλ“œκ°€ 아닐 κ²½μš°μ—λ„ 볡사λ₯Ό μ§„ν–‰ν•˜κΈ° λ•Œλ¬Έμ— λΆˆν•„μš”ν•˜κ²Œ λ©”λͺ¨λ¦¬λ₯Ό μ°¨μ§€λœλ‹€. 
    즉, 효율적인 λ©”λͺ¨λ¦¬ 관리가 이루어지지 μ•ŠλŠ”λ‹€.

  • λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½ 증가
    데이터 변경이 λ°œμƒν• λ•Œ λ§ˆλ‹€ μ„Έμ…˜μ„ μ „νŒŒ(볡사)ν•˜λŠ” μž‘μ—…μ΄ μΌμ–΄λ‚˜κΈ° λ•Œλ¬Έμ— λ„€νŠΈμ›Œν¬ μš”μ²­ νŠΈλž˜ν”½μ΄ μ¦κ°€ν•˜κ²Œ λœλ‹€.
    그리고 μ„œλ²„κ°€ λŠ˜μ–΄λ‚ μˆ˜λ‘ 이 νŠΈλž˜ν”½μ€ λ”μš± μ‹¬ν•΄μ§ˆ 것이닀.
    λ˜ν•œ, 볡사 뿐만 μ•„λ‹ˆλΌ μ„œλ²„κ°€ λŠ˜μ–΄λ‚¨μ— 따라 μ„Έμ…˜μ„ μ €μž₯ν•˜κ³  μ°Ύμ•„μ˜€λŠ” κ³Όμ •μ—μ„œ 좔가적인 νŠΈλž˜ν”½μ΄ λ°œμƒ ν• μˆ˜λ„ μžˆμ–΄ ν™•μž₯에 ν•œκ³„κ°€ μžˆλ‹€.

  • μ‹œμ°¨λ‘œ μΈν•œ μ„Έμ…˜ 뢈일치 λ°œμƒ
    μ„Έμ…˜ μ „νŒŒ μž‘μ—… 쀑 λͺ¨λ“  μ„œλ²„μ— μ„Έμ…˜μ΄ μ „νŒŒλ˜κΈ°κΉŒμ§€μ˜ μ‹œκ°„μ°¨λ‘œ μΈν•œ μ„Έμ…˜ 뢈일치 λ¬Έμ œμ™€ 같은 μ˜ˆμƒμΉ˜ λͺ»ν•œ λ¬Έμ œκ°€ λ°œμƒν•  κ°€λŠ₯성이 μ‘΄μž¬ν•œλ‹€.

 

이처럼 μ„Έμ…˜ ν΄λŸ¬μŠ€ν„°λ§μ€ sticky μ„Έμ…˜μ˜ 문제점인 νŠΉμ • μ„œλ²„μ—λ§Œ νŠΈλž˜ν”½μ΄ λͺ°λ¦¬λŠ” 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμ—ˆλ‹€.

κ·ΈλŸ¬λ‚˜ μ„Έμ…˜ ν΄λŸ¬μŠ€ν„°λ§μ΄λ‚˜ sticky μ„Έμ…˜μ΄λ‚˜ μ„œλ²„κ°€ μ„Έμ…˜μ΄λΌλŠ” μƒνƒœ(데이터)λ₯Ό κ°€μ§„λ‹€λŠ” 것은 변함이 μ—†λ‹€λŠ” νŠΉμ§•μ΄ μžˆλ‹€

 "μ„œλ²„κ°€ μƒνƒœ(데이터)λ₯Ό 가진닀"λΌλŠ” μ˜λ―ΈλŠ” Scale out λ°©μ‹μœΌλ‘œ ν™•μž₯을 ν–ˆμ„ λ•Œ μ„œλ²„κ°€ 가지고 μžˆλŠ” 데이터λ₯Ό ν™•μž₯ν•˜λŠ” μ„œλ²„μ—λ„ λ˜‘κ°™μ΄ λ§žμΆ°μ€˜μ•Ό ν•œλ‹€λŠ” λœ»μ΄λ‹€. μ΄λŠ” 곧 μ˜€λ²„ν—€λ“œλ‘œ 이어진닀.

 

μ •λ¦¬ν•˜λ©΄, μ„Έμ…˜ ν΄λŸ¬μŠ€ν„°λ§μ€ μ •ν•©μ„± 이슈λ₯Ό ν•΄κ²°ν•  수 μžˆμ§€λ§Œ, μ„±λŠ₯적인 ν•œκ³„κ°€ μ‘΄μž¬ν•œλ‹€κ³  말 ν•  수 μžˆλ‹€.


Session Storage 방식

κ·Έλ ‡λ‹€λ©΄ μœ„μ˜ 두 λ°©μ‹μ˜ 단점을 λ³΄μ™„ν•˜μ—¬ 닀쀑 μ„œλ²„μ—μ„œ μ„Έμ…˜μ„ κ³΅μœ ν•  수 μžˆλŠ” 방법이 μ—†μ„κΉŒ?

λͺ¨λ“  μ„œλ²„μ— 일일히 μ„Έμ…˜ λ©”λͺ¨λ¦¬λ₯Ό 볡제/μ €μž₯ν•˜λŠ” 것이 낭비라면, 그럼 λ³„λ„μ˜ μ„Έμ…˜ μ €μž₯μ†Œλ₯Ό μ™ΈλΆ€μ—μ„œ μƒμ„±ν•˜κ³  각 μ„œλ²„λ“€μ΄ 가져와 μ‚¬μš©ν•˜λ©΄ λ˜μ§€ μ•Šμ„κΉŒ?

Session Storage

 

μ„Έμ…˜ μŠ€ν† λ¦¬μ§€λŠ” 기쑴의 μ„œλ²„ λ‚΄ μ„Έμ…˜ μ €μž₯μ†Œλ₯Ό μ΄μš©ν•˜μ§€ μ•Šκ³ , 둜컬 μ„œλ²„μ—μ„œ 뢄리해 λ³„λ„μ˜ μ„Έμ…˜ μ €μž₯μ†Œλ₯Ό 두고 μ„œλ²„λ“€μ΄ 이λ₯Ό κ³΅μœ ν•¨μœΌλ‘œμ¨ μ„Έμ…˜ 뢈일치λ₯Ό ν•΄κ²°ν•˜λŠ” 방식이닀.

 

λ”°λΌμ„œ μƒˆλ‘œμš΄ μ„œλ²„λ₯Ό μΆ”κ°€ν•˜λ”λΌλ„ μΆ”κ°€ν•œ μ„œλ²„μ—λ§Œ μ„Έμ…˜ μ €μž₯μ†Œ 정보λ₯Ό λͺ…μ‹œν•΄μ£ΌκΈ°λ§Œ ν•˜λ©΄ 되기 λ•Œλ¬Έμ— κΈ°μ‘΄ μ„œλ²„μ˜ μˆ˜μ •μ΄ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” μž₯점이 있게 λœλ‹€.

κ·Έλž˜μ„œ μ„Έμ…˜μ„ μ €μž₯ν•  λ•Œ μ„Έμ…˜μ„ λ³΅μ œν•΄ λ‹€λ₯Έ μ„œλ²„λ“€μ— 보낼 ν•„μš”κ°€ μ—†μ–΄ WAS듀끼리 λΆˆν•„μš”ν•œ λ„€νŠΈμ›Œν¬ 톡신 과정을 μ§„ν–‰ν•˜μ§€ μ•Šμ•„λ„ λ˜μ–΄ μ„±λŠ₯λ©΄μ—μ„œλ„ μœ λ¦¬ν•˜λ‹€.

λ˜ν•œ, ν•œ μ„œλ²„μ— μž₯μ• κ°€ λ°œμƒν•˜λ”λΌλ„ μ„Έμ…˜μ€ 이와 λ…λ¦½λ˜μ–΄ λ³„λ„λ‘œ μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ— μ„Έμ…˜μ„ ν™œμš©ν•œ μ„œλΉ„μŠ€μ— 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠλŠ”λ‹€.


Session Storage μ’…λ₯˜

μ„Έμ…˜ Storage의 μ’…λ₯˜μ—λŠ” 두가지가 μžˆλ‹€.

λ¨Όμ € 첫번째둜 Diskλ°©μ‹μœΌλ‘œ λ˜μ—ˆλŠ” λ°μ΄ν„°λ² μ΄μŠ€κ°€ 있고 λ‘λ²ˆμ§Έλ‘œ In-Memory 기반의 λ°μ΄ν„°λ² μ΄μŠ€κ°€ μžˆλ‹€.

ν•΄λ‹Ή λ°©λ²•μœΌλ‘œ μ„Έμ…˜μ˜ μ •ν•©μ„± 문제λ₯Ό ν•΄κ²°ν• λ•Œ μ„Έμ…˜ μ €μž₯μ†Œλ‘œ 어떀것을 μ‚¬μš©ν• μ§€ 고민해보고, 그에 λ”°λ₯Έ νƒ€λ‹Ήν•œ μ΄μœ κ°€ λ’·λ°›μΉ¨ λ˜μ–΄μ•Ό ν•œλ‹€.

 

1. Disk Database (MySql, Oracle)

말 κ·ΈλŒ€λ‘œ μ„Έμ…˜ 데이터λ₯Ό λ””μŠ€ν¬μ— μ €μž₯ν•˜λŠ” 것이닀.

λ”°λΌμ„œ 전원이 곡급이 μ•ˆλ˜λ„ λ””μŠ€ν¬μ—λŠ” 정보λ₯Ό μžƒμ§€ μ•Šκ³  잘 μœ μ§€ν•œλ‹€.

ν•˜μ§€λ§Œ 큰 단점이 ν•˜λ‚˜ μžˆλŠ”λ° 속도가 λ„ˆλ¬΄ λŠλ¦¬λ‹€λŠ” 것이 맹점이닀.

Disk Database

 

2. In-Memory (Redis / Memchached)

In-MemoryλŠ” 데이터λ₯Ό λ©”λͺ¨λ¦¬μ— μ €μž₯ν•˜λŠ” 방식닀.

κ·Έλž˜μ„œ I/O속도가 λ””μŠ€ν¬μ™€ λΉ„κ΅ν•΄μ„œ 맀우 λΉ λ₯΄λ‹€.

ν•˜μ§€λ§Œ μ΄κ²ƒλ˜ν•œ 단점이 μžˆλŠ”λ° 전원이 κ³΅κΈ‰λ˜μ§€ μ•ŠμœΌλ©΄ κΈ°μ–΅ν•˜κ³  μžˆλŠ” 데이터λ₯Ό λͺ¨λ‘ μžƒμ–΄λ²„λ¦¬κ²Œ λœλ‹€.

In-Memory

 

두가지 방식쀑에 μ„Έμ…˜ 데이터λ₯Ό μ €μž₯ν•œλ‹€λŠ” κ΄€μ μ—μ„œ μ–΄λŠκ²ƒμ΄ μ’‹μ„κΉŒ?

생각해보면 Session은 영ꡬ적인 μ €μž₯이 ν•„μš”ν•˜μ§€ μ•ŠλŠ”λ‹€.

예둜, κ°œμΈμ •λ³΄κ°€ 더 μ€‘μš”ν•œ μš”μ¦˜μ€ μ§€μ •ν•œ μ‹œκ°„μ„ λ„˜κΈ°λ©΄ μžλ™μœΌλ‘œ λ‘œκ·Έμ•„μ›ƒλ˜κ²Œ 처리 λ˜μ–΄ μžˆλ‹€.

κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μ„Έμ…˜ μ •λ³΄λŠ” 영ꡬ적인 정보 μ €μž₯을 μ•½μ†ν•œλ‹€λŠ” λ””μŠ€ν¬ λ°©μ‹μ˜ λ°μ΄ν„°λ² μ΄μŠ€λŠ” 맀λ ₯적이지 λͺ»ν•˜λ‹€κ³  λ³Ό 수 μžˆλ‹€.

λŒ€μ‹ μ— λ””μŠ€ν¬μ— λΉ„ν•΄ 압도적을 μž…μΆœλ ₯ 속도가 λΉ λ₯Έ In-Memory 방식이 더 μ ν•©ν•˜λ‹€.


Session Storage 문제점

  • λ¬Έμ œκ°€ 생기면 λͺ¨λ“  μ„œλ²„κ°€ μž₯μ• 
    μ„Έμ…˜ ν΄λŸ¬μŠ€ν„° κ°™μ€κ²½μš° ν•˜λ‚˜μ˜ μ„œλ²„μ— μž₯μ• κ°€ 생겨도 λ‚˜λ¨Έμ§€ μ„œλ²„μ— 미리 볡제λ₯Ό ν•΄λ‘μ—ˆκΈ° λ•Œλ¬Έμ— λ¬Έμ œλŠ” μ—†λ‹€.
    κ·ΈλŸ¬λ‚˜ μ„Έμ…˜μ„ μ €μž₯ν•˜κ³  μžˆλŠ” Session storage μžμ²΄μ— μž₯μ• κ°€ λ°œμƒν•  경우 λͺ¨λ“  μ„Έμ…˜μ„ μžƒμ–΄λ²„λ € μ„Έμ…˜μ„ μ‚¬μš©ν•˜λŠ” λͺ¨λ“  μ„œλ²„μ— 영ν–₯이 λΌμΉ˜λŠ” μœ„ν—˜μ΄ μžˆλ‹€.
    κ·Έλž˜μ„œ μ΄λŸ¬ν•œ 문제λ₯Ό λ³΄μ™„ν•˜κΈ° μœ„ν•΄ λ™μΌν•œ μ„Έμ…˜ μ €μž₯μ†Œλ₯Ό ν•˜λ‚˜ 더 κ΅¬μ„±ν•˜λŠ” 방법(λ§ˆμŠ€ν„°-슬레이브 볡제)으둜 ν•΄λ‹Ή 문제λ₯Ό ν•΄κ²°ν•˜κ³€ ν•œλ‹€.

  • μ„±λŠ₯적인 λ§ˆμ΄λ„ˆμŠ€
    λ³„λ„μ˜ Session storageλ‘œλΆ€ν„° μ„Έμ…˜μ„ λΆˆλŸ¬μ™€μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— 좔가적인 λ„€νŠΈμ›ŒνŠΈ I/Oκ°€ λ°œμƒν•œλ‹€λŠ” 점이닀.
    μ„Έμ…˜μ„ μ™ΈλΆ€μ—μ„œ 가져와 μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— 둜컬 λ©”λͺ¨λ¦¬μ— μ €μž₯ν•΄ μ‚¬μš©ν•˜λŠ” 것보닀 μ„±λŠ₯적인 λ©΄μ—μ„œ λ–¨μ–΄μ§ˆ 수 밖에 μ—†λ‹€.

# 참고자료

https://liasn.tistory.com/3

https://1-7171771.tistory.com/126

https://d2.naver.com/helloworld/284659?source=post_page-----f1fd4ceecbc7---------------------- 

https://hyuntaeknote.tistory.com/6