Advent Calendar

์—‘์…€ ํ”ผ๋ฒ— ํ…Œ์ด๋ธ”์„ ElasticSearch์™€ Kibana๋กœ ๋งŒ๋“ค์–ด ๋ณด์ž

์•ˆ๋…•ํ•˜์„ธ์š”. ์ž‘๋…„ 8์›”์— LINE์— ํ•ฉ๋ฅ˜ํ•ด ์ฃผ๋กœ ์„œ๋ฒ„ ๊ตฌ์ถ• ๋ฐ ๊ด€๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ๋Š” Yasunori Kuji์ž…๋‹ˆ๋‹ค. Elasticsearch์™€ Kibana์˜ ์กฐํ•ฉ์€ ๋กœ๊ทธ ๋ถ„์„ํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š”๋ฐ์š”. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๊ฐ๊ฐ์˜ ํŠน์„ฑ์„ ์‚ด๋ ค ์—‘์…€ ํ”ผ๋ฒ— ํ…Œ์ด๋ธ”์˜ ๋Œ€์šฉ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์—†๋Š”์ง€ ์‹œ๋„ํ•ด ๋ณธ ๊ฒฐ๊ณผ๋ฅผ ๋ง์”€๋“œ๋ฆฌ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

MySQL performance-schema-instruments ์‚ฌ์šฉ์— ๋”ฐ๋ฅธ ์„ฑ๋Šฅ ์˜ํ–ฅ ์‹คํ—˜

์•ˆ๋…•ํ•˜์„ธ์š”. LINE์—์„œ ์ฃผ๋กœ MySQL ๊ธฐ๋ฐ˜ DB ์˜คํผ๋ ˆ์ด์…˜, ๊ฐ์ข… DB ๊ด€๋ฆฌ ํˆด, ๊ฒ€์ฆ ํˆด ๋“ฑ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋Š” Otsuka(tom__bo)์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” MySQL์˜ ์„ฑ๋Šฅ ์ •๋ณด๋ฅผ ์–ป์„ ๋•Œ ์ด์šฉํ•˜๋Š” performance_schema ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ information_schema ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ innodb_metrics ํ…Œ์ด๋ธ”์„ ๋ชจ๋‘ ํ™œ์„ฑํ™”ํ•˜๋ฉด, MySQL ์ „์ฒด ์„ฑ๋Šฅ์ด ์–ด๋Š ์ •๋„ ๋‚˜๋น ์ง€๋Š”์ง€ ์‹คํ—˜ํ•œ ๋‚ด์šฉ์„ ์†Œ๊ฐœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

SETUP_INSTRUMENTS
ALL ‘ENABLED’ COLUMN
SETUP_INSTRUMENTS
ALL ‘TIMED’ COLUMN
ALL
INNODB_METRICS
TPS ๋ชจ๋‘ DEFAULT์ผ ๋•Œ
๋Œ€๋น„ TPS ๋น„์œจ
AVERAGE
LATENCY
COMMENT
NO NO DISABLED 3506.25 1.031 2.28 performance_schema์™€ innodb_metrics์˜ ์„ค์ •์„ ๋ชจ๋‘ ๋น„ํ™œ์„ฑํ™”ํ•œ ์ƒํƒœ
NO NO DEFAULT 3496.40 1.029 2.29 performance_schema์˜ instruments๋ฅผ ๋ชจ๋‘ ๋น„ํ™œ์„ฑํ™”ํ•œ ์ƒํƒœ
DEFAULT DEFAULT DISABLED 3391.85 0.998 2.36 innodb_metrics์˜ ์„ค์ •์„ ๋ชจ๋‘ ๋น„ํ™œ์„ฑํ™”ํ•œ ์ƒํƒœ
DEFAULT DEFAULT DEFAULT 3399.32 1.00 2.35 ๋””ํดํŠธ ์„ค์ •
DEFAULT DEFAULT ENABLED 3389.69 0.997 2.36 innodb_metrics์˜ ์„ค์ •์„ ๋ชจ๋‘ ํ™œ์„ฑํ™”ํ•œ ์ƒํƒœ
YES DEFAULT DEFAULT 2906.15 0.855 2.75 performance_schema์˜ instruments๋ฅผ ๋ชจ๋‘ ํ™œ์„ฑํ™”ํ•œ ์ƒํƒœ
YES YES DEFAULT 2837.44 0.835 2.82 performance_schema์˜ instruments, TIMED๋ฅผ ๋ชจ๋‘ ํ™œ์„ฑํ™”ํ•œ ์ƒํƒœ
YES DEFAULT ENABLED 2908.34 0.856 2.75 performance_schema์™€ innodb_metrics์˜ ์„ค์ •์„ ๋ชจ๋‘ ํ™œ์„ฑํ™”ํ•œ ์ƒํƒœ
YES YES ENABLED 2825.31 0.831 2.83 performance_schema(TIMED๋„ ํ™œ์„ฑ)์™€ innodb_metrics์˜ ์„ค์ •์„ ๋ชจ๋‘ ํ™œ์„ฑํ™”ํ•œ ์ƒํƒœ

TensorFlow.js: ์›น ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๋จธ์‹ ๋Ÿฌ๋‹ ํ™œ์šฉํ•˜๊ธฐ

์•ˆ๋…•ํ•˜์„ธ์š”! LINE์—์„œ ํ”„๋ŸฐํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ๋Š” Jun์ž…๋‹ˆ๋‹ค. ์ตœ๊ทผ ํ”„๋ŸฐํŠธ์—”๋“œ ๋ถ„์•ผ๋Š” ํฅ๋ฏธ๋กœ์šด ๊ธฐ์ˆ ์ด ๊ฐ€๋“ํ•ด์„œ ์ „๋ถ€ ๋‹ค ํŒŒ์•…ํ•˜๋Š” ๊ฒŒ ํž˜๋“ค ์ •๋„์ธ๋ฐ์š”. ๊ฐœ์ธ์ ์œผ๋กœ ๊ฐ€์žฅ ๊ด€์‹ฌ์ด ๊ฐ€๋Š” ๊ฑด ๋จธ์‹ ๋Ÿฌ๋‹์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ์›น ํ”„๋ŸฐํŠธ์—”๋“œ์—์„œ ๋จธ์‹ ๋Ÿฌ๋‹ ํ™œ์šฉํ•˜๊ธฐ๋ฅผ ์ฃผ์ œ๋กœ, TensorFlow.js๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋จธ์‹ ๋Ÿฌ๋‹์„ ๊ตฌํ˜„ํ•ด ๋ณธ ๊ฒฝํ—˜์„ ๊ณต์œ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

GitHub Pull Request๊ฐ€ ์ž๋™์œผ๋กœ close๋˜๋Š” ๊ฒฝ์šฐ๋Š”?

LINE ๊ฐœ๋ฐœ ํŒ€์—์„œ ์„œ๋ฒ„ ์ชฝ ๊ฐœ๋ฐœ์„ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ๋Š” Ohara(@kory1202)์ž…๋‹ˆ๋‹ค. ์ €ํฌ ํŒ€์€ PR(Pull Request)์„ master ๋ธŒ๋žœ์น˜(branch)๋กœ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ Git์„ ์šด์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ Git์„ ์šด์˜ํ•˜๋ฉด PR์„ mergeํ–ˆ์„ ๋•Œ ๋‹ค๋ฅธ PR์ด ‘์ž๋™์œผ๋กœ close๋˜๋Š” ์ƒํ™ฉ’์ด ๋ฐœ์ƒํ•˜๊ณค ํ–ˆ๋Š”๋ฐ์š”. ์ •ํ™•ํžˆ ์–ด๋–ค ์กฐ๊ฑด์—์„œ ์ž๋™ close๋˜๋Š” ๊ฒƒ์ธ์ง€ ํ™•์‹คํžˆ ์•Œ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. GitHub Help > Closing a pull request๋ฅผ ์ฝ์–ด ๋ณด์•„๋„ ์›ํ•˜๋Š” ๋‹ต์ด ๋‚˜์˜ค์ง€ ์•Š๋”๊ตฐ์š”. ๊ทธ๋ž˜์„œ ์•„์˜ˆ ์ง์ ‘ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋ง ๊ด€๋ จ ์†Œํ”„ํŠธ์›จ์–ด ์žฅ์•  ๋Œ€์‘ ์‚ฌ๋ก€

์•ˆ๋…•ํ•˜์„ธ์š”. LINE Data Labs์—์„œ ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋กœ ์ผํ•˜๊ณ  ์žˆ๋Š” Keiji Yoshida์ž…๋‹ˆ๋‹ค. ์ €๋Š” ์ด๋ฒˆ ๊ธ€์—์„œ ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋ง ๊ด€๋ จ ์†Œํ”„ํŠธ์›จ์–ด ์žฅ์•  ๋Œ€์‘ ์‚ฌ๋ก€๋ฅผ ๋ช‡ ๊ฐ€์ง€ ์†Œ๊ฐœํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

LIFF(LINE Front-end Framework)์—์„œ TIC-80์„ ์ž‘๋™์‹œ์ผœ๋ณด์ž

์•ˆ๋…•ํ•˜์„ธ์š”. LINE Fukuoka์—์„œ LINE ๋ฉ”์‹ ์ € ์•ฑ ๊ฐœ๋ฐœ์„ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ ์—”์ง€๋‹ˆ์–ด Seisuke์ž…๋‹ˆ๋‹ค. ์ง€๋‚œ๋‹ฌ(2018๋…„ 11์›”)์— ์—ด๋ฆฐ ์‚ฌ๋‚ด ํ•ด์ปคํ†ค์—์„œ Fantasy Console์ด๋ผ๋Š” ๋‹ค์†Œ ๋‚ฏ์„  ์žฅ๋ฅด์˜ ์ œํ’ˆ์ธ ‘TIC-80’์„ LIFF์—์„œ ์ž‘๋™์‹œ์ผœ ๋ณด์•˜๋Š”๋ฐ์š”. ์—ฌ๊ธฐ์„œ ์–ป์€ ์ง€์‹์„ ํ˜ผ์ž ์•Œ๊ณ  ์žˆ๊ธฐ๋Š” ์•„๊นŒ์›Œ ๋ธ”๋กœ๊ทธ๋ฅผ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

LTO(Linear Tape-Open) ๋“œ๋ผ์ด๋ธŒ

์•ˆ๋…•ํ•˜์„ธ์š”. LINE ์•ฑ์˜ ์•ˆ๋“œ๋กœ์ด๋“œ ํด๋ผ์ด์–ธํŠธ ๊ฐœ๋ฐœ์„ ๋งก๊ณ  ์žˆ๋Š” Tamaki(@r_ralph_h)์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ผ๋ฐ˜ ์†Œ๋น„์ž์šฉ์œผ๋กœ๋Š” ์กฐ๊ธˆ ์ƒ์†Œํ•œ ‘LTO ๋“œ๋ผ์ด๋ธŒ’๋ฅผ ์‹ค์ œ ์‚ฌ์šฉํ•ด ๋ณธ ์†Œ๊ฐ์„ ์ „ํ•ด ๋“œ๋ฆด๊นŒ ํ•ฉ๋‹ˆ๋‹ค. LTO ๋“œ๋ผ์ด๋ธŒ๋ž€? LTO์˜ ์ •์‹ ๋ช…์นญ์€ ‘Linear Tape-Open’์œผ๋กœ, ์ž๊ธฐ(็ฃๆฐฃ) ํ…Œ์ดํ”„ ๋ฏธ๋””์–ด์˜ ์ผ์ข…์ž…๋‹ˆ๋‹ค. ์ž˜ ์•Œ๋ ค์ง„ ์ž๊ธฐ ํ…Œ์ดํ”„ ๋ฏธ๋””์–ด๋กœ๋Š” ์˜ค๋””์˜ค ์นด์„ธํŠธ ํ…Œ์ดํ”„๋‚˜ VHS(video home system), 8mm ๋น„๋””์˜ค ํ…Œ์ดํ”„ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ดํ”„ ๋ฏธ๋””์–ด๋Š” ๋ฏธ๋””์–ด ์šฉ๋Ÿ‰์— […]

Atomic ์ฒ˜๋ฆฌ์™€ cache stampede ๋Œ€์ฑ…์„ ์œ„ํ•ด Redis Lua script๋ฅผ ํ™œ์šฉํ•œ ์ด์•ผ๊ธฐ

์•ˆ๋…•ํ•˜์„ธ์š”? LINE์—์„œ ๊ฒŒ์ž„ ํ”Œ๋žซํผ ๊ฐœ๋ฐœ์„ ๋งก๊ณ  ์žˆ๋Š” Kagaya์ž…๋‹ˆ๋‹ค. ์‹ ์ž… ์‚ฌ์› 1๋…„์ฐจ์˜€๋˜ 2016๋…„์— ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค์šฉ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๋„๊ตฌ Lazybones๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด๋‹ˆ(์ผ๋ณธ์–ด ๊ธ€)๋ฅผ ํฌ์ŠคํŒ…ํ•œ ๋ฐ ์ด์–ด ํ•œ๋ฒˆ ๋” ๊ธฐ๊ณ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๊ฐ‘์Šต๋‹ˆ๋‹ค. Redis์™€ LINE GAME Platform LINE GAME Platform์€ ์ฃผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ•˜๋‚˜๋กœ ์ธ๋ฉ”๋ชจ๋ฆฌ(in-memory) NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ธ Redis๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ์ฃผ๋กœ ์บ์‹œ๋กœ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผํ…Œ๋ฉด LINE์ด๋‚˜ Facebook ๋“ฑ์˜ ๊ณ„์ •์œผ๋กœ ์ธ์ฆํ•˜๋Š” […]

LINE LIVE ์„œ๋น„์Šค์˜ ์ธ์ฝ”๋” ๋ ˆ์ด์–ด ๊ตฌ์กฐ

์•ˆ๋…•ํ•˜์„ธ์š”, LINE์—์„œ ๊ธ€๋กœ๋ฒŒ ์ธํ”„๋ผ ์‹œ์Šคํ…œ์„ ์šด์˜ํ•˜๋Š” ์กฐ์ง์—์„œ ๊ฐœ๋ฐœ์ž๋กœ ์ผํ•˜๊ณ  ์žˆ๋Š” ๊น€์ˆ˜ํ˜์ž…๋‹ˆ๋‹ค. 2017๋…„ 12์›” 10์ผ์€ LINE LIVE ์„œ๋น„์Šค๊ฐ€ ๊ณต๊ฐœ๋œ ์ง€ 2๋…„์ด ๋˜๋Š” ๋‚ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค ์ถœ์‹œ ํ›„ ์ˆ˜๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์˜ ๋…ธ๋ ฅ์œผ๋กœ ์ง€๊ธˆ๊นŒ์ง€ ํฐ ์žฅ์• ์—†์ด ์›ํ™œํ•˜๊ฒŒ ์šด์˜๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๋ธ”๋กœ๊ทธ์—์„œ๋Š”, ๋ผ์ด๋ธŒ ๋ฏธ๋””์–ด ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๊ฑฐ๋‚˜ ์šด์˜ํ•ด ๋ณธ ๊ฒฝํ—˜์ด ์—†๋Š” ์ƒํƒœ์—์„œ ์ดˆ๊ธฐ ์„ค๊ณ„์™€ ๊ตฌ์ถ•์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๊ฐœ์ธ์ ์œผ๋กœ ๊ณ ๋ฏผํ–ˆ๋˜ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

Code splitting์„ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“  grow-loader

์•ˆ๋…•ํ•˜์„ธ์š”, ์ €๋Š” LINE MANGAํŒ€์˜ ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ์ž, @sunderls์ž…๋‹ˆ๋‹ค. ์ผ๋ณธ์—์„œ๋Š” LINE์œผ๋กœ ๋งŒํ™”๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ, ์•Œ๊ณ  ๊ณ„์…จ๋‚˜์š”? ํ˜น์‹œ ์—ฌ๋Ÿฌ๋ถ„์€ LINE MANGA1) ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•ด ๋ณด์…จ๋‚˜์š”? ์˜ˆ์ „์— ๋ธ”๋กœ๊ทธ๋ฅผ ํ†ตํ•ด์„œ๋„ ๋‚˜๋ˆ„์—ˆ๋“ฏ์ด(LINE MANGA: Page Stack์„ ์ด์šฉํ•ด์„œ ํŽ˜์ด์ง€ ์ „ํ™˜ ์ฒ˜๋ฆฌํ•˜๊ธฐ), LINE MANGA๋Š” ์›น ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„œ๋น„์Šค๋Š” LINE ์•ฑ ์•ˆ์—์„œ ๊ตฌ๋™๋˜๋Š” ์„œ๋น„์Šค์ด๊ธฐ ๋•Œ๋ฌธ์—, LINE ์•ฑ์„ ์ด์šฉํ•  ๋•Œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํŽธ์•ˆํ•˜๊ณ  ๋งค๋„๋Ÿฌ์šด UX๋ฅผ ์ œ๊ณตํ•˜๊ณ ์ž ์ €ํฌ๋Š” ๋งŽ์€ ๋…ธ๋ ฅ์„ ์Ÿ์•˜์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๊ณ ์ž code-splitting์„ ๋„์ž…ํ•˜์˜€๋Š”๋ฐ, ์ด ๊ธ€์„ ํ†ตํ•ด code-splitting์„ ์†์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ๋ฐœํ•œ, LINE์˜ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์ธ grow-loader๋ฅผ ์—ฌ๋Ÿฌ๋ถ„๊ป˜ ์†Œ๊ฐœํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.