ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ์‚ฌ๋‚ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐœ๋ฐœ ๊ธฐ๋ก (feat. monorepo, submodule)
    ๐Ÿ‘ FE 2024. 4. 9. 11:04

    ๋ฌธ์ œ ๋ฐฐ๊ฒฝ

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

     

    ๋ชฉํ‘œ

    ๊ณตํ†ต ๋กœ์ง(์ปดํฌ๋„ŒํŠธ/ํ›…/์œ ํ‹ธํ•จ์ˆ˜)์„ ๋ณ„๋„์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ , ๋…๋ฆฝ์ ์œผ๋กœ ๋นŒ๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง€๊ฒŒ ๊ตฌ์„ฑํ•˜์—ฌ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋„ ํ™•์žฅํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ์„ ๋ชฉํ‘œ๋กœ ํ•จ.

     

    ๋ชฉํ‘œ ๋‹ฌ์„ฑ์„ ์œ„ํ•˜์—ฌ ๋‹ค์Œ ๋ฐฉ๋ฒ•์„ ๊ณ ๋ฏผํ–ˆ์Œ. (1) ๊นƒ ์„œ๋ธŒ ๋ชจ๋“ˆ, (2) npm ํŒจํ‚ค์ง€ ๊ฐœ๋ฐœ. ๊ฐ๊ฐ์˜ ๋ฐฉ๋ฒ•์ด ์ €๋งˆ๋‹ค์˜ ์–ด๋ ค์›€์ด ์žˆ์–ด ๊ฒฐ๋ก ์ ์œผ๋ก  ์‚ฌ๋‚ด์‹œ์Šคํ…œ ๊ฐœ๋ฐœ์— ์‚ฌ์šฉ๋˜๋Š” npm ํŒจํ‚ค์ง€๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ๋กœ ์ •ํ•˜์˜€์Œ. 

     

     

    ์‹œ๋„

    (1) ๊นƒ ์„œ๋ธŒ ๋ชจ๋“ˆ (xx)

    ๋ณ„๋„์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๊นƒ ์„œ๋ธŒ๋ชจ๋“ˆ๋กœ ๋ถˆ๋Ÿฌ์™€ ํ™•์žฅํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์—๋Š” ๋‹ค์Œ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Œ. 

     

    1. ์–ด์ƒ‰ํ•œ ํด๋” ๊ตฌ์กฐ

    ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ ๋‚ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ node_modules๊ฐ€ ์œ„์น˜ํ•˜๋Š” ์–ด์ƒ‰ํ•œ ํด๋” ๊ตฌ์กฐ๊ฐ€ ๋จ. ๋‹ค์ค‘ node_modules๋กœ ์‹คํ–‰์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ ํŒจํ‚ค์ง€ ๊ฒฝ๋กœ ์ฐพ๊ธฐ ์˜ค๋ฅ˜๋„ ์žˆ์—ˆ์Œ.

    ๐Ÿ“ฆ ๋ถ€๋ชจํ”„๋กœ์ ํŠธ

    โ”ฃ ๐Ÿ“‚ node_modules

    โ”ฃ ๐Ÿ“ฆ์„œ๋ธŒ๋ชจ๋“ˆ

    โ”ƒ โ”ฃ ๐Ÿ“‚ node_modules

     

    2. ๋‘ํ†ต์„ ์ผ์œผํ‚ค๋Š” ์‹ฑํฌ ๋งž์ถ”๊ธฐ

    ๋ฉ”์ธ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์„œ๋ธŒ ๋ชจ๋“ˆ์˜ ์ปค๋ฐ‹ ์ฝ˜ํ…์ธ ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  commit hash๋ฅผ ์ €์žฅํ•จ. ๊ทธ๋ž˜์„œ ์„œ๋ธŒ ๋ชจ๋“ˆ์— ๋ณ€๊ฒฝ์ด ์žˆ๋‹ค๋ฉด, ์„œ๋ธŒ ๋ชจ๋“ˆ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋จผ์ € ์ปค๋ฐ‹ํ•œ ํ›„์— ๋ฉ”์ธ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ํ•œ๋ฒˆ ๋” ์ปค๋ฐ‹์„ ํ•ด์•ผ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฐ˜์˜๋จ.

    ์„œ๋ธŒ ๋ชจ๋“ˆ์˜ ๋ธŒ๋žœ์น˜๋Š” ๋ฉ”์ธ ํ”„๋กœ์ ํŠธ์˜ ๋ธŒ๋žœ์น˜์™€ ๋ณ„๊ฐœ๋กœ ๋™์ž‘ํ•˜์—ฌ ๋ฉ”์ธ ํ”„๋กœ์ ํŠธ์— ์ƒˆ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ ์‹œ ์„œ๋ธŒ๋ชจ๋“ˆ ๋ธŒ๋žœ์น˜๋„ ํ•จ๊ป˜ ๋ถ„๊ธฐํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•จ. ํ”„๋กœ์ ํŠธ์˜ ์ˆ˜์ •์‚ฌํ•ญ์ด ์ƒ๊ธธ ๋•Œ๋งˆ๋‹ค ์„œ๋ธŒ๋ชจ๋“ˆ ๋ธŒ๋žœ์น˜๊นŒ์ง€ ๊ด€๋ฆฌํ•ด ์ฃผ๋Š” ๊ฒƒ์ด ๊ฝค๋‚˜ ๊ท€์ฐฎ์€ ์ž‘์—…์ด...

     

    (2) npm ํŒจํ‚ค์ง€ ๊ฐœ๋ฐœ (oo)

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

    ๋ชจ๋…ธ๋ ˆํฌ ์•„ํ‚คํ…์ณ

    ๋””์ž์ธ ์‹œ์Šคํ…œ ๋ถ„๋ฆฌ๋ฅผ ์œ„ํ•ด ์ตœ์ข…์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์œ„ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ ๋ฐ”๊พธ์–ด์•ผ ํ–ˆ์Œ. 

    ๋น„๊ต์  ์ตœ๊ทผ์— ์‚ฌ๋‚ด์—์„œ ๊ณ ์ฐฉ๋œ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” asp.net core + react ์กฐํ•ฉ์ธ๋ฐ, ๊นƒ์—์„œ๋Š” ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ ์ฝ”๋“œ๊ฐ€ ๊ฐ™์€ ์ €์žฅ์†Œ์—์„œ ๊ด€๋ฆฌ๋˜๊ณ  ์žˆ์—ˆ์Œ.

    ๋˜ํ•œ ํ˜„์žฌ 30์—ฌ ๊ฐœ๊ฐ€ ๋„˜๋Š” ์‚ฌ๋‚ด ์‹œ์Šคํ…œ์€ asp.net core mvc, asp.net wep api, webform ๋“ฑ ์ผ๊ด€์ ์ด์ง€ ์•Š์€ ์•„ํ‚คํ…์ฒ˜๋กœ ๊ฐ๊ธฐ ๊ตฌ์„ฑ๋œ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋งŽ์€๋ฐ, ์ด ์ค‘์— ํ”„๋ก ํŠธ์™€ ๋ฐฑ๋‹จ์ด ๋ถ„๋ฆฌ๋˜์ง€ ์•Š๊ณ , ํ”„๋ก ํŠธ ํŒŒ์ผ์ด ์„œ๋ฒ„์—์„œ ๊ตฌ์„ฑ๋˜๋Š” webform ํ˜•ํƒœ์˜ ํ”„๋กœ์ ํŠธ๋„ ๋งŽ์•˜๊ธฐ์— ์• ์ดˆ์— ๋””์ž์ธ ์‹œ์Šคํ…œ ๋ถ„๋ฆฌ๊ฐ€ ์–ด๋ ค์šด ํ™˜๊ฒฝ์ด๊ธฐ๋„ ํ–ˆ์Œ. 

    ๊ธฐ์กด ์•„ํ‚คํ…์ณ

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

     

     

    ๊ฒฐ๋ก 

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

    // ๊ณตํ†ต๋ชจ๋“ˆ: ProjectF
    // ๋Œ€์ƒ ํ”„๋กœ์ ํŠธ: ProjectA
    
    "build": "tsc && vite build && rimraf <<ProjectA ์˜ node_modules ๊ฒฝ๋กœ>>\\<<๊ณตํ†ต๋ชจ๋“ˆํ”„๋กœ์ ํŠธ๋ช…>> && md <<ProjectA ์˜ node_modules ๊ฒฝ๋กœ>>\\<<๊ณตํ†ต๋ชจ๋“ˆํ”„๋กœ์ ํŠธ๋ช…>>\\dist && xcopy /y /s .\\dist <<ProjectA ์˜ node_modules ๊ฒฝ๋กœ>>\\<<๊ณตํ†ต๋ชจ๋“ˆํ”„๋กœ์ ํŠธ๋ช…>>\\dist /E && copy <<ProjectF์˜ package.json ๊ฒฝ๋กœ>> <<ProjectA ์˜ node_modules ๊ฒฝ๋กœ>>\\<<๊ณตํ†ต๋ชจ๋“ˆํ”„๋กœ์ ํŠธ๋ช…>>\\ /Y",

     

    ๋˜ํ•œ ์Šคํ† ๋ฆฌ๋ถ์€ UI ์ „์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ์„œ, ํ›…์ด๋‚˜ ์œ ํ‹ธํ•จ์ˆ˜๋Š” ๋ณ„๋„์˜ ๋ฌธ์„œํ™” ํ…œํ”Œ๋ฆฟ ์ œ์ž‘ ๊ณผ์ •์ด ํ•„์š”ํ–ˆ๋Š”๋ฐ ๊ทธ ๊ณผ์ •์—์„œ ์ƒ๋‹นํ•œ ์‚ฝ์งˆ์ด ์žˆ์—ˆ์Œ. vite lib mode + storybook v8 + typescript  + typedoc๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์Šคํ† ๋ฆฌ ์ œ์ž‘์— ์ตœ๋Œ€ํ•œ ๊ณต์ˆ˜๊ฐ€ ๋“ค์ง€ ์•Š๊ฒŒ ๊ฐœ๋ฐœํ•˜์˜€๊ณ , ๊ทธ ๋‚ด์šฉ์€ ๋‹ค์Œ ํฌ์ŠคํŒ…์— ์ด์–ด์ง‘๋‹ˆ๋‹ค!

    '๐Ÿ‘ FE' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

    ๊ธ€ ์‚ฌ์ด ์ด๋ฏธ์ง€ ๋„ฃ๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ  (1) 2023.09.03
Designed by Tistory.