본문 바로가기

개발인생다반사/TIL(Today i learned)

TIL 210728 - Linux 기초, CLI

자 오늘 날씨가 정말 덥다.

오늘도 낮 최고 36도에 육박하고

확진자 수는 1896명으로 최고치를 또 갱신했다.

 

코로나가 두렵지 않다.

나의 관심은 코로나로 바뀌게 될 세상이다.

코로나는 마치 경제시장의 1997년 IMF 구제금융

2000년 IT 버블붕괴

2008년 서브프라임 모기지와 같이

경제전쟁에서 승리하는 공식을 바꾸고

재정을 새로운 세계로 이동시키고 있다.

이것은 거대한 기회이다.

 

https://news.v.daum.net/v/20210728101515167

 

LG전자, 애플 아이폰 판매 공식화..'발등에 불' 삼성전자

LG전자가 소문만 무성했던 LG베스트샵에서의 애플 아이폰 판매를 사실상 공식화했다. LG전자는 판매를 강하게 반발해왔던 전국이동통신유통협회와 합의를 이뤘다. LG전자는 오는 31일 모바일 사

news.v.daum.net

LG가 스마트폰 기기를 포기하고 애플 아이폰을 판매한다.

LG가 스마트폰을 철수한거와 LG가 스마트폰을 판매한다는 건 다른 이야기이다.

일반적으로 상품은 제조업자와 판매업자 분리가 된 경우가 많다.

삼성이나 LG와 같은 기업은 제조와 판매회사를 각각 세워서 수직계열하시켜서

분리되지 않게 보였던거 뿐이다.

단순히 LG가 스마트폰 철수한다고 LG전자의 스마트폰 M/S 13%를

삼성이 가져갈 수 있다는 건 오판! (너무 나이브하다)

삼성이 이런 저급한 분석을 하고 대처를 했다?

정말 그럴까? 만일 정말 그렇다면 삼성폰도 위기이다.

 

오랜 LG폰 유저로써 삼성폰은 너무 fragile하다.

그래서 LG폰 단종된다고 해도 삼성갤럭시로 갈 마음이 전혀 생기지 않는다.

오히려 맥북을 사용하면서 아이폰으로 넘어가게 되지 않을까 한다.

 

삼성의 나이브한 판단이 보여지는 사이

애플은 최고의 실적 경신

삼성님아 힘 좀 내세요!

 

https://www.asiae.co.kr/article/2021072809183396396

 

애플, 2분기 사상 최대 실적…매출 36%↑·아이폰 판매액 50%↑ (종합2보)

애플의 2분기 매출이 작년 동기와 비교해 36% 증가했다. 이에 애플은 2분기 사상 최대 매출액을 기록했으며 월가의 시장 전망치도 큰 폭으로 뛰어넘었다. 애플은 27일(현지시간) 이러한 내용의 2분

www.asiae.co.kr

 

기업과 사업에서 디지털 전환이 더욱 크게 이루어지고

사람들은 모바일 디지털 세상으로 모이게 되는 현상이

가속화될 전망이다.

 

앞으로의 100년을 위해

디지털 세상으로 접속하기 위해

큰 결심을 하고 코.스에 참여하게 되었다.

지금이 작은 한 걸음, 작은 각도의 방향 전환이

언젠가는 큰 변화의 결과로 돌아올 것이다.

 

언제나 큰 시야로 세상을 바라보되

내가 할 일은 정말 작은 것들이다.

큰 변화의 시발인 작은 것에 열심을 내자!

 

자자 Linux 기초 - CLI 시작!

CLI(Command-Line Interface)는 명령어를 입력해 컴퓨터를 조작하는 방식

대부분의 PC에서는 GUI(Graphical User Interface)를 적용

내가 윈도우를 20년 넘게 쓰다가 맥OS로 넘어와서 적응할 때 공수가 들었던 부분이

컴맨드 통해서 프로그램을 설치하는 것들이었다.

 

지금 한창 많이 사용되는 원격 저장소 git의 경우도 대부분 CLI를 통해서 작동이 가능하다.

CLI 예전 MS의 DOS창과 유사하다.

디렉토리를 다루는 명령어도 비슷한 느낌을 받는다.

 

mkdir codestates: 디렉토리 생성

 

[Linux] 기초

  • CLI 기본 명령어
  • 패키지와 패키지 매니저
  • nvm, node.js, npm
  • Sprint - 짝수 생성기

 

CLI 기본 명령어

 

입력을 담당하는 키보드나 마우스를 입력소스(Input source)라고 합니다. 키보드나 마우스 외에도 카메라나 마이크 등 컴퓨터에 새로운 명령을 전달하는 모든 소스가 입력소스입니다.

시각적 출력를 담당하는 모니터나 청각적 출력를 담당하는 스피커를 출력소스(Output source)라고 합니다. 모니터나 스피커 외에도 스마트 홈을 연결하여 전등이나 공기청정기를 조작하는 경우, 전등이나 공기청정기도 출력소스가 될 수 있습니다.

두 개를 합쳐서 I/O라고 함

 

더보기

GUI가 PC(Personal Computer, 개인 컴퓨터)시장을 지배하게 되었지만, CLI는 여전히 여러가지 측면에서 유리합니다. 대표적으로 아마존 웹 서비스(AWS, Amazon Web Service)의 클라우드 컴퓨팅처럼, 대량의 서버 컴퓨터를 설치해야 하는 서비스를 잠시 살펴보겠습니다. AWS는 4천 평이 넘는 규모의 데이터센터를 29개 이상 가지고 있고, 계속해서 확장하고 있습니다. 하나의 데이터 센터에는 최소 5만개 이상의 서버 컴퓨터가 설치됩니다. 이렇게 수많은 컴퓨터에 GUI를 적용하기 위해 서버 컴퓨터마다 I/O 소스(키보드, 마우스, 모니터 등)를 부착하는 일은 불가능에 가깝습니다.

 

Achievement Goals

  • 리눅스 터미널을 실행할 수 있다.
  • CLI를 이용한 작업과 GUI를 이용한 작업이 동일함을 이해할 수 있다.
    • GUI의 변경사항을 CLI로 확인할 수 있다.
    • CLI의 변경사항을 GUI로 확인할 수 있다.
  • 리눅스 터미널에서 기본적인 명령어를 사용할 수 있다.
    • pwd: 현재 위치를 확인하는 명령어
    • mkdir: 새로운 폴더를 생성하는 명령어
    • ls: 폴더나 파일의 목록을 출력하는 명령어
    • nautilus (Ubuntu), open (macOS): 현재 폴더를 파일 탐색기로 여는 명령어
    • cd: 폴더에 진입하는 명령어
    • touch: 새로운 파일을 생성하는 명령어
    • cat: 파일의 내용을 터미널에 출력하는 명령어
    • rm: 폴더나 파일을 삭제하는 명령어
    • mv: 폴더나 파일의 위치를 이동하거나, 이름을 변경하는 명령어
    • cp: 폴더나 파일을 복사하는 명령어
    • sudo: 관리자 권한을 이해할 수 있다.
  • 명령어를 사용할 때, 등장하는 키워드에 대해 이해할 수 있다.
    • /: 루트 디렉토리
    • ~: 홈 디렉토리
  • 절대 경로와 상대 경로의 차이를 이해할 수 있다.
    • 절대 경로의 시작이 루트 디렉토리(/)인 것을 이해할 수 있다.
    • 상대 경로의 시작이 현재 디렉토리(.)인 것을 이해할 수 있다.
  • 텍스트 에디터 nano를 이용해 파일을 수정하고, 저장할 수 있다.

 

기본적인 명령어 (1)

키보드의 입력을 확인하고 편집할 수 있는 한 줄의 공간을 프롬프트(Prompt)라고 합니다.

 

pwd: print working directory

 

  • ls -l
  • ls -a
  • ls -al 또는 ls -la

대쉬(-) 뒤에 옵션 입력

 

# '#' 기호는 설명을 위해 사용되었습니다.

drwxr-xr-x # 생략

-rw-r--r-- # 생략

 

여기서 d로 출력된 경우는 폴더를, -로 출력된 경우는 파일을 나타냅니다.

 

open . : 디렉토리 오픈

 

명령어 cd는 change directory의 약자

 

touch hi.txt hit.txt 파일 생성

 

cat hi.txt 파일 내용 확인

 

원격 서버에 접속하는 일은 네트워크를 통해 이뤄지기 때문에, 원격으로 접속한 상태에서 큰 파일을 출력하는 일은 굉장히 비효율적입니다.

 

폴더 또는 파일의 이름에 공백(띄어쓰기)이나 특수문자가 있으면, 백슬래시(\)를 이용해 적용합니다.

 

예예 예!

 

기본적인 명령어 (2)

명령어 rm은 폴더나 파일을 삭제할 때 사용

 

rm -rf bye 폴더 삭제 경우 옵션 rf(recursive force)

 

명령어 mv는 move의 약자로, 폴더나 파일을 이동할 때 사용

mv bye.txt bye/  :bye.txt 를 bye폴더로 이동

 

mv bye.txt helloWorld.txt : bye.txt를  helloWorld.txt 로 이름 변경

 

명령어 cp는 copy의 약자로, 폴더나 파일을 복사할 때 사용합니다.

cp helloWorld.txt hiComputer.txt

 

cd.. 상위 폴더로 이동

* CLI에서 .은 현재 폴더를 나타냅니다. ..은 현재 폴더(.)을 기준으로, 앞에 .이 하나 더 붙습니다.

 

cp -rf bye hi : bye 폴더 hi라는 이름으로 복사

각 명령어에 포함된 옵션은 명령어 이름만 입력하거나 -h 또는 --help와 같은 옵션을 통해 확인

 

사용자와 관리자

더보기

컴퓨터를 사용하다보면 새로운 프로그램을 설치할 때, 관리자 권한으로 실행하는 경우가 있습니다. 이번 콘텐츠에서는 관리자와 사용자의 차이점, 그리고 경로에 대해 설명합니다.

컴퓨터의 운영체제에는 사용자와 관리자가 있습니다. 사용자는 우리가 일상적으로 PC를 켜서 바탕화면에 진입하기 위해 로그인하는 계정입니다. 그리고 관리자는 사용자가 접근할 수 없는 영역에 접근할 수 있는 높은 권한을 가지고 있습니다. 분명 PC의 주인은 사용자일텐데, 왜 관리자가 별도로 필요할까요? MS(MicroSoft)사에서 개발한 운영체제, 윈도우즈(Windows)의 초기 버전에는 관리자 권한이 없었습니다. 정확히는 사용자가 없이, 항상 관리자 권한으로 프로그램을 설치, 변경, 삭제할 수 있었습니다.

PC가 항상 관리자 권한으로 실행되다보니, 개발에 대한 지식이 없는 일반 사용자가 정보를 탈취당하는 일이 발생합니다. 흔히 말하는 해킹(Hacking)은 공격자가 좋지 않은 의도로 작성한 코드를 프로그램에 삽입하고, 사용자가 프로그램을 설치한 경우에 발생할 수 있습니다. 공격자가 좋지 않은 의도로 작성한 코드는, 사용자가 입력하는 내용을 공격자에게 전달하도록 작성되어 있습니다. 이렇게 좋지 않은 의도로 작성된 코드를 악성코드(Malicious Code)라고 합니다. 항상 관리자 권한으로 실행되는 PC에서는, 악성코드가 삽입된 프로그램이 어떤 안전장치도 없이 설치됩니다. 사용자는 어떤 프로그램에 악성코드가 심어져 있는지 파악할 수 없습니다.

[그림] 해커는 사용자의 기기에 설치된 악성코드로 사용자의 정보를 탈취합니다.

윈도우즈의 블루스크린을 알고 있나요? 둘 이상의 프로그램이 충돌을 일으키면 블루스크린이 나타납니다. 악성코드가 아니라도, 시스템의 설정을 변경하는 몇몇 프로그램이 있습니다. 둘 이상의 프로그램이 시스템(운영체제)의 설정 변경에 참여하는 과정에서, 기존의 설정에서만 동작하도록 만들어진 프로그램이 강제로 종료되는 일이 발생합니다. 이렇게 두 개프로그램끼리 하나의 시스템(운영체제)을 놓고 다투는 과정을 프로그램 충돌(Conflict)이라고 합니다. 과거의 윈도우즈에서는 예상치 못한 프로그램의 충돌로 인해 시스템이 마비될 때, 컴퓨터가 화면에 블루스크린을 출력했습니다.

악성코드와 프로그램의 충돌로 인해 고통받는 고객을 보호하기 위해, MS사는 윈도우즈 Vista에 "사용자 계정 컨트롤"을 탑재했습니다. 사용자 계정 컨트롤(UAC, User Account Control)은 시스템을 관리하는 관리자와, 일상적으로 PC를 사용하는 사용자를 구분합니다. 관리자는 프로그램을 설치하거나 변경 또는 삭제하는 권한을 가지고 있고, 사용자는 프로그램을 실행할 수 있지만, 변경할 수 없도록 제한된 권한을 가지고 있습니다. 사용자 계정 컨트롤은 사용자가 모르는 사이에 시스템 설정을 변경하는 악성코드가 실행될 때, 접근 권한을 막아 사용자를 보호합니다.

[그림] 관리자 권한으로 실행할지 묻는 사용자 계정 컨트롤의 팝업

 

윈도우즈의 사용자 계정 컨트롤으로 하나의 PC에 여러 사용자를 등록할 수 있게 되었습니다. 한 대의 컴퓨터만 있으면 아빠, 엄마, 아들, 딸 모두 각자의 계정을 생성할 수 있습니다. 한 대의 PC에 4명의 사용자가 등록되어, 마치 4대의 PC가 있는 것처럼 사용할 수 있습니다. 다운로드 받은 파일이나 프로그램에 대한 접근권한이 사용자 계정마다 분리되어, 각 사용자는 다른 사용자의 영역을 침범할 수 없습니다.

리눅스 기반의 운영체제에도 사용자 계정 컨트롤이 있습니다. 정확히는 리눅스 기반의 운영체제에서 먼저 사용자와 관리자를 구분하였습니다. Ubuntu를 처음 설치하거나, macOS 기반의 PC를 구매한 직후 처음으로 전원을 켤 때, 사용자를 등록해야 합니다. 윈도우즈처럼 관리자 권한을 이용하면, 사용자를 추가, 변경, 삭제할 수 있습니다.

리눅스 기반의 운영체제 중 Ubuntu에서는, 사용자가 절대 관리자 권한에 접근할 수 없도록 구분해두었습니다. 그러나 새로운 프로그램을 설치하거나 변경 또는 삭제할 때에 관리자 권한이 반드시 필요하기 때문에, 특정 명령어를 입력하는 것으로 잠시 관리자 권한을 빌려올 수 있습니다. 이번 콘텐츠의 하단에서, CLI로 관리자 권한을 획득하고 사용하는 방법을 안내합니다.

이어지는 내용에서는, 관리자 권한을 이해하기 위해 필요한 절대 경로와 상대 경로를 설명합니다.

 

절대 경로와 상대 경로

경로는 명령어 pwd로 확인할 수 있는 절대 경로와, 현재 위치로부터 상대적인 위치를 나타내는 상대 경로로 나뉩니다. 절대 경로는 기준점으로부터의 절대적인 위치를 나타내는데, 이 기준점을 루트폴더(/)라고 합니다. 정리하면, 절대 경로는 특정 폴더나 파일이 루트폴더로부터 어떤 폴더로 진입하는 경우 만날 수 있는지 나타냅니다.

 

macOS

/Users/[username]/helloWorld/hello/라는 경로를 예시로 살펴보겠습니다. 루트폴더(/)에는 폴더 Users가 있습니다. 폴더 Users로 진입하면, 폴더 [username]을 확인할 수 있습니다. 폴더 [username]에 진입하면, 폴더 helloWorld가 있고, 폴더 helloWorld에 진입하면 폴더 hello를 발견할 수 있습니다. 이 과정을 한 줄로 줄여놓은 구문(/Users/[username]/helloWorld/hello/)이 절대 경로입니다.

 

cd ./hi # 현재 폴더 아래의 hi 폴더로 진입하는 명령

 

관리자(root) 권한

* 주의하세요. 관리자 영역을 실수로 변경하면, 운영체제(Operating System)이 먹통이될 수 있습니다. 운영체제가 망가지면, 운영체제를 재설치해야할 수 있습니다.

절대 경로의 기준점인 루트폴더(/)는 Linux의 관리자 영역이다.

 

cd / 루트영역으로 이동

절대 경로의 기준점인 루트폴더(/)는 Linux의 관리자 영역입니다. 일반 사용자의 권한으로는 어떤 폴더나 파일도 생성, 변경, 삭제할 수 없습니다.

 

현재 로그인된 사용자를 확인하는 명령어가 있습니다. 프롬프트에 명령어 whoami를 입력

 

운영체제에 등록된 사용자를 확인하기위해, 하위 폴더(Ubuntu: home/, macOS: Users/)로 이동합니다.

명령어 ls를 이용해 폴더나 파일을 확인하면, [username]의 폴더를 확인할 수 있습니다.

 

* 사용자 폴더의 경로(Path)는 ~/로 표시됩니다. 물결기호(~)는 루트폴더(/)로부터 사용자 폴더(username)까지의 경로를 축약한 형태입니다.

 

sudo: 관리자 권한을 획득하는 명령어

사용자가 관리자 권한을 일시적으로 획득하는 명령어는 sudo입니다

명령어 ls -l을 통해 특정 폴더나 파일이 사용자 또는 관리자의 소유로 생성되었는지 확인할 수 있습니다

 

# '#' 기호는 설명을 위해 사용하였습니다.

mkdir justMkdir

sudo mkdir sudoMkdir

 

텍스트 에디터 nano

CLI에서 환경에서 유명한 에디터는 vim(vi), emacs 등이 있습니다. 그러나 가장 사용하기 쉬운 에디터는 다름아닌 nano 에디터입니다

 

nano 실행

GUI 에디터인 VS Code를 역시 아래와 같이 CLI에서 실행할 수 있습니다.

code hello.js # hello.js 를 VS Code에서 엽니다.

nano도 비슷한 명령을 내릴 수 있습니다.

그냥 파일을 열지 않고, 빈 화면을 열어 새 파일을 만들 수도 있습니다.

터미널을 열어, nano를 실행합니다.

nano hello.js # hello.js 를 nano에서 엽니다.

nano # 그냥 실행할 수도 있습니다.

 

파일 열기

파일을 열기 위해서는 단축키 화면에 표시된것처럼 ^R, 즉 Ctrl + R 키 조합을 의미합니다.

기본적으로 파일이름을 입력하도록 화면이 안내되어 있지만,

즉시 ^T Ctrl + T를 누른 후 화살표키를 이용해 파일 및 디렉토리를 탐색한 후 불러올 수도 있습니다.

하지만, 역시 가장 쉬운 방법은 터미널에서 애초에 파일을 지정해서 여는 것입니다.

nano 파일이름

 

CLI 끝!!!

점심시작!

 

패키지와 패키지 매니저 시작!

 

패키지와 패키지 매니저

패키지 구성

  • 프로그램 파일
  • 프로그램 설치 파일
  • 프로그램 설치 설명서
  • 프로그램에 대한 정보를 담은 파일

패키지 매니저는 패키지의 설치, 변경, 삭제 등 관리를 편리하게 해주는 도구

 

Achievement Goals

  • 패키지와 패키지 매니저 필요성을 이해할 수 있다.
  • 각 운영체제에 맞는 패키지 매니저를 사용할 수 있다.
    • MacOS 운영체제에서 터미널을 통해 Homebrew 패키지 매니저를 설치하고 패키지를 관리하는 명령어를 사용할 수 있다.
      • brew update: 패키지의 업데이트 여부 확인
      • brew outdated: 업데이트 필요한 파일 조회
      • brew upgrade: 프로그램 업그레이드
      • brew info: 프로그램의 정보 확인
      • brew install: 프로그램 설치
      • brew list: 설치된 프로그램 목록 보기
      • brew uninstall: 프로그램 삭제

대세 패키지 매니저

homebrew 이미 설치해서 사용

 

혹시 무언가 잘못되고 있다고 느껴지시는 경우

너무 시간이 오래 걸리거나, 뭔가 과정 중에 예상치 못하게 멈춰있는 경우에는 어떻게 하면 될까요?

Ctrl + C 키는 작업을 취소하고, 터미널의 사용자 입력을 다시 되찾아오는 역할

 

brew 명령어 이용

  • brew 자체 업데이트: brew update
  • 업데이트 필요한 파일 조회: brew outdated
  • 프로그램 업그레이드(업데이트): brew upgrade 프로그램이름
  • 프로그램 검색: brew search 검색어
  • 프로그램 정보 확인: brew info 프로그램이름
  • 프로그램 설치: brew install 프로그램이름
  • 프로그램 삭제: brew uninstall 프로그램이름
  • 설치된 프로그램 보기: brew list

 

Action Items

  • wget을 설치해보세요. wget은 URL을 통해 파일을 다운로드 받는 프로그램입니다.
    • 설치 후, 다음 명령을 복사/붙여넣기 해서 실행해보세요.
    • 해당 디렉토리에 goodjob.txt라는 파일이 만들어졌습니다.
    • 다운로드 받은 파일을 확인해보세요. wget -O goodjob.txt https://bit.ly/37sJqCo
  • neofetch를 설치해보세요. 설치 후, 직접 neofetch를 실행시켜보세요!

패키지와 패키지 매니저 끝!

 

Node.js 시작!

 

런타임이란 프로그래밍 언어가 구동되는 환경입니다. 런타임 이란 어떤 프로그램이 동작할 때, 프로그램이 동작하는 곳

 

JavaScript 런타임이 웹 브라우저 밖에 없었습니다. 그러나 node.js라는 새로운 JavaScript 런타임의 등장으로, JavaScript가 브라우저가 아닌곳에서 실행될 수 있게 되었습니다. node.js의 등장 이후, JavaScript를 이용해서 웹 페이지 뿐만 아니라 서버와 같은 다른 프로그램을 만들 수 있습니다.

 

오오오!! node.js 짱! 백엔드할라믄 자바해서 DB랑 연동해야 했는데 안해도 되네.

 

CLI 환경에서 node <file_name> 명령어를 프롬프트에 입력하면 작성한 코드가 node.js라는 런타임에서 실행

 

Achievement Goals

  • nvm, Nodejs, npm을 설치하고, 버전을 확인할 수 있다.
  • 명령어 node를 이용해 JavaScript 파일을 실행할 수 있다.
  • 스프린트 시작 전 package.json 파일을 확인하고, npm install을 사용할 수 있다.

 

NVM

 

패키지 매니저처럼 node.js의 버전을 관리할 수 있도록 nvm(Node Version Manager)으로 node.js를 설치합니다. nvm을 사용하면 node.js의 다양한 버전을 쉽게 설치하고, 사용

 

GitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions

Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions - GitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active nod...

github.com

 

nvm 간단 사용법

nvm을 설치하고 아래 명령어를 입력해 보세요.

nvm ls

그럼 현재 nvm을 통해 설치한 node version들이 나옵니다. 특정 버전의 node를 설치하고 싶으면 다음과 같이 입력합니다.

nvm install 12.18.3

이렇게 하면 이미 설치된 버전을 삭제하지 않고, 우리가 원하는 node version을 설치할 수 있습니다. 사용중인 node version을 다른 버전으로 변경하고 싶을 때에는 아래의 명령어만 입력하면 됩니다.

nvm use 버전넘버

# 예를 들어, nvm use 12.18.3, nvm use 14.15.5

 

nvm으로 node의 버전을 관리하면, node를 설치하고 version을 바꾸는 일이 편리합니다.

정리하면 nvm 다양한 node version를 설치하고 관리할 수 있는 프로그램 입니다.

너무 편하당!

 

npm & package.json

하나의 프로그램은 다양한 모듈이 합쳐져서 만들어집니다. 프로그래밍 세계에서의 격언 중 "바퀴를 재발명 하지마라"는 말이 있습니다. 즉, 우리가 개발을 할 때 모든것을 다 만들어서 쓰지는 않습니다. 우리가 다 만들지 않는 이유는 여러 가지가 있습니다.

이 만들어놓은 모듈을 node.js 에서는 npm 모듈이라는 이름으로 부르며, 이에 대한 정보를 담아둔 곳이 바로 package.json입니다.

 

ode.js 환경에서 외부 라이브러리를 다운로드 받기 위해 다양한 방법이 존재하지만, 그 중 대표적인 것은 바로 npm입니다. npm은 Node Package Manager로 일종의 앱스토어입니다. 필요한 모듈을 다운로드할 수 있는, 모듈들이 모여있는 모듈 스토어입니다.

 

node.js 생태계의 패키지 매니저는 npm입니다.

아래 부터는 코.스 복붙!

 

package.json에는 이 프로그램을 실행시키기 위해 필요한 모듈들이 무엇인지, 프로그램을 실행시키는 방법, 프로그램을 테스트하는 방법 등이 명시되어 있습니다. 헷갈리면 안되는 점은 이 프로그램을 실행시키기 위해 필요한 실제 모듈은 따로 node_modules이라는 폴더에 저장된다는 것입니다. package.json에는 어떤 모듈인지만 적혀 있습니다. 즉, 전자제품을 보러 갔을 때 제품 카탈로그가 바로 package.json이라 생각할 수 있습니다. 카탈로그만 보면 어떤 제품이 있는지 파악할 수 있는 것처럼 package.json만 보면 어떤 모듈이 들어가 있는지를 알 수 있습니다.

 

아주 중요한 구조를 잘 설명해 놓았다. 평소 자바 스프링 설치하면서 구조가 눈에 잘들어오지 않았는데  굿!

 

package.json이 주는 또 하나의 이점은 프로젝트 코드를 전달할 때, 포함하고 있는 모든 모듈을 다 전달하지 않아도 된다는 점 입니다. 우리는 프로젝트 코드를 넘겨줄 때, "우리 코드는 여기 있고, 필요한 모듈은 package.json에 적어놨으니 네가 직접 다운받아서 쓰면 돼" 라고 하면 됩니다.

 

package.json 에 적혀있는 내용을 하나하나 살펴봅시다. 먼저는 devDependencies 입니다. 먼저 dependency라는 용어가 조금 낯설게 느껴지리라 생각됩니다. 그냥 모듈이라고 생각해도 좋습니다. 특별히 개발이나 실행에 해당 모듈을 "의존"한다고 해서, "의존성(dependency)"이라고 부릅니다.

 

JSON 형식에서,

 

더보기

 name-value 형식의 쌍(pair)

  • 여러 가지 언들에서 object, hashtable, struct로 실현되었다.
  • { String key : String Value}

{ "firstName": "Kwon",

"lastName": "YoungJae",

"email": "kyoje11@gmail.com" }

 name-value 형식의 쌍(pair)

  • 여러 가지 언들에서 object, hashtable, struct로 실현되었다.
  • { String key : String Value}

{ "firstName": "Kwon",

"lastName": "YoungJae",

"email": "kyoje11@gmail.com" }

 

키에 적힌 것은 모듈 이름입니다. 값은 버전입니다. devDependencies에는 이 프로젝트를 개발하는 환경에서 필요한 모듈들이 무엇인지가 적혀 있습니다. 예를 들면 코드 모양을 잡아주는 lint나 테스팅 모듈처럼, 실제 프로젝트 동작에 직접적으로 영향을 주지 않는 모듈들을 명시합니다.

 

더보기

npm 패키지, npm 모듈, npm dependency 는 전부 동일한 대상을 가리킵니다. 관점에 따라 다른 용어를 쓸 뿐입니다.

"독립적인 하나의 완성된 조각"이라는 의미로 패키지 라는 용어를 사용하며, 다른 프로그램에서 패키지를 가져다 쓰면 모듈 이라고 부릅니다. 다른 프로그램에서 이 패키지를 모듈로 사용하면, 프로그램을 실행할 때 이 모듈에 의존할 수밖에 없습니다. 이때는 dependency(의존성)라고 부릅니다. 용어는 조금 다르지만, 동일한 대상을 가리킵니다.

npm 패키지, npm 모듈, npm dependency 는 전부 동일한 대상을 가리킵니다. 관점에 따라 다른 용어를 쓸 뿐입니다.

"독립적인 하나의 완성된 조각"이라는 의미로 패키지 라는 용어를 사용하며, 다른 프로그램에서 패키지를 가져다 쓰면 모듈 이라고 부릅니다. 다른 프로그램에서 이 패키지를 모듈로 사용하면, 프로그램을 실행할 때 이 모듈에 의존할 수밖에 없습니다. 이때는 dependency(의존성)라고 부릅니다. 용어는 조금 다르지만, 동일한 대상을 가리킵니다.

난 이렇게 도메인 용어를 잘 살펴보는게 해당 도메인에서 전문가로 성장하는 지름길이라고 생각한다.

 

npm install을 이용하면, npm에 있는 모듈을 설치할 수 있는데, 이 때 --save-dev 옵션과 함께 설치하면, 자동으로 devDependencies에 추가됩니다.

 

dependencies는 devDependencies와는 다르게, 이 프로젝트가 돌아가기 위해 반드시 필요한 모듈들이 무엇인지가 적혀 있습니다. 예를 들어, underscore라던지, 이후 배울 React 같은것이 좋은 예가 됩니다.

--save 옵션과 함께 설치하면, 자동으로 dependencies에 추가됩니다. --save 옵션은 생략해도 좋습니다.

 

다른 사람에게 이 프로젝트에 대해 알려주어야 하겠죠?! 그 역할을 하는 것이 바로 package.json 입니다.

 

scripts 항목은 CLI에서 사용가능한 명령을 기술합니다. 우리는 이를 npm script라고 부릅니다. CLI에서 실행할 때에는 "npm run <스크립트 이름>" 으로 실행합니다.

유용한 scripts 예제를 소개합니다. 주로 실행, 테스트, 코드 검사(lint) 등을 기술합니다. 이러한 작업이 항상 모든 프로젝트에 있는 것은 아니며, 테스트 케이스 통과만이 목적인 경우에는, start 스크립트조차 없을 수 있습니다. 코드스테이츠에서는 특별하게 과제 제출 역시 npm script로 제공됩니다. 대부분의 스프린트에서 npm run submit을 통해 과제 제출이 가능합니다.

 

Linux 기초 끝!!!

 

오늘도 많이 배웠습니다.

배워서 남 주자!