본문 바로가기
Develop

[ERROR] Cannot start service 해결: yarn 에서 build와 install 알아보기

by hongreat 2024. 9. 16.

 

 


개발 과정에서 Next.js 서버를 구동할 때 yarn npm을 사용하여 build install을 진행하면서 종속성 관련 오류가 발생했습니다.

종속성 관련해서 yarn 과 npm 을 혼합해서 사용하고 버전을 수시로 바꾸다 보니 생긴 문제 입니다.

간단한 오류 해결 과정에서 yarn 에 대한 build 과정까지 알게되어 해당 부분을 기록합니다.

 

 

목차

     

     

    yarn 과 npm

    • yarn 은 의존성 충돌을 잘 관리하며, 설치속도가 매우 빠른 것이 장점입니다. yarn.lock 파일을 통해 정확한 패키지 버전을 기록합니다.
    • npm은 Node.js의 아주 오래된 기본 패키지 매니저로 많은 레퍼런스가 있고 제일 많이 사용되는 것 같습니다. package-lock.json 파일을 사용하여 설치된 패키지의 정확한 버전을 기록합니다.

    yarn build & yarn install

    • yarn install
      • package.json 에 정의된 패키지를 설치하고, yarn.lock 파일에 기록된 버전의 패키지들이 node_modules 폴더에 설치됩니다.
      yarn install
    • yarn build
      • 프로젝트 소스코드를 빌드하는데, 빌드과정은 코드압축->트리쉐이킹->번들링->빌드아티팩트 으로 이뤄집니다.
        1. 코드 압축: 코드 크기를 줄이기 위해 공백, 주석 등을 제거하고, 변수를 짧게 변경하여 성능을 최적화합니다.
        2. 트리 쉐이킹 (Tree Shaking): 불필요한 코드를 제거하여 최종 번들에서 제외하는 과정입니다. (코드 최적화의 핵심)
        3. 번들링 (Bundling): 여러 개의 소스 파일을 하나의 파일 또는 적은 수의 파일로 합칩니다.(브라우저에서 쉽게 실행될 수 있도록 만드는 과정)
        4. 빌드 아티팩트 (Build Artifacts): 배포 가능한 파일들을 통해서 서버에 배포/브라우저에서 실행할 준비가 된 최종 형태 입니다.
      yarn build

    문제 상황: Cannot start service 오류

    Next.js 서버를 yarn dev 명령어로 실행할 때, 아래와 같은 오류가 발생했습니다

    ✘ [ERROR] Cannot start service: Host version "0.23.1" does not match binary version "0.20.2"

    이 오류는 esbuild 패키지의 버전 불일치 문제를 암시합니다. 문제를 해결하기 위해 최신 버전의 esbuild 패키지를 설치했습니다

    yarn add esbuild@latest

    하지만, 패키지 버전 업데이트 후에도 문제가 해결되지 않았습니다. 그래서 패키지 관리 파일을 완전히 삭제하고 재설치를 시도했습니다.

    재설치 및 패키지 관리 파일 초기화

    1. yarn.lock 파일 및 node_modules 삭제
      rm -rf node_modules
      rm yarn.lock
    2. 먼저, yarn.lock 파일과 node_modules 폴더를 삭제합니다. 아래 명령어를 통해 삭제할 수 있습니다
    3. 패키지 설치
      yarn install
      만약 yarn install이 바로 실행되지 않는다면, 빈 yarn.lock 파일을 생성한 후 다시 yarn install을 수행합니다. 빈 yarn.lock 파일을 생성하는 방법은 다음과 같습니다
    4. touch yarn.lock yarn install
    5. yarn.lock 파일과 node_modules 폴더를 삭제한 후, 패키지 설치를 진행합니다

    결론

    이러한 절차를 통해 종속성 관련 오류를 해결할 수 있었습니다. yarnnpm의 패키지 관리가 복잡할 수 있지만, 파일을 삭제하고 새로 설치하는 방법으로 문제를 효과적으로 해결할 수 있습니다. 각 패키지 매니저의 차이점을 이해하고 적절히 활용하는 것이 중요합니다.