이 게시물에는 코드작성이 포함되어 있습니다. 소스코드를 받으신 후 진행해 주세요. MEAN Stack/개발 환경 구축에서 설명된 프로그램들(git, npm, atom editor)이 있어야 아래의 명령어들을 실행할 수 있습니다.
- Github에서 소스코드 보기: https://github.com/a-mean-blogger/hello-world/tree/1f7e4d6cc800510b129b44b002a20ca48b131234
Express는 node.js로 서버를 만드는 framework입니다. node.js와 Express를 사용해서 초간단 웹서버를 만들어 봅시다.
git, node js/NPM, atom 에디터는 모두 설치되어 있겠지요?
git bash를 실행한 후 아래 스크린샷의 명령어를 입력하여 프로젝트 폴더를 생성하고 git 저장소를 생성합니다.
mkdir
명령어로 프로젝트 폴더를 생성하였고, git init
명령어로 git 저장소를 생성하였습니다.
다음으로 npm init
명령어로 현재 폴더에 node 프로젝트를 생성합니다. 이 명령어를 실행하면 프로젝트에 대한 질의 응답이 아래와 같이 나오는데, 일단 아무것도 입력하지 않고 계속 엔터를 쳐서 넘깁시다. 이 질문들을 바탕으로 package.json 파일을 생성하게 되는데, 그냥 엔터를 쳐서 넘기게 되면 해당 질문에 해당하는 항목이 생성되지 않거나, 질문의 기본값(괄호안의 값)이 있는 경우 해당값이 입력됩니다.
생성된 package.json파일은 아래와 같은 텍스트를 담고 있습니다.
{ "name": "hello-world", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC" }
npm init
명령어의 역할은 사실 이 파일을 생성하는 것이 전부입니다. 여기 눈여겨 봐야 할 부분은
"main": "index.js",
바로 이부분인데요, node.js 프로젝트의 메인 코드 파일명이 기록되어 있는 부분입니다. index.js가 기본값으로 입력이 되어 있으니 touch
명령어로 index.js파일을 생성해 봅시다.
다음으로 현재 프로젝트 폴더에 Express를 설치합니다. Express는 node.js용 웹사이트 개발 framework이며 NPM을 통해 설치할 수 있습니다.
NPM 명령어를 통해 설치된 package들은 현재_폴더/node_modules 폴더에 저장됩니다.
지금까지의 과정이 잘 이해가 되지 않으시면 Node JS 첫걸음/개발 환경 구축을 다시 읽어 주세요. 자세히 읽어보면 다 설명된 내용입니다.
atom .
명령어로 현재폴더를 atom 에디터로 엽니다.
왼쪽 패널의 파일 시스템 창을 보면 npm install --save
명령어가 실생된 후에 node_modules 폴더와 package-lock.json 파일이 추가로 생성된 것을 볼 수 있고, package.json에 dependencies항목이 생겼으며 express가 들어간 것을 볼 수 있습니다.
**참고로 파일및 폴더의 생성, 삭제, 이동, 복사, 이름 변경 등은 atom에서도 가능합니다. 파일 시스템 창에서 마우스 오른쪽 버튼을 눌러서 사용해 보세요.
서버를 생성하기 위해 index.js에 다음 코드를 입력해 줍니다.
//index.js var express = require('express'); // 설치한 express module을 불러와서 변수(express)에 담습니다. var app = express(); //express를 실행하여 app object를 초기화 합니다. app.get('/', function(req, res) { // '/' 위치에 'get'요청을 받는 경우, res.send('Hello World!'); // "Hello World!"를 보냅니다. }); var port = 3000; // 사용할 포트 번호를 port 변수에 넣습니다. app.listen(port, function(){ // port변수를 이용하여 3000번 포트에 node.js 서버를 연결합니다. console.log('server on! http://localhost:'+port); //서버가 실행되면 콘솔창에 표시될 메세지입니다. });
require(모듈_이름)
함수는 node.js에서 기본적으로 주어지는 함수로, modules폴더 안에 설치된 모듈을 불러오는 함수입니다. express 모듈을 express 변수에 담고, express()로 app object를 초기화 하는 것은 Express framework에서 항상 가장 처음하는 것이므로 따라해 줍니다.
app.get
, app.listen
은 해당부분의 코드가 index.js 실행시 바로 실행되는 것이 아니라, app.get
부분은 서버에 get요청이 있는경우, app.listen
은 서버가 실행되는 경우에 각각 실행이 됩니다. 이렇게 어떠한 조건이 갖춰지면 실행되는 코드를 가지는 함수를 event listener(이벤트 리스너)라고 합니다.
app.get
부분을 다시 살펴봅시다. 이번 포스팅에서 가장 중요한 부분입니다.
app.get('/', function(req, res) { // '/' 위치에 'get'요청을 받는 경우, res.send('Hello World!'); // "Hello World!"를 보냅니다. });
app.HTTP_Method_중_하나('Route_주소', 콜백_함수, 콜백_함수, 콜백_함수...)
의 구조를 하고 있습니다. 위에서는 콜백 함수를 하나만 사용했지만 함수사이에 ","를 넣어서 여러개의 콜백함수를 넣을 수도 있습니다.
콜백 함수에는 req, res, next의 parameter들(이 순서만 중요할 뿐 이름은 바꿔도 상관없습니다)이 자동으로 전달됩니다. 다음으로 이 parameter들에 대해 살펴봅시다.
request에 관련된 값들과 함수들이 저장되어 있는 object. HTTP request header, 요청 url, cookies, query, body 등의 정보가 저장되어 있습니다.
이 object의 전체 구조를 확인하고 싶을땐 콜백 함수에 console.log(req)
코드를 넣으면 안을 확인할 수 있습니다.(req 뿐만 아니라 나머지 res, next 등도 console.log
를 통해 값을 확인해 봅시다!)
response에 관련된 값들과 함수들이 저장되어 있는 object. HTTP response header, cookies, HTTP code 등의 정보를 확인하고 값을 변경할 수도 있습니다.
또한 어떠한 방식으로 response할지도 정할 수 있습니다. 위 예제에서는 res.send
를 사용해서 텍스트를 response하였습니다.
만약 여러개의 콜백 함수를 사용한다면 이 함수를 호출하여 다음번 콜백 함수로 넘어갈 수 있습니다. 위 예제에서는 함수가 하나뿐이므로 parameter에 적지도 않았습니다.
위 코드에서 주석을 빼고 입력하면 atom에서 이렇게 보이겠죠.
hello world강좌라 정말 한 스텝 한 스텝 마다 스크린샷을 찍었습니다.
이제 서버를 실행시킬 차례입니다.
$ node index.js
위 명령어를 입력하면 우리가 코딩한 대로 'Server On!'이라는 메세지가 뜨면서 서버가 실행됩니다.
웹 브라우저를 열고 http://localhost:3000 에 접속해 봅시다. localhost는 http프로토콜에서 자기 자신의 서버에 접속할 때 사용되는 주소이고, 3000은 서버에 접속하는 포트 번호로, app.listen
에서 3000으로 설정했기 때문에 3000을 사용합니다. 한 서버에 여러가지 서버 프로그램이 작동하는 경우 포트 번호를 달리해서 구별하게 됩니다. 혹시나 자신의 컴퓨터가 이미 3000번 포트를 사용하고 있다면, 다른 값으로 바꾸어서 실행해 보세요.
웹 브라우저에 주소를 입력하는 것은 서버에 HTTP method 중 GET으로 요청됩니다. 그러므로 위 코드의 app.get
의 콜백_함수가 실행되어 res.send
를 통해 우리가 입력한 Hello World!라는 텍스트가 출력이 되는 것입니다.
지금까지 작업한 것을 git에 저장하기 전에, node_modules 폴더가 git에 저장되지 않도록 .gitignore파일을 생성해 줍시다.
node_modules에 저장된 node package들은 용량이 커질 수 있고, 언제든지 누구든지 npm install
명령어로 복구가 가능하기 때문에 보통 git에는 저장하지 않습니다. .gitignore 파일의 각줄에 git에서 제외할 파일명, 폴더명 등을 넣어두면 자동으로 git에는 저장하지 않게됩니다. Atom 에디터에서도 해당 파일/폴더는 표시되지 않습니다. 위 스크린샷에서는 node_modules 폴더명을 입력하고 저장하자 마자 node_module 폴더명이 회색으로 변하였습니다. 시간이 지나면 아에 표시도 안됩니다.
마지막으로 프로젝트의 설명을 기록하는 README.md파일을 생성해 줍시다.
여기에 기록된 내용은 github에 git을 개제할 경우에 아래와 같이 보이게 됩니다.
마지막으로 git add .
, git commit -m
명령어로 지금까지 한 작업을 안전하게 저장합니다.
마지막으로 git add .
, git commit -m
명령어로 지금까지 한 작업을 안전하게 저장합니다. 보너스로 개발 환경 구축/Git GitHub 간단 사용법를 따라서 github에 업로드까지 하시면 백점 만점 받으실 수 있습니다!
첫 실습인데 어떠셨는지.. 별 내용은 없는데 너무 복잡하게 설명한 것 같기도 하네요. 피드백은 항상 고맙게 받겠습니다. 혹시 잘 안되는 부분이 있으면 댓글 남겨주세요. 읽어주셔서 감사합니다!
댓글
이 글에 댓글을 다시려면 SNS 계정으로 로그인하세요. 자세히 알아보기