CS/운영 체제

[운영체제] 패키지(리눅스 배포 패키지, npm)

장아장 2024. 4. 3. 16:08

개발을 하는 우리는 항상 리눅스를 사용한다.

그런데, 사람들의 블로그 포스팅을 보면 항상 이해되지 않는 한 가지가 존재했다.

왜 어떤 사람은 yum을 쓰고 어떤 사람은 apt를 쓸까?

이 질문에서 패키지라는 것을 학습해봐야겠다는 생각이 들었다.


What is Package?

패키지는 소스코드 패키지, 바이너리 패키지로 분류된다. (저급언어/고급언어에 대해 안다면 이해가 쉬울 것 같다)

 

소스 패키지소스 코드로 이루어져 있는 패키지이다.

이를 읽고 실제로 컴퓨터에 적용시키려면 컴파일을 한 후 바이너리 코드를 컴퓨터에서 실행시켜야 한다.

그래서 설치가 더 오래걸린다는 단점이 존재한다.

또한, 하드웨어의 더 많은 저장공간을 차지한다고 한다.

그리고, 컴파일 에러가 발생할 수 있다는 단점이 있다.

 

바이너리 패키지는 반대로 이진 파일로 이루어져 있다.

컴퓨터에 바로 적용할 수 있고 더 가볍다고 한다.

더 빠른 운영체제의 설치를 위해 리눅스는 바이너리 패키지를 이용한 배포를 한다.


궁금증. NPM

https://www.gomterview.com/

 

곰터뷰

 

www.gomterview.com

(아직도 곰터뷰를 안가봤다고?)

 

네이버 부스트캠프에서 진행했던, 지금은 같이 하던 팀원들과 계속해서 진행중인 곰터뷰 서비스이다.

해당 프로젝트는 내가 살면서 처음으로 nest.js를 이용해 만든 서비스이다.

 

프론트엔드/백엔드를 막론하고 js는 수많은 라이브러리를 사용한다.

그리고 이런 라이브러리들을 npm을 이용해 가져와 사용한다.

npm을 통해 nodejs, nest말고도 수많은 라이브러리 패키지를 가져온다.

 

그리고 이런 라이브러리들을 사용하다가 모르는 부분이 있으면 cmd+클릭을 이용해 사용하고 있는

라이브러리의 코드들을 볼 수 있다.

 

그렇다면 이런 라이브러리들, 그리고 npm은 고급 언어로 되어있는 소스 패키지일까?

이 부분이 궁금해졌다.


yes

어찌보면 당연하다.

소스코드로 이루어져있는 패키지니까.

 

그리고 이런 소스 패키지도 모두 소스코드로 이루어져있진 않다고 한다.

 

npm이나 yarn과 같은 것들로 다운로드해 사용할 때 일부 라이브러리는 미리 빌드된 바이너리 파일이 포함될 수 있다.

이를 통해 직접 수정해서 조금 느리더라도 자유롭게 사용할 수 있는 것들과, 미리 빌드되어 소스코드를 추가 빌드하지 않고 쉽게 사용할 수 있게 해준다.

 

각자의 장점이 있을 것이다.

  • 소스 코드로 이루어진 패키지
    • 이 경우에는 소스 코드가 직접 제공된다.
    • 개발자는 이 소스 코드를 자유롭게 수정하고 커스터마이징할 수 있다.
    • 수정이 가능하기 때문에 특정한 요구 사항에 맞게 소프트웨어를 사용할 수 있다.
    • 하지만 이 소스 코드를 컴파일하고 빌드하는 과정이 필요하기 때문에 설치 과정이 느릴 수 있다.
  • 바이너리 파일로 줄 경우 : 빠르게 적용되고 사용하기 쉽다. 하지만 수정은 못한다.
    • 이 경우에는 라이브러리의 빌드된 실행 파일이 제공된다.
    • 따라서 컴파일이나 빌드 과정이 필요하지 않다.
    • 설치가 빠르고 사용하기 편리하며 수정이 불가능하다.
    • 일반적으로 사용자는 해당 라이브러리를 그대로 사용하거나 설정 파일을 조정하여 사용한다.

아직 한발 남았다...

패키지라는 것에 대한 호기심은 풀었지만,

내 스스로의 요구사항에서는 조금 벗어난 학습이다.

나는 리눅스 yum, apt를 혼용하며 생긴 이슈에 대한 원인을 찾고싶은 것이었다.

이를 위한 학습을 추가로 진행해야겠다.

 

그럼...twenty thousand...🔥