Hackathon DevDays'19(2๋ถ€): IntelliJ IDEA์˜ ํ…”๋ ˆ๊ทธ๋žจ ๋ฐ ๋ฌธ๋ฒ• ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•œ ์˜ค๋””์˜ค ๋ฉ”์‹œ์ง€ ํŒŒ์„œ

์„์‚ฌ๊ณผ์ • ํ•™์ƒ๋“ค์ด ์ฐธ์—ฌํ•œ ๋ด„ ํ•ด์ปคํ†ค DevDays ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ๊ณ„์†ํ•ด์„œ ์ด์•ผ๊ธฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. "์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ / ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง".

Hackathon DevDays'19(2๋ถ€): IntelliJ IDEA์˜ ํ…”๋ ˆ๊ทธ๋žจ ๋ฐ ๋ฌธ๋ฒ• ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•œ ์˜ค๋””์˜ค ๋ฉ”์‹œ์ง€ ํŒŒ์„œ

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ์šฐ๋ฆฌ๋Š” ๋…์ž๋“ค์˜ ์ฐธ์—ฌ๋ฅผ ์ดˆ๋Œ€ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค VK ์„์‚ฌ ํ•™์ƒ ๊ทธ๋ฃน. ์—ฌ๊ธฐ์—๋Š” ์ฑ„์šฉ ๋ฐ ํ•™์Šต์— ๊ด€ํ•œ ์ตœ์‹  ๋‰ด์Šค๊ฐ€ ๊ฒŒ์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฃน ์˜คํ”ˆ์ผ์˜ ์˜์ƒ๋„ ๊ทธ๋ฃน์—์„œ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•Œ๋ฆผ: ์ด๋ฒคํŠธ๋Š” 29์›” XNUMX์ผ์— ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. ์˜จ๋ผ์ธ์œผ๋กœ.

ํ…”๋ ˆ๊ทธ๋žจ ๋ฐ์Šคํฌํƒ‘ ์Œ์„ฑ ๋ฉ”์‹œ์ง€ ํŒŒ์„œ

Hackathon DevDays'19(2๋ถ€): IntelliJ IDEA์˜ ํ…”๋ ˆ๊ทธ๋žจ ๋ฐ ๋ฌธ๋ฒ• ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•œ ์˜ค๋””์˜ค ๋ฉ”์‹œ์ง€ ํŒŒ์„œ

์•„์ด๋””์–ด ์ž‘์„ฑ์ž
์ฝ”๋กœ์…ฐํ”„ ์•„๋ฅดํ…œ

๋ช…๋ น ๊ตฌ์กฐ

Khoroshev Artem โ€“ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ์ž/๊ฐœ๋ฐœ์ž/QA
Eliseev Anton โ€“ ๋น„์ฆˆ๋‹ˆ์Šค ๋ถ„์„๊ฐ€/๋งˆ์ผ€ํŒ… ์ „๋ฌธ๊ฐ€
Maria Kuklina โ€“ UI ๋””์ž์ด๋„ˆ/๊ฐœ๋ฐœ์ž
Bakhvalov Pavel โ€“ UI ๋””์ž์ด๋„ˆ/๊ฐœ๋ฐœ์ž/QA

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

DevDays ํ”„๋กœ์ ํŠธ์˜ ๋ชฉํ‘œ๋Š” ์ˆ˜์‹ ๋œ ์Œ์„ฑ ๋ฉ”์‹œ์ง€๋ฅผ ํ…์ŠคํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์„ Telegram ๋ฐ์Šคํฌํ†ฑ ํด๋ผ์ด์–ธํŠธ(์ดํ•˜ Telegram Desktop)์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋ชจ๋“  ์•„๋‚ ๋กœ๊ทธ๋Š” ์˜ค๋””์˜ค ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ  ์ด์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ํ…์ŠคํŠธ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๋ด‡์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด์— ๋ณ„๋กœ ๋งŒ์กฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€๋ฅผ ๋ด‡์— ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋ฆฌ ํŽธ๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์„ ๊ฐ–๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ชจ๋“  ๋ด‡์€ ์Œ์„ฑ ์ธ์‹ API์™€ ์‚ฌ์šฉ์ž ์‚ฌ์ด์˜ ์ค‘๊ฐœ์ž ์—ญํ• ์„ ํ•˜๋Š” ์ œXNUMX์ž์ด๋ฏ€๋กœ ์ตœ์†Œํ•œ ์•ˆ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์•ž์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด Telegram-desktop์—๋Š” ์ž‘์—… ์šฉ์ด์„ฑ๊ณผ ์†๋„๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ ์ „์ ์œผ๋กœ C++๋กœ ์ž‘์„ฑ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์šฐ์—ฐ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ํด๋ผ์ด์–ธํŠธ์— ์ง์ ‘ ์ถ”๊ฐ€ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— C++๋กœ ๊ฐœ๋ฐœํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

Hackathon DevDays'19(2๋ถ€): IntelliJ IDEA์˜ ํ…”๋ ˆ๊ทธ๋žจ ๋ฐ ๋ฌธ๋ฒ• ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•œ ์˜ค๋””์˜ค ๋ฉ”์‹œ์ง€ ํŒŒ์„œ์šฐ๋ฆฌ ํŒ€์—๋Š” 4 ๋ช…์ด์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๋‘ ์‚ฌ๋žŒ์ด ์Œ์„ฑ ์ธ์‹์— ์ ํ•ฉํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐพ๊ณ  ์žˆ์—ˆ๊ณ , ํ•œ ์‚ฌ๋žŒ์€ Telegram-desktop์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์—ฐ๊ตฌํ•˜๊ณ  ์žˆ์—ˆ๊ณ , ๋‹ค๋ฅธ ํ•œ ์‚ฌ๋žŒ์€ ๋นŒ๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐฐํฌํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์Šคํฌํ†ฑ ์ „๋ณด. ๋‚˜์ค‘์—๋Š” ๋ชจ๋‘๊ฐ€ UI๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•˜๋Š๋ผ ๋ฐ”๋นด์Šต๋‹ˆ๋‹ค.

์˜๋„ํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ต์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์•˜์ง€๋งŒ ๋Š˜ ๊ทธ๋ ‡๋“ฏ์ด ์–ด๋ ค์›€์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

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

์Œ์„ฑ ์ธ์‹์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ ํƒํ•  ๋•Œ ์–ธ์–ด ๋ชจ๋ธ์ด ๋งŽ์€ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฆ‰์‹œ ๋ชจ๋“  ์˜คํ”„๋ผ์ธ API๋ฅผ ํฌ๊ธฐํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ๋‹จ ํ•˜๋‚˜์˜ ์–ธ์–ด์— ๋Œ€ํ•ด์„œ๋งŒ ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜จ๋ผ์ธ API๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์— Google, Yandex ๋ฐ Microsoft์™€ ๊ฐ™์€ ๊ฑฐ๋Œ€ ๊ธฐ์—…์˜ ์Œ์„ฑ ์ธ์‹ ์„œ๋น„์Šค๋Š” ์ „ํ˜€ ๋ฌด๋ฃŒ๊ฐ€ ์•„๋‹ˆ๋ฉฐ ํ‰๊ฐ€ํŒ ๊ธฐ๊ฐ„์— ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ XNUMX๋…„ ๋™์•ˆ ์ง€์†๋˜๋Š” ์„œ๋น„์Šค ์‚ฌ์šฉ์„ ์œ„ํ•œ ํ† ํฐ์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” Google Speech-To-Text๊ฐ€ ์„ ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์ง๋ฉดํ•œ ๋‘ ๋ฒˆ์งธ ๋ฌธ์ œ๋Š” ์ค‘์•™ ์ง‘์ค‘์‹ ์ €์žฅ์†Œ๊ฐ€ ์—†๋Š” ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋™๋ฌผ์›์ธ C++์˜ ์ผ๋ถ€ ๋‹จ์ ๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Telegram Desktop์€ ๋‹ค๋ฅธ ๋งŽ์€ ๋ฒ„์ „๋ณ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜์กดํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๊ณต์‹ ์ €์žฅ์†Œ์—๋Š” ๊ต์ˆ˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์กฐ๋ฆฝํ•˜๊ธฐ ์œ„ํ•ด. ๋˜ํ•œ ๋นŒ๋“œ ๋ฌธ์ œ์— ๊ด€ํ•œ ์ˆ˜๋งŽ์€ ๋ฏธํ•ด๊ฒฐ ๋ฌธ์ œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์‹œ๊ฐ„ ะธ ะดะฒะฐ. ๋ชจ๋“  ๋ฌธ์ œ๋Š” ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ Ubuntu 14.04์šฉ์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค๊ณผ ๊ด€๋ จ๋œ ๊ฒƒ์œผ๋กœ ๋ฐํ˜€์กŒ์œผ๋ฉฐ Ubuntu 18.04์—์„œ ํ…”๋ ˆ๊ทธ๋žจ์„ ์„ฑ๊ณต์ ์œผ๋กœ ๋นŒ๋“œํ•˜๋ ค๋ฉด ๋ณ€๊ฒฝ์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.

Telegram Desktop ์ž์ฒด๋Š” ์กฐ๋ฆฝํ•˜๋Š” ๋ฐ ๊ฝค ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. Intel Core i5-7200U๊ฐ€ ํƒ‘์žฌ๋œ ๋…ธํŠธ๋ถ์—์„œ๋Š” ๋ชจ๋“  ์ข…์†์„ฑ์„ ํฌํ•จํ•œ ์ „์ฒด ์กฐ๋ฆฝ(ํ”Œ๋ž˜๊ทธ -j 4)์ด ์•ฝ 30์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ์ด ์ค‘ ํด๋ผ์ด์–ธํŠธ ์ž์ฒด๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐ ์•ฝ 10๋ถ„ ์ •๋„๊ฐ€ ์†Œ์š”๋˜์ง€๋งŒ(๋‚˜์ค‘์— Debug ๊ตฌ์„ฑ์—์„œ๋Š” ์—ฐ๊ฒฐ์— ์•ฝ XNUMX๋ถ„ ์ •๋„ ์†Œ์š”๋œ ๊ฒƒ์œผ๋กœ ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค), ๋ณ€๊ฒฝ ํ›„ ๋งค๋ฒˆ ์—ฐ๊ฒฐ ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

์ €์žฅ์†Œ.

์šฐ๋ฆฌ์˜ ์˜๊ฒฌ์œผ๋กœ๋Š” ์ด๋Š” ๋งŽ์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ํŽธ๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ข‹์€ ๊ฐœ๋… ์ฆ๋ช…์œผ๋กœ ํŒ๋ช…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Telegram Desktop์˜ ํ–ฅํ›„ ๋ฆด๋ฆฌ์Šค์—์„œ ์ด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

IntelliJ IDEA์˜ ํ–ฅ์ƒ๋œ ์ž์—ฐ์–ด ์ง€์›

Hackathon DevDays'19(2๋ถ€): IntelliJ IDEA์˜ ํ…”๋ ˆ๊ทธ๋žจ ๋ฐ ๋ฌธ๋ฒ• ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•œ ์˜ค๋””์˜ค ๋ฉ”์‹œ์ง€ ํŒŒ์„œ

์•„์ด๋””์–ด ์ž‘์„ฑ์ž

ํƒ„์ฝ”ํ”„ ๋ธ”๋ผ๋””์Šฌ๋ผํ”„

๋ช…๋ น ๊ตฌ์กฐ

Tankov Vladislav(ํŒ€์žฅ, LanguageTool ๋ฐ IntelliJ IDEA ์ž‘์—…)
Nikita Sokolov(LanguageTool ์ž‘์—… ๋ฐ UI ์ƒ์„ฑ)
Khvorov Alexander(LanguageTool ์ž‘์—… ๋ฐ ์„ฑ๋Šฅ ์ตœ์ ํ™”)
Sadovnikov Alexander(๋งˆํฌ์—… ์–ธ์–ด ๋ฐ ์ฝ”๋“œ ๊ตฌ๋ฌธ ๋ถ„์„ ์ง€์›)

์šฐ๋ฆฌ๋Š” ๋‹ค์–‘ํ•œ ํ…์ŠคํŠธ(์ฃผ์„ ๋ฐ ๋ฌธ์„œ, ์ฝ”๋“œ์˜ ๋ฆฌํ„ฐ๋Ÿด ์ค„, Markdown ๋˜๋Š” XML ๋งˆํฌ์—… ํ˜•์‹์˜ ํ…์ŠคํŠธ)์˜ ๋ฌธ๋ฒ•, ์ฒ ์ž ๋ฐ ๋ฌธ์ฒด ์ •ํ™•์„ฑ(์˜์–ด์—์„œ๋Š” ๊ต์ •์ด๋ผ๊ณ  ํ•จ)์„ ๊ฒ€์‚ฌํ•˜๋Š” IntelliJ IDEA์šฉ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ์˜ ์•„์ด๋””์–ด๋Š” ํ‘œ์ค€ ๋งž์ถค๋ฒ• ๊ฒ€์‚ฌ IntelliJ IDEA๋ฅผ Grammarly ๊ทœ๋ชจ๋กœ ํ™•์žฅํ•˜์—ฌ IDE ๋‚ด๋ถ€์— ์ผ์ข…์˜ Grammarly๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚ฌ๋Š”์ง€ ๋ณผ ์ˆ˜ ์žˆ์–ด์š” ๋งํฌ.

์ž, ์•„๋ž˜์—์„œ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๊ธฐ๋Šฅ๊ณผ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ƒ์„ฑ ์ค‘์— ๋ฐœ์ƒํ•œ ์–ด๋ ค์›€์— ๋Œ€ํ•ด ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ž๊ทน

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

๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๊ณ  ๊ฐœ๋ฐœ๋œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์ค‘ ํ•˜๋‚˜๋Š” IntelliJ IDEA์™€ IntelliJ ํ”Œ๋žซํผ ๊ธฐ๋ฐ˜ IDE์ž…๋‹ˆ๋‹ค. IntelliJ ํ”Œ๋žซํผ์—๋Š” ์ด๋ฏธ ๋งž์ถค๋ฒ• ๊ฒ€์‚ฌ๊ธฐ๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ์ง€๋งŒ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๋„ ์ œ๊ฑฐํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์ž์—ฐ์–ด ๋ถ„์„ ์‹œ์Šคํ…œ ์ค‘ ํ•˜๋‚˜๋ฅผ IntelliJ IDEA์— ํ†ตํ•ฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

ะ ะตะฐะปะธะทะฐั†ะธั

Hackathon DevDays'19(2๋ถ€): IntelliJ IDEA์˜ ํ…”๋ ˆ๊ทธ๋žจ ๋ฐ ๋ฌธ๋ฒ• ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•œ ์˜ค๋””์˜ค ๋ฉ”์‹œ์ง€ ํŒŒ์„œ์šฐ๋ฆฌ๋Š” ์ž์ฒด ํ…์ŠคํŠธ ํ™•์ธ ์‹œ์Šคํ…œ์„ ๋งŒ๋“œ๋Š” ์ž‘์—…์„ ์Šค์Šค๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์˜ต์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์–ธ์–ด ๋„๊ตฌ. ๋ผ์ด์„ผ์Šค๋ฅผ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ๋ชฉ์ ์— ๋งž๊ฒŒ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ผ์ด์„ผ์Šค๋Š” ๋ฌด๋ฃŒ์ด๊ณ  Java๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ ์˜คํ”ˆ ์†Œ์Šค์ž…๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ 25๊ฐœ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๋ฉฐ XNUMX๋…„ ๋„˜๊ฒŒ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•ด์™”๋‹ค. ๊ฐœ๋ฐฉ์„ฑ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  LanguageTool์€ ์œ ๋ฃŒ ํ…์ŠคํŠธ ํ™•์ธ ์†”๋ฃจ์…˜์— ๋Œ€ํ•œ ์‹ฌ๊ฐํ•œ ๊ฒฝ์Ÿ์ž์ด๋ฉฐ ๋กœ์ปฌ์—์„œ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๋ง ๊ทธ๋Œ€๋กœ ์–ธ์–ด ๋„๊ตฌ์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. GitHub์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ. ์ „์ฒด ํ”„๋กœ์ ํŠธ๋Š” UI์šฉ Java๋ฅผ ์•ฝ๊ฐ„ ์ถ”๊ฐ€ํ•˜์—ฌ Kotlin์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•ด์ปคํ†ค ๋™์•ˆ ์šฐ๋ฆฌ๋Š” Markdown, JavaDoc, HTML ๋ฐ ์ผ๋ฐ˜ ํ…์ŠคํŠธ์— ๋Œ€ํ•œ ์ง€์›์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•ด์ปคํ†ค ์ดํ›„ ์ฃผ์š” ์—…๋ฐ์ดํŠธ์—๋Š” XML, Java, Kotlin ๋ฐ Python์˜ ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด, ๋งž์ถค๋ฒ• ๊ฒ€์‚ฌ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚œ์ด๋„

์šฐ๋ฆฌ๋Š” ๋งค๋ฒˆ ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•ด ๋ชจ๋“  ํ…์ŠคํŠธ๋ฅผ LanguageTool์— ๊ณต๊ธ‰ํ•˜๋ฉด ๊ฒ€์‚ฌ ์ž์ฒด๊ฐ€ UI ํ๋ฆ„์„ ์ฐจ๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์— IDEA ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋‹ค์†Œ ์‹ฌ๊ฐํ•œ ํ…์ŠคํŠธ์—์„œ ์ •์ง€๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•„์ฃผ ๋นจ๋ฆฌ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” `ProgressManager.checkCancelled` ๊ฒ€์‚ฌ๋ฅผ ํ†ตํ•ด ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. IDEA๊ฐ€ ๊ฒ€์‚ฌ๋ฅผ ์ค‘๋‹จํ•  ์‹œ๊ฐ„์ด๋ผ๊ณ  ํŒ๋‹จํ•˜๋ฉด ์ด ํ•จ์ˆ˜๋Š” ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

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

LanguageTool์€ 25๊ฐœ ์ด์ƒ์˜ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜์ง€๋งŒ ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ชจ๋“  ์–ธ์–ด๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค. ์š”์ฒญ ์‹œ(UI์—์„œ ์„ ํƒํ•œ ๊ฒฝ์šฐ) ํŠน์ • ์–ธ์–ด์— ๋Œ€ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๊ธฐ๋„ ํ–ˆ์ง€๋งŒ ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ๋ณ„๋„์˜ ํด๋ž˜์Šค๋กœ๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ์–ธ์–ด ์„ธํŠธ๋กœ LanguageTool์„ ๋กœ๋“œํ•œ ๋‹ค์Œ ์กฐ์‹ฌ์Šค๋Ÿฝ๊ฒŒ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋™์‹œ์— ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž .m2 ์ €์žฅ์†Œ์— ์žˆ์—ˆ๊ณ  ์‹œ์ž‘ํ•  ๋•Œ๋งˆ๋‹ค ๋ฌด๊ฒฐ์„ฑ์„ ํ™•์ธํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ”Œ๋Ÿฌ๊ทธ์ธ ํฌ๊ธฐ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์—ฌ๋Ÿฌ ์–ธ์–ด์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ œ๊ณตํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•ด์ปคํ†ค ์ดํ›„

ํ•ด์ปคํ†ค์€ ์ข…๋ฃŒ๋˜์—ˆ์ง€๋งŒ ์†Œ๊ทœ๋ชจ ํŒ€์„ ๋Œ€์ƒ์œผ๋กœ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ž‘์—…์ด ๊ณ„์†๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๋ฌธ์ž์—ด, ์ฃผ์„, ์‹ฌ์ง€์–ด ๋ณ€์ˆ˜ ๋ฐ ํด๋ž˜์Šค ์ด๋ฆ„๊ณผ ๊ฐ™์€ ์–ธ์–ด ๊ตฌ์„ฑ๋„ ์ง€์›ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ด๋Š” Java, Kotlin, Python์—์„œ๋งŒ ์ง€์›๋˜์ง€๋งŒ ์ด ๋ชฉ๋ก์ด ๋” ๋งŽ์•„์ง€๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋งŽ์€ ์ž‘์€ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ–ˆ์œผ๋ฉฐ Idea์— ๋‚ด์žฅ๋œ ๋งž์ถค๋ฒ• ๊ฒ€์‚ฌ๊ธฐ์™€์˜ ํ˜ธํ™˜์„ฑ์ด ๋”์šฑ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ XML ์ง€์›๊ณผ ๋งž์ถค๋ฒ• ๊ฒ€์‚ฌ๋„ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๋‚ด์šฉ์€ ์ตœ๊ทผ์— ๊ฒŒ์‹œ๋œ ๋‘ ๋ฒˆ์งธ ๋ฒ„์ „์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋ญ์ง€?

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

์ถœ์ฒ˜: www.habr.com

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