Skip to content

k9want/sellect-ecommerce-platform

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

777 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๊ฐœ๋ฐœ ์‚ฌ์ดํด์— ๋งž์ถฐ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•œ ์ด์ปค๋จธ์Šค ํ”„๋กœ์ ํŠธ, Sellect

๐Ÿ“ฝ๏ธ ์‹œ์—ฐ์˜์ƒ

https://www.youtube.com/watch?v=gmP8cwH3PW0


๐Ÿ”– ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

  • ์ฃผ์ œ : ๊ตญ๋‚ด ์ด์ปค๋จธ์Šค ์„œ๋น„์Šค๋ฅผ ๋ฒค์น˜๋งˆํ‚นํ•˜์—ฌ, ์ƒํ’ˆ ๊ฒ€์ƒ‰๋ถ€ํ„ฐ ์ฃผ๋ฌธยท๊ฒฐ์ œ๊นŒ์ง€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•œ ํ”„๋กœ์ ํŠธ
  • ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค : ๊ธฐํš ๋ฐ MVP ๊ตฌ์ถ• โ†’ ๋‹จ์œ„/ํ†ตํ•ฉ/๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ๊ธฐ๋ฐ˜ ๋กœ์ง ์ •ํ•ฉ์„ฑ ์ ๊ฒ€ ๋ฐ ์„ฑ๋Šฅ ๊ฐœ์„  ๋ฐ˜๋ณต

๐Ÿ“š ๊ธฐ์ˆ  ์Šคํƒ

แ„€แ…ตแ„‰แ…ฎแ†ฏแ„‰แ…ณแ„แ…ขแ†จ

๐ŸŒ ์„œ๋ฒ„ ์•„ํ‚คํ…์ณ

์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜

๐Ÿ”— ๋‹ด๋‹น ํ•ต์‹ฌ ๊ธฐ๋Šฅ (๋Œ€ํ‘œ ๊ธฐ๋Šฅ ์ค‘์‹ฌ)

1๏ธโƒฃย ์ƒํ’ˆ ๊ฒ€์ƒ‰

  • ํ‚ค์›Œ๋“œ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰ : ์ƒํ’ˆ๋ช…, ๋ธŒ๋žœ๋“œ๋ช…, ์นดํ…Œ๊ณ ๋ฆฌ๋ช…์„ ๊ธฐ์ค€์œผ๋กœ ํ‚ค์›Œ๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ•„ํ„ฐ ๊ธฐ๋Šฅ ์ง€์› : ๋ธŒ๋žœ๋“œ, ์นดํ…Œ๊ณ ๋ฆฌ, ์ตœ์†Œ/์ตœ๋Œ€ ๊ฐ€๊ฒฉ ์กฐ๊ฑด์„ ํ™œ์šฉํ•ด ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ •๋ ฌ ๊ธฐ๋Šฅ ์ œ๊ณต : ์ตœ์‹ ์ˆœ, ๋†’์€/๋‚ฎ์€ ๊ฐ€๊ฒฉ์ˆœ ์ •๋ ฌ ์˜ต์…˜์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž ๋งž์ถค ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ํšŒ์›/๋น„ํšŒ์› ๊ตฌ๋ถ„ ๋กœ๊ทธ ๊ธฐ๋ก : ๊ฒ€์ƒ‰ ์‹œ ์‚ฌ์šฉ์ž(ํšŒ์›/๋น„ํšŒ์›)๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ๊ฒ€์ƒ‰ ๋กœ๊ทธ๋ฅผ ๊ธฐ๋กํ•˜๊ณ ,
    ํ•ด๋‹น ๋กœ๊ทธ๋ฅผ ํ†ตํ•ด ์ธ๊ธฐ ๊ฒ€์ƒ‰์–ด๋ฅผ ์ถ”์ถœํ•˜๊ณ  ์ž๋™์™„์„ฑ ๊ธฐ๋Šฅ์— ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค.

2๏ธโƒฃย ์ฃผ๋ฌธ ๋ฐ ๊ฒฐ์ œ ์‹œ์Šคํ…œ

  • ๋‹จ์ผ ๋˜๋Š” ์—ฌ๋Ÿฌ ์ƒํ’ˆ์„ ๋™์‹œ์— ์ฃผ๋ฌธ ๊ฐ€๋Šฅ : ์‚ฌ์šฉ์ž๋Š” ๋‹จ์ผ ์ฃผ๋ฌธ ํ˜น์€ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋‹ด์€ ์—ฌ๋Ÿฌ ์ƒํ’ˆ๋“ค์„ ํ•œ ๋ฒˆ์— ์ฃผ๋ฌธ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒํ’ˆ ์ˆ˜๋Ÿ‰ ์„ ํƒ ๊ธฐ๋Šฅ ์ œ๊ณต : ๊ฐ ์ƒํ’ˆ๋ณ„๋กœ ์›ํ•˜๋Š” ์ˆ˜๋Ÿ‰์„ ์ž์œ ๋กญ๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์นด์นด์˜คํŽ˜์ด ๊ฒฐ์ œ ์ง€์› : ๊ฐ„ํŽธ๊ฒฐ์ œ ์„œ๋น„์Šค์ธ ์นด์นด์˜คํŽ˜์ด๋ฅผ ํ†ตํ•ด ์†์‰ฝ๊ฒŒ ๊ฒฐ์ œ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฒฐ์ œ ํ”„๋กœ์„ธ์Šค ํ๋ฆ„ : ์ฃผ๋ฌธ ์ƒ์„ฑ โ†’ ๊ฒฐ์ œ ์ค€๋น„ โ†’ ๊ฒฐ์ œ ์Šน์ธ์œผ๋กœ ์ด์–ด์ง€๋Š” ๋‹จ๊ณ„์  ๊ฒฐ์ œ ํ๋ฆ„์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
  • ์‹ค์‹œ๊ฐ„ ์žฌ๊ณ  ํ™•์ธ ๋ฐ ๋ฐ˜์˜ : ๊ฒฐ์ œ ์Šน์ธ ์‹œ์ ์— ์ƒํ’ˆ์˜ ์žฌ๊ณ ๋ฅผ ํ™•์ธํ•˜์—ฌ ํ’ˆ์ ˆ์ด๋‚˜ ์ดˆ๊ณผ ์ฃผ๋ฌธ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿš€ ๊ฐœ์„  ์‚ฌํ•ญ

1๏ธโƒฃ ๊ฒฐ์ œ ์‹œ์Šคํ…œ 1์ฐจ ์„ฑ๋Šฅ ๊ฐœ์„  - ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์กฐ ๊ฐœ์„ 

๋ฌธ์ œ ์ƒํ™ฉ

  • ๊ฒฐ์ œ ์Šน์ธ ๊ณผ์ •์ด ๋ชจ๋‘ ํ•˜๋‚˜์˜ ๋™๊ธฐ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ์ฒ˜๋ฆฌ๋จ
    • ์žฌ๊ณ  ์ฐจ๊ฐ, ์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ, ์นด์นด์˜คํŽ˜์ด ๊ฒฐ์ œ ์Šน์ธ ์š”์ฒญ์ด ์ˆœ์ฐจ์ ์œผ๋กœ ๋™๊ธฐ ์‹คํ–‰๋จ
    • ์™ธ๋ถ€ API ํ˜ธ์ถœ ์ง€์—ฐ ์‹œ ์ „์ฒด ์‘๋‹ต ํ๋ฆ„์ด ์ง€์—ฐ๋˜์–ด, ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒฐ์ œ ์™„๋ฃŒ ํ›„ ๊ฒฐ๊ณผ ํ™”๋ฉด๊นŒ์ง€ ์˜ค๋žœ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ๊ฒช๊ฒŒ ๋จ
  • ์žฌ๊ณ  ์ฐจ๊ฐ ์‹œ Pessimistic Read ๋ฝ ์‚ฌ์šฉ์œผ๋กœ ์žฆ์€ ๋ฐ๋“œ๋ฝ ๋ฐœ์ƒ
    • ๋‹ค์ˆ˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ๋™์ผ ์ƒํ’ˆ์„ ์ฃผ๋ฌธํ•˜๋Š” ์ƒํ™ฉ์—์„œ, Pessimistic_Read๋ฝ์œผ๋กœ ์กฐํšŒํ•œ ํ›„ UPDATE ์‹œ ๋ฐฐํƒ€์  ๋ฝ(X Lock) ์š”์ฒญ์ด ๋ฐœ์ƒ
    • ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๋™์ผ ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•ด ๊ณต์œ  ๋ฝ(S Lock)์„ ๋ณด์œ  ์ค‘์ธ ๊ฒฝ์šฐ, X ๋ฝ์„ ํš๋“ํ•˜์ง€ ๋ชปํ•˜๊ณ  ์ˆœํ™˜ ๋Œ€๊ธฐ๋กœ ์ธํ•ด ๋ฐ๋“œ๋ฝ ๋ฐœ์ƒ

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  • ํŠธ๋žœ์žญ์…˜ ๋ฒ”์œ„ ๋ถ„๋ฆฌ ๋ฐ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋„์ž…
    • ๋‚ด๋ถ€ ์ฒ˜๋ฆฌ ๋กœ์ง(์žฌ๊ณ  ์ฐจ๊ฐ, ์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ)์€ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ์šฐ์„  ์ˆ˜ํ–‰
    • ์™ธ๋ถ€ API ํ˜ธ์ถœ(์นด์นด์˜คํŽ˜์ด ๊ฒฐ์ œ ์Šน์ธ)์€ ์ปค๋ฐ‹ ์ดํ›„ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ํ†ตํ•ด ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ, ๋ณ‘๋ชฉ ์™„ํ™” ๋ฐ ์‘๋‹ต ์†๋„ ๊ฐœ์„ 
  • Pessimistic Write ๋ฝ์œผ๋กœ ๋ณ€๊ฒฝ
    • ์žฌ๊ณ  ์กฐํšŒ ์‹œ์ ์— ๋ช…์‹œ์ ์œผ๋กœ ๋ฐฐํƒ€์  ๋ฝ(X Lock)์„ ๊ฑธ์–ด, ์ดํ›„ UPDATE ์‹œ์ ์˜ ๋ฝ ์ „ํ™˜ ์ถฉ๋Œ ์—†์ด ์ฒ˜๋ฆฌ
    • ๋ฝ ํš๋“ ์ถฉ๋Œ๋กœ ์ธํ•œ ๋ฐ๋“œ๋ฝ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ ์ œ๊ฑฐ
  • PlatformTransactionManager๋ฅผ ํ™œ์šฉํ•œ ์ˆ˜๋™ ํŠธ๋žœ์žญ์…˜ ์ œ์–ด
    • ํŠธ๋žœ์žญ์…˜ ์ปค๋ฐ‹ ์ดํ›„์—๋งŒ ์™ธ๋ถ€ API ํ˜ธ์ถœ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•จ์œผ๋กœ์จ, ํŠธ๋žœ์žญ์…˜ ์ •ํ•ฉ์„ฑ๊ณผ ์™ธ๋ถ€ ์‹œ์Šคํ…œ๊ณผ์˜ ์•ˆ์ •์„ฑ ํ™•๋ณด
  • ๋ณด์ƒ ํŠธ๋žœ์žญ์…˜ ๊ตฌ์กฐ ๋„์ž…
    • ์™ธ๋ถ€ API ํ˜ธ์ถœ ์‹คํŒจ ์‹œ, ์ฃผ๋ฌธ ์ƒํƒœ ๋ณต๊ตฌ ๋ฐ ์žฌ๊ณ  ๋ณต์› ๋“ฑ ์ •ํ•ฉ์„ฑ ์œ ์ง€ ๋กœ์ง์„ ๋ณ„๋„ ๋ณด์ƒ ํ๋ฆ„์œผ๋กœ ์ฒ˜๋ฆฌ

๊ฒฐ๊ณผ

๊ฐœ์„  ์ „ ๋ฐฉ๋ฒ•0-0before ๋™๊ธฐ ๋ฐฉ์‹ ic10 200ms vuser100 300s

๊ฐœ์„  ํ›„ ๋ฐฉ๋ฒ• 0 ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ๋„์ž… ํ›„ ๊ธฐ์กด ์ฝ”๋“œ ๋ฐ๋“œ๋ฝ์— ๋Œ€ํ•œ ์•„๋ฌด๋Ÿฐ ์กฐ์น˜๊ฐ€ ์—†์Œ ic10 200ms vuser100 300s (2)

๊ฐœ์„  ์ „/ํ›„ ๋น„๊ต ๊ฐœ์„  1์ฐจ ๋น„๊ต

2๏ธโƒฃย ๊ฒฐ์ œ ์‹œ์Šคํ…œ ์—๋Ÿฌ ์‘๋‹ต ๊ฐœ์„  - DB ๋ฐ๋“œ๋ฝ ํ•ด๊ฒฐ

๋ฌธ์ œ ์ƒํ™ฉ

  • ์žฌ๊ณ  ์ฐจ๊ฐ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ๋นˆ๋ฒˆํ•œ ๋ฐ๋“œ๋ฝ ๋ฌธ์ œ
    • ๋‹ค๊ฑด ์ฃผ๋ฌธ ์ƒํ™ฉ์—์„œ ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ์„œ๋กœ ๋‹ค๋ฅธ ์ƒํ’ˆ์— ๋Œ€ํ•ด ๋ฝ์„ ํš๋“ ํ›„ ๊ต์ฐจ ์ ‘๊ทผํ•˜๋ฉด์„œ ๋ฐ๋“œ๋ฝ์ด ๋นˆ๋ฒˆํžˆ ๋ฐœ์ƒ
    • ์ด์— ๋Œ€ํ•œ ๋ณ„๋„์˜ ์ฒ˜๋ฆฌ ๋กœ์ง์ด ์—†์–ด์„œ ์‘๋‹ต ์‹คํŒจ๋กœ ์ด์–ด์ง

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  • ๋ฝ ํš๋“ ์ˆœ์„œ ํ†ต์ผ ์ „๋žต(productId ์ •๋ ฌ) ์‹คํ—˜
    • ๋™์ผํ•œ ์ˆœ์„œ๋กœ ๋ฝ์„ ํš๋“ํ•˜๋„๋ก ์ •๋ ฌํ•˜์—ฌ ๋ฐ๋“œ๋ฝ์„ ํšŒํ”ผํ–ˆ์œผ๋‚˜, ํŠน์ • ์ƒํ’ˆ์— ๋ฝ์ด ๋ชฐ๋ฆฌ๋ฉฐ ๋ณ‘๋ชฉ ๋ฐ ํƒ€์ž„์•„์›ƒ ๋ฌธ์ œ ๋ฐœ์ƒ
  • SERIALIZABLE ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ ์‹คํ—˜ (์‹คํŒจ)
    • SERIALIZABLE ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์€ ์ง๋ ฌํ™” ๋ณด์žฅ์„ ์œ„ํ•œ ์ˆ˜๋‹จ์ผ ๋ฟ, ๋ฐ๋“œ๋ฝ ํšŒํ”ผ๋ฅผ ์œ„ํ•œ ๋Œ€์•ˆ์ด ์•„๋‹˜
  • โœ… ์žฌ์‹œ๋„ ๊ธฐ๋ฐ˜ ํšŒ๋ณต ์ „๋žต ์ตœ์ข… ์ฑ„ํƒ
    • ๋ฐ๋“œ๋ฝ ๋ฐœ์ƒ ์‹œ ์ž๋™ ์žฌ์‹œ๋„๋ฅผ ํ†ตํ•ด ๋น ๋ฅด๊ฒŒ ๋ณต๊ตฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ „ํ™˜
    • ๋‹จ์ˆœ ์ฝ”๋“œ ์ถ”๊ฐ€๋กœ๋„ ์‘๋‹ต ์•ˆ์ •์„ฑ๊ณผ ์„ฑ๋Šฅ ๋ชจ๋‘ ํ™•๋ณด, ์‹ค์ œ ํ…Œ์ŠคํŠธ์—์„œ ์—๋Ÿฌ ์‘๋‹ต๋ฅ  0% ๋‹ฌ์„ฑ

๊ฒฐ๊ณผ ๊ฒฐ์ œ ์‹œ์Šคํ…œ ์—๋Ÿฌ ์‘๋‹ต ๊ฐœ์„  - DB ๋ฐ๋“œ๋ฝ ํ•ด๊ฒฐ

3๏ธโƒฃย ๊ฒฐ์ œ ์‹œ์Šคํ…œ 2์ฐจ ์ถ”๊ฐ€ ์„ฑ๋Šฅ ๊ฐœ์„  - Redis ๊ธฐ๋ฐ˜ ์žฌ๊ณ  ์‹œ์Šคํ…œ ๋„์ž…

๋ฌธ์ œ ์ƒํ™ฉ

  • DB ๋ฝ ๊ธฐ๋ฐ˜ ์žฌ๊ณ  ์ฐจ๊ฐ ๋ฐฉ์‹์€ ๋†’์€ ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•˜์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋“ค์ด ๋ฐœ์ƒ
    • ๋ฝ ๊ฒฝํ•ฉ์œผ๋กœ ์ธํ•œ ๋ณ‘๋ชฉ ๋ฐœ์ƒ
    • ํŠนํžˆ ์ธ๊ธฐ ์ƒํ’ˆ์— ๋Œ€ํ•œ ๋™์‹œ ์ฃผ๋ฌธ ์‹œ ์‘๋‹ต ์ง€์—ฐ ๋ฐ ๊ฒฐ์ œ ์‹คํŒจ์œจ ์ฆ๊ฐ€
    • ์žฌ์‹œ๋„ ๋กœ์ง ๋„์ž… ํ›„์—๋„ DB ์ž์› ๋‚ญ๋น„์™€ ๋‚ฎ์€ ์ฒ˜๋ฆฌ๋Ÿ‰ ๋ฌธ์ œ ์ง€์†

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  • Redis ๊ธฐ๋ฐ˜ ์žฌ๊ณ  ์ฐจ๊ฐ ๊ตฌ์กฐ๋กœ ์ „ํ™˜
    • ์žฌ๊ณ  ์ƒํƒœ๋ฅผ Redis๋กœ ์ด์ „ํ•˜๊ณ , Lua ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด ์›์ž์  ์žฌ๊ณ  ์ฐจ๊ฐ ์ฒ˜๋ฆฌ
    • ๊ธฐ์กด Pessimistic Write ์ œ๊ฑฐ, ์žฌ๊ณ  ์ฐจ๊ฐ ์‹œ ๋ฐœ์ƒํ•˜๋˜ ๋ฝ ๊ฒฝํ•ฉ ๊ตฌ์กฐ ์ž์ฒด ์ œ๊ฑฐ
  • Redis TTL ๋ฝ์œผ๋กœ ์ค‘๋ณต ๊ฒฐ์ œ ๋ฐฉ์ง€
    • SETNX + TTL ๋ฐฉ์‹์œผ๋กœ ๊ฒฐ์ œ(pid) ๋‹จ์œ„ ๋ฝ์„ ์„ค์ •ํ•ด ์ค‘๋ณต ์Šน์ธ ์ฐจ๋‹จ
  • ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ MySQL ์žฌ๊ณ  ์ด๋ ฅ ๋น„๋™๊ธฐ ์ €์žฅ
    • ์‹ค์‹œ๊ฐ„ ์žฌ๊ณ  ์ฒ˜๋ฆฌ๋Š” Redis์—์„œ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ
    • StockHistory ๋“ฑ์˜ DB ์ด๋ ฅ ์ •๋ณด๋Š” ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ์—์„œ ๋น„๋™๊ธฐ ์ €์žฅํ•˜์—ฌ ์•ˆ์ •์„ฑ๊ณผ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ํ™•๋ณด

๊ฒฐ๊ณผ ๋ฐฉ๋ฒ• 6  ๋ถ„์‚ฐ๋ฝ์œผ๋กœ ๋™์‹œ์„ฑ ์ œ์–ด, ๋ ˆ๋””์Šค๋กœ ์žฌ๊ณ  ์ฐจ๊ฐ ic10 200ms vuser100 300s (1)

์ถ”๊ฐœ ๊ฐœ์„  ์ „/ํ›„ ๋น„๊ต 2์ฐจ ๊ฐœ์„  ๋น„๊ต

4๏ธโƒฃย ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ ์„ฑ๋Šฅ ๊ฐœ์„  - ๊ฒ€์ƒ‰ ์‘๋‹ต ์‹œ๊ฐ„ 0.036์ดˆ๋กœ ๋‹จ์ถ•

๋ฌธ์ œ ์ƒํ™ฉ

  • 43๋งŒ ๊ฑด์˜ ์ƒํ’ˆ ๋ฐ์ดํ„ฐ์™€ 160๋งŒ ๊ฑด ์ด์ƒ์˜ ์—ฐ๊ด€ ํ…Œ์ด๋ธ”(๋ธŒ๋žœ๋“œ, ์นดํ…Œ๊ณ ๋ฆฌ, ์ƒํ’ˆ ์ด๋ฏธ์ง€)์„ ๋Œ€์ƒ์œผ๋กœ ํ•œ ๊ฒ€์ƒ‰์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ฑ๋Šฅ ๋ฌธ์ œ ๋ฐœ์ƒ
    • LIKE '%keyword%' ์กฐ๊ฑด์œผ๋กœ B-Tree ์ธ๋ฑ์Šค ๋ฏธ์‚ฌ์šฉ, ํ’€ ์Šค์บ” ๋ฐœ์ƒ
    • OR ์กฐ๊ฑด์œผ๋กœ ์ธํ•œ ์ธ๋ฑ์Šค ํ‘ธ์‹œ๋‹ค์šด ๋ฏธ์ ์šฉ โ†’ product ํ…Œ์ด๋ธ” ์ „์ฒด ์Šค์บ”
    • ์ƒํ’ˆ ์ด๋ฏธ์ง€ ์กฐํšŒ ์‹œ ์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ ๋ฐ˜๋ณต ์‹คํ–‰
    • LEFT JOIN ์‚ฌ์šฉ์œผ๋กœ ๋ถˆํ•„์š”ํ•œ ํ–‰ ๋กœ๋”ฉ ๋ฐ ์กฐ์ธ ๋น„์šฉ ์ฆ๊ฐ€

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  • Full-Text Index ๋„์ž…
    • ์ƒํ’ˆ๋ช…, ๋ธŒ๋žœ๋“œ๋ช…, ์นดํ…Œ๊ณ ๋ฆฌ๋ช…์— ๋Œ€ํ•ด Full-Text ์ธ๋ฑ์Šค๋ฅผ ์ ์šฉํ•˜๊ณ  MATCH ... AGAINST ์‚ฌ์šฉ
  • OR ์กฐ๊ฑด ๋ถ„๋ฆฌ โ†’ UNION ์ฒ˜๋ฆฌ
    • ๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ ์กฐ๊ฑด์„ OR๊ฐ€ ์•„๋‹Œ 3๊ฐœ์˜ UNION ์ฟผ๋ฆฌ ๋ธ”๋ก์œผ๋กœ ๋ถ„๋ฆฌํ•ด ์ธ๋ฑ์Šค ํ‘ธ์‹œ๋‹ค์šด ์œ ๋„
  • ์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ ์ œ๊ฑฐ ๋ฐ JOIN ์ „ํ™˜
    • ์ด๋ฏธ์ง€ ์กฐํšŒ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ JOIN์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ฃจํ”„ ๋ฐ˜๋ณต ์ตœ์†Œํ™”
  • JOIN ์ตœ์ ํ™”
    • ๋ถˆํ•„์š”ํ•œ LEFT JOIN โ†’ INNER JOIN์œผ๋กœ ์ „ํ™˜ํ•˜์—ฌ ์ฝ๊ธฐ ๋ฒ”์œ„ ์ถ•์†Œ

๊ฒฐ๊ณผ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ ๊ฐœ์„  ํ›„

๐Ÿš€ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

1๏ธโƒฃ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ์ค‘ TCP ์ปค๋„ฅ์…˜ ์œ ์‹ค ๋ฌธ์ œ ๋ฐœ์ƒ

๋ฌธ์ œ ์ƒํ™ฉ

  • ์™ธ๋ถ€ ์„œ๋ฒ„์— 1๋งŒ ๋ช… ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ์ค‘ ์š”์ฒญ์˜ 80% ์ด์ƒ์ด ์‹คํŒจ
  • ๋กœ์ปฌ์—์„œ๋Š” ๋ฌธ์ œ ์—†์Œ โ†’ ์™ธ๋ถ€ ์„œ๋ฒ„์—์„œ๋งŒ ์—ฐ๊ฒฐ ์œ ์‹ค ๋ฐœ์ƒ
  • Spring Actuator, Wireshark ๋“ฑ์„ ํ™œ์šฉํ•œ ๋ถ„์„ ๊ฒฐ๊ณผ:
    • ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ ์ž์ฒด๋ฅผ ์ˆ˜์‹ ํ•˜์ง€ ๋ชปํ•จ
    • Tomcat์˜ accept() ํ˜ธ์ถœ ์ด์ „, OS ๋ ˆ๋ฒจ TCP Backlog Queue๊ฐ€ ํฌํ™” ์ƒํƒœ

์›์ธ ์ƒ์„ธ ๋ถ„์„

  • Tomcat์€ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ OS์˜ TCP ๋Œ€๊ธฐ์—ด(backlog)์— ์ €์žฅํ•œ ๋’ค accept()๋ฅผ ํ†ตํ•ด ์ˆ˜๋ฝ
  • ์ด ๋•Œ accept-count ๊ฐ’์ด ๋‚ฎ์œผ๋ฉด ์ˆ˜๋ฝ ๋Œ€๊ธฐ์—ด ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•ด ์—ฐ๊ฒฐ ๋ˆ„๋ฝ ๋ฐœ์ƒ
  • ๋˜ํ•œ, OS์˜ somaxconn ๊ฐ’์ด ์ œํ•œ๋˜์–ด ์žˆ์œผ๋ฉด Tomcat accept-count์„ค์ •๋„ ๋ฌด์˜๋ฏธํ•ด์ง

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  • Tomcat ์„ค์ • ์กฐ์ •: accept-count๋ฅผ 10000์œผ๋กœ ํ™•์žฅ
  • OS ํŠœ๋‹: somaxconn ๊ฐ’์„ 10000์œผ๋กœ ๋ณ€๊ฒฝ โ†’ sysctl -w net.core.somaxconn=10000

๊ฒฐ๊ณผ ๋ฐ ์ธ์‚ฌ์ดํŠธ

  • ์™ธ๋ถ€ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ์—์„œ 1๋งŒ ๊ฐœ ์š”์ฒญ ์ •์ƒ ์ˆ˜์‹ 
  • TCP Backlog์™€ Tomcat accept-count ๊ด€๊ณ„๋ฅผ ์‹ค์ „ ํ™˜๊ฒฝ์—์„œ ๋ช…ํ™•ํžˆ ์ดํ•ดํ•˜๊ณ  ์ ์šฉ

2๏ธโƒฃย ์ฟ ํฐ ๋ฐœ๊ธ‰ ๋กœ์ง โ€“ ๋ฝ ํ•ด์ œ ์‹œ์  ๋ฌธ์ œ๋กœ ์ธํ•œ ๋™์‹œ์„ฑ ์ด์Šˆ

๋ฌธ์ œ ์ƒํ™ฉ

  • ์ดˆ๊ธฐ MVP ๊ฐœ๋ฐœ ์‹œ์—๋Š” ๋‹จ์ผ ์ธ์Šคํ„ด์Šค ํ™˜๊ฒฝ์„ ์ „์ œ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฝ์œผ๋กœ ์ฟ ํฐ ๋ฐœ๊ธ‰ ๋™์‹œ์„ฑ ์ œ์–ด
  • ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ, ๋ฝ์ด DB ํŠธ๋žœ์žญ์…˜ ์ปค๋ฐ‹๋ณด๋‹ค ๋จผ์ € ํ•ด์ œ๋˜๋ฉฐ ์ค‘๋ณต ๋ฐœ๊ธ‰ ๋ฐœ์ƒ
    • ์ปค๋ฐ‹ ์ด์ „ ๋ฝ ํ•ด์ œ โ†’ ๋‹ค๋ฅธ ์š”์ฒญ์ด ๋™์ผ ์ฟ ํฐ์„ ๋™์‹œ ๋ฐœ๊ธ‰ ์‹œ๋„ โ†’ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ๊นจ์ง

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  • ํŠธ๋žœ์žญ์…˜ ์ปค๋ฐ‹ ์ดํ›„์— ๋ฝ์„ ํ•ด์ œํ•˜๋„๋ก ๋กœ์ง ๊ตฌ์กฐ ์ˆ˜์ •
    • ์ปค๋ฐ‹ ์™„๋ฃŒ๊นŒ์ง€ ๋ฝ์„ ์œ ์ง€ํ•จ์œผ๋กœ์จ ๋™์‹œ์„ฑ ์ถฉ๋Œ ์™„์ „ ๋ฐฉ์ง€
    • DB ๋ฐ˜์˜ ์ดํ›„๋งŒ ๋‹ค์Œ ์š”์ฒญ ํ—ˆ์šฉ โ†’ ์ •ํ•ฉ์„ฑ ๋ณด์žฅ

3๏ธโƒฃย ์™ธ๋ถ€ ๊ฒฐ์ œ API ํ˜ธ์ถœ ์ œ์•ฝ โ†’ Fake ์„œ๋ฒ„๋กœ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ๊ตฌ์„ฑ

๋ฌธ์ œ ์ƒํ™ฉ

  • ์‹ค์ œ KakaoPay API๋Š” ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐ˜๋ณต ํ˜ธ์ถœ์— ์ œ์•ฝ์ด ์กด์žฌ
  • ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ์‹œ ์™ธ๋ถ€ API ํ˜ธ์ถœ์€ ํ˜„์‹ค์ ์œผ๋กœ ์–ด๋ ค์›€

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  • KakaoPay ํ๋ฆ„์„ ๋ชจ์‚ฌํ•œ Fake ๊ฒฐ์ œ API ์„œ๋ฒ„ ์ž์ฒด ๊ตฌ์ถ•
    • ์‹ค์ œ API ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์œ ์‚ฌํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜์—ฌ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์œ ์‚ฌ ์šด์˜ ํ™˜๊ฒฝ ๊ตฌ์„ฑ
  • ํ…Œ์ŠคํŠธ ์‹œ ์™ธ๋ถ€ API ํ˜ธ์ถœ ์—†์ด๋„ ์„ฑ๋Šฅ ์ธก์ • ๋ฐ ๋ณ‘๋ชฉ ๊ตฌ๊ฐ„ ์ •ํ™•ํžˆ ์ง„๋‹จ ๊ฐ€๋Šฅ

๐Ÿ“– Wiki ๋ฐ ์ฐธ๊ณ  ์ž๋ฃŒ

ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ์ค‘ ๊ฒช์—ˆ๋˜ ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •๊ณผ ๊ธฐ์ˆ ์  ๊ฒฐ์ •์— ๋Œ€ํ•œ ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ Wiki ํŽ˜์ด์ง€์—์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Wiki๋กœ ์ด๋™ํ•˜๊ธฐ!

About

๐Ÿ’ป ๊ตญ๋‚ด ์ด์ปค๋จธ์Šค ์„œ๋น„์Šค๋ฅผ ๋ฒค์น˜๋งˆํ‚นํ•˜๊ณ , ๊ฐœ๋ฐœ ์‚ฌ์ดํด์— ๋งž์ถฐ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•œ ์ด์ปค๋จธ์Šค ํ”„๋กœ์ ํŠธ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Java 98.6%
  • JavaScript 1.4%