성장에 목마른 코린이

(S3W1) TIL 45일차 220404 (Linux 심화) 본문

Today I Learned

(S3W1) TIL 45일차 220404 (Linux 심화)

성장하는 코린이 2022. 4. 4. 11:05
728x90

오늘의 학습목표

  • 사용 권한과 소유자에 대해 이해하고, 사용 권한을 변경할 수 있다.
    • 파일의 소유자와 파일에 적용된 사용 권한을 확인하고 이해할 수 있다. ls -l
    • 파일에 적용된 사용 권한을 변경할 수 있다. chmod
  • PC에 저장하는 환경변수가 무엇인지 이해하고, 사용할 수 있다.
    • PC에 저장된 환경변수를 확인할 수 있다. export
    • PC에 저장된 환경변수를 불러올 수 있다. dotenv
    • Node.js에서 환경변수를 영구적용할 수 있다. .env

학습내용

ls -l을 입력하면 터미널에 나타나는 출력. username은 사용자 이름입니다.

파일 helloworld.js는 -rw-r--r-- 이라고 출력되었고,

폴더 linux는 drwxr-xr-x 라고 출력되었습니다.

 

표현의 시작인 - 와 d 는 각각 not directory와 directory를 나타냅니다. 폴더이면 d로, 파일이면 - 로 나타냅니다.

r, w, x는 각각 read permission, write permission, execute permission으로 읽기, 쓰기, 실행 권한을 나타냅니다.

user/owner, group, and other

user/owner:

  • user는 파일의 owner입니다. 기본적으로 파일을 만든 사람이 소유자가 됩니다. user를 소유자라고 하기도 합니다.

group:

  • group에는 여러 user가 포함될 수 있습니다. 그룹에 속한 모든 user는 파일에 대한 동일한 group 액세스 권한을 갖습니다. 많은 사람이 파일에 액세스해야 하는 프로젝트가 있다고 가정합니다. 각 user에게 일일이 권한을 할당하는 대신에 모든 user를 group에 추가하고, 파일에 group 권한을 할당할 수 있습니다.

other:

  • 파일에 대한 액세스 권한이 있는 다른 user입니다. 파일을 만들지 않은 다른 모든 user를 의미합니다. 따라서 other 권한을 설정하면, 해당 권한을 global 권한 설정이라고 볼 수도 있습니다

chmod: 권한을 변경하는 명령어

명령어 chmod 폴더나 파일의 읽기, 쓰기, 실행 권한을 변경할 수 있습니다. OS에 로그인한 사용자와, 폴더나 파일의 소유자가 같을 경우에 명령어 chmod 로 폴더나 파일의 권한을 변경할 수 있습니다. 만약 OS에 로그인한 사용자와, 폴더나 파일의 소유자가 다를 경우에는 명령어 sudo 를 이용해 폴더나 파일의 권한을 변경할 수 있습니다.

 

명령어 chmod 로 권한을 변경하는 방식은 두 가지가 있습니다.

  • 첫 번째는 더하기(+), 빼기(-), 할당(=)과 액세서 유형을 표기해서 변경하는 Symbolic method입니다.
  • 두 번째는 rwx를 3 bit로 해석하여, 숫자 3자리로 권한을 표기해서 변경하는 Absolute form입니다.

Symbolic method는 액세스 클래스, 연산자, 액세스 타입으로 구분합니다.

Access classOperatorAccess Type

u (user) + (add access) r (read)
g (group) - (remove access) w (write)
o (other) = (set exact access) x (execute)
a (all: u, g, and o)  
// symbolic method 사용 예시
chmod g-r filename # removes read permission from group
chmod g+r filename # adds read permission to group
chmod g-w filename # removes write permission from group
chmod g+w filename # adds write permission to group
chmod g-x filename # removes execute permission from group
chmod g+x filename # adds execute permission to group
chmod o-r filename # removes read permission from other
chmod o+r filename # adds read permission to other
chmod o-w filename # removes write permission from other
chmod o+w filename # adds write permission to other
chmod o-x filename # removes execute permission from other
chmod o+x filename # adds execute permission to other
chmod u+x filename # adds execute permission to user

chmod a=rw helloworld.js # -rw-rw-rw-
chmod u= helloworld.js # ----rw-rw-
chmod a+rx helloworld.js # -r-xrwxrwx
chmod go-wx helloworld.js # -r-xr--r--
chmod a= helloworld.js # ----------
chmod u+rwx helloworld.js # -rwx------

Absolute form

숫자 7까지 나타내는 3 bits의 합으로 표기합니다.

사용자, 그룹, 또는 다른 사용자나 그룹마다 rwx 가 나타나고, 각 영역의 boolean 값으로 표기할 수 있습니다.

 

PermissionNumber

Read (r) 4
Write (w) 2
Execute (x) 1

 

만약, user는 rwx 를, group과 other은 r-- 로 권한을 변경하려고 한다면, 위 표에 나와있는 숫자의 합을 user, group, other 순으로 입력하여 사용합니다.

# u=rwx (4 + 2 + 1 = 7), go=r (4 + 0 + 0 = 4)
chmod 744 helloworld.js # -rwxr--r--

 

Absolute form에서 사용하는 숫자의 표 #SumrwxPermission

7 4(r) + 2(w) + 1(x) rwx read, write and execute
6 4(r) + 2(w) + 0(-) rw- read and write
5 4(r) + 0(-) + 1(x) r-x read and execute
4 4(r) + 0(-) + 0(-) r-- read only
3 0(-) + 2(w) + 1(x) -wx write and execute
2 0(-) + 2(w) + 0(-) -w- write only
1 0(-) + 0(-) + 1(x) --x execute only
0 0(-) + 0(-) + 0(-) --- none

export: 환경변수 확인하기 && 환경변수 임시 적용

Linux 운영체제에는 이미 많은 환경변수가 설정되어 있습니다.

터미널에 명령어 export 를 입력하면, 현재 설정된 환경변수를 확인할 수 있습니다.

명령어 export 를 이용하면, 새로운 환경변수를 추가할 수 있습니다.

이 때 등호 표시(Equal sign, =) 앞뒤에는 반드시 공백이 없어야 합니다.

// 새로운 환경변수 urclass="is good" 을 설정합니다. 
export urclass="is good"

 

명령어 echo 와 함께 환경변수를 입력하면, 환경변수의 값을 확인할 수 있습니다.

이때 환경변수의 앞에는 $을 입력하여, 변수라는 뜻을 터미널에 전달합니다.

dotenv: 자바스크립트에서 환경변수 사용하기

npm 모듈 dotenv를 사용하면, 자바스크립트에서 환경변수를 사용할 수 있습니다.

npm 모듈을 설치하고 사용하기 위해서, 새로운 폴더를 만들고 npm init 을 입력합니다.

그리고 npm i dotenv 를 입력해 모듈을 설치합니다. 이때 생성된 폴더는 설치할 모듈과 이름이 같아서는 안됩니다.

mkdir environment_variable
cd environment_variable
npm init # 엔터 키를 여러번 입력해 init을 마칩니다.
npm i dotenv # dotenv 모듈을 설치합니다.

 

설치한 dotenv를 이용해 환경변수에 접근할 수 있습니다. 새로운 파일 index.js를 생성하고, process.env 를 출력합니다. Node.js의 내장 객체 process.env를 이용하면, 명령어 export 로 확인한 내용과 동일한 내용을 객체로 출력합니다.

  • process.env 는 Node.js 환경에서 조회할 수 있습니다.
  • dotenv는 이어지는 콘텐츠 .env 파일를 환경변수로 사용할 수 있게 돕습니다.

.env: Node.js에서 환경변수 영구 적용

명령어 export 로 적용한 환경변수는 현재 사용 중인 터미널에서만 임시로 사용이 가능합니다.

Node.js에서는 파일 .env를 만들어 저장하는 방법을 사용합니다.

먼저 .env 파일을 생성하고, 사용하고자 하는 환경변수를 입력한 뒤 저장합니다.

모듈 dotenv를 이용하면, 파일 .env에 저장한 환경변수를 조회할 수 있습니다.

index.js를 다음과 같이 수정하고, 저장합니다.

const dotenv = require("dotenv");
dotenv.config();
console.log(process.env.myname);

그다음 index.js를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

환경변수를 이용해 API key, DB password와 같이 민감한 정보를 저장하고 관리할 수 있습니다. 그뿐만 아니라 서로 다른 PC 또는 여러 .env 파일에서, 같은 변수 이름에 다른 값을 할당할 수 있습니다.

 

실제 서비스을 개발하는 과정에는 개발 환경과 테스트 서버의 환경, 그리고 실제 제품을 제공하는 환경이 있습니다.

 

예를 들어 구글 API를 이용해 웹 애플리케이션을 만드는 경우, 개발 환경에서는 개발자 개인의 API 키를 이용할 수 있습니다. 그러나 제품을 서비스할 때에 개인 API 키를 사용하면, 일일 요청량을 초과하는 경우 제품이 정상적인 동작을 할 수 없습니다. 이런 경우를 방지하기 위해 실제 제품에서는 기업용 API 키를 사용합니다. 이처럼 개발 환경과 제품을 제공하는 환경에서 사용하는 API 키가 다른 경우, 환경변수를 이용해 환경을 구분하여 코드를 작성할 수 있습니다.

 

데이터베이스도 마찬가지로 개발, 테스트, 제품 환경으로 구분할 수 있습니다. 

 

오늘의 회고

 

오늘은 섹션3의 첫날 입니다. 오늘 스터디원 두분도 구하고, 어느 정도 체계도 확립한 날이라 만족스러웠습니다.

그리고 학습은 오늘 첫날이라 그런지 조금 가벼운 편이였고, 덕분에 조금 여유로울 수 있는 날이였습니다.

이번 섹션3는 섹션2 보다 더욱 열심히! 운동도 꾸준히! 스터디원들과 소통도 활발히! 하며 잘 지내보겠습니다!

화이팅!!!

Comments