Skip to content
Richard JEON edited this page Nov 10, 2022 · 24 revisions

โœ… 5์ฐจ ๋ฐ๋ชจ ์š”๊ตฌ์‚ฌํ•ญ

๋ ˆ๋ฒจ4 ๊ธฐ๊ฐ„ ์ค‘ ๊ฐœ๋ฐœํ•  ์ž‘์—… ๋ชฉ๋ก ๊ณต์œ 

  • ๋น„๋กœ๊ทธ์ธ ์ƒํƒœ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์ถ”์ฒœ ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ ํ”ผ๋“œ ์ฑ„๋„ ์ œ๊ณต -> ์™„๋ฃŒ
  • Github ๋กœ๊ทธ์ธ, ๋กœ๊ทธ์•„์›ƒ -> ์™„๋ฃŒ
  • ๋กœ๊ทธ์ธ ์ƒํƒœ์—์„œ ๊ตฌ๋…, ๊ฐœ์ธํ™”ํ•˜์—ฌ ๊ตฌ์„ฑ๋˜๋Š” ํ”ผ๋“œ ์ฑ„๋„ ์ œ๊ณต -> ์™„๋ฃŒ
  • ํŠน์ • ํ”ผ๋“œ๋ฅผ ๊ณต์œ ํ•˜๋ฉฐ ์ž์‹ ์˜ ์ƒ๊ฐ์„ ๋ง๋ถ™์—ฌ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” SNS ์ฑ„๋„ ์ œ๊ณต -> ๊ฐœ๋ฐœ ์˜ˆ์ •
    • SNS ์ฑ„๋„ ํ”ผ๋“œ์— ๋Œ€ํ•œ ์ข‹์•„์š”, ๋Œ“๊ธ€ ๊ธฐ๋Šฅ ์ œ๊ณต -> ๋ณด๋ฅ˜
  • (Optional) ํšŒ์›์ด ๋ฉ”์ผ ์„ค์ •์„ ํ™œ์„ฑํ™”ํ•  ๊ฒฝ์šฐ, ๊ตฌ๋…ํ•œ RSS ์ค‘ ์ง€๋‚œ ํ•œ ์ฃผ๊ฐ„ ์ƒˆ๋กญ๊ฒŒ ๋“ฑ๋ก๋œ ํ”ผ๋“œ๋“ค์„ ์š”์•ฝํ•˜์—ฌ ๋ฉ”์ผ ๋ฐœ์†ก ์„œ๋น„์Šค -> ๋ณด๋ฅ˜
  • (Optional) ํšŒ์›์ด Slack Webhook URL์ œ๊ณต ์‹œ, ๊ตฌ๋…ํ•œ RSS ์ค‘ ์ƒˆ๋กœ์šด ํ”ผ๋“œ ๋“ฑ๋ก ์‹œ Slack ์•Œ๋ฆผ ๋ฐœ์†ก ์„œ๋น„์Šค -> ๋ณด๋ฅ˜



ํ†ฐ์บฃ ์„ค์ • ์ค‘ ์•„๋ž˜ ๊ฐ’์„ ์ ์ ˆํ•˜๊ฒŒ ์„ค์ •ํ•˜๊ณ , ํ•ด๋‹น ๊ฐ’์œผ๋กœ ์„ค์ •ํ•œ ์ด์œ ๋ฅผ ๊ณต์œ 

threads max, max connections, accept count

  • ์„ค์ •์— ๋Œ€ํ•œ ์Šคํ”„๋ง ๊ณต์‹๋ฌธ์„œ ์„ค๋ช…
  • ์„ค์ •์— ๋Œ€ํ•œ Tomcat ๊ณต์‹๋ฌธ์„œ ์„ค๋ช…
  • ๊ฒฐ๋ก 
    • server.tomcat.accept-count=50
    • server.tomcat.max-connections=400
    • server.tomcat.threads.min-spare=10
    • server.tomcat.threads.max=10
  • ๋„์ถœ ๊ณผ์ •
    • ๊ฐœ๋ฐœ ์„œ๋ฒ„ ํ”ผ๋“œ ์กฐํšŒ API์— ๋Œ€ํ•ด 300๋ช…์ด 10๋ฒˆ ํ˜ธ์ถœํ•˜๋Š” ์ƒํ™ฉ์œผ๋กœ ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ
    • acceptCount, maxConnections, threads.max ๊ธฐ์ค€์œผ๋กœ ํ…Œ์ŠคํŠธ ์ˆ˜ํ–‰
    • ๊ธฐ๋ณธ๊ฐ’ : 100, 8192, 200 -> 197 TPS, 1293ms
    • threads.max ํ…Œ์ŠคํŠธ
      • 100, 50, 10, 5, 1๋กœ ์ค„์—ฌ๊ฐ€๋ฉฐ ํ…Œ์ŠคํŠธ
      • 10์ผ ๋•Œ 213 TPS, 1160ms ๋กœ ๊ฐ€์žฅ ์ข‹์€ ๊ฒฐ๊ณผ
      • threads.max ๋Š” 10์œผ๋กœ ๊ฒฐ์ •
    • max-connections ํ…Œ์ŠคํŠธ
      • threads.max๋ฅผ 20๋ถ„์˜ 1 ์ˆ˜์ค€์œผ๋กœ ์ค„์˜€์œผ๋‹ˆ ๊ฐ™์€ ๋น„์œจ๋กœ ์ค„์—ฌ 400๋ถ€ํ„ฐ ์‹œ์ž‘
      • 400, 100, 10, 10(accept-count๋„ 10) ๋กœ ์ค„์—ฌ๊ฐ€๋ฉฐ ํ…Œ์ŠคํŠธ
      • max-connections์™€ accept-count ๋ชจ๋‘ 10์œผ๋กœ ์ค„์˜€์„ ๋• 153 TPS, 1008ms ๋กœ ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฐœ์ƒ
      • ๊ทธ์™ธ์—” 214 ~ 216 TPS, 991ms ~ 1143ms ๋กœ ์œ ์˜๋ฏธํ•œ ์ฐจ์ด๊ฐ€ ์—†์Œ
      • CPU ์—ฐ์‚ฐ ๋ณด๋‹ค๋Š” I/O ๋ธ”๋Ÿญ์ด ๋งŽ์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŠน์„ฑ ์ƒ, ์Šค๋ ˆ๋“œ ๋ณด๋‹ค ๋งŽ์€ ์ปค๋„ฅ์…˜ ์ˆ˜๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•˜๋‹ค๊ณ  ํŒ๋‹จ
      • ์ถ”๊ฐ€๋กœ ์“ฐ๋ ˆ๋“œ ๊ธฐ๋ณธ ์„ค์ •๊ฐ’์˜ ๋น„์œจ๊ณผ ๋งž์ถฐ 400์„ ์„ค์ •ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •
    • accept-count
      • max-connections๊ฐ€ ๊ฐ€๋“ ์ฐผ์„ ๋•Œ OS์—์„œ ์š”์ฒญ์„ ๋‹ด์•„๋‘๋Š” ํ ํฌ๊ธฐ
      • OS ์„ค์ •์— ๋”ฐ๋ผ ์ด ์„ค์ •์„ ๋ฌด์‹œํ•  ์ˆ˜๋„ ์žˆ์Œ
      • accept-count๊ฐ€ ๊ฐ€๋“ ์ฐฌ ๋’ค ์š”์ฒญ์ด ์ถ”๊ฐ€๋กœ ์˜ค๋ฉด OS๊ฐ€ ์—ฐ๊ฒฐ ๊ฑฐ๋ถ€ํ•˜๊ฑฐ๋‚˜ ํƒ€์ž„์•„์›ƒ๋จ
      • ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์–‘์— ๋”ฐ๋ผ accept-count๋„ ์กฐ์ ˆํ•ด์•ผํ•  ๊ฒƒ์œผ๋กœ ํŒ๋‹จ
      • ๊ธฐ๋ณธ๊ฐ’ 100์—์„œ 50์œผ๋กœ ์ค„์—ฌ์„œ ์„ค์ •ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •

image
  • ํ…Œ์ŠคํŠธ ์„ค์ •

image
  • ์ตœ์ข… ์„ค์ • ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ : 221 TPS, 1110ms
  • threads.max=10, min-spare=10, max-connection=400, accept-count=50
  • ๊ธฐ๋ณธ ์„ค์ •์ธ 200, 10, 8192, 100์ผ ๋•Œ์˜ ์„ฑ๋Šฅ์€ 197 TPS, 1293ms
  • ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ›„ TPS 10.86%, ํ‰๊ท ์‘๋‹ต์‹œ๊ฐ„ 14.15% ๊ฐœ์„ 



์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ •๋ฆฌํ•˜๊ณ , ๊ฐ ์ฟผ๋ฆฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ธ๋ฑ์Šค ์„ค์ •

  • ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์กฐํšŒ ์ฟผ๋ฆฌ์™€ ํ…Œ์ด๋ธ”์— ์„ค์ •ํ•œ ์ธ๋ฑ์Šค ๊ณต์œ 
  • ์ธ๋ฑ์Šค๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์—†๋Š” ์ฟผ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ์ธ๋ฑ์Šค๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์—†๋Š” ์ด์œ  ๊ณต์œ 

  • ๊ณตํ†ต ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ๊ด€๋ จ
    • EC2 ์ธ์Šคํ„ด์Šค ์‹ ๊ทœ ์ƒ์„ฑ, MySQL ์„ค์น˜, ์šด์˜ ํ™˜๊ฒฝ DDL์„ ์ด์šฉํ•ด ํ…Œ์ด๋ธ” ์ƒ์„ฑ
    • JdbcTemplate batchUpdate๋กœ 100๋งŒ๊ฑด์„ 10๋งŒ๊ฐœ์”ฉ ๋‚˜๋ˆ ์„œ 10ํšŒ์— ๊ฑธ์ณ ์ด 1000๋งŒ๊ฑด ๋”๋ฏธ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…
    • 1000๋งŒ ๊ฑด ๋ฐ์ดํ„ฐ ์‚ฝ์ž…์— ์งง๊ฒŒ๋Š” 3๋ถ„์—์„œ ๊ธธ๊ฒŒ๋Š” 9๋ถ„ ์†Œ์š”

ํšŒ์› ๊ด€๋ จ ์ฟผ๋ฆฌ

  1. ํ…Œ์ŠคํŠธ ์ „ ์˜ˆ์ƒ
  • ๋กœ๊ทธ์ธ ์‹œ, Github OAuth๋ฅผ ํ†ตํ•ด ์–ป์€ Provider Id๋ฅผ ๊ธฐ์ค€์œผ๋กœ DB์— ์ผ์น˜ํ•˜๋Š” ํšŒ์›์ด ์กด์žฌํ•˜๋Š”์ง€ ๊ฒ€์ฆ
  • ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ Save, ์กด์žฌํ•  ๊ฒฝ์šฐ ์กฐํšŒ๋œ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ
  • Provider Id๋ฅผ ์กฐํšŒ ์กฐ๊ฑด์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ธ๋ฑ์Šค ์„ค์ •ํ•ด์•ผํ•  ๊ฒƒ์œผ๋กœ ์ถ”์ธก

  1. ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ
  • provider_id ์ปฌ๋Ÿผ์œผ๋กœ ํšŒ์›์„ ์กฐํšŒํ–ˆ์„ ๋•Œ, 4.2์ดˆ
  • id(PK) ์ปฌ๋Ÿผ์œผ๋กœ ํšŒ์›์„ ์กฐํšŒํ–ˆ์„ ๋•Œ, 0.08์ดˆ
  • provider_id ์ปฌ๋Ÿผ์— ์ธ๋ฑ์Šค ์„ค์ • ํ›„ 0.08์ดˆ๋กœ 50๋ฐฐ ์„ฑ๋Šฅ ํ–ฅ์ƒ

  1. ์‹คํ–‰ ๊ณ„ํš ๋น„๊ต
image image
  • ์œ„๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ id๋กœ ์กฐํšŒ, ์ธ๋ฑ์Šค ์—†๋Š” provider_id ๋กœ ์กฐํšŒ, ์ธ๋ฑ์Šค ์ ์šฉ ํ›„ provider_id ๋กœ ์กฐํšŒ.
  • ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์‹คํ–‰๊ณ„ํš์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Œ

  1. ์‚ฝ์ž… ์„ฑ๋Šฅ ๋น„๊ต
image image
  • ์ธ๋ฑ์Šค ์ ์šฉ ์ „๊ณผ ํ›„์˜ 1000๋งŒ ๊ฑด ์‚ฝ์ž… ์†๋„ ๋น„๊ต
  • ์“ฐ๊ธฐ ์„ฑ๋Šฅ ํ•˜๋ฝ์€ ๋ฌด์‹œํ•ด๋„ ๋  ์ˆ˜์ค€์œผ๋กœ ํŒ๋‹จ



ํ”ผ๋“œ ๊ด€๋ จ ์ฟผ๋ฆฌ

  1. ํ…Œ์ŠคํŠธ ์ „ ์˜ˆ์ƒ
  • id๋กœ ์กฐํšŒ, link ์ปฌ๋Ÿผ์œผ๋กœ ์กฐํšŒ ๋‘ ๊ฐ€์ง€ ์ฟผ๋ฆฌ๊ฐ€ ์‚ฌ์šฉ๋จ
  • id๋กœ ์กฐํšŒ๋Š” PK ์‚ฌ์šฉ์ด๋ฏ€๋กœ ๋ณ„๋„ ์„ค์ • ๋ถˆํ•„์š”ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ
  • link ์ปฌ๋Ÿผ์— ์ธ๋ฑ์Šค ์„ค์ •์„ ํ†ตํ•œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์ด ์˜ˆ์ƒ๋จ

  1. ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ
image
  • link ์ปฌ๋Ÿผ์ด varchar(1000) ์ด์–ด์„œ utf8mb4 ํ˜•์‹์—์„œ 4000byte๊ฐ€ ๋จ.
  • index ์ตœ๋Œ€ ๊ธธ์ด๊ฐ€ ์•ฝ 3000byte ์—ฌ์„œ ๊ธธ์ด ์ œํ•œ ์ดˆ๊ณผ๋กœ ์ธํ•ด ์ธ๋ฑ์Šค ์„ค์ •์ด ๋ถˆ๊ฐ€ํ•จ.
  • ๋Œ€์‹  fulltext index ์„ค์ •์„ ์ง„ํ–‰ํ•ด๋ด„
  • ์œ ์‚ฌ์„ฑ์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•ด์ฃผ๋ฏ€๋กœ limit 1 ์„ ์ถ”๊ฐ€ํ•ด์„œ PK ์กฐํšŒ์™€ ๊ฑฐ์˜ ์œ ์‚ฌํ•œ ์ˆ˜์ค€์œผ๋กœ ์„ฑ๋Šฅ ๊ตฌํ˜„ ๋˜์—ˆ์Œ
  • ๋‹ค๋งŒ, fulltext ์ธ๋ฑ์Šค๋กœ ์ธํ•œ ์“ฐ๊ธฐ ์„ฑ๋Šฅ์˜ ๊ทน๋‹จ์ ์ธ ์ €ํ•˜๊ฐ€ ์œ ๋ฐœ๋จ.
  • ์‚ฝ์ž… ์–‘์ด ๋Š˜์–ด๋‚ ์ˆ˜๋ก ์“ฐ๊ธฐ๊ฐ€ ์ง€์—ฐ๋˜์–ด ๋นˆ ํ…Œ์ด๋ธ”์— 1000๋งŒ๊ฑด์„ ์‚ฝ์ž…ํ•˜๋Š” ๋กœ์ง ์ž์ฒด๊ฐ€ ์˜ˆ์™ธ ๋ฐœ์ƒ๋˜์–ด๋ฒ„๋ฆผ
  • URL Shortener์™€ JPA Converter๋ฅผ ์ด์šฉํ•ด DB ์ธ์„œํŠธ ์‹œ ๊ธธ์ด๋ฅผ ์ค„์—ฌ๋ณผ๊นŒ ๊ณ ๋ฏผํ–ˆ์œผ๋‚˜ ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง์ด๋ผ๊ณ  ํŒ๋‹จ
  • URL์ด 750๊ธ€์ž๋ฅผ ์ดˆ๊ณผํ•œ๋‹ค๋ฉด ๊ทธ๊ฒƒ๊นŒ์ง„ ๋Œ€์‘ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ link ์ปฌ๋Ÿผ์„ varchar(750)์œผ๋กœ ์ˆ˜์ •ํ•˜๊ณ  ์ธ๋ฑ์Šค ์„ค์ •์œผ๋กœ ๋งˆ๋ฌด๋ฆฌ
  • link ์ปฌ๋Ÿผ์œผ๋กœ ์กฐํšŒ ์‹œ์—๋„ PK ์กฐํšŒ์™€ ๋™์ผํ•œ ์ˆ˜์ค€์˜ ์„ฑ๋Šฅ ํ™•์ธ

  1. ์‹คํ–‰ ๊ณ„ํš ๋น„๊ต
image
  • ์œ„์—์„œ๋ถ€ํ„ฐ id๋กœ ์กฐํšŒ, ์ธ๋ฑ์Šค ์—†์ด link๋กœ ์กฐํšŒ, ์ธ๋ฑ์Šค ์„ค์ • ํ›„ link๋กœ ์กฐํšŒ
  • ์ธ๋ฑ์Šค ์„ค์ • ์ „, 1000๋งŒ ๊ฑด ๋ฐ์ดํ„ฐ์—์„œ link ๋กœ ์กฐํšŒ ์‹œ 14์ดˆ ์†Œ์š”
  • ์ธ๋ฑ์Šค ์„ค์ • ํ›„ id ์กฐํšŒ์™€ ์œ ์‚ฌํ•˜๊ฒŒ 0.14์ดˆ ์†Œ์š”๋กœ ์„ฑ๋Šฅ ๊ฐœ์„ 

  1. ์‚ฝ์ž… ์„ฑ๋Šฅ ๋น„๊ต
image
  • ํšŒ์› ์‚ฌ๋ก€์™€ ๋™์ผํ•˜๊ฒŒ ์ธ๋ฑ์Šค ์„ค์ •์œผ๋กœ ์ธํ•œ ์“ฐ๊ธฐ ์„ฑ๋Šฅ ํ•˜๋ฝ์€ ๋ฏธ๋น„ํ–ˆ์Œ
  • ๋‹จ, link ์ปฌ๋Ÿผ์˜ ๊ธธ์ด๋ฅผ 1000์—์„œ 750์œผ๋กœ ์ค„์—ฌ ์ผ๋ฐ˜ ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ์—ˆ์„ ๋•Œ์˜ ์ด์•ผ๊ธฐ.
  • link ๊ธธ์ด๋ฅผ 1000์œผ๋กœ ์œ ์ง€ํ•˜๋ ค fulltext ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ์—ˆ์„ ๋•Œ์—” ์ธ๋ฑ์Šค ์ƒ์„ฑ์—๋งŒ 8๋ถ„์ด ์†Œ์š”๋จ.
  • fulltext ์ธ๋ฑ์Šค๋ฅผ ์„ค์ • ํ•œ ํ›„, 1000๋งŒ ๊ฑด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž… ์‹œ๋„ ํ•ด๋ดค์œผ๋‚˜, ๋ฐ์ดํ„ฐ๊ฐ€ ๋Š˜์–ด๋‚ ์ˆ˜๋ก ์‚ฝ์ž… ์†๋„๊ฐ€ ํฌ๊ฒŒ ๋Š˜์–ด๋‚˜๋‹ค๊ฐ€, 700๋งŒ๊ฐœ์งธ ์‚ฝ์ž… ์‹œ๋„ ์ค‘ ์˜ˆ์™ธ ๋ฐœ์ƒํ•˜๋ฉฐ ์ฒ˜๋ฆฌ ์‹คํŒจ.
  • fulltext ์„ค์ • ์‹œ, where ์ ˆ์— match against ๋ฌธ๋ฒ•์„ ์ด์šฉํ•ด ์œ ์‚ฌ์„ฑ ๋‚ด๋ฆผ์ฐจ์ˆœ ์กฐํšŒ๋ผ๋Š” ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์‚ฝ์ž… ์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ํฌ๊ธฐํ•ด์•ผํ•จ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Œ
  • ์‚ฌ์šฉ์ž์™€ ์ง์ ‘ ์ธํ„ฐ๋ ‰์…˜ํ•˜์ง€ ์•Š๋Š” ํ”ผ๋“œ ์—…๋ฐ์ดํŠธ ๋กœ์ง์—์„œ๋Š” fulltext ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•œ ์“ฐ๊ธฐ ์„ฑ๋Šฅ์ด ๋‹ค์†Œ ํฌ์ƒ๋˜๋”๋ผ๋„ ์ถ”ํ›„ ๊ฐœ๋ฐœ๋  ์ˆ˜ ์žˆ๋Š” ํ”ผ๋“œ ๊ฒ€์ƒ‰์—์„œ์˜ ๊ฐ•๋ ฅํ•œ ์กฐํšŒ ๊ธฐ๋Šฅ์„ ์œ„ํ•ด ElasticSearch ๋“ฑ์˜ ๊ฒ€์ƒ‰ ์—”์ง„์„ ๋„์ž…ํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ํ”ผ๋“œ์˜ ์ œ๋ชฉ๊ณผ description์— fulltext ์ธ๋ฑ์Šค๋ฅผ ๊ฑฐ๋Š” ๊ฒƒ๋„ ๋ฐฉ๋ฒ•์ด ๋  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.



๋ถ๋งˆํฌ ๊ด€๋ จ ์ฟผ๋ฆฌ

  1. ํ…Œ์ŠคํŠธ ์ „ ์˜ˆ์ƒ
  • bookmark ํ…Œ์ด๋ธ”์€ id(pk), member_id(fk), feed_id(fk) ๋ฅผ ๊ฐ–๋Š” ํ…Œ์ด๋ธ”
  • where์ ˆ์— member_id, feed_id ๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฏธ ๋ถ๋งˆํฌํ•œ ํ”ผ๋“œ์ธ์ง€ ์กฐํšŒํ•˜๋Š” ์ฟผ๋ฆฌ ์กด์žฌ
  • where์ ˆ์— member_id ๋งŒ ์‚ฌ์šฉํ•ด์„œ ํ•œ ํšŒ์›์˜ ๊ตฌ๋…ํ•œ ํ”ผ๋“œ๋“ค์„ ์กฐํšŒํ•˜๋Š” ์ฟผ๋ฆฌ ์กด์žฌ
  • ๋ชจ์กฐ๋ฆฌ ์ธ๋ฑ์Šค์ด๋‹ˆ ์„ฑ๋Šฅ์ด ์•„์ฃผ ๋‚˜์˜์ง„ ์•Š์„ ๋“ฏ ํ•œ๋ฐ, fk ๋‘˜์„ ๋ฌถ์–ด์„œ ์กฐํšŒํ•˜๋Š” ๊ฒฝ์šฐ, ๋ฌถ์–ด์„œ ์ƒˆ๋กญ๊ฒŒ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋” ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋ ์ง€ ๊ถ๊ธˆํ•˜๋‹ค

  1. ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ
  • member_id(fk)๋กœ๋งŒ ์กฐํšŒํ•˜๋Š” ๊ฒฝ์šฐ (ํšŒ์› ๊ฐœ์ธ์˜ ๋ถ๋งˆํฌํ•œ ํ”ผ๋“œ ์กฐํšŒ)

    • member_id(fk)๋ฅผ where์ ˆ์—์„œ ์‚ฌ์šฉํ•˜์—ฌ ์กฐํšŒํ•  ๊ฒฝ์šฐ, 1000๋งŒ๊ฑด ๊ธฐ์ค€ 1์ดˆ ์†Œ์š”
    • ์ธ๋ฑ์Šค๋กœ member_id ๋ฅผ ํ™œ์šฉํ•˜์ง€๋งŒ, Using Where, Temporary, filesort๊ฐ€ ์‚ฌ์šฉ๋จ
    • member_id๊ฐ€ ์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋” ๋†’์•„์„œ member_id, feed_id๋กœ ๋‹ค์ค‘์ปฌ๋Ÿผ ์ธ๋ฑ์Šค ์ƒ์„ฑ
    • 1000๋งŒ๊ฑด ๊ธฐ์ค€ 1์ดˆ์—์„œ 0.2์ดˆ๋กœ ๊ฐœ์„ 
    • ๋‹ค์ค‘์ปฌ๋Ÿผ ์ธ๋ฑ์Šค๊ฐ€ ์‚ฌ์šฉ๋˜๊ณ , Using Where ์ดํ›„ Using Index๊ฐ€ ์ถ”๊ฐ€๋จ
  • member_id(fk) + feed_id(fk)๋กœ ์กฐํšŒํ•˜๋Š” ๊ฒฝ์šฐ (๋ถ๋งˆํฌ ์ถ”๊ฐ€ ์‹œ ์ด๋ฏธ ๋ถ๋งˆํฌ ๋˜์–ด์žˆ๋Š”์ง€ ์—ฌ๋ถ€ ํ™•์ธ)

    • member_id = ? and feed_id = ? ๋กœ where์ ˆ์—์„œ ์กฐํšŒํ•˜๋Š” ๊ฒฝ์šฐ 1000๋งŒ๊ฑด ๊ธฐ์ค€ 54ms ์†Œ์š”
    • Using intersect๋กœ ๋‘ ์ธ๋ฑ์Šค๋กœ ์กฐํšŒํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋จธ์ง€ํ•˜์—ฌ ํ•„ํ„ฐ๋ง
    • ๋‹ค์ค‘ ์ปฌ๋Ÿผ ์ธ๋ฑ์Šค ์ฒ˜๋ฆฌ ํ›„
    • 1000๋งŒ ๊ฑด ๊ธฐ์ค€ 54ms ์—์„œ 46ms๋กœ ๊ฐœ์„ 
    • Using intersect์—์„œ Using Index๋กœ ๊ฐœ์„ 

  1. ์‹คํ–‰ ๊ณ„ํš ๋น„๊ต
image image
  • member_id(fk)๋กœ๋งŒ ์กฐํšŒ ์‹œ feed_id์™€ ๋‹ค์ค‘ ์ปฌ๋Ÿผ ์ธ๋ฑ์Šค๋ฅผ ์žก์ง€ ์•Š์•˜์„ ๋•Œ(์œ„)์™€ ์žก์•˜์„ ๋•Œ(์•„๋ž˜)
  • ์„ค์ • ์ดํ›„ ๋‹ค์ค‘ ์ปฌ๋Ÿผ ์ธ๋ฑ์Šค๊ฐ€ ์ธ๋ฑ์Šค ํ‚ค๋กœ ์‚ฌ์šฉ๋˜๊ณ , Using Where ์ดํ›„ Using Index๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค

image image
  • member_id(fk) + feed_id(fk) ๋กœ ์กฐํšŒํ•  ์‹œ ๋‹ค์ค‘์ปฌ๋ฆผ ์ธ๋ฑ์Šค ์žก์ง€ ์•Š์•˜์„ ๋•Œ(์œ„)์™€ ์žก์•˜์„ ๋•Œ(์•„๋ž˜)
  • ์„ค์ • ์ดํ›„ ๋‹ค์ค‘ ์ปฌ๋Ÿผ ์ธ๋ฑ์Šค๊ฐ€ ์ธ๋ฑ์Šค ํ‚ค๋กœ ์‚ฌ์šฉ๋˜๊ณ , Using Intersect๊ฐ€ Using Index๋กœ ๊ฐœ์„ ๋˜์—ˆ๋‹ค

  1. ์‚ฝ์ž… ์„ฑ๋Šฅ ๋น„๊ต
image image
  • ๋‹ค์ค‘ ์ปฌ๋Ÿผ ์ธ๋ฑ์Šค๋ฅผ ์žก๊ธฐ ์ „๊ณผ ํ›„์˜ 1000๋งŒ ๊ฑด ์‚ฝ์ž… ์„ฑ๋Šฅ ๋น„๊ต
  • 241์ดˆ์—์„œ 544์ดˆ๋กœ ๋‹ค์†Œ ํ•˜๋ฝ
  • bookmark์— ๋Œ€ํ•œ ์‚ฝ์ž…์€ ํšŒ์›์ด ๋ถ๋งˆํฌ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ๋ฐœ์ƒ
  • ์—ฌ๋Ÿฌ ๊ฑด์ด ๋™์‹œ์— ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  ๋ฌด์กฐ๊ฑด ๋‹จ๊ฑด์œผ๋กœ๋งŒ ๋ฐœ์ƒ
  • ๋ถ๋งˆํฌ ์ถ”๊ฐ€ ์‹œ ์กฐํšŒ ํ›„ ์“ฐ๊ธฐ์ธ๋ฐ, ์กฐํšŒ ์„ฑ๋Šฅ์ด ํ›จ์”ฌ ๊ฐœ์„ ๋˜๋ฏ€๋กœ ๋‹ค์ค‘์ปฌ๋Ÿผ ์ธ๋ฑ์Šค๋ฅผ ๊ฑฐ๋Š” ๊ฒƒ์ด ์‚ฌ์šฉ์„ฑ ๊ฐœ์„ ์— ์ ์ ˆํ•˜๋‹ค๊ณ  ํŒ๋‹จ



ํ•„์ˆ˜ ์š”๊ตฌ์‚ฌํ•ญ ์ „์ฒด ๋ณด๊ธฐ



Clone this wiki locally