[πŸ’Š] μ„œλ²„ μ €μž₯μ†Œμ—μ„œ buildλ₯Ό ν•˜λ©° κΉ¨λ‹«κ²Œ 된 yarn.lock 파일의 μ€‘μš”μ„±κ³Ό package 버전 동기화 원리

BinaryWoo_devΒ·2023λ…„ 3μ›” 23일
0

졜근 νšŒμ‚¬μ˜ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜(Next.js) 정식 릴리즈 배포λ₯Ό ν•œ ν›„, 저녁에 μ•„λž˜μ™€ 같은 버그 이슈 λ°œμƒμ„ μ•Œκ²Œλœ ν›„ κΈ΄κΈ‰ λŒ€μ‘μ„ μœ„ν•΄ 혼자 λΆ€λž΄λΆ€λž΄ 저녁 8μ‹œλΆ€ν„° μƒˆλ²½ 3μ‹œκΉŒμ§€ κ³ κ΅°λΆ„νˆ¬ν•˜λ©° 배우고 κ²½ν—˜ν–ˆλ˜ λ‚΄μš©μ„ κΈ°λ‘ν•˜μ˜€λ‹€. 🫠

🐞 1. νŠΉμ • νŽ˜μ΄μ§€μ˜ λΌμš°νŒ… μ‹œ, λ¬΄ν•œ λ‘œλ”© ν˜„μƒ λ°œμƒ
🐞 2. tsx νŒŒμΌμ—μ„œ ant design 라이브러리의 νŠΉμ • UI에 λŒ€ν•œ Type Error λ°œμƒ

πŸ“¦ μ§€κΈˆ νšŒμ‚¬μ˜ μ†ŒμŠ€μ½”λ“œ 배포 방식

λ‚΄κ°€ μ§€κΈˆ λ‹€λ‹ˆκ³  μžˆλŠ” νšŒμ‚¬μ—μ„œλŠ” μ•ˆνƒ€κΉκ²Œλ„ CI/CD μ‹œμŠ€ν…œμ΄ μ—†λ‹€. (μ˜¨ν”„λ ˆλ―ΈμŠ€λ‘œ μš΄μ˜ν•˜λŠ” μ›Ή μ‚¬μ΄νŠΈκ°€ λ§Žμ•„μ„œ κ·ΈλŸ΄μ§€λ„..?)
그말인 μ¦‰μŠ¨, ν”„λ‘ νŠΈμ™€ λ°±μ—”λ“œ κ°œλ°œμžλ“€μ΄ 각각 직접 μˆ˜λ™μœΌλ‘œ μ„œλ²„μ— μ ‘κ·Όν•˜μ—¬
git pull -> yarn build -> yarn start 과정을 μ§„ν–‰ν•΄μ•Ό ν•œλ‹€λŠ” 것이닀.
κ·Έλž˜μ„œ μ΄μ§ν•˜κΈ° 전에 μ—¬κΈ°μ„œ CI/CD μ‹œμŠ€ν…œμ„ μ–΄λŠμ •λ„ κ΅¬μΆ•ν•˜κ³  μ‹Άμ–΄μ„œ 2달 μ „λΆ€ν„° 짬짬이 κ³΅λΆ€ν•˜λ©° μ‹œλ„ μ€‘μ΄μ§€λ§Œ, bitbucket 버전 관리 μ†”λ£¨μ…˜μ— λŒ€ν•œ CI/CD μ„€λͺ… 정보가 많이 μ—†μ–΄μ„œ 아직도 κ³ κ΅°λΆ„νˆ¬ 쀑이닀.
κ·Έλ‚˜λ§ˆ bitbucket의 Pipelinesλ₯Ό μ΄μš©ν•˜μ—¬ push λ°œμƒ μ‹œ, μžλ™μœΌλ‘œ λΉŒλ“œ ν…ŒμŠ€νŠΈ(CI)λ₯Ό ν•˜λŠ”λ°κΉŒμ§€λŠ” μ„±κ³΅ν•΄μ„œ μœ μš©ν•˜κ²Œ μ‚¬μš©ν•˜κ³  μžˆλ‹€.
Bitbucket의 pipelines λ₯Ό ν†΅ν•œ μžλ™ λΉŒλ“œ ν…ŒμŠ€νŠΈ

(우리 νšŒμ‚¬λŠ” Github, Gitlab이 μ•„λ‹Œ Bitbucket μ €μž₯μ†Œλ₯Ό μ‚¬μš©ν•˜κ³  μžˆλ‹€.)

πŸͺ„ 이번 릴리즈 버전 배포λ₯Ό ν•˜λ©΄μ„œ μ—…λ°μ΄νŠΈλœ 사항

사싀 이번 배포 λ•Œ, 생긴 버그 μ΄μŠˆλ“€μ€ ν•œ 개 λΉΌκ³ λŠ” 처음 λ§žμ΄ν•œ 것이닀. κ·Έλž˜μ„œ μ΅œκ·Όμ— μƒˆλ‘œμš΄ μˆ˜μ •λœ λ‚΄μš©μ΄ 무엇이 μžˆμ—ˆλ‚˜ λ΄€λ”λ‹ˆ μ•„λž˜μ™€ κ°™μ•˜λ‹€.

  • Next.js ν”„λ ˆμž„μ›Œν¬ 버전 μ—…κ·Έλ ˆμ΄λ“œ (v10.0.7 -> v11.0.0)
  • antd UI 라이브러리 버전 μ—…κ·Έλ ˆμ΄λ“œ (v4.17.0 -> v4.20.0)
  • react-i18next locale 라이브러리 버전 μ—…κ·Έλ ˆμ΄λ“œ (v7.3.0 -> v12.0.0)

πŸ”Ž 원인 뢄석

μœ„μ˜ μ—…λ°μ΄νŠΈλœ 사항을 기반으둜 ν•˜λ‚˜ν•˜λ‚˜μ”© 원인 뢄석을 ν•˜κΈ° μ‹œμž‘ν–ˆλ‹€.

1번 이슈 뢄석

1번 이슈의 원인은 λ°”λ‘œ react-i18next 라이브러리 버전을 μ—…κ·Έλ ˆμ΄λ“œ ν•œ 것이닀.
κΈ°μ‘΄κΉŒμ§€λŠ” react-i18next@v7.3.0 을 μ‚¬μš©ν•˜μ˜€λŠ”λ°, μ΄λ²ˆμ— μ΅œμ‹  버전인 v12.0.0으둜 μ—…κ·Έλ ˆμ΄λ“œ ν•˜λ©΄μ„œ HOC λ°©μ‹μœΌλ‘œ translation ν•¨μˆ˜λ₯Ό page의 props 둜 μ „λ‹¬ν•΄μ£ΌλŠ” translate() λ©”μ„œλ“œκ°€ 더이상 지원이 λ˜μ§€ μ•Šκ³ , withTranslation() 으둜 λŒ€μ²΄ν•΄μ•Ό ν•œλ‹€λŠ” 것이닀.
κ·Έλž˜μ„œ, t, tReady λ“±μ˜ props κ°€ undefined 둜 page props에 return λ˜λ©΄μ„œ 이후 λ Œλ”λ§ 과정듀이 μ§„ν–‰λ˜μ§€ μ•Šκ³  계속 λ‘œλ”© μ΄μŠˆκ°€ λ°œμƒν•˜μ˜€λ‹€.
react-i18next κ³΅μ‹λ¬Έμ„œ

λ”°λΌμ„œ, λ‹¨μˆœνžˆ translate() λ©”μ„œλ“œλ§Œ withTranslation() 으둜 λŒ€μ²΄ν•˜λ©΄ λ˜λŠ” 쀄 μ•Œμ•˜μœΌλ‚˜, μ‹œμ›ν•˜κ²Œ μ‹€νŒ¨ν–ˆλ‹€. κ·Έ μ™Έ μˆ˜μ •ν•΄μ•Όν•  뢀뢄이 더 μžˆλŠ” 것 같은데 기쑴에 κ΅¬μ„±λ˜μ–΄ 있던 ν™˜κ²½ 파일 μ½”λ“œλ“€μ΄ λ„ˆλ¬΄ λ³΅μž‘ν•˜κ²Œ λ˜μ–΄ μžˆμ–΄μ„œ μ΄κ±°λŠ” μΆ”ν›„ λ‹€μŒ 릴리즈 버전 λ•Œ, 보완을 ν•΄μ•Όν•  것 κ°™μ•˜λ‹€.

1번 이슈 ν•΄κ²°

κ·Έλž˜μ„œ, 일단 둜컬 μ €μž₯μ†Œμ—μ„œ translate() λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•˜λŠ” κΈ°μ‘΄ 버전 v7.3.0으둜 λ‹€μš΄κ·Έλ ˆμ΄λ“œ ν•˜μ—¬, μ„œλ²„μ—μ„œ pull을 λ°›μ•„ λΉŒλ“œλ₯Ό μ§„ν–‰ν•˜μ—¬ ν•΄κ²°ν•˜μ˜€λ‹€.

2번 이슈 뢄석

2번 μ΄μŠˆλŠ” 이전뢀터 λ°œμƒν•΄μ˜¨ 이해가 λ˜μ§€ μ•Šμ•˜λ˜ μ΄μŠˆμ˜€λŠ”λ°, λ“œλ””μ–΄ 원인을 λ°œκ²¬ν–ˆλ‹€. (μ•„λ¬΄λž˜λ„ κ²½ν—˜μ΄ μŒ“μ΄λ©΄μ„œ μƒκΈ°λŠ” 감각은 λ¬΄μ‹œ λͺ»ν•˜λ‚˜λ³΄λ‹€)

λ°œμƒν•œ antd 'Table' UI Component 의 property Type Error ꡬ문 μ˜ˆμ‹œ

TypeError: types of property 'labelWrap' are incompatible.
          Type 'string' is not assignable to type...

μ—λŸ¬κ°€ λ°œμƒν•œ Form 의 labelWrap property λΆ€λΆ„

λΆ„λͺ… 둜컬 μ €μž₯μ†Œμ˜ node_modules/antd/lib/form/Form.d.ts μ—λŠ” μ•„λž˜μ™€ 같이 Form μ»΄ν¬λ„ŒνŠΈμ˜ props type에 labelWrap νƒ€μž…μ΄ λͺ…μ‹œλ˜μ–΄ μžˆμ—ˆλ‹€.

ν•˜μ§€λ§Œ, μ„œλ²„ μ €μž₯μ†Œμ—μ„œ node_modules/antd/lib/form/Form.d.ts νŒŒμΌμ—λŠ” labelWrap νƒ€μž… λͺ…μ‹œκ°€ λ˜μ–΄μžˆμ§€ μ•Šμ•˜λ˜ 것이닀. 이전에도 λΉŒλ“œ μ‹œ, typescript + antd λ₯Ό μ‚¬μš©ν•œ 슀크립트 νŒŒμΌμ—μ„œ 이 μ—λŸ¬κ°€ μ’…μ’… λ°œμƒν–ˆμ—ˆλŠ”λ° κ·Έλ•Œλ§ˆλ‹€ μž„μ‹œλ°©νŽΈμœΌλ‘œ μ„œλ²„ μ €μž₯μ†Œμ˜ .ts νŒŒμΌμ— μˆ˜λ™μœΌλ‘œ prop νƒ€μž…μ„ λͺ…μ‹œν•˜μ—¬ ν•΄κ²°ν•΄μ™”μ—ˆλ‹€.

이 이슈의 원인은 λ°”λ‘œ 둜컬 μ €μž₯μ†Œμ™€ μ„œλ²„μ˜ package.json, yarn.lock에 λͺ…μ‹œλ˜μ–΄ μžˆλŠ” antd 라이브러리 νŒ¨ν‚€μ§€ 버전은 λ™μΌν•˜λ‚˜ 둜컬 μ €μž₯μ†Œμ—μ„œ μ‚¬μš©λ˜λŠ” μ‹€μ œ antd 라이브러리 λͺ¨λ“ˆ 버전(node_modules/antd/package.json)은 v4.17.0μ΄μ—ˆμ§€λ§Œ μ„œλ²„μ—μ„œ μ‚¬μš©λ˜λŠ” λͺ¨λ“ˆ 버전은 < v4.17.0 λ²„μ „μ΄μ—ˆ 던 것이닀.
μ„œλ²„μ—μ„œ μ΅œμ’… build μ‹œ, 둜컬 μ €μž₯μ†Œμ—μ„œ bitbucket 원격 μ €μž₯μ†Œμ— push ν•œ μ΅œμ‹  package.json, yarn.lock νŒŒμΌμ„ pull λ°›μ•˜μ§€λ§Œ 이λ₯Ό 기반으둜 λ‹€μ‹œ $yarn install 을 ν•΄μ•Ό node_modules도 yarn.lock κΈ°μ€€μœΌλ‘œ νŒ¨ν‚€μ§€ 버전 동기화가 될텐데, 이걸 μƒλž΅ν•˜κ³  λ°”λ‘œ $yarn build && yarn start λ₯Ό ν•΄λ²„λ ΈμœΌλ‹ˆ, 둜컬 μ—μ„œλŠ” λ°œμƒν•˜μ§€ μ•Šμ•˜λ˜ type error κ°€ μ„œλ²„μ—μ„œλŠ” λ°œμƒν•˜λŠ” 상황이 μ „ν˜€ μ΄μƒν•˜μ§€ μ•Šμ€ 것이닀.

즉 μš”μ•…ν•˜μžλ©΄, λ‚˜λŠ” package.json, yarn.lock 만 μ΅œμ‹ ν™” μ‹œμΌ°μ§€ μ‹€μ œλ‘œ ν”„λ‘œμ νŠΈ μ½”λ“œμ— μ‚¬μš©λ˜λŠ” νŒ¨ν‚€μ§€ λͺ¨λ“ˆλ“€μ΄ λ“€μ–΄μžˆλŠ” node_modulesλŠ” $yarn install 둜 동기화λ₯Ό μ‹œν‚€μ§€ μ•Šμ•„μ„œ λ°œμƒν•œ λ¬Έμ œμ˜€λ‹€.

2번 이슈 ν•΄κ²°

λ”°λΌμ„œ, λ‚˜λŠ” μ„œλ²„μ—μ„œ $yarn install && yarn build && pm2 restart {PROCESS_id} && pm2 logs {PROCESS_id} λͺ…λ Ήμ–΄λ₯Ό 톡해 node_modules λ₯Ό 둜컬 μ €μž₯μ†Œμ™€ λ˜‘κ°™μ΄ 동기화 μ‹œμΌ°λ”λ‹ˆ κΉ”λ”ν•˜κ²Œ μ΄μŠˆκ°€ μ‚¬λΌμ‘Œλ‹€.

마치며

μ—­μ‹œλ‚˜ λŠλΌλŠ”κ±°μ§€λ§Œ μ½”λ“œλŠ” 아무 잘λͺ»μ΄ μ—†λ‹€.
ν‚€λ³΄λ“œλ₯Ό λ‘λ“œλ¦° 인간이 잘λͺ»μ΄μ§€ πŸ€ͺ

profile
맀일 0.1%μ”© μ„±μž₯ν•˜λŠ” Junior Web Front-end Developer πŸ’»πŸ”₯

0개의 λŒ“κΈ€