- 라우팅의 분리
- 로직의 모듈화
node.js의 http 모듈을 이용하여 만든 코드의 경우 if - else if의 중첩 적용으로 인해 코드가 불필요하게 복잡해지고 가독성 또한 많이 떨어진다. 하지만 Express를 이용하여 구현한 코드의 경우에는 기능별로 별도의 파일로 관리할 수 있으며, 이는 각각의 요청을 처리하는 함수의 분리로 인해 직관적으로 코드를 설계할 수 있다는 장점을 가지고 있다. 즉 Express.js를 사용하면 Node.js 기반의 HTTP API 서버 프로그램을 보다 쉽고 빠르게 개발하고, 유지/보수 할 수 있게 해준다.
프로젝트를 진행할 폴더를 만들고 해당 경로로 진입한다.
mkdir myapp
cd myapp
npm init -y 명령어를 사용하여 작업을 의도한 어플리케이션에 package.json 파일을 생성한다. 뒤에 붙는 -y 명령어를 통해서 디폴트 값으로 제공하는 기본 설정 값을 남겨둔다.
npm init -y
npm 명령어를 이용하여 express를 설치하여 배포용으로 쓰일 패키지임을 명시하는 package.json 파일 내 “dependency list”에 저장한다.
npm install express
또는 instal을 i로 축약하여 아래와 같이 명령어 이용도 가능하다.
npm i express
dependencies, 즉 배포용이 아니라 로컬 개발환경에서 저장하고 싶다면 devDependencies에 해당 내용을 저장하는 아래의 명령어를 사용한다.
npm i express --save-dev
Node에서 코드를 수정하면 수정 사항이 서버에 자동으로 반영되지 않으므로 코드를 수정하고 나면 서버를 계속 다시 켜주어야 하는 번거로움이 있다. 이를 보완하기 위한 것이 nodemon 이라는 패키지를 이다.
npm install -g nodemon
설치 명령어 뒤에 -g 를 붙임으로써 global 변수로 nodemon을 설치한다. -g를 붙이지 않을 시 local로 설치되므로 프로젝트 전역에 걸쳐서 재사용이 되기 위해 global 설치가 여러모로 편리하다.
또한, package.json 내부의 "script" 란에 "start": "nodemon app.js" 을 추가해주면
npm start 명령어 만으로 언제든지 nodemon이 제공하는 도움을 받을 수 있다.(기존에는 nodemon app.js 라고 명령어를 쳐야하지만 이제는 npm start 라고만 쳐도 동일한 기능을 수행한다.)
nodemon은 디렉토리(또는 디렉토리)를 계속 모니터링하고 변경 사항이 있으면 스크립트를 다시 시작한다. 수동으로 서버 종료 없이 재시작하는 방법은 실행중인 터미널 창에 rs 를 입력하면 된다.
현재의 웹 브라우저는 보안상의 이유로 서로 다른 출처의 http 통신을 막도록 기본적으로 세팅되어 있다. 그러나 백엔드와 프론트 서버가 서로 다른 도메인에서 운용되는 현재의 3세대 웹 서비스 환경에서 동일한 출처에서만 리소스를 주고 받을 수 없는 것이 현실이다. 그러므로 CORS를 통해 서로 다른 두개의 origin/domain 끼리의 데이터를 주고 받게 하기 위한 설정이 이루어진다. (만약 해당 과정을 생략한다면 CORS 정책 위반을 이유로 웹 브라우저 차원에서 서버 통신을 막는다.)
npm install cors
< 모든 request에 대해 CORS 요청을 설정하는 법 >
< 단 하나의 route에서만 CORS 요청을 설정하는 법 >
dotenv 라이브러리는 디폴트로 현재 디렉토리에 위치한 .env 파일로 부터 환경 변수를 읽어낸다.
npm install dotenv
항상 자바스크립트 파일의 최상 위에 다음과 같이 dotenv 라이브러리를 임포트한 후 config() 함수를 호출해주는 것을 추천한다. (같은 파일 내에서 dotenv 라이브러리의 config() 함수를 호출하기 전에 process.env를 읽으면 ‘undefined’ 값이 반환되므로 주의한다.)
NodeJS 서버로 구성된 웹 환경에서는 기본적으로 제공되어지는 로깅(네트워크 통신기록) 기능이 없기에, 로그(log)를 관리하기 위해서 외부의 서드파티 모듈/라이브러리를 사용할 것을 권장한다. 그 중 Morgan은 npm 에서 사용되는 로그 관리를 위한 여러 패키지 중 하나이며 Morgan을 사용하면 http(s) 통신시 프론트-백엔드간 소통시 필요로 하는 ‘기본 정보’들을 자동으로 포매팅하여 편리하게 주고 받을 수 있다. (‘기본 정보’란, http 통신시 request, response 형태로 주고 받는 status code, http version 등의 메타 정보들을 의미)
npm install morgan
express 환경의 앱에서 morgan을 사용하도록 설정해준 후 로그의 포맷을 설정준다. common, dev, short, tiny 이렇게 총 4가지의 포맷 설정이 가능하다.