๋นŒ๋”๋ฅผ ์œ„ํ•œ B2B ์„œ๋น„์Šค ์˜ˆ์‹œ๋ฅผ ํ™œ์šฉํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ ์ตœ์ ํ™”

๋ณด๋‹ค ์ƒ์‚ฐ์ ์ธ ์„œ๋ฒ„๋กœ ์ด๋™ํ•˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์ฟผ๋ฆฌ ์ˆ˜๋ฅผ 10๋ฐฐ ๋Š˜๋ฆฌ๊ณ  ์‹œ์Šคํ…œ ๊ธฐ๋Šฅ์„ ์œ ์ง€ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ–ˆ๋Š”์ง€, ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค ๋น„์šฉ์„ ๋Š˜๋ฆฌ์ง€ ์•Š๊ณ  ์ตœ๋Œ€ํ•œ ๋งŽ์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด SQL ์ฟผ๋ฆฌ๋ฅผ ์ตœ์ ํ™”ํ•œ ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

์ €๋Š” ๊ฑด์„คํšŒ์‚ฌ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฝ 3๊ฐœ ํšŒ์‚ฌ๊ฐ€ ์šฐ๋ฆฌ์™€ ํ˜‘๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 10๋ช…์ด ๋„˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋งค์ผ 4~10์‹œ๊ฐ„ ๋™์•ˆ ์šฐ๋ฆฌ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ„ํš, ์•Œ๋ฆผ, ๊ฒฝ๊ณ , ๊ฒ€์ฆ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” PostgreSQL 9.6์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” ์•ฝ 300๊ฐœ์˜ ํ…Œ์ด๋ธ”์ด ์žˆ์œผ๋ฉฐ ๋งค์ผ ์ตœ๋Œ€ 200์–ต ๊ฐœ์˜ ์ฟผ๋ฆฌ(10๊ฐœ์˜ ๋‹ค๋ฅธ ์ฟผ๋ฆฌ)๊ฐ€ ์ˆ˜์‹ ๋ฉ๋‹ˆ๋‹ค. ํ‰๊ท ์ ์œผ๋กœ ์ดˆ๋‹น 3~4๊ฐœ์˜ ์š”์ฒญ์ด ์žˆ์œผ๋ฉฐ, ๊ฐ€์žฅ ํ™œ๋™์ ์ธ ์ˆœ๊ฐ„์—๋Š” ์ดˆ๋‹น 10๊ฐœ ์ด์ƒ์˜ ์š”์ฒญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์ฟผ๋ฆฌ๋Š” OLAP์ž…๋‹ˆ๋‹ค. ์ถ”๊ฐ€, ์ˆ˜์ • ๋ฐ ์‚ญ์ œ๊ฐ€ ํ›จ์”ฌ ์ ์œผ๋ฏ€๋กœ OLTP ๋กœ๋“œ๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ์ ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๊ท€ํ•˜๊ฐ€ ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์˜ ๊ทœ๋ชจ๋ฅผ ํ‰๊ฐ€ํ•˜๊ณ  ์šฐ๋ฆฌ ๊ฒฝํ—˜์ด ๊ท€ํ•˜์—๊ฒŒ ์–ผ๋งˆ๋‚˜ ์œ ์šฉํ•œ์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์ด ๋ชจ๋“  ์ˆ˜์น˜๋ฅผ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 1. ์„œ์ •์ 

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

๊ทธ๋ฆผ 2. ํ†ต๊ณ„

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋Š” ํ•˜๋ฃจ์— ์•ฝ 10๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด 10๋งŒ๊ฐœ ์ค‘์— ํ‰๊ท  ์‹คํ–‰ ์‹œ๊ฐ„์ด 2~3ms๋กœ 0.1~0.3๋งŒ ๋ฒˆ ์‹คํ–‰๋˜๋Š” ๋ชฌ์Šคํ„ฐ๊ฐ€ ์žˆ๊ณ , ํ•˜๋ฃจ์— 30๋ฒˆ ํ˜ธ์ถœ๋˜๋Š” ํ‰๊ท  ์‹คํ–‰ ์‹œ๊ฐ„์ด 100์ดˆ์ธ ์ฟผ๋ฆฌ๋„ ์žˆ๋‹ค.

10๊ฐœ์˜ ์ฟผ๋ฆฌ๋ฅผ ๋ชจ๋‘ ์ตœ์ ํ™”ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์„ฑ๋Šฅ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅ์„ ์–ด๋””๋กœ ๊ธฐ์šธ์—ฌ์•ผ ํ• ์ง€ ํŒŒ์•…ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ๋ฐ˜๋ณต ํ›„์— ์šฐ๋ฆฌ๋Š” ์š”์ฒญ์„ ์œ ํ˜•์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

TOP ์š”์ฒญ

์ด๋Š” ๊ฐ€์žฅ ๋งŽ์€ ์‹œ๊ฐ„(์ด ์‹œ๊ฐ„)์ด ์†Œ์š”๋˜๋Š” ๊ฐ€์žฅ ๋ฌด๊ฑฐ์šด ์ฟผ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋งค์šฐ ์ž์ฃผ ํ˜ธ์ถœ๋˜๋Š” ์ฟผ๋ฆฌ์ด๊ฑฐ๋‚˜ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ๋งค์šฐ ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š” ์ฟผ๋ฆฌ์ž…๋‹ˆ๋‹ค(๊ธธ๊ณ  ๋นˆ๋ฒˆํ•œ ์ฟผ๋ฆฌ๋Š” ์†๋„๋ฅผ ์œ„ํ•œ ์‹ธ์›€์˜ ์ฒซ ๋ฒˆ์งธ ๋ฐ˜๋ณต์—์„œ ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค). ๊ฒฐ๊ณผ์ ์œผ๋กœ ์„œ๋ฒ„๋Š” ์‹คํ–‰์— ๊ฐ€์žฅ ๋งŽ์€ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ƒ์œ„ ์š”์ฒญ์„ ์ด ์‹คํ–‰ ์‹œ๊ฐ„๋ณ„๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  IO ์‹œ๊ฐ„๋ณ„๋กœ ๋ณ„๋„๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•ฝ๊ฐ„ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๋ชจ๋“  ํšŒ์‚ฌ์˜ ์ผ๋ฐ˜์ ์ธ ๊ด€ํ–‰์€ TOP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ ํ•˜๋‚˜๋งŒ ์ตœ์ ํ™”ํ•ด๋„ 5~10%์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ”„๋กœ์ ํŠธ๊ฐ€ ์„ฑ์ˆ™ํ•ด์ง์— ๋”ฐ๋ผ TOP ์ฟผ๋ฆฌ๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ ์  ๋” ์ค‘์š”ํ•ด์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ ์ด๋ฏธ ํ•ด๊ฒฐ๋˜์—ˆ์œผ๋ฉฐ ๊ฐ€์žฅ "๋ฌด๊ฑฐ์šด" ์š”์ฒญ์—๋Š” ๋ฆฌ์†Œ์Šค์˜ "๋‹จ์ง€" 3-5%๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ „์ฒด TOP ์ฟผ๋ฆฌ์— ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„์ด 30~40% ๋ฏธ๋งŒ์ด๋ผ๋ฉด ํ•ด๋‹น ์ฟผ๋ฆฌ๊ฐ€ ๋น ๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋„๋ก ์ด๋ฏธ ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์˜€์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์œผ๋ฉฐ ์ด์ œ ๋‹ค์Œ ๊ทธ๋ฃน์˜ ์ฟผ๋ฆฌ ์ตœ์ ํ™”๋กœ ๋„˜์–ด๊ฐˆ ๋•Œ์ž…๋‹ˆ๋‹ค.
์ด ๊ทธ๋ฃน์— ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์ƒ์œ„ ์ฟผ๋ฆฌ๋ฅผ ํฌํ•จํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์งˆ๋ฌธ์— ๋‹ตํ•˜๋Š” ๊ฒƒ์ด ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๋ณดํ†ต ์ตœ์†Œ 10๊ฐœ, ์ตœ๋Œ€ 20๊ฐœ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. TOP ๊ทธ๋ฃน์˜ ์ฒซ ๋ฒˆ์งธ์™€ ๋งˆ์ง€๋ง‰์˜ ์‹œ๊ฐ„์ด 10๋ฐฐ ์ด์ƒ ์ฐจ์ด๊ฐ€ ๋‚˜์ง€ ์•Š๋„๋ก ๋…ธ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ฟผ๋ฆฌ ์‹คํ–‰ ์‹œ๊ฐ„์ด 1์œ„์—์„œ 10์œ„๋กœ ๊ธ‰๊ฒฉํ•˜๊ฒŒ ๊ฐ์†Œํ•˜๋ฉด TOP-10์„ ์„ ํƒํ•˜๊ณ , ๊ฐ์†Œ๊ฐ€ ์ ์ง„์ ์ด๋ผ๋ฉด ๊ทธ๋ฃน ํฌ๊ธฐ๋ฅผ 15 ๋˜๋Š” 20์œผ๋กœ ๋Š˜๋ฆฝ๋‹ˆ๋‹ค.
๋นŒ๋”๋ฅผ ์œ„ํ•œ B2B ์„œ๋น„์Šค ์˜ˆ์‹œ๋ฅผ ํ™œ์šฉํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ ์ตœ์ ํ™”

์ค‘๋†

์ด๋Š” ๋งˆ์ง€๋ง‰ 5~10%๋ฅผ ์ œ์™ธํ•˜๊ณ  TOP ๋ฐ”๋กœ ๋’ค์— ์˜ค๋Š” ๋ชจ๋“  ์š”์ฒญ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ตœ์ ํ™”ํ•˜๋ฉด ์„œ๋ฒ„ ์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์š”์ฒญ์˜ ๋น„์ค‘์€ ์ตœ๋Œ€ 80%์— ๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ ์œ ์œจ์ด 50%๋ฅผ ๋„˜์–ด์„ฐ๋‹ค๊ณ  ํ•ด๋„ ์ข€ ๋” ์ฃผ์˜ ๊นŠ๊ฒŒ ์‚ดํŽด๋ด์•ผ ํ•  ๋•Œ๋‹ค.

๊ผฌ๋ฆฌ

์–ธ๊ธ‰ํ•œ ๋Œ€๋กœ ์ด๋Ÿฌํ•œ ์ฟผ๋ฆฌ๋Š” ๋งˆ์ง€๋ง‰์— ์ œ๊ณต๋˜๋ฉฐ ์‹œ๊ฐ„์˜ 5~10%๊ฐ€ ์†Œ์š”๋ฉ๋‹ˆ๋‹ค. ์ž๋™ ์ฟผ๋ฆฌ ๋ถ„์„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋งŒ ์žŠ์–ด๋ฒ„๋ฆด ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ตœ์ ํ™”ํ•˜๋Š” ๊ฒƒ๋„ ์ €๋ ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ ๊ทธ๋ฃน์„ ์–ด๋–ป๊ฒŒ ํ‰๊ฐ€ํ•˜๋‚˜์š”?

PostgreSQL์— ๋Œ€ํ•œ ํ‰๊ฐ€๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” SQL ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(๋‹ค๋ฅธ ๋งŽ์€ DBMS์—๋„ ์œ ์‚ฌํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค).

TOP-MEDIUM-TAIL ๊ทธ๋ฃน์˜ ํฌ๊ธฐ๋ฅผ ์ถ”์ •ํ•˜๋Š” SQL ์ฟผ๋ฆฌ

SELECT sum(time_top) AS sum_top, sum(time_medium) AS sum_medium, sum(time_tail) AS sum_tail
FROM
(
  SELECT CASE WHEN rn <= 20              THEN tt_percent ELSE 0 END AS time_top,
         CASE WHEN rn > 20 AND rn <= 800 THEN tt_percent ELSE 0 END AS time_medium,
         CASE WHEN rn > 800              THEN tt_percent ELSE 0 END AS time_tail
  FROM (
    SELECT total_time / (SELECT sum(total_time) FROM pg_stat_statements) * 100 AS tt_percent, query,
    ROW_NUMBER () OVER (ORDER BY total_time DESC) AS rn
    FROM pg_stat_statements
    ORDER BY total_time DESC
  ) AS t
)
AS ts

์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋Š” ์„ธ ๊ฐœ์˜ ์—ด๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ๊ฐ ์—ด์—๋Š” ์ด ๊ทธ๋ฃน์˜ ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์˜ ๋ฐฑ๋ถ„์œจ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์š”์ฒญ ์•ˆ์—๋Š” ํ•œ ๊ทธ๋ฃน์˜ ์š”์ฒญ์„ ๋‹ค๋ฅธ ๊ทธ๋ฃน์˜ ์š”์ฒญ๊ณผ ๊ตฌ๋ถ„ํ•˜๋Š” ๋‘ ๊ฐœ์˜ ์ˆซ์ž(์ œ ๊ฒฝ์šฐ์—๋Š” 20๊ณผ 800)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ์ ํ™” ์ž‘์—…์ด ์‹œ์ž‘๋œ ์‹œ์ ๊ณผ ํ˜„์žฌ์˜ ์š”์ฒญ ๋น„์œจ์„ ๋Œ€๋žต์ ์œผ๋กœ ๋น„๊ตํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋นŒ๋”๋ฅผ ์œ„ํ•œ B2B ์„œ๋น„์Šค ์˜ˆ์‹œ๋ฅผ ํ™œ์šฉํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ ์ตœ์ ํ™”

๋‹ค์ด์–ด๊ทธ๋žจ์€ TOP ์š”์ฒญ์˜ ๋น„์œจ์ด ๊ธ‰๊ฒฉํžˆ ๊ฐ์†Œํ–ˆ์ง€๋งŒ "์ค‘๊ฐ„ ๋†๋ฏผ"์ด ์ฆ๊ฐ€ํ–ˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
์ฒ˜์Œ์— TOP ์š”์ฒญ์—๋Š” ๋…ธ๊ณจ์ ์ธ ์‹ค์ˆ˜๊ฐ€ ํฌํ•จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์†Œ์•„ ์งˆํ™˜์ด ์‚ฌ๋ผ์ง€๊ณ  TOP ์š”์ฒญ ๋น„์œจ์ด ๊ฐ์†Œํ–ˆ์œผ๋ฉฐ ์–ด๋ ค์šด ์š”์ฒญ์„ ๊ฐ€์†ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ ์  ๋” ๋งŽ์€ ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์—ฌ์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์š”์ฒญ ํ…์ŠคํŠธ๋ฅผ ์–ป์œผ๋ ค๋ฉด ๋‹ค์Œ ์š”์ฒญ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

SELECT * FROM (
  SELECT ROW_NUMBER () OVER (ORDER BY total_time DESC) AS rn, total_time / (SELECT sum(total_time) FROM pg_stat_statements) * 100 AS tt_percent, query
  FROM pg_stat_statements
  ORDER BY total_time DESC
) AS T
WHERE
rn <= 20 -- TOP
-- rn > 20 AND rn <= 800 -- MEDIUM
-- rn > 800  -- TAIL

TOP ์ฟผ๋ฆฌ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์ˆ  ๋ชฉ๋ก์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์‹œ์Šคํ…œ ์žฌ์„ค๊ณ„(์˜ˆ: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์ •๊ธฐ์ ์ธ ์ฟผ๋ฆฌ ๋Œ€์‹  ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•Œ๋ฆผ ๋…ผ๋ฆฌ ์žฌ์ž‘์—…)
  • ์ƒ‰์ธ ์ถ”๊ฐ€ ๋˜๋Š” ๋ณ€๊ฒฝ
  • ORM ์ฟผ๋ฆฌ๋ฅผ ์ˆœ์ˆ˜ SQL๋กœ ๋‹ค์‹œ ์ž‘์„ฑ
  • ์ง€์—ฐ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ๋กœ์ง ์žฌ์ž‘์„ฑ
  • ๋ฐ์ดํ„ฐ ๋น„์ •๊ทœํ™”๋ฅผ ํ†ตํ•œ ์บ์‹ฑ. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐฐ๋‹ฌ -> ์†ก์žฅ -> ์š”์ฒญ -> ์‹ ์ฒญ์ด๋ผ๋Š” ํ…Œ์ด๋ธ” ์—ฐ๊ฒฐ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐ ์ „๋‹ฌ์€ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ์š”์ฒญ์˜ ๋ชจ๋“  ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด Delivery ํ…Œ์ด๋ธ”์˜ ์š”์ฒญ์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ๋ณต์ œํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ฐธ๊ณ  ์„œ์ ์ด ํฌํ•จ๋œ ์ •์  ํ…Œ์ด๋ธ”์„ ์บ์‹ฑํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ…Œ์ด๋ธ”์„ ๊ฑฐ์˜ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋•Œ๋•Œ๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์ธ์ƒ์ ์ธ ์žฌ์„ค๊ณ„์— ๋‹ฌํ–ˆ์ง€๋งŒ ์‹œ์Šคํ…œ ๋ถ€ํ•˜์˜ 5-10%๋ฅผ ์ œ๊ณตํ–ˆ์œผ๋ฉฐ ์ •๋‹นํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋ฐฐ๊ธฐ ์žฅ์น˜๋Š” ์ ์  ๋” ์ž‘์•„์กŒ๊ณ  ์ ์  ๋” ์‹ฌ๊ฐํ•œ ์žฌ์„ค๊ณ„๊ฐ€ ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์šฐ๋ฆฌ๋Š” ๋‘ ๋ฒˆ์งธ ์š”์ฒญ ๊ทธ๋ฃน์ธ ์ค‘๋† ๊ทธ๋ฃน์— ๊ด€์‹ฌ์„ ๋Œ๋ ธ์Šต๋‹ˆ๋‹ค. ๊ทธ ์•ˆ์— ์ฟผ๋ฆฌ๊ฐ€ ๋” ๋งŽ์•„์ง€๊ณ  ๊ทธ๋ฃน ์ „์ฒด๋ฅผ ๋ถ„์„ํ•˜๋ ค๋ฉด ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆด ๊ฒƒ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋Œ€๋ถ€๋ถ„์˜ ์ฟผ๋ฆฌ๋Š” ์ตœ์ ํ™”ํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ๊ฐ„๋‹จํ•œ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์œผ๋ฉฐ ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ๋‹ค์–‘ํ•œ ๋ณ€ํ˜•์œผ๋กœ ์ˆ˜์‹ญ ๋ฒˆ ๋ฐ˜๋ณต๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ˆ˜์‹ญ ๊ฐœ์˜ ์œ ์‚ฌํ•œ ์ฟผ๋ฆฌ์— ์ ์šฉํ•œ ๋ช‡ ๊ฐ€์ง€ ์ผ๋ฐ˜์ ์ธ ์ตœ์ ํ™”์˜ ์˜ˆ์ด๋ฉฐ, ์ตœ์ ํ™”๋œ ์ฟผ๋ฆฌ์˜ ๊ฐ ๊ทธ๋ฃน์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ 3~5% ์–ธ๋กœ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค.

  • COUNT์™€ Full Table Scan์œผ๋กœ ๋ ˆ์ฝ”๋“œ ์œ ๋ฌด๋ฅผ ํ™•์ธํ•˜๋Š” ๋Œ€์‹  EXISTS๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • DISTINCT๋ฅผ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค(์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์€ ์—†์ง€๋งŒ ์š”์ฒญ ์†๋„๋ฅผ 10~100๋ฐฐ ๋†’์—ฌ ์‰ฝ๊ฒŒ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Œ).

    ์˜ˆ๋ฅผ ๋“ค์–ด, ํฐ ๋ฐฐ๋‹ฌ ํ…Œ์ด๋ธ”์—์„œ ๋ชจ๋“  ์šด์ „์ž๋ฅผ ์„ ํƒํ•˜๋Š” ์ฟผ๋ฆฌ ๋Œ€์‹ (DELIVERY)

    SELECT DISTINCT P.ID, P.FIRST_NAME, P.LAST_NAME
    FROM DELIVERY D JOIN PERSON P ON D.DRIVER_ID = P.ID
    

    ์ƒ๋Œ€์ ์œผ๋กœ ์ž‘์€ ํ…Œ์ด๋ธ” PERSON์— ๋Œ€ํ•ด ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

    SELECT P.ID, P.FIRST_NAME, P.LAST_NAME
    FROM PERSON
    WHERE EXISTS(SELECT D.ID FROM DELIVERY WHERE D.DRIVER_ID = P.ID)
    

    ์ƒ๊ด€ ํ•˜์œ„ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์†๋„๊ฐ€ 10๋ฐฐ ์ด์ƒ ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.

  • ๋งŽ์€ ๊ฒฝ์šฐ COUNT๊ฐ€ ์™„์ „ํžˆ ํ๊ธฐ๋˜์—ˆ์œผ๋ฉฐ
    ๋Œ€๋žต์ ์ธ ๊ฐ’์˜ ๊ณ„์‚ฐ์œผ๋กœ ๋Œ€์ฒด๋จ
  • ๋Œ€์‹ 
    UPPER(s) LIKE JOHN%โ€™ 
    

    ์‚ฌ์šฉ

    s ILIKE โ€œJohn%โ€
    

๊ฐ ํŠน์ • ์š”์ฒญ์˜ ์†๋„๊ฐ€ 3~1000๋ฐฐ ๋นจ๋ผ์ง€๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ธ์ƒ์ ์ธ ์„ฑ๋Šฅ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ฒ˜์Œ์—๋Š” ์™„๋ฃŒํ•˜๋Š” ๋ฐ 10ms๊ฐ€ ๊ฑธ๋ฆฌ๊ณ , 3๋ฒˆ์งธ๋กœ ๋ฌด๊ฑฐ์šด ์ฟผ๋ฆฌ ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ, ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋กœ๋“œ ์‹œ๊ฐ„์˜ XNUMX๋ถ„์˜ XNUMX%๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐ ์•„๋ฌด๋Ÿฐ ์˜๋ฏธ๊ฐ€ ์—†๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋™์ผํ•œ ์œ ํ˜•์˜ ์ฟผ๋ฆฌ ๊ทธ๋ฃน์— ๋™์ผํ•œ ๋ฐฉ๋ฒ•์„ ์ ์šฉํ•จ์œผ๋กœ์จ ์šฐ๋ฆฌ๋Š” ๋ช‡ ํผ์„ผํŠธ์˜ ์ด์ต์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜๋ฐฑ ๊ฐœ์˜ ์ฟผ๋ฆฌ๋ฅผ ๋ชจ๋‘ ์ˆ˜๋™์œผ๋กœ ๊ฒ€ํ† ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ์œ ํ˜•์˜ ์ฟผ๋ฆฌ๋ฅผ ์ฐพ๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ฐ„๋‹จํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ฟผ๋ฆฌ ๊ทธ๋ฃน์„ ์ž๋™์œผ๋กœ ๊ฒ€์ƒ‰ํ•จ์œผ๋กœ์จ ์šฐ๋ฆฌ๋Š” ์•ฝ๊ฐ„์˜ ๋…ธ๋ ฅ์œผ๋กœ๋„ ์„ฑ๋Šฅ์„ ๋”์šฑ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ ๊ฒฐ๊ณผ ์šฐ๋ฆฌ๋Š” ์ง€๊ธˆ๊นŒ์ง€ 30๋…„ ๋™์•ˆ ๋™์ผํ•œ ํ•˜๋“œ์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…ํ•ด ์™”์Šต๋‹ˆ๋‹ค. ์ผ์ผ ํ‰๊ท  ๋ถ€ํ•˜๋Š” ์•ฝ 70%์ด๋ฉฐ, ํ”ผํฌ ๋•Œ๋Š” 10%์— ์ด๋ฆ…๋‹ˆ๋‹ค. ์š”์ฒญ ๊ฑด์ˆ˜์™€ ์‚ฌ์šฉ์ž ์ˆ˜๋Š” ์•ฝ XNUMX๋ฐฐ ์ฆ๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๋ชจ๋“  ๊ฒƒ์€ ๋™์ผํ•œ TOP-MEDIUM ์š”์ฒญ ๊ทธ๋ฃน์„ ์ง€์†์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๋•๋ถ„์ž…๋‹ˆ๋‹ค. TOP ๊ทธ๋ฃน์— ์ƒˆ๋กœ์šด ์š”์ฒญ์ด ๋‚˜ํƒ€๋‚˜๋ฉด ์ฆ‰์‹œ ๋ถ„์„ํ•˜์—ฌ ์†๋„๋ฅผ ๋†’์ด๋ ค๊ณ  ๋…ธ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ ๋ถ„์„ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ผ์ฃผ์ผ์— ํ•œ ๋ฒˆ MEDIUM ๊ทธ๋ฃน์„ ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค. ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์„ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๋Š” ์ƒˆ๋กœ์šด ์ฟผ๋ฆฌ๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด ์‹ ์†ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ๋•Œ๋•Œ๋กœ ์šฐ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ์ฟผ๋ฆฌ์— ๋™์‹œ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ์˜ˆ์ธก์— ๋”ฐ๋ฅด๋ฉด ํ˜„์žฌ ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž ์ˆ˜๊ฐ€ 3~5๋ฐฐ ๋” ์ฆ๊ฐ€ํ•ด๋„ ๊ฒฌ๋”œ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ์šฐ๋ฆฌ์—๊ฒŒ๋Š” ๋˜ ํ•˜๋‚˜์˜ ๋น„๊ฒฐ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ถŒ์žฅ๋˜๋Š” ๋Œ€๋กœ ์•„์ง SELECT ์ฟผ๋ฆฌ๋ฅผ ๋ฏธ๋Ÿฌ๋กœ ์ „์†กํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” "์ค‘ํฌ"๋ฅผ ์ผœ๊ธฐ ์ „์— ๋จผ์ € "์Šค๋งˆํŠธ" ์ตœ์ ํ™”์˜ ๊ฐ€๋Šฅ์„ฑ์„ ์™„์ „ํžˆ ์†Œ์ง„ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ์˜์‹์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์™„๋ฃŒ๋œ ์ž‘์—…์„ ๋น„ํŒ์ ์œผ๋กœ ์‚ดํŽด๋ณด๋ฉด ์ˆ˜์ง ํ™•์žฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ „๋ฌธ๊ฐ€์˜ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜๋Š” ๋Œ€์‹  ๋” ๊ฐ•๋ ฅํ•œ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ž…ํ•˜์‹ญ์‹œ์˜ค. ์„œ๋ฒ„ ๋น„์šฉ์€ ๊ทธ๋ฆฌ ๋†’์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์•„์ง ์ˆ˜์ง์  ํ™•์žฅ์˜ ํ•œ๊ณ„๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์š”์ฒญ ๊ฑด์ˆ˜๋งŒ 10๋ฐฐ ์ฆ๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๋…„์ด ์ง€๋‚˜๋ฉด์„œ ์‹œ์Šคํ…œ์˜ ๊ธฐ๋Šฅ์ด ํ–ฅ์ƒ๋˜์–ด ์ด์ œ๋Š” ๋” ๋งŽ์€ ์œ ํ˜•์˜ ์š”์ฒญ์ด ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์บ์‹ฑ ๋•๋ถ„์— ๊ธฐ์กด ๊ธฐ๋Šฅ์ด ๋” ์ ์€ ์š”์ฒญ์œผ๋กœ ๋” ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์‹ค์ œ ๊ฐ€์† ๊ณ„์ˆ˜๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ์•ˆ์ „ํ•˜๊ฒŒ 5๋ฅผ ๋” ๊ณฑํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ€์žฅ ๋ณด์ˆ˜์ ์œผ๋กœ ์ถ”์ •ํ•˜๋ฉด ๊ฐ€์†๋„๊ฐ€ 50๋ฐฐ ์ด์ƒ์ด์—ˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋ฅผ ์ˆ˜์ง์œผ๋กœ ํ”๋“ค๋ฉด ๋น„์šฉ์ด 50๋ฐฐ ๋” โ€‹โ€‹๋งŽ์ด ๋“ญ๋‹ˆ๋‹ค. ํŠนํžˆ ํ•œ ๋ฒˆ ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ํ•ญ์ƒ ์ž‘๋™ํ•˜๋ฉฐ, ์ž„๋Œ€ ์„œ๋ฒ„์— ๋Œ€ํ•œ ๋น„์šฉ์ด ๋งค๋‹ฌ ์ฒญ๊ตฌ๋œ๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•˜๋ฉด ๋”์šฑ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€