OpenSource

2020๋…„ ํ•œ ํ•ด ๋™์•ˆ ๋ฐฉ๊ตฌ์„์—์„œ ์˜จ๋ผ์ธ ์˜คํ”ˆ์†Œ์Šค ์ปจํผ๋Ÿฐ์Šค์— ์ฐธ๊ฐ€ํ•œ ํ›„๊ธฐ

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

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

Mono-repo, Multi-project๋ฅผ Gradle ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์†์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•˜๊ธฐ

์•ˆ๋…•ํ•˜์„ธ์š”. ๊ตฌ๊ฒฝ์ผ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ ์  ๊ฑฐ๋Œ€ํ•ด์ ธ๊ฐ€๋Š” ์ฝ”๋“œ ๋ฒ ์ด์Šค๋ฅผ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Armeria๋กœ Reactive Streams์™€ ๋†€์ž! – 2

์•ˆ๋…•ํ•˜์„ธ์š”. LINE+์—์„œ ์˜คํ”ˆ์†Œ์Šค Armeria์™€ Central Dogma๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋Š” ์—„์ตํ›ˆ์ž…๋‹ˆ๋‹ค. ์ง€๋‚œ ํฌ์ŠคํŒ…์—์„  Reactive Streams์˜ ๊ฐœ๋…์„ ์‚ดํŽด๋ณด์•˜๋Š”๋ฐ์š”. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„  Reactive Streams๋ฅผ ์˜คํ”ˆ ์†Œ์Šค ๋น„๋™๊ธฐ HTTP/2, RPC, REST ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ Armeria์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ณต์œ ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

Armeria๋กœ Reactive Streams์™€ ๋†€์ž! – 1

LINE+์—์„œ ์˜คํ”ˆ์†Œ์Šค Armeria์™€ Central Dogma๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋Š” ์—„์ตํ›ˆ์ž…๋‹ˆ๋‹ค. ์ €๋Š” Reactive Streams์˜ ๊ฐœ๋…๊ณผ, Reactive Streams๋ฅผ ์˜คํ”ˆ ์†Œ์Šค ๋น„๋™๊ธฐ HTTP/2, RPC, REST ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ Armeria์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ณต์œ ํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ์š”. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„  ๋จผ์ € Reactive Streams์˜ ๊ฐœ๋…์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

GitHub Contributions ๊ทธ๋ž˜ํ”„๋ฅผ ํ‘ธ๋ฆ‡ํ‘ธ๋ฆ‡ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด๋ณด์•„์š”(feat. Armeria Sprint)

์•ˆ๋…•ํ•˜์„ธ์š”. ํ˜น์‹œ ๋…์ž๋ถ„๋“ค ์ค‘์—์„œ GitHub contribution graph์— ๊ฐ€๋ญ„์ด ์˜จ ๋ถ„๋“ค์ด ๊ณ„์‹ ๊ฐ€์š”? ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๊ฐ€๋ญ„์„ ๋ฌผ๋Ÿฌ๊ฐ€๊ฒŒ ํ•  Armeria Sprint ํ–‰์‚ฌ๋ฅผ ์†Œ๊ฐœํ•˜๊ณ  ๊ทธ ํ›„๊ธฐ๋ฅผ ๊ณต์œ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์˜คํ”ˆ์†Œ์Šค Armeria์˜ ๊ธฐ์—ฌ์ž๋ฅผ ์œ„ํ•œ ์ด๋ฒคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค

์•ˆ๋…•ํ•˜์„ธ์š”. LINE์—์„œ ์˜คํ”ˆ์†Œ์Šค๋ฅผ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ๋Š” ์ด์„œ์—ฐ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” LINE์—์„œ ์ด๋ฒˆ์— ์ฒ˜์Œ ์‹œํ–‰ํ•œ ์ด๋ฒคํŠธ์ธ ‘Armeria contributor reward’๋ฅผ ์†Œ๊ฐœํ•˜๊ณ  ๊ทธ ํ›„๊ธฐ๋ฅผ ๊ณต์œ ๋“œ๋ฆฌ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

Promgen์€ ์•Œ๋ฆผ์„ ์–ด๋–ป๊ฒŒ ์ „๋‹ฌํ• ๊นŒ์š”?

์•ˆ๋…•ํ•˜์„ธ์š”, Paul Traylor์ž…๋‹ˆ๋‹ค. ์ €๋Š” ํ˜„์žฌ LINE Fukuoka ๊ฐœ๋ฐœํŒ€์—์„œ LINE ๊ณ„์—ด์˜ ์•ฑ์ด ์‚ฌ์šฉํ•˜๋Š” ์ˆ˜๋งŽ์€ ์„œ๋ฒ„๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๋„๊ตฌ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ๊ธฐ์ˆ  ์ง€์›ํ•˜๋Š” ์—…๋ฌด๋ฅผ ๋งก๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ ์ฃผ ์—…๋ฌด ์ค‘ ํ•˜๋‚˜๋Š” Promgen์„ ๊ด€๋ฆฌํ•˜๋Š” ์ผ์ž…๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ Promgen์€ Prometheus๊ฐ€ ๊ด€๋ จ๋œ ํŒ€์—๊ฒŒ ์•Œ๋ฆผ์„ ์ œ๋Œ€๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ด€๋ฆฌํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ Promgen์ด ์•Œ๋ฆผ์„ ์–ด๋–ป๊ฒŒ ์ „๋‹ฌํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ๋‹ค๋ค„๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

Java์™€ Armeria๋กœ ๊ธฐ๋ณธ์ ์ธ ์›น ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ

์•ˆ๋…•ํ•˜์„ธ์š”. LINE Developer Relations ํŒ€์˜ Developer Advocate ์œค์ธ์„ฑ์ž…๋‹ˆ๋‹ค. LINE์€ Armeria, Central Dogma ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ์˜คํ”ˆ์†Œ์Šค๋ฅผ ์ฃผ๋„์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋Š˜์€ Armeria์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ณ , Armeria๋ฅผ ์‚ฌ์šฉํ•ด ๊ธฐ๋ณธ์ ์ธ ์›น ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•ด๋ณด๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์€ Java์™€ IntelliJ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ „์ œ๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

LINE ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœํŒ€์˜ OSS ํ™œ๋™ ์ด‰์ง„ ํ–‰์‚ฌ, ‘Letโ€™s Contribute OSS!’

์•ˆ๋…•ํ•˜์„ธ์š”? Frontend StandardizationํŒ€์˜ Kawasako์ž…๋‹ˆ๋‹ค. ์ €ํฌ ํŒ€์€ LINE ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ์กฐ์ง์˜ ์—ฌ๋Ÿฌ ์ œํ’ˆ ๊ฐœ๋ฐœ์— ๊ณตํ†ต์œผ๋กœ ํ•„์š”ํ•œ ๋„๊ตฌ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ฑฐ๋‚˜, ๊ฐœ๋ฐœ์ž๊ฐ„ ์ •๋ณด ๊ต๋ฅ˜ ๋ฐ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์ด ๋”์šฑ ์›ํ™œํžˆ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์–‘ํ•œ ๊ธฐํš์„ ๋‹ด๋‹นํ•˜๋Š” ๋ถ€์„œ์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ์ €ํฌ์˜ ์—…๋ฌด๋„ ์†Œ๊ฐœํ•  ๊ฒธ, ์–ผ๋งˆ ์ „ ์—ด๋ฆฐ ์‚ฌ๋‚ด ์›Œํฌ์ˆ์— ๋Œ€ํ•ด ์ „ํ•ด๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

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๋ฅผ ์—ฌ๋Ÿฌ๋ถ„๊ป˜ ์†Œ๊ฐœํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.