naver/fe-news ๋‰ด์Šค๋ ˆํ„ฐ ๋ทฐ์–ด (๋น„๊ณต์‹)

๋ชฉ์ฐจ
๋ชฉ์ฐจ

    2022-05

    ๋งํฌ & ์ฝ์„๊ฑฐ๋ฆฌ

    ๋ชจ๋˜ ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ ๊ธฐ๋ฒ•

    ๋‹ค์Œ์˜ 2๊ฐœ ์‹œ๋ฆฌ์ฆˆ๋กœ ๊ตฌ์„ฑ๋œ ๊ธ€์„ ํ†ตํ•ด ๋‹จ์ผ ์ฝ”๋“œ ์ €์žฅ์†Œ์—์„œ ๋‹ค์ค‘ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” Monorepo ๊ฐœ๋ฐœ ์ „๋žต์˜ ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ๊ณผ ํ•จ๊ป˜, ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๋„๊ตฌ๋“ค์— ๋Œ€ํ•œ ์†Œ๊ฐœ ๋ฐ ์žฅ๋‹จ์ ์„ ์†Œ๊ฐœํ•œ๋‹ค.

    [์ฐธ๊ณ ] Line๊ณผ ์šฐ์•„ํ•œ ํ˜•์ œ๋“ค์˜ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ๋ฅผ ํ†ตํ•ด ์†Œ๊ฐœ๋œ monorepo ๊ธ€๋“ค๋„ ๊ฐ™์ด ์ฐธ๊ณ ํ•ด ๋ณด๊ธฐ ๋ฐ”๋ž€๋‹ค.

    The Future of Micro-Frontends

    Micro Front-end(์ดํ•˜ MFE)๋ฅผ ๋งํ•  ๋•Œ ์–ด๋А ์ •๋„์˜ "microโ€๊ฐ€ MFE ์ผ๊นŒ? MFE ๊ตฌํ˜„๋ณด๋‹จ ๋ณด๋‹ค ๋ถ„์‚ฐ๋œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŽ์ด ๋ชฉ๊ฒฉํ•˜๊ฒŒ ๋œ๋‹ค.

    ์ €์ž๋Š” ์ž์‹ ์ด ๋งŒ๋“  MFE ๋ฉ˜ํƒˆ๋ชจ๋ธ Micro-frontends in context ์„ ํ™œ์šฉํ•ด ๋””์ž์ธํ•˜๊ณ , MFE ๊ฐ„์˜ ํ†ต์‹ ์€ Publish-subscribe ํŒจํ„ด์„ ํ™œ์šฉํ•ด design-time ์ปคํ”Œ๋ง์„ ํšŒํ”ผํ•˜๊ฑฐ๋‚˜ ๋˜๋Š” ์ตœ์†Œํ™”ํ•  ๊ฒƒ์„ ์ œ์•ˆํ•˜๊ณ  ์žˆ๋‹ค.

    Back-end์˜ ์ด๋ฒคํŠธ ์ฃผ๋„์  ์•„ํ‚คํ…์ฒ˜์™€ ๊ฐ™์ด ์ด๋ฒคํŠธ๋ฅผ ์œ„ํ•œ ๋šœ๋ ทํ•œ ์Šคํ‚ค๋งˆ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์€ ํ†ตํ•ฉ๊ณผ์ •์—์„œ ๋งŽ์€ ์‹ค์ˆ˜๋ฅผ ์ค„์—ฌ ์ค„ ์ˆ˜ ์žˆ๋‹ค. event-bus ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋А์Šจํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ ์š”์†Œ๋“ค ๊ฐ„์˜ ๊ตฌ์กฐ์ ์ธ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐ ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

    Module Federation Examples

    ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ถ„๋ฆฌ๋œ ๋นŒ๋“œ๋“ค์„ ๋™์ ์œผ๋กœ ์‹คํ–‰์‹œ์ผœ, ๋งˆ์น˜ ํ•˜๋‚˜์˜ ์•ฑ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” module federation์€ Webpack 5์˜ ์ฃผ์š” ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋กœ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. ์ด ์ €์žฅ์†Œ๋Š” Webpack์˜ module federation์„ ๊ตฌํ˜„ํ•œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋‹ค์–‘ํ•œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์‡ผ์ผ€์ด์Šค ์˜ˆ์ œ๋ฅผ ์ž‘์„ฑํ•ด ์ œ๊ณตํ•œ๋‹ค๋Š” ์ ์—์„œ ๊ด€์‹ฌ์„ ๊ฐ€์งˆ๋งŒํ•˜๋‹ค.

    JavaScript Symbol์˜ ๊ทผํ™ฉ

    ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ์ผ๋ฐ˜์ ์œผ๋กœ Symbol์„ ์‚ฌ์šฉํ•  ์ผ์ด ์ž˜ ์—†๋‹ค.
    ์ด๋Ÿฐ Symbol์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ , ์–ด๋–ค ์ด์œ ๋กœ Symbol์ด ๋„์ž…๋˜์—ˆ์œผ๋ฉฐ, ์šฐ๋ฆฌ๋Š” ์ด Symbol์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์†Œ๊ฐœํ•œ๋‹ค.

    JAVASCRIPT FUNCTION COMPOSITION: WHATโ€™S THE BIG DEAL?

    ํ•จ์ˆ˜ํ˜• ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ•จ์ˆ˜ ํ•ฉ์„ฑ์— ๋Œ€ํ•ด์„œ ์ด์•ผ๊ธฐ๋ฅผ ํ•˜๊ณ , compose(), flow(), pipe()๋ฅผ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์„ค๋ช…ํ•˜๊ณ ,
    ํ•จ์ˆ˜ ํ•ฉ์„ฑ์„ ํ†ตํ•œ ์ฝ”๋“œ๋„ ์•„๋ฆ„๋‹ต์ง€๋งŒ, ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ์‚ฌ๊ณ ๋ฐฉ์‹์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Œ์„ ์ด์•ผ๊ธฐํ•œ๋‹ค.

    How return await can slow down your code

    ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์ง€๋งŒ, ๊ฐ๊ฐ ๋‹ค๋ฅธ ํ˜•ํƒœ๋กœ ํ˜ธ์ถœ๋˜๋Š” ๋‹ค์Œ์˜ ํ•จ์ˆ˜๋“ค ์ค‘์—์„œ ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ(๋˜๋Š” ๋А๋ฆฌ๊ฒŒ) ์‹คํ–‰๋˜๋Š” ๊ฒƒ์€ ์–ด๋–ค ๊ฒƒ์ผ๊นŒ?

    // function work(): Promise<any>;
    async function doWait() {
        return await work();
    }
    
      async function dontWait() {
        return work();
    }
    
    function justReturn() {
        return work();
    }
    

    ๋Œ€๋ถ€๋ถ„์˜ ์‹ค ๊ฐœ๋ฐœ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ์‚ฌ์šฉ๋˜๋Š” ์ŠคํŽ™์— ๋”ฐ๋ผ ํ›จ์”ฌ ๋” ์˜ค๋ž˜์ „์˜ ECMAScript ๋ฒ„์ „์œผ๋กœ ๋ณ€ํ™˜๋  ์ˆ˜ ์žˆ๋‹ค. ๊ฒฐ๋ก ์€ ๊ฐ€๋Šฅํ•œ Eslint no-return-await ๊ทœ์น™์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค.

    ์› ๊ธ€์—์„œ๋Š” ์ƒํ™ฉ๋ณ„ ๋ฒค์น˜๋งˆํฌ ๊ฒฐ๊ณผ์™€ ํ•จ๊ป˜ ๋ณด๋‹ค ์ž์„ธํ•œ ์ด์œ ๋ฅผ ์ฝ์–ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    Reliable Web Summit 2021

    Reliable Web Summit 2021์€ Angular ์ฝ˜ํผ๋Ÿฐ์Šค๋กœ ์œ ๋ช…ํ•œ ng-conf์˜ ์„œ๋ธŒ ์ฝ˜ํผ๋Ÿฐ์Šค๋กœ, ์‹ ๋ขฐ์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ์›น์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ์ฃผ์ œ์˜ ์„ธ์…˜๋“ค์ด ์ง„ํ–‰๋˜์—ˆ๋‹ค.

    PageObject

    ๋ฆฌํŒฉํ† ๋ง์˜ ์ €์ž๋กœ ์œ ๋ช…ํ•œ ๋งˆํ‹ด ํŒŒ์šธ๋Ÿฌ์˜ ๊ธ€๋กœ, ์›น ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ HTML ์š”์†Œ๋“ค์„ ์ง์ ‘ ์กฐ์ž‘ํ•˜๋Š” ์ ‘๊ทผ๋ณด๋‹ค ํŽ˜์ด์ง€ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด HTML ํŽ˜์ด์ง€ ๋˜๋Š” ์กฐ๊ฐ(fragment)๋ฅผ ๊ฐ์‹ธ๋Š” ํ˜•ํƒœ์˜ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•œ๋‹ค.

    Building a dialog component

    ์ตœ๊ทผ <dialog> ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ stable ํ•œ ์ƒํƒœ๊ฐ€ ๋˜์—ˆ๋‹ค. ์ด์   ๋ชจ๋‹ฌ์ด๋‚˜ ํŒ์—… ๋“ฑ์„ native <dialog> ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ํ™œ์šฉํ•ด์„œ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์Šคํƒ€์ผ, ์• ๋‹ˆ๋ฉ”์ด์…˜, Javascript ์ฝ”๋“œ์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฒ•๊นŒ์ง€ ์ƒ์„ธํ•œ ์‚ฌ์šฉ๋ฒ•์„ ๋‹ค๋ฃจ๊ณ  ๋ฐ๋ชจ์™€ ์†Œ์Šค, Youtube ์˜์ƒ ๋˜ํ•œ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค. ์กฐ๊ธˆ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ <dialog>์—˜๋ฆฌ๋จผํŠธ ์‚ฌ์šฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด #๋งํฌ ๊ธ€์„ ํ™•์ธํ•ด ๋ด๋„ ์ข‹๋‹ค.

    Why Do Developers Keep Implementing State Management in React?

    thoughtworks๋Š” ๊ธ€๋กœ๋ฒŒ ๊ธฐ์ˆ  ์ž๋ฌธ ํšŒ์‚ฌ๋กœ, ์ฃผ๊ธฐ์ (๋ฐ˜๊ธฐ๋งˆ๋‹ค)์œผ๋กœ ๊ธฐ์ˆ  ๋™ํ–ฅ์„ ๋‹ค๋ฃจ๋Š” Technology Radar ๋ฆฌํฌํŠธ๋ฅผ ๋ฐœํ–‰ํ•˜๊ณ  ์žˆ๋‹ค.

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

    ๊ทธ๊ฐ„ Redux โ†’ Mobx โ†’ Zustand โ†’ Recoil โ†’ Jotai๋กœ ์ด์–ด์ ธ ์˜ค๋Š” ํ๋ฆ„์„ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด, ์—ฌ๋Ÿฌ๋ถ„๋“ค๋„ ๊ฐ™์€ ์˜๋ฌธ์„ ํ’ˆ์„ ๊ฒƒ์ด๋‹ค.

    React Libraries for 2022

    React๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•ด์„œ ์ถ”์ฒœํ•ด ์ค€๋‹ค. React Project, Package Manager, State Management, Data Fetching, Router, CSS Styling๋ฅผ ํฌํ•จํ•˜์—ฌ 25๊ฐ€์ง€ ์ฃผ์ œ์— ๋Œ€ํ•ด ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์— ์–ธ๊ธ‰ํ•œ๋‹ค. ๋‹ค๋งŒ, ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋‹ค ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์–ด์„œ, ๊ฐ€๋ณ๊ฒŒ ์ฐธ๊ณ ํ•ด ๋ณด๋ฉด ์ข‹๋‹ค.

    When Does React Render Your Component?

    React์—์„œ๋Š” ๋ Œ๋”๋ง์ด ์˜๋„ํ•˜์ง€ ์•Š๊ฒŒ ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ž์ฃผ ์ ‘ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, React ๊ณต์‹ ๋ฌธ์„œ์—์„œ๋Š” ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์ง€ ์•Š์•„ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.
    ์ด ๊ธ€์—์„œ๋Š” React์—์„œ ๋ Œ๋”์˜ ์˜๋ฏธ๋ถ€ํ„ฐ ์‚ดํŽด๋ณด๊ณ , ์–ธ์ œ ๋ Œ๋”๋ง ๋˜๋Š”์ง€ ์•Œ์•„๋ณธ๋‹ค.

    ์›นํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž์˜ Rust ๋Œ๋ ค๊นŒ๊ธฐ ๐ŸฅŠ

    ์›นํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž์˜ ๊ด€์ ์—์„œ Rust๋ฅผ ํ•™์Šตํ•œ ๊ฒฝํ—˜์„ ๊ณต์œ ํ•œ๋‹ค.
    ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ์—†๊ณ , ์†Œ์œ ๊ถŒ ๊ฐœ๋…์ด ์ƒ์†Œํ•˜๋ฉฐ, ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ์นœ์ ˆ(??) ํ•˜์—ฌ ํ•™์Šต์ด ์–ด๋ ค์› ๋˜ ์ ์„ ์„ค๋ช…ํ•œ๋‹ค.
    ๋์œผ๋กœ Rust๋ฅผ ๋ฐฐ์›Œ์•ผ ํ•˜๋Š” ์ด์œ ๋ฅผ ๊ณ ๋ฏผํ•ด ๋ณธ๋‹ค.

    ํŠœํ† ๋ฆฌ์–ผ

    33 JavaScript Concepts Every Developer Should Know ๐Ÿค“๏ธ๐Ÿ’ฏ๏ธ

    33 Concepts Every JavaScript Developer Should Know(FE News 20/4์›” ์†Œ์‹์„ ํ†ตํ•ด ์†Œ๊ฐœ) ์—์„œ ์˜๊ฐ์„ ๋ฐ›์•„ ํ•ด๋‹น ๋ชฉ์ฐจ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•œ๋‹ค.
    33๊ฐ€์ง€ ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ ์ด๋ฏธ์ง€์™€ ์งง์€ ์„ค๋ช…์„ ์ œ๊ณตํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ์‚ดํŽด๋ณด๊ธฐ์— ์ข‹๊ณ , ๋ชจ๋ฅด๋Š” ๊ฐœ๋…์ด ์žˆ๋‹ค๋ฉด ํŠœํ† ๋ฆฌ์–ผ ๋งํฌ๋“ค์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์–ด ๊ฐœ๋…๋“ค์„ ๋ฐฐ์šฐ๊ธฐ๋„ ์ข‹๋‹ค.

    Figma Tips

    1๋ถ„ ๋‚ด์™ธ์˜ ์งง์€ ์‡ผ์ธ  ์‹œ๋ฆฌ์ฆˆ๋ฅผ ํ†ตํ•ด Figma ์‚ฌ์šฉ ์‹œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ ๊ธ‰ ํŒ๋“ค์„ ์†Œ๊ฐœํ•œ๋‹ค.

    JavaScript Fighting Game Tutorial with HTML Canvas

    ๋Œ€์ „ ๊ฒฉํˆฌ ๊ฒŒ์ž„์„ HTML Canvas๋ฅผ ์ด์šฉํ•˜์—ฌ ๋งŒ๋“ค์–ด ๋ณด์ž!

    ์ฝ”๋“œ์™€ ๋„๊ตฌ

    Preview.js: Preview UI components in your IDE instantly

    Preview.js๋Š” React, Vue ๋“ฑ์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ IDE์—์„œ ๋ฐ”๋กœ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ๋„๊ตฌ๋‹ค.

    ํ˜„์žฌ๋Š” React (V16+), Vue 2, Vue 3, SolidJS๋ฅผ ์ง€์›ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, Preact, Svelte๊ฐ€ ์ง€์› ์˜ˆ์ •์ด๋ผ๊ณ  ํ•œ๋‹ค.

    projen

    projen์€ ํ”„๋กœ์ ํŠธ ์„ค์ • ํŒŒ์ผ๋“ค์ธ package.json, tsconfig.json, .gitignore, eslint ๋“ฑ์„ ํ†ตํ•ด ์ž˜ ์ •๋ฆฌ๋œ JavaScript ์ •์˜ ํŒŒ์ผ๋กœ ์ž‘์„ฑ๋œ๋‹ค. ๊ธฐ์กด ์„ค์ • ํŒŒ์ผ๋“ค์€ ์ˆ˜๋™์œผ๋กœ ๊ด€๋ฆฌ๋˜์–ด์„œ๋Š” ์•ˆ๋˜๋ฉฐ, ์ œ๊ณต๋˜๋Š” class ๋ชจ๋“ˆ๊ณผ projen CLI๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ ์„ค์ •์„ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค.

    nexe

    Nexe๋Š” Node.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ปดํŒŒ์ผํ•ด ๋‹จ์ผ ์‹คํ–‰ ํŒŒ์ผ๋กœ ์ƒ์„ฑํ•ด ์ฃผ๋Š” CLI ๋„๊ตฌ๋‹ค. (์œ ์‚ฌํ•œ ๋„๊ตฌ๋กœ๋Š” Pkg๊ฐ€ ์žˆ๋‹ค.)