Node.js | Node.js 사용 준비
Node.js 란?
Node.js는 JavaScript에서 작업을 수행할 수 있는 서버 환경이다. “서버 환경"라고 하면, 누구든지 생각할 수 있는 것은 “Web 서버가 있고, 거기에 HTML 파일 등이 게시되는 것"일 것이다. 서버 사이드 개발"이라고 하면, Perl이나 PHP라든가 프로그래밍 언어로 작성된 스크립트를 제공하여, 그들이 공개된 주소에 액세스하면 스크립트가 실행된다는 것으로 생각하는 사람이 많을 것이다.
Node.js는 이러한 개발 스타일과는 전혀 다르다. Node.js는 먼저 “서버를 만들겠다"것부터 시작한다. “응? 서버 자체를 만든다?” 라고 의문을 가지는 사람이 있을 것이다. 그렇다.
Perl이나 PHP라면, 서버 환경이라는 것은 따로 있고(Apache HTTP Server 라든지 xampp라는 것은 들어 본 적이 있을 것이다, 바로 그거이다), 이미 Web 서버로 동작하는 프로그램에서 “이 주소에 액세스가 있으면 이를 실행하는 거야"라는 것이 있어서, 이른바 “서버에 준비해 두는 부품” 같은 부분으로 웹프로그램을 만들었다.
그런데 Node.js는 “서버 프로그램으로 실행되는 스크립트"자체를 만든다. 그 스크립트에서 “이 주소에 액세스하는 경우 이 작업을 수행하려면” 같은 기본적인 부분까지 모두 만든다. 이 점이 기존의 서버 개발의 개념과 크게 다른 점이다.
“서버 자체를 만든다? 뭔가 몹시 어려워 보인다” 아무래도 그럴 것이다. 그런데, “서버를 만들겠다"고 하더라도, Node.js에는 제대로 된 “서버 객체"라는 것이 있어서, 이를 준비하는 것만으로 만들 수 있기 에 매우 어려운 것은 아니다. 그렇게 난이도가 높으면 이렇게 주목받는 일도 없을 것이다.
Node.js가 주목되는 이유를 단적으로 말하면 다음과 같다.
- 서버 사이드와 클라이언트 사이드를 하나의 언어로 개발할 수 있다.
- Web 개발이라는 것은 어쨌든 곳곳의 언어를 조합하여 누더기 투성이로 만드는 있는 느낌이 든다.
- 하지만 Node.js를 사용하면 서버에서 클라이언트까지 모든 “JavaScript"만으로 만들 수 있다.
- 기존의 Web 서버의 문제의 해결하였다.
- 지금까지 형태의 Web 서버는 액세스가 많아지면, 효율이 뚝 떨어졌다.
- Node.js는 “이벤트 루프” 방식을 되어 있어여, 스케일링(갑자기 맹렬한 액세스되거나 한 경우에도 대응할 수 있는 능력)에 뛰어나다는 것을 증명했다.
아무튼, 우리와 같은 초보가 “Web 응용 프로그램을 만들어 볼까"라고 했을 때, 스케일링 이라고 하면, 느낌오지 않을지도 모른다. 그렇지만 “어쨌든 전부 JavaScript만"이라는 것은 꽤 매력적이지 않은가?
이 Node.js, 처음에는 “자, 잠깐 사용해 볼까"라고 생각한 사람이 있어도 좀처럼 손을 댈 수 없었다. 이유는 두 가지. 하나는 “Linux 으로 하지 않으면 안된다"는 것 때문에, Windows 또는 Mac에서 사용할 수 없었다. 그리고 두 번째는 “운영환경이 없다"는 것이다. 모처럼 배워도 Node.js를 지원하는 렌탈 서버가 아니면 동작하지 않았다. 자기 부담으로 서버 컴퓨터를 준비해야만 하는 것인가?
그런 매니아적인 환경 같았던 Node.js도 지금은 Windows와 Mac 버전도 있으며, 누구나 쉽게 설치하고 사용할 수 있게 되었다. 그리고 운영 환경도 “클라우드"를 이용하여 누구나 무료로 Node.js으로 사이트 구축을 할 수 있게 되었다. 아마추어 수준에서도 손을 댈 수 있는 환경이 갖추어진 것이다. 더 이상 장애되는 것은 아무것도 없다.
Node.js 개발 환경
그럼 빠르게, Node.js 환경을 만들어 보자. Node.js는 현재 아래의 주소에서 배포되고 있다.
또한 Node.js 한국 사용자을 위해서 주요 문서 등도 조금씩 한글화하여 공개되어 있기 때문에 영어가 약한 사람은 여기에 접근하면 좋을 것이다.
node.js 다운로드
우선 아래 주소에 다운로드 페이지로 이동하자.
https://nodejs.org/ko/download/
이 페이지에 가면 현재 공개되어 있는 각 플랫폼의 프로그램이 모두 완비되어 있다. 여기에서 필요한 것을 다운로드하면 된다. Windows와 Mac OS X 전용의 프로그램도 준비되어 있기 때문에, 플렛폼에 맞는 사용하면 된다.
설치 프로그램은 특별히 어려운 점은 없을 것이다. 기본 설정 그대로 설치해 가면 된다.
설치하면 Windows의 경우에는 “Node.js command prompt"라는 항목이 시작 메뉴에 추가된다. 이는 사실 그냥 명령 프롬프트이다. 어떤 전용 어플리케이션 같은 것을 기대했다면 유감이었을 거다. Windows에서도 Mac에서도, Node.js는 명령 프롬프트 또는 터미널을 기동하고, 명령을 실행하여 사용한다. 어쨌든 이것은 단순히 “서버 환경의 스크립트를 실행하는 프로그램” 밖에 없기 때문이다. 커멘드로 “이 스크립트를 실행하라"고 명령하는 정도로 다른 기능은 없다.
그럼 Web 응용 프로그램의 작성은? 직접 파일을 만든다. 편집 작업은? 에디터 같은건 PC마다 갖고 있을 것이다. 프로덕션 환경에 배포는? 그냥 서버 프로그램이 아니다. …… 그래서, “스크립트를 실행한다 “는 것 외에는 전부 본인이 해결해 나가야 한다.
설치가 제대로 되었는지 확인해 보자. 아래와 같이 node -v
와 npm -v
를 실행해 본다.
node.js를 실행 프로그램인 “node"의 버전을 확인한다.
$ node -v
v20.0.0
패키지 관리 프로그램인 “npm"의 버전을 확인한다.
$ npm -v
9.6.4
2개 모두 버전이 제대로 나온다면 설치가 잘 된 거다.
편집기 다운로드
우선, 운영 환경에 배포는 잠시 뒤로 하고, 사용하기 쉬운 텍스트 편집기를 준비해 하자. 물론 표준 메모장이나 텍스트 편집기로도 가능하지만, 될 수 있으면 JavaScript를 지원하는 편집기를 사용할 수 있으면 좋겠다.
Visual Studio Code
Mac, Windows용으로 Visual Studio Code를 추천한다.
https://code.visualstudio.com/
어느 도구보다도 강력하다고 할 수 있다. 많은 기능을 제공하고 플러그인도 많이 존재해서 사용하기 편한다.
Notepad++
Windows 전용으로는 “Notepad++“를 추천한다.
https://notepad-plus-plus.org/
Notepad++는 설치가 간단하고, 많은 프로그래밍 언어를 지원한다. 그리고, 키워드 등의 색상 표시 및 구문에 맞춘 들여쓰기, 자동 완성 등의 기능을 제공한다. 프로그래밍에 있어 매우 편리한 편집기이다!
Sublime Text
Mac, Windows용으로는 “Sublime Text"를 추천한다.
많은 프로그래밍 언어도 지원하고 많은 기능을 제공한다.
Node.js 스크립트 작성
이제 Node.js를 사용해 보자. Node.js를 사용하는 방법은 매우 간단하다. “스크립트를 작성한다”, “명령을 실행한다” 이 뿐이다.
이미 언급한 바와 같이, Node.js의 스크립트는 JavaScript를 사용한다. 그런데, Web 페이지에서 사용하는 스크립트는 상당히 다르기 때문에, 익숙해지지 않으면 조금 위축지도 모른다. 우선, 스크립트의 내용은 뒷전으로 하고, “작성 해서 동작시킨다"것 만이라도 해보도록 하자.
아래에 매우 간단한 스크립트를 올려 두었다.
var http = require('http');
var server = http.createServer();
server.on('request', doRequest);
server.listen(1234);
console.log('Server running!');
// 요청 처리
function doRequest(req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write('Hello World\n');
res.end();
}
텍스트 편집기를 열어서, 위와 같이 작성하고 적절한 위체에 적절한 파일 이름(단, 확장자는 “.js"이다)으로 저장한다. 우선 여기에서는 바탕 화면에 “node.js-sample"이라는 폴더를 만들고 이 안에 “sampleapp.js"라는 이름으로 저장한다.
스크립트를 만들었다면, 이를 실행해 보자. 명령 프롬프트(Node.js command prompt) 또는 터미널을 시작하고 스크립트 파일을 작성한 위치에 현재 디렉터리를 이동한다.
$ cd Desktop/node.js-sample/
이런식으로 이동하면 된다. 스크립트 파일이 있는 위치까지 이동하면, node.js의 명령으로 스크립트를 실행하면 된다.
$ node sampleapp.js
Server running!
실행하고 스크립트에 문제가 없으면, “Server running!“라는 메시지가 출력된다. 이를 확인하기 위해 Web 브라우저를 시작하고 아래 경로로 이동해 보자.
http://127.0.0.1:1234/
여기에서는 1234 포트에서 실행하고 있는데, 이는 자유롭게 변경할 수 있다. 80으로 변경하면 포트 번호를 설정하지 않고, 단순히 127.0.0.1
으로도 액세스 할 수도 있다. 또한 일반적으로 127.0.0.1 대신에 “localhost"에 액세스 할 수도 있다.
브라우저에서 액세스하는 “Hello World"가 표시되면, Node.js는 문제없이 작동되고 있는 거다. 이 샘플은 단순히 “Hello World"와 텍스트를 출력하기 위한 것이다.
덧붙여서, 실행하는 Node.js의 종료는 명령 프롬프트(또는 터미널)에서 Ctrl+C
키를 눌러 스크립트의 실행을 중단할 수 있다.
Heroku 운영 환경
이제 로컬 환경에서 Node.js를 실행하는 방법은 알았다. 그럼 이를 서버에 배포하고 게시해 보자.
운영 서버
Node.js 프로그램을 운영하는 경우, 먼저 일반 렌탈 서버에서는 사용할 수 없다. 서버 안에 Node.js의 프로그램이 실행되지 않으면 안되기 때문이다. 단순한 Web 서버가 사용할 수 있는 것만으로는 서비스가 되지 않는다.
그래서 등장하는 것이 “클라우드 서비스"이다. “PaaS"라든지 “IaaS"라는 것으로, Node.js에 대응하는 서비스를 찾아서 사용하는 것이 가장 좋다. 현재 Node.js에 대응하고 있는 주요 클라우드 서비스로는 다음과 같은 것들이 있다.
- Heroku
- OpenShift
- Cloud Foundry
여기에서는 Heroku를 이용하기로 한다. Heroku는 Ruby on Rails를 사용할 클라우드 서비스로 유명하지만, 현재는 다른 언어도 지원하고 있으며, Node.js도 사용할 수 있다. 그럼 이용 단계를 정리해 보겠다.
Heroku 등록 작업
1. Heroku 계정 등록
우선은 위의 Heroku 사이트를 방문하여 계정을 만든다. 화면 오른쪽 하단에 보이는 “Sign Up"버튼을 클릭하면 가입 페이지로 이동한다. 여기에 등록 계정 정보인 이름 및 이메일 주소 등을 입력하고, “Create Free Acount"버튼을 누른다.
2. 암호 설정
등록 메일 주소로 “Confirm your account on Heroku"라는 등록 메일이 도착한다. 이 이메일에 있는 링크를 클릭하면 브라우저가 열리고 “Welcome to Heroku"라는 Web 페이지가 표시된다. 여기에 등록 이메일 주소로 비밀번호를 설정한다. 이제 등록이 완료되었다.
완료되면, “Heroku Dashboard"라는 화면이 표시된다. 이는 Heroku에서 공개하고 있는 Web 애플리케이션 관리 화면이다. 일단 지금은 사용하지 않기 때문에 브라우저를 닫는다.
Heroku Toolbelt 설치
3. 다운로드 페이지로 이동
이어사 “Heroku Toolbelt"라는 프로그램을 설치한다. 이는 Heroku를 이용하기 위해 필요한 프로그램(Ruby, Git 등)을 세트로 함께 설치 해주는 것이다. 다음 주소를 방문하여, 각 플랫폼의 Heroku Toolbelt를 다운로드한다.
https://toolbelt.heroku.com/
4. 설치
Heroku Toolbelt 전용 설치되어 있다. 커멘드 혹은 다운로드하여 프로그램을 설치를 한다(윈도우는 다운받아 설치하는거 밖에 없다). 다운받아서 설치 하는 경우는 기본적으로 기본 설정을 그대로 진행하면 문제없이 설치할 수 있는 것이다.
이것으로 Heroku를 이용하기위한 준비가 되었다. 그러나 아직 배포되지 않았다. 그 전에 필요한 파일 준비한다.
Heroku 배포에 필요한 파일 준비
Heroku는 클라우드 서비스이다. 로컬 환경과 달리 직접 조작 할 수 없다. 따라서 클라우드 환경에서 이루어져야 할 각종 처리는 미리 정해진 형식의 파일로 준비하고, 그 안에 정보를 작성해 두어야 한다.
Node.js 응용 프로그램을 Heroku에서 실행하기 위해서는 “package.json"과 “Procfile"라는 2개의 파일이 필요하다. 또한 작성한 Node.js 스크립트의 일부를 수정해야 한다. 이에 대해 정리해 하겠다.
package.json 만들기
만든 Web 응용 프로그램의 루트(폴더를 열어 바로 위치)에 배치한다. 이것은 JSON 형식의 앱 정보를 기술해 두는 것이다. 다음과 같이 작성해 둔다.
package.json
{
"name": "... 앱 이름 ..."
"version": "버전 이름"
}
name에는 각각의 응용 프로그램 이름을 작성하면 된다. version에는 버전 번호 (0.0.1 라든지)를 적당하게 작성한다. 이 package.json에는 그 밖에도 다양한 정보를 작성할 수 있지만, 우선 필요한 것은 이것뿐이다.
Procfile 만들기
이것도 Web 어플리케이션의 루트에 배치한다. 확장자가 없이 단지 “Procfile"라는 이름으로 작성한다. 여기에는 다음의 문장만을 작성한다.
Procfile
web : node sampleapp.js
이것으로 지정된 스크립트가 실행되도록 한다. Node.js의 앱은 이처럼 “web : node 스크립트 파일” 형태로 작성을 한다. 이것으로 클라우드 측에서 “node sampleapp.js"가 실행되고 Node.js 서버가 기동된다.
sampleapp.js 수정
마지막으로 또 하나 앞에서 만든 Node.js 스크립트 파일(sampleapp.js)의 코드를 수정해야 한다. 스크립트 파일을 확인하고 다음 문장을 바꿔준다.
수정전
server.listen(1234);
수정후
server.listen(process.env.PORT, process.env.IP);
Node.js의 스크립트에는 반드시 listen(xx);
라고 작성된 문장이 있다. 이 부분을 listen(process.env.PORT, process.env.IP);
으로 수정한다.
이제 파일들이 준비가 완료되었다. 자, 이제는 배포만 하면 된다!
Heroku에 배포(deploy)
그럼, 드디어 Heroku에 Node.js 응용 프로그램을 배포를 해보자. 이 작업은 기본적으로 명령 라인에서 한다. Heroku Toolbelt를 설치하여서 Git이 포함되어 있기에, 거기에 포함되어 있는 “Git Bash"을 시작하고 이용한다. 또는 “명령 프롬프트” 또는 “터미널"을 기동해서 작업을 해도 상관없다.
공개 키 생성 및 Heroku 등록
이것은 필수는 아니다. 하지 않아도 그대로 가능 하지만, 키를 새롭게 준비하지 않으면 잘되지 않는 경우도 있으므로 설명하도록 하겠다.
$ ssh-keygen
$ heroku keys : add
SSH 공개 키를 생성하고 Heroku를 등록한다. “ssh-keygen"을 실행하면 공개 키가 만들어 진다. “어디에 어떻게 만듭니까?“라는 것을 찾아 오므로, 모두 그대로 Enter로 넘어가 된다. 또한 이미 공개 키가 있을 경우 “Overwrite (y/n)?“라고 묻는다. 이럴 경우 “y"를 입력하여 덮어 쓰기한다.
1. 현재 디렉터리 이동
$ cd Desktop/node.js-sample
우선은 Node.js 스크립트 파일이 있는 위치로 디렉터리를 이동한다. “cd 디렉터리"를 입력하여 이동해야 한다. 주의할 점은 경로 구분 기호(path separator)이다. Windows 사용자의 경우 명령 프롬프트에서 “cd Desktop\node.js-sample"이지만, Git bash의 경우에는 “cd Desktop/node.js-sample"과 같이 슬래시를 사용해야 한다.
2. Git 초기화
$ git init
이동한 위치에서 Git의 초기화 작업을 수행한다. 그러면 Git 관련 파일이 생성되고, 그 디렉터리에 있는 파일들을 Git으로 배포할 준비가 된다.
3. Heroku 어플케이션 생성
$ heroku create 어플케이션명
Heroku에 응용 프로그램을 제공한다. 이는 응용 프로그램을 배포하기 위한 장소로 간주한다. Heroku 측에 어플리에션 공개 장소를 확보 해두고, 거기에 파일 등을 복사해 가는 것이다. 따라서 게시 위치를 이제 Heroku 측에 제공한다.
어플케이션 이름은 뭐든지 상관 없지만, Heroku에서 이미 사용되고 있는 것이라면 안된다. 어플케이션 이름은 Heroku의 하위 도메인으로 제공되기 때문에 같은 이름의 사람이 이미 있는 경우 새로 만들 수 없다. 그러므로 반듯이 다른 사람과 중복되지 않는 이름을 해야 한다.
4. Git에 업데이트 된 파일을 추가하기
$ git add .
여기에서 부터 배포을 위한 작업이다. “git add"는 업데이트 된 파일을 Git에 추가하여 등록하는 것이다. “git add .“와 같이 마지막에 점(.)을 있으면, 업데이트 된 모든 파일을 지정할 수 있다. 처음에는 모든 새로 만든 파일이기 때문에, 점(.)을 이용해서 등록한다.
5. 커밋하기
git commit -m "...... 뭔가 코멘트를 작성 ..."
커밋한다. 이것으로 지금까지 git add로 추가 등록해 놓은 수정 정보를 함께 전송된다. -m
후에는 이번 업데이트 프로세스에 대한 간단한 설명을 작성한다. 이것은 뭐든지 상관 없다.
6. 푸시하기
git push heroku master
커밋 수정 정보를 바탕으로 실제로 필요한 파일들을 업로드 시킨다. 이것으로 배포 작업이 실제로 행해진다고 생각하면 된다. 제법 많은 파일이 서버에 추가되어 나가기 때문에, 조금 시간이 걸린다.
이제 배포가 완료되면, 아래 주소를 방문하여 대시 보드를 확인한다. 만든 응용 프로그램 이름이 추가되어 있을 것이다.
https://dashboard.heroku.com/apps
이제 응용 프로그램 이름을 클릭하면 해당 응용 프로그램의 여러 설정하는 화면이 나타난다. 여기에서 응용 프로그램 이름의 오른쪽에있는 사각형 아이콘(윈도우 줌 상자 아이콘)를 클릭하면 새 창이 열린다 배포한 앱이 표시된다. 이것으로 로컬에서 기동했을 때 동일하게 “Hello World"가 표시되면, 배포 성공이다.
우선, 이것으로 Node.js를 사용한 프로그래밍의 준비가 대충되었다. 다음은 앞에서 샘플로 작성한 스크립트를 중심으로 스크립트에 대한 설명을 시작하기로 한다.