Quiz - package manager, package.json, monorepo

이소라·2023년 7월 20일
0

Interview Questions

목록 보기
58/67

1. 패키지 매니저란 무엇이고 어떤 것들을 사용해보셨는지 설명해주세요.

  • package manager는 package를 다루는 작업을 편리하고 안전하게 수행하기 위해 사용되는 도구입니다.
  • 저는 package manager로 npm, yarn berry를 사용해봤습니다.

NPM과 Yarn에 차이에 대해 설명해주세요.

  • NPM은 Node Package Manager의 약어로 Node 환경에서 패키지를 관리하는 도구입니다.
  • NPM은 Yarn보다 역사가 오래되었기 때문에 많은 라이브러리에서 NPM을 지원하고 있습니다. 하지만 NPM은 node_modules가 무겁고, Node에 패키지에 대한 개념이 없기 때문에 Node Resolution이 파일을 찾기 위해 파일 시스템 계층 구조를 반복하해 탐색해야 하는 문제를 가지고 있습니다.
  • Yarn은 무거운 node_modules 대신 pnp 파일만 생성하면 되므로 설치가 빠릅니다. 또한 pnp 파일을 통해 접근해야 하는 패키지의 위치를 알 수 있으므로 Node Resolution이 파일 시스템 계층 구조를 반복해서 탐색하지 않아도 됩니다. 하지만 Yarn은 NPM에 비해 새로운 패키지 매니저이기 때문에 일부 라이브러리에서 Yarn을 지원하지 않을 수 있습니다.



2. package.json과 package-lock.json는 무엇이고, 필요한 이유는 무엇인가요?

  • package.json은 현재 프로젝트에 대한 정보를 저장하는 파일입니다. 이 파일에서 프로젝트의 이름, 버전, 애플리케이션 종속성 등의 정보를 저장합니다.
  • package-lock.json는 패키지의 정확한 종속성 트리를 나타내는 파일입니다.
    • package-lock.json이 필요한 이유는 version range 형태로 작성된 package.json의 패키지를 명확하게 지정하여 협업할 때 서로의 버전을 맞추기 위해서 입니다.

2.1 package.json 파일에서 정확한 버전명을 명시하지 않고 version range를 사용하는 이유에 대해 설명해주세요.

  • package.json에 패키지의 버전명을 정확하게 명시하게 되면, 프로젝트에서 사용하고 있는 패키지가 중요한 버그 수정이 업데이트될 때마다 프로젝트의 package.json에 적혀있는 버전도 수정해야 하기 때문에, 이러한 번거로움을 피하기 위해서 package.json에서 패키지를 version range로 명시합니다.



3. 모노레포가 무엇이고 어떤 문제를 해결하기 위해 나온 방식인지 설명해주세요.

  • MonoRepo는 Monolithic Repositories의 약어로 두 개 이상의 프로젝트가 동일한 레포에 저장되는 소프트웨어 개발 전략입니다.
  • 기존에는 하나의 레포에 하나의 프로젝트를 저장하는 Multi-Repo를 주로 사용했습니다.
  • 그러나 Multi-Repo는 관리하는 프로젝트가 많아질수록 여러 문제가 발생할 수 있습니다.
    • 각 프로젝트의 코드 컨벤션을 통일하기 어려울 수 있고, 각 프로젝트별로 사용하는 모듈과 버전 스택이 달라질 수 있으며, 팀원별 컨텍스트 공유가 서로 원할하지 않을 수 있습니다.
    • 이러한 문제점을 해결하기 위해서 하나의 레포에서 여러 개의 프로젝트를 관리하는 MonoRepo가 등장했습니다.

3.1 MonoRepo의 장단점에 대해 설명해주세요.

  • MonoRepo의 장점은 하나의 레포에서 버전 관리를 한 번에 할 수 있고, 공통되는 코드를 공유하고 재사용할 수 있으며 팀 간 협업이 자유로워진다는 것입니다.
  • MonoRepo의 단점으로는 개발 및 실행에 필요한 환경을 구성하는데 투자해야 하며, 유연한 코드 소유권으로 인해 코드 관리가 어려울 수 있다는 것입니다.



참고

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

덕분에 좋은 정보 얻어갑니다, 감사합니다.

답글 달기