TIL

(21.12.02)chmod, Node_ENV

도깨비젤리 2021. 12. 3. 00:52
작은 지식이라도, 하루에 하나씩.


 

한 줄 요약


🦄chmod는 유닉스 계통에서 쓰는 셸 명령어로, 파일이나 디렉터리의 파일 시스템 모드들을 바꾼다.🦄
🦄NODE_ENV는 개발/배포 모드를 구분 지을 때 흔히들 사용하는 값이다. process.env에 있는 값이 아니라 사용자가 직접 셋팅해줘야한다. 🦄

 

 

 

chmod(change mode)


리눅스에서 파일을 사용해서 할 수 있는 작업은 크게 3가지이다.

 

  • 파일에 저장된 데이터를 읽기 (read)
  • 파일에 데이터를 쓰기 (write)
  • 파일 실행 (execute)

 

윈도우가 주력 OS인 나에게는 굉장히 생소한 이야기지만, 리눅스는 각 파일 및 디렉토리에 읽기(r), 쓰기(w), 실행(x) 권한을 파일 개별적으로 지정할 수 있게 하였다. 더욱 재미있는 점은, 이 세 가지 권한을 파일을 소유한 사용자(user), 특정 그룹에 소속된 사용자(group), 그 외 사용자(other)에 대해 각각 지정할 수 있다는 것이다.

 

 

chmod 명령어는 파일의 권한을 조작하여 사용자에 따라 다른 권한을 가지도록 조작할 수 있다.

 

문자열로 chmod를 사용하는 방법과 8진법 숫자로 chmod를 사용하는 방법이 있는데, 이번에는 가장 흔하게 사용하는 8진법 방법을 알아보자.

 

  • 사용 예시
$ chmod -R 755 sample

 

➡ sample 이라는 폴더에 재귀적으로 다음 권한을 적용해라 (유저: 읽기/쓰기/실행 ; 그룹 : 읽기/실행 ; 타인 : 읽기/실행)

 

 

  • -R : 재귀적으로 파일들과 디렉터리의 모드를 바꿀 때 사용하는 플래그
  • -v : 자세한 모드; 실행되고 있는 모든 파일을 나열한다.

 

뒤에 붙어있는 세자리 숫자가 유저,그룹,타인에 대한 권한을 표현한 것이다. 백의 자리가 유저, 십의 자리가 그룹, 일의 자리가 타인을 상징하는데, 하단 표에 권한 별 대응하는 숫자를 모두 더하면, 각 클래스가 어떤 권한을 가지고 있는지 알 수 있다.

 

출처 : https://ko.wikipedia.org/wiki/Chmod

 

그럼 이 명령어는 무슨 뜻일지 생각해보자

$ chmod 664 sample

➡ 정답 : 유저에게 읽기,쓰기 권한; 그룹에게 읽기,쓰기 권한 ; 타인에게 읽기 권한

 

 

 

원격 호스트에 ssh key로 로그인하려고 할 때, key 파일이 너무 오픈 되어 있다고 경고가 나올때가 있는데, 그때는 해당 키를 chmod 400으로 설정해주어, 유저만 읽을 수 있도록 권한을 변경해주면 된다.

 

 

 

NODE_ENV


보통 node.js를 사용할 때, NODE_ENV 값을 이용해서 production 모드와 development 모드를 구분하여 실행하는 경우가 많다.

 

그도 그럴것이 배포를 위해서는 파일 캐싱, 에러 메시지 감추기 등등 보안 취약점이 될 수 있는 문제를 감춰야하는 한편, 개발 중에는 그런 것들을 여과 없이 봐야하기 때문이다.

 

그래서 서버를 실행할 때 다음과 같은 코드를 왕왕 사용한다.

 

if(process.env.NODE_ENV === 'production'){
	// do smt production thing
}else if(process.env.NODE_ENV ==='development){
	//do other
}

 

나는 이 NODE_ENV라는 값이 process.env 안에 설정 되어있고, 얘가 자동으로 개발환경인지 배포환경인지 판단해서 그 값이 바뀌는 줄 알았다. 그도 그럴것이, 내가 본 코드들은 NODE_ENV의 값이 production 아니면 development 뿐이였기 때문이였다. 그런데, 알고 보니 NODE_ENV라는 값은 내가 직접 셋팅 해줘야하는 것이였다.

 

아래 명령어를 프로젝트 터미널에서 작성하면 된다

 

  • Linux, Mac OS 
export NODE_ENV=development

Mac OS가 유닉스 기반으로 만들어져서 동일한 명령어를 공유하는 것 같다

 

  • Windows
set NODE_ENV=development

 

 

 

그래서 나는 이 명령어를 npm script로 만들어놓고 뿌듯해하고 있었는데....알고보니 더 쉬운(?) 방법이 있었다.

결론만 말하면, 난 process.env를 잘못 사용하고 있었다.

 

사실 process.env는 Node.js 앱이 동작할 리눅스/유닉스 시스템의 환경변수를 이용하는 것인데, 터미널에서 env 명령어를 타이핑 해보면 현재 컴퓨터에 설정된 환경변수들을 확인할 수 있다.

 

즉, env 명령어로 환경변수를 미리 생성 해두면 매번 서버를 켤때마다 저런 타이핑을 일일히 할 필요 없었다는 것이다.

 

env NODE_ENV=development

 

역시 삽질은 해봐야 는다....