๐Ÿš€์„ ์ฐฉ์ˆœ ์ฟ ํฐ ๋ฐœ๊ธ‰ ์‹œ์Šคํ…œ - 5


๋ฐฐ๊ฒฝ

  • ์˜›๋‚ ์— 24๋…„ ๋ง์— ์ฟ ํฐ ๋ฐœ๊ธ‰ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค์—ˆ์—ˆ๋Š”๋ฐ ๊ทธ ๋•Œ ๋‹น์‹œ์—๋Š” ๋‚˜๋ฆ„ ๊ณ ๋ฏผํ•ด์„œ ๊ตฌํ˜„ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ๋‹ค์‹œ ๋‚ด๊ฐ€ ํ•œ ๋‚ด์šฉ๋“ค ์ •๋ฆฌํ•˜๋‹ค๋ณด๋‹ˆ ์–ด์šฐ ๋„ˆ๋ฌด ๋ถ€์กฑํ•œ ์ ๋„ ๋งŽ๊ณ  ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ธ
    1. ์™œ ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๊ณ 
    2. ์–ด๋–ค ์„ ํƒ์ง€๋ฅผ ์™œ?
    3. ์‹ค์ œ ์–ด๋–ค๊ฑธ ํ–ˆ๊ณ  ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„๋ฅผ ๊ด€๋ฆฌํ–ˆ๋Š”๊ฐ€?
    4. ์–ด๋–ค ์ง€ํ‘œ๋กœ ๊ฒ€์ฆํ–ˆ๋Š”๊ฐ€? -> ์ด๋Ÿฐ ๊ฒƒ๋“ค์ด ์ž์„ธํ•˜๊ฒŒ ์žˆ์ง€ ์•Š์•˜๋˜๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ Redis๋ฅผ ๋„์ž…ํ•œ ์ด์œ ๊ฐ€ ์ด์ „ ํฌ์ŠคํŠธ๋ฅผ ๋ณด๋ฉด ์ด๋Ÿฐ์ด๋Ÿฐ ์žฅ์ ์ด ์žˆ์–ด์„œ ์ผ์–ด์š”๋ผ๋Š” ๋‹จ์ˆœ ๊ฒฐ๊ณผ ์ค‘์‹ฌ์ด๋ผ์„œ ์™œ ์ผ์–ด์š”์— ๋Œ€ํ•œ ์ •ํ™•ํ•œ ์˜๋„๋‚˜ ์Šคํ† ๋ฆฌ๊ฐ€ ์—†์—ˆ๋˜๊ฒƒ ๊ฐ™๋‹ค ์ •ํ™•ํ•œ ์ง€ํ‘œ๋‚˜ ๋ฐ์ดํ„ฐ ์—†์ด
  • ๊ทธ๋ž˜์„œ ์ฟ ํฐ ์‹œ์Šคํ…œ ๊ธฐ์กด ์ฝ”๋“œ๋“ค์„ ๋‹ค์‹œ ์ฝ์–ด๋ณด๋ฉด์„œ ๋ฌธ์ œ์ ์ด ์žˆ์œผ๋ฉด ์ˆ˜์ •์„ ํ•˜๊ณ 
  • ์ •ํ™•ํ•œ ์ง€ํ‘œ๋ฅผ ํ†ตํ•ด์„œ ๋ฌธ์ œํ•ด๊ฒฐ ๊ณผ์ •์„ ์ž์„ธํžˆ ๊ฒฝํ—˜ํ•ด๋ณผ ์ƒ๊ฐ์ด๋‹ค.

์ˆœ์„œ

  1. DB๋งŒ ์ผ์„ ๋•Œ ์ •ํ•ฉ์„ฑ๊ณผ ์‘๋‹ต์‹œ๊ฐ„๊ณผ ์ฒ˜๋ฆฌ๋Ÿ‰ ์ธก์ •
    • ์ด ๋‹จ๊ณ„๋ฅผ ํ†ตํ•ด์„œ Redis ์—†์ด ์–ด๋””๊นŒ์ง€ ๋ฒ„ํ‹ฐ๋Š”๊ฐ€?๋ฅผ ์ธก์ •ํ•˜๊ณ  Redis๋ฅผ ๋„์ž…ํ•  ์ˆ˜ ๋ฐ–์— ์—†์—ˆ๋˜ ํƒ€๋‹น์„ฑ์„ ๋งŒ๋“œ๋Š”๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค.
  2. Redis ์ „๋žต ์ ์šฉ + ๋ถ„์‚ฐ๋ฝ ๋ฒ„๊ทธ ํ•ด๊ฒฐ
    • ์ด ๋‹จ๊ณ„๋ฅผ ํ†ตํ•ด์„œ๋Š” Redis ๋„์ž…์„ ํ–ˆ์„๋•Œ ์ƒˆ๋กœ์šด ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•ด๋ณด๊ณ  ํ•ด๊ฒฐ๊นŒ์ง€ ํ•ด๋ณด๋ฉด์„œ ์–ด๋–ค ๋ถ€๋ถ„์„ ๊ณ ๋ คํ•ด์•ผํ–ˆ๊ณ  ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€์— ๋Œ€ํ•œ ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค.
  3. Redis๋ฅผ ๋„์ž…ํ–ˆ์„ ๋•Œ ์–ด๋–ค ๊ฐœ์„ ์ ์ด ์žˆ๋Š”์ง€ ์ธก์ •
    • ์ด ๋‹จ๊ณ„๋ฅผ ํ†ตํ•ด์„œ ์‘๋‹ต์‹œ๊ฐ„ ์ฒ˜๋ฆฌ๋Ÿ‰ ๋“ฑ์ด ์–ด๋А์ •๋„ ๊ฐœ์„ ๋˜์—ˆ๋Š”์ง€ ์ตœ๋Œ€ ํ•œ๊ณ„๊นŒ์ง€ ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ง„ํ–‰ํ•ด๋ณด๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค.
  4. ์ˆœ์„œ ๋ณด์žฅ ๋ฌธ์ œ ํ•ด๊ฒฐ
    • ํ˜„์žฌ ๊ตฌ์กฐ์˜ ํ•œ๊ณ„์ธ ์ˆœ์„œ ๋ณด์žฅ์ด ์•ˆ๋ ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ์„ ์ด์ „ ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ ๋‹จ๊ณ„์—์„œ ํฌ์ฐฉ์„ ํ•˜์—ฌ ์–ด๋–ค์‹์œผ๋กœ ๊ฐœ์„ ํ•ด๋ณผ ์ˆ˜์žˆ์„์ง€ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•„๋ณด๊ณ  ๊ฐœ์„ ํ•ด๋ณธ๋‹ค
  5. ์ตœ์ข… ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰
    • ๊ตฌ์กฐ์  ํ•œ๊ณ„๋ฅผ ๊ฐœ์„ ํ•œ ํ›„ ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ง„ํ–‰ํ•ด๋ณด๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค.
  6. Redis์˜ ๋‹ค์–‘ํ•œ ์•„ํ‚คํ…์ณ
    • ๋‹จ์ผ ์ธ์Šคํ„ด์Šค ๊ตฌ์กฐ์ธ Redis ์•„ํ‚คํ…์ณ๋ฅผ ๋‹ค์–‘ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์–ด๋–ค ์•„ํ‚คํ…์ณ๋ฅผ ๋„์ž…ํ•ด๋ณผ ์ˆ˜ ์žˆ์„์ง€ ๊ณ ๋ฏผ + ์ ์šฉ ํ•ด๋ณด๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœํ•œ๋‹ค
    • ๊ฐ€๋Šฅํ•˜๋ฉด ์ง์ ‘ ํ™˜๊ฒฝ ๊ตฌ์ถ•์„ ํ•ด๋ด์„œ ํ…Œ์ŠคํŠธ๋„ ์ง„ํ–‰ํ•ด๋ณธ๋‹ค

Phase 1 : DB๋งŒ ์ผ์„ ๋•Œ ์ •ํ•ฉ์„ฑ๊ณผ ์‘๋‹ต์‹œ๊ฐ„๊ณผ ์ฒ˜๋ฆฌ๋Ÿ‰ ์ธก์ •

ํ๋ฆ„

  • ์ด์ „ ๋ธ”๋กœ๊ทธ์—์„œ ์„ค๋ช…ํ–ˆ์ง€๋งŒ
  • DB์˜ PESSIMISTIC_WRITE๋งŒ ์ ์šฉํ•ด์„œ(๋ฐฐํƒ€๋ฝ) ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ๋ฆ„์œผ๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ๋˜๋Š” ํ˜•ํƒœ
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [์š”์ฒญ A, B, C ๋™์‹œ ์ง„์ž…]
           |
    1. findByCodeAndIsDeletedFalse()
     โ†’ SELECT ... FOR UPDATE ์‹คํ–‰
     โ†’ A๊ฐ€ ๋จผ์ € ๋ฝ ํš๋“, BยทC๋Š” ๋Œ€๊ธฐ
           |
    2. coupon.issue()
     โ†’ remainStock-- (A ์ฒ˜๋ฆฌ)
     โ†’ ํŠธ๋žœ์žญ์…˜ ์ปค๋ฐ‹ โ†’ ๋ฝ ํ•ด์ œ
           |
    3. B๊ฐ€ ๋ฝ ํš๋“ โ†’ remainStock-- (B ์ฒ˜๋ฆฌ)
    4. C๊ฐ€ ๋ฝ ํš๋“ โ†’ remainStock-- (C ์ฒ˜๋ฆฌ)
    
  • ์ด์ „ ๋ธ”๋กœ๊ทธ์—์„œ๋Š” ํ•œ๊ณ„๋ฅผ ๊ทธ๋ƒฅ ์ด๋ก ์ ์ธ ์–ด๋–ค ๊ฐ€๋Šฅ์„ฑ ์ˆ˜์ค€์—์„œ ์ฒ˜๋ฆฌ๋ฅผ ํ–ˆ๋‹ค๋ฉด ์‹ค์ œ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ด๋ณด๊ณ  ์–ด๋–ค ํ•œ๊ณ„๊ฐ€ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด์ž

    ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค

์กฐ๊ฑด

  1. ์ผ๋‹จ ์„ ์ฐฉ์ˆœ ์ฟ ํฐ ๋ฐœ๊ธ‰ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๊ฐ€ ์ดˆ๋ฐ˜์— ํ™• ๋ชฐ๋ฆฌ๊ณ  ๋ช‡์ดˆ๋™์•ˆ ํŠธ๋ž˜ํ”ฝ์ด ์œ ์ง€๋˜๋Š” ํ˜•ํƒœ์ผ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐ์„ ํ–ˆ๋‹ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
VUs
100 |       โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    |      /                               โ”‚
    |     /                                โ”‚
    |    /                                 โ”‚
    |   /                                  โ”‚
    |  /                                   โ”‚
    | /                                    โ”‚
  0 |/_____________________________________|\
    0s        3s                    33s      38s

๊ตฌ๊ฐ„ ์„ค๋ช…
- 0s ~ 3s   : [์˜คํ”ˆ ์งํ›„ ํญ๋ฐœ์  ์œ ์ž… ๊ตฌ๊ฐ„] 0 โ†’ VUS ๊นŒ์ง€ ๊ธ‰๊ฒฉ ๋žจํ”„์—…
- 3s ~ 33s  : [๊ฒฝ์Ÿ ๊ตฌ๊ฐ„ / DB ํฌํ™” ์ธก์ •] VUS ์œ ์ง€
- 33s ~ 38s : [๋žจํ”„๋‹ค์šด] VUS โ†’ 0
  1. ์ฟ ํฐ ์žฌ๊ณ ๋Š” 10,000๊ฐœ๋กœ ๊ณ ์ •์„ ํ–ˆ๋‹ค. VU(50->100->200->500->1000)๋ฅผ ์ ์ง„์ ์œผ๋กœ ๋Š˜๋ฆฌ๋ฉด์„œ ์ธก์ •์„ ์ง„ํ–‰ํ–ˆ๋‹ค(์—ฌ๊ธฐ์„œ VU๋Š” ๋™์‹œ ์š”์ฒญ ์ˆ˜์ค€์œผ๋กœ ์ƒ๊ฐํ•œ๋‹ค)
  2. 0~38์ดˆ๋™์•ˆ ๋™์‹œ์— VU ์ˆ˜์ค€์˜ ์š”์ฒญ์ด ๊ณ„์† ๋ฐœ์ƒํ•˜๊ณ  ์ด ๊ณผ์ •์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ์œ ์ €๋“ค์ด ๊ณ„์† ์œ ์ž…๋˜๋ฉฐ ๊ฒฝ์Ÿํ•˜๊ณ  ๊ทธ์ค‘ ์ฟ ํฐ ์žฌ๊ณ ๋งŒํผ๋งŒ ์„ฑ๊ณตํ•ด์„œ ์žฌ๊ณ ๊ฐ€ ์†Œ์ง„๋œ๋‹ค.
  3. HikariCP max-pool-size : 10, connection-timeout : 5000ms
  4. MySql max-connections : 200
  5. Tomcat ์Šค๋ ˆ๋“œ ํ’€ : 200

์‹œ๋‚˜๋ฆฌ์˜ค : DB ์ ˆ๋Œ€ ์ฒ˜๋ฆฌ๋Ÿ‰ ํ•œ๊ณ„

์˜ˆ์ƒ

HikariCP max=10 ๊ธฐ์ค€:

  • ํŠธ๋žœ์žญ์…˜ 1๊ฑด ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ ~50ms โ†’ ์ด๋ก  ํ•œ๊ณ„: 10 / 0.05 = 200 TPS
  • VU=100~200์—์„œ pending ์ปค๋„ฅ์…˜ ๋ฐœ์ƒ ์˜ˆ์ƒ
  • VU=500+ ์—์„œ connection-timeout(5000ms) ๋„๋‹ฌ๋กœ 5xx ์—๋Ÿฌ ๊ธ‰์ฆ ์˜ˆ์ƒ

๊ฒฐ๊ณผ

์žฌ๊ณ ๋ฅผ ์ถฉ๋ถ„ํžˆ ํฌ๊ฒŒ ๊ณ ์ •ํ•˜์—ฌ DB๊ฐ€ ๊ณ„์† ์“ฐ๊ธฐ ๋ถ€ํ•˜๋ฅผ ๋ฐ›๋„๋ก ํ•˜๊ณ . VU๋ฅผ ๋‹จ๊ณ„์ ์œผ๋กœ ์˜ฌ๋ ค HikariCP ํฌํ™” ์ง€์ ์„ ์ฐพ๋Š”๋‹ค.

VU TPS p50(ms) p95(ms) p99(ms) ์—๋Ÿฌ์œจ ๋ฐœ๊ธ‰์ˆ˜
50 519 79.61 115.76 136.69 0.00% 10,000
100 580 130.42 156.92 166.98 0.00% 10,000
200 590 254.85 317.59 335.34 0.00% 10,000
500 590 573.21 1,040 1,370 0.00% 10,000
1000 591 1,150 1,760 2,110 0.00% 10,000

seukeulinsyas-2026-04-01-ojeon-1-56-43.png

  • ์ง€๊ธˆ ์ด ์ˆ˜์น˜๋ฅผ ํ•ด์„ํ•ด๋ณด๋ฉด
    1. VU 50 ๋ถ€ํ„ฐ 100 200๊นŒ์ง€ TPS ์ฆ๊ฐ€ํ•˜๋‹ค๊ฐ€ ๊ทธ ์ด์ƒ์˜ VU์—์„œ๋Š” ๋”์ด์ƒ TPS๊ฐ€ ๋Š˜์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค => ๐Ÿ‘Œ์ด ์‹œ์Šคํ…œ์˜ DB ๊ธฐ๋ฐ˜ ์ฒ˜๋ฆฌ ํ•œ๊ณ„ = 590TPS
    2. Latency(์ง€์—ฐ์‹œ๊ฐ„)์„ ๋ณด๋ฉด TPS๊ฐ€ ๊ทธ๋Œ€๋กœ์ธ๋ฐ ์ง€์—ฐ์‹œ๊ฐ„์€ ์ง€์†์ ์œผ๋กœ ๋Š˜์–ด๋‚œ๋‹ค => ๐Ÿ‘Œ DB๊ฐ€ ๋” ๋ชป์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์š”์ฒญ์€ ๊ณ„์† ๋“ค์–ด์˜ค๋‹ˆ๊นŒ ์š”์ฒญ๋“ค์ด โ€œ๋Œ€๊ธฐ์—ด์— ์Œ“์ด๋Š” ํ˜•ํƒœโ€
    3. ์—๋Ÿฌ์œจ์ด๋‚˜ ๋ฐœ๊ธ‰์ˆ˜๋ฅผ ๋ณด๋ฉด 0.0%, 10,000๊ฐœ => ๐Ÿ‘Œ์‹œ์Šคํ…œ ์žฅ์• ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜๊ณ  ์ •์ƒ์ ์œผ๋กœ ๋ชจ๋“  ์žฌ๊ณ ๊ฐ€ ์†Œ์ง„๋˜์—ˆ๋‹ค. ์žฌ๊ณ  ์ด์ƒ์˜ ์š”์ฒญ ์ˆ˜๋Š” ์ •์ƒ์ ์œผ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ์‹คํŒจ๋กœ ์ฒ˜๋ฆฌ๋˜์—ˆ๋‹ค.

๋ถ„์„

ํฌํ™”์ง€์ : VU = 200

  • VU 200 ์ดํ›„๋กœ๋Š” TPS๋Š” ๋”์ด์ƒ ์ฆ๊ฐ€ํ•˜์ง€ ์•Š์Œ + ๋ ˆ์ดํ„ด์‹œ๋งŒ ์„ ํ˜• ์ƒ์Šน์ค‘ => ์ปค๋„ฅ์…˜ ํ’€ ๋ณ‘๋ชฉ ํŒจํ„ด
  • ์ปค๋„ฅ์…˜ ๋Œ€๊ธฐ ํ์— ์Œ“์ด ์š”์ฒญ๋“ค์ด ์‘๋‹ต ์ง€์—ฐ์˜ ์›์ธ

๊ฒฐ๋ก 

  • TPS โ‰ˆ ๋™์‹œ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ๊ฐœ์ˆ˜ / ํŠธ๋žœ์žญ์…˜ 1๊ฑด ์ฒ˜๋ฆฌ ์‹œ๊ฐ„
    • HikariCP max = 10, ํŠธ๋žœ์žญ์…˜ 1๊ฑด ํ‰๊ท  ์•ฝ ~17ms => 10 / 0.017 โ‰ˆ ์ด๋ก ์  ์ตœ๋Œ€ TPS 590 TPS

DB-only ๊ตฌ์กฐ๋Š” ์ •ํ•ฉ์„ฑ์€ ๋ณด์žฅํ–ˆ์ง€๋งŒ, ๋ชจ๋“  ์š”์ฒญ์ด ์žฌ๊ณ  ํ™•์ธ๊ณผ ์ฐจ๊ฐ์„ ์œ„ํ•ด DB ์ปค๋„ฅ์…˜ ๊ฒฝ์Ÿ์— ์ฐธ์—ฌํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์„ ์ฐฉ์ˆœ ์ด๋ฒคํŠธ ์ฒ˜๋Ÿผ ์งง์€ ์‹œ๊ฐ„์— ํŠธ๋ž˜ํ”ฝ์ด ์ง‘์ค‘๋˜๋Š” ์ƒํ™ฉ์—์„œ๋Š” ํ™•์žฅ์„ฑ์ด ๋‚ฎ์•˜๋‹ค. ์‹ค์ œ ๋ฐ์ดํ„ฐ์—์„œ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋“ฏ์ด VU=200๋ถ€ํ„ฐ HicariCP๊ฐ€ ํฌํ™”๋˜์–ด TPS๊ฐ€ 590 ์ˆ˜์ค€์—์„œ ๊ณ ์ •๋˜์—ˆ๊ณ , ์ดํ›„์—๋Š” ์ฒ˜๋ฆฌ๋Ÿ‰ ์ฆ๊ฐ€ ์—†์ด ์ง€์—ฐ๋งŒ ์ฆ๊ฐ€ํ–ˆ๋‹ค.

DB-only ๊ตฌ์กฐ์˜ ๋ฌธ์ œ๋Š” ๋‹จ์ˆœํžˆ ๋А๋ฆฐ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ชจ๋“  ์š”์ฒญ์ด DB ์ปค๋„ฅ์…˜์„ ์ ์œ ํ•ด์•ผ๋งŒ ์„ฑ๊ณต/์‹คํŒจ๊ฐ€ ๊ฒฐ์ •๋˜๋Š” ๊ตฌ์กฐ์ด๋‹ค. ์ฆ‰ ์„ฑ๊ณต ๊ฐ€๋Šฅ์„ฑ์ด ์—†๋Š” ์š”์ฒญ๊นŒ์ง€ DB์— ๋„๋‹ฌํ•˜๋ฉด์„œ ์ปค๋„ฅ์…˜ ํ’€์„ ๊ฒฝ์Ÿ ์ž์›์œผ๋กœ ๋งŒ๋“ค์–ด๋ฒ„๋ฆฐ๋‹ค..

๋”ฐ๋ผ์„œ ์„ ์ฐฉ์ˆœ ์ด๋ฒคํŠธ์—์„œ ์žฌ๊ณ ์ฐจ๊ฐ์„ ๋ฌด๊ฑฐ์šด DB๊ฐ€ ์•„๋‹ˆ๋ผ ๋” ๊ฐ€๋ฒผ์šด ์ธ๋ฉ”๋ชจ๋ฆฌ ๊ณ„์ธต์—์„œ ๋จผ์ € ์ฒ˜๋ฆฌํ•ด, DB ์ ‘๊ทผ์„ ์‹ค์ œ ์„ฑ๊ณต ๊ฐ€๋Šฅํ•œ ์š”์ฒญ ์ˆ˜๋กœ ์ œํ•œํ•  ํ•„์š”๊ฐ€ ์žˆ์Œ(DB์— ๋„๋‹ฌํ•˜๋Š” ์š”์ฒญ ์ˆ˜ ์ž์ฒด๋ฅผ ์ค„์ด๋Š”๊ฒƒ)

์›์ž์  ์นด์šดํ„ฐ ์—ฐ์‚ฐ + ๋ถ„์‚ฐ ๊ณต์œ  ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” Redis๊ฐ€ ์ ํ•ฉํ•œ ์„ ํƒ์ง€๋ผ๊ณ  ํŒ๋‹จํ–ˆ๋‹ค. ๋น ๋ฅด๊ธฐ๋„ ๋น ๋ฅด์ง€๋งŒ ์„ ์ฐฉ์ˆœ ์ฟ ํฐ์€ โ€œ์ฟ ํฐ ์žฌ๊ณ โ€๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”๊ฒŒ ๋งค์šฐ ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์›์ž์ ์ธ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•˜๋‹ค. ๋˜ ์ถ”ํ›„์— ์ˆ˜ํ‰ ํ™•์žฅ๊นŒ์ง€ ๊ณ ๋ คํ•œ๋‹ค๋ฉด ์žฌ๊ณ  ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์„ ํƒ์„ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.


Phase 2 : Redis ์ „๋žต ์ ์šฉ + ๋ถ„์‚ฐ๋ฝ ๋ฒ„๊ทธ ํ•ด๊ฒฐ