5 minute read

삭제

: 삭제 방법부터 소개한다.

  1. Node.js 패키지와 npm패키지를 삭제
     $ sudo apt-get remove nodejs
     $ sudo apt-get remove npm
        
    
  2. 이제 Node.js와 npm 패키지를 완전히 제거하기 위해, 관련된 설정 파일과 의존성 패키지를 모두 삭제
     $ sudo apt-get purge nodejs npm
        
    
  3. 마지막으로, 더 이상 필요하지 않은 패키지와 의존성을 자동으로 제거.
     $ sudo apt-get autoremove
        
    

설치

공식홈페이지: https://nodejs.org/en/

  1. 패키지 최신화
     $ apt-get update
     $ apt-get upgrade
        
    
  2. 설치전 패키지버전 확인
     $ apt list | grep nodejs
        
     WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
    
     netdata-plugins-nodejs/oldstable 1.12.0-1+deb10u1 all
     nodejs-doc/oldstable,now 10.24.0~dfsg-1~deb10u3 all [installed,automatic]
     nodejs/oldstable,now 10.24.0~dfsg-1~deb10u3 armhf [installed]    
        
    

    패키지 자동설치 명령어는 너무 구버전을 설치한다. 실제로 아래와 같이 저장소에 버전을 확인해보면 너무 낮다. 노드JS의 패키지 저장소를 최신으로 변경시킨다. (주소 뒤에 숫자는 버전이다.)
    참고로 최신 버전은 기능이 불안정하거나 일부 모듈(패키지)이 작동하지 않을 수 있으므로 안정성을 보장하고 싶으면 LTS 버전을 사용하는 게 좋다.

    최신버전링크: https://nodejs.org/en

    • 2023년 3월 20일 기준 최신인 19.8.1, LTS 버전은 18.15.0
     # 최신 NodeJS 패키지 저장소로 변경 (18으로 입력)
     $ curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash -
        
     # 최신인 18버전을 보고있다.
     $ apt list | grep nodejs
        
     WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
        
     netdata-plugins-nodejs/oldstable 1.12.0-1+deb10u1 all
     nodejs-doc/oldstable 10.24.0~dfsg-1~deb10u3 all
     nodejs/unknown 18.15.0-deb-1nodesource1 armhf
            
    

    설치한다.

     # 설치
     $ apt-get install nodejs
        
     # 최신버전 정상 설치
     $ node -v
     v18.15.0
        
     $ npm -v
     9.5.0
        
     # 윈도우OS 이라면? .msi 확장자로 설치하면 된다.
        
    

    잠깐!
    Node.js를 설치하면 NPM(Node Package Manager) 도 함께 설치되어진다.

테스트

Node.js 테스트(js실행)

$ mkdir ~/nodeStudy
$ cd ~/nodeStudy

# JS파일 생성
$ touch main.js

// main.js 작성
function sum(a,b) {
    return a + b;
}

console.log('sum = '+ sum(1,2)); 

# 이렇게 미리 생성된 JavaScript 파일을 우리는 node명령어를 통해 실행할 수가 있다.
$ node main.js 
sum = 3      # JS가 실행되었다.

NPM 테스트(다운로드)

$ cd ~/nodeStudy  # 루트폴더이동
$ npm init -y

## dir 명령어로 확인해보면 아래 파일이 생성되었다
$ ls
package.json  

package.json

{
  "name": "nodestudy",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"                                                                                        }
}

package.json 이란?
package.json은 프로젝트에 대한 명세라고 할 수 있다.
해당 프로젝트의 이름, 버전, 사용되는 모듈 등의 스펙이 정해져 있으며, 이 package.json을 통해 모듈 의존성 모듈 관리도 진행할 수 있다. 만약 어떤 오픈 소스를 다운 받을 때 이 package.json만 있다면 해당 오픈 소스가 의존하고 있는 모듈이 어떤 것인지.
그리고 그 모듈들을 npm install 명령어로 한 번에 설치할 수 있다.

이제 NPM 기능으로 모듈을 설치가 되는지 테스트해보자.

$ npm install express

added 57 packages, and audited 58 packages in 5s

7 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
npm notice
npm notice New minor version of npm available! 9.5.0 -> 9.6.2
npm notice Changelog: https://github.com/npm/cli/releases/tag/v9.6.2
npm notice Run npm install -g npm@9.6.2 to update!
npm notice

설치를 완료했다. 정상인지 확인해보자.

$ npm list
nodestudy@1.0.0 /fswas/wasadm/nodeStudy
└── express@4.18.2

디렉토리는 아래와 같이 새로운 폴더들이 생성된다.
Express 패키지가 설치되면 프로젝트 폴더에 node_modules라는 폴더가 생성되며, 자동으로 express 패키지 가 참조하고 있는 다른 npm 패키지들이 설치되는 것이다. (패키지 의존성이라 부른다.)

$ ls -al
합계 40
drwxr-xr-x  3 wasadm wasadm  4096  3월 20 17:25 .
drwxr-xr-x  6 wasadm wasadm  4096  3월 20 17:13 ..
drwxr-xr-x 59 root   root    4096  3월 20 17:25 node_modules  #생성!
-rw-r--r--  1 root   root   21864  3월 20 17:25 package-lock.json #생성!
-rw-r--r--  1 root   root     273  3월 20 17:25 package.json

실제로 node_modules 안에는 의존하는 수많은 패키지들이 설치되어져 있다.

내부망(폐쇄망) 환경이라면?
외부에서 미리 node_modules 를 구축하고 내부로 들고 온다. 그리고 루트 폴더에 넣어주면 사용가능하다.

최종

NPM 으로 다운받은 모듈을 사용한 JS를 NODE 명령어로 사용한 최종 결과.

루트/app.js

$ touch app.js
$ vi app.js

const express = require('express');
const app = express();
const PORT = 3000;

app.get('/', (req,res) => {
    res.send('Hello World!');
});                                                                                                       

app.listen(PORT, () => {
    console.log('서버가 실행됩니다. http://127.0.0.1:' + `{PORT}` + '/');
});

express 모듈로 서버를 실행한다.

$ node app.js
서버가 실행됩니다. http://127.0.0.1:{PORT}/

다른 계정으로 접속하여 띄운 Nodejs 서버에 접속해본다.

$ curl http://localhost:3000
Hello World!

정상적으로 NPM으로 설치한 모듈을 사용하여 Node.js 서버가 가동되었다. 그리고 JS내용이 보임으로써 서버 작동이 정상임을 확인했다.

: 폴더링 구조를 다음과 같이 잡아보았다.

.
│   app.js           # App entry point
├── config          # 설정파일
├── controllers     # 컨트롤러 (주요 로직들)
├── dist            # 타입스크립트 컴파일 후 배포 폴더
├── middlewares     # 미들웨어
├── models          # Database models
├── public          # 정적 Resource(이미지, CSS, JS)
├── routes          # 라우팅
│   ├── main
│   └── member
├── types           # Type declaration files (d.ts) for Typescript
├── utils           # 각종 유틸 함수들
└── view

  • config
    애플리케이션 설정 파일들이 들어갑니다.
  • controllers
    비즈니스 로직을 담당하는 컨트롤러 파일들이 들어갑니다.
dist
소스 코드를 빌드한 결과물을 저장하는 디렉토리입니다. 일반적으로 Node.js 프로젝트에서 dist 디렉토리는 “distribution”의 줄임말로, 빌드된 소스 코드가 최종적으로 배포되는 디렉토리입니다. TypeScript나 Babel과 같은 트랜스파일러를 사용해 ES6+ 문법으로 작성된 소스 코드를 ES5 문법으로 변환하고, 번들러를 사용해 필요한 모듈과 라이브러리들을 하나로 묶은 후, 최종적으로 빌드된 소스 코드가 dist 디렉토리에 저장됩니다. 일반적으로 소스 코드를 작성하고 디버깅할 때는 src 디렉토리에 있는 소스 코드를 사용하고, 배포할 때는 dist 디렉토리에 있는 소스 코드를 사용합니다. dist 디렉토리에 있는 소스 코드는 변환, 번들링, 최적화 과정을 거친 최종 결과물이므로, 상용 환경에서 배포할 때 사용됩니다.
middlewares
미들웨어 함수들이 들어갑니다.
models
데이터베이스와 관련된 모델 파일들이 들어갑니다.
public
정적 파일들이 들어갑니다.
routes
라우팅 파일들이 들어갑니다.
types
TypeScript 인터페이스나 타입 정의 파일들이 들어갑니다.
utils
유틸리티 함수들이 들어갑니다.

public 폴더와 view 폴더를 분리하는가?

일반적으로 Node.js에서는 public 폴더와 view 폴더를 분리하여 사용하는 것이 일반적입니다. public 폴더는 정적 파일(이미지, CSS, JavaScript 등)을 저장하는 곳으로, 클라이언트에게 제공되는 파일들을 저장하는 폴더입니다. view 폴더는 동적인 웹 페이지를 구성하는 뷰(HTML) 파일들을 저장하는 폴더입니다.

public 폴더에 저장된 파일들은 클라이언트에게 직접적으로 접근 가능하며, 클라이언트에서 웹 페이지를 요청할 때 사용되는 정적 파일들은 주로 public 폴더에 저장됩니다. 반면에 view 폴더에는 서버에서 렌더링되어 클라이언트에게 전달되는 동적인 뷰(HTML) 파일들이 저장되어 있습니다. 서버에서 데이터를 가공하여 클라이언트에게 전달하는 경우에 사용되는 뷰 파일들이 주로 view 폴더에 저장됩니다. 이렇게 폴더를 분리하여 사용함으로써 코드의 가독성, 유지보수성, 확장성 등을 향상시킬 수 있습니다. 이는 일반적인 개발 관례이며, 프로젝트나 개발 팀의 규칙에 따라 다를 수 있습니다.

view 폴더와 types 폴더를 분리하는가?

일반적으로 Node.js 프로젝트에서는 “types” 폴더와 “view” 폴더를 별도로 분리하는 것은 일반적이지 않습니다. “types” 폴더는 TypeScript와 같은 정적 타입 체크 도구를 사용하는 경우에만 필요한 타입 정의 파일들을 보관하는 폴더로 사용될 수 있습니다. 이 폴더는 개발자가 직접 생성하거나 사용하는 경우가 많고, 프로젝트의 특정 요구사항이나 개발 스타일에 따라 다를 수 있습니다.

반면에 “view” 폴더는 주로 Express와 같은 Node.js 웹 애플리케이션 프레임워크에서 사용되는 템플릿 엔진의 템플릿 파일들을 보관하는 폴더로 사용됩니다. 이 폴더는 클라이언트에게 보여지는 HTML, CSS, JavaScript 등의 프론트엔드 리소스를 관리하는데 사용되며, 보통 서버 측 렌더링을 구현할 때 사용됩니다. “view” 폴더는 프로젝트의 구조와 개발 스타일에 따라 다양하게 구성될 수 있습니다.

Leave a comment