티스토리 뷰

안녕하세요. MIN-IT입니다.


이번시간은 Node.js 프로젝트를 생성하여 화면에 출력해보는 시간을 갖겠습니다.


퍼가실 때 댓글을 남겨주세요!

http://min-it.tistory.com




1. Node.js 실습할 폴더를 생성합니다.

node_02라는 폴더를 생성하고 hellonode.js 파일을 생성합니다.







2. 생성한 hellonode.js파일의 내용을 다음과 같이 입력합니다.



var http = require('http');

http.createServer(function handler(req,res) {
res.writeHead(200, {'Content-Type' : 'text/plain'});
res.end('Hello Node JS')
}).listen(3000);

console.log('노드서버 실행완료');


- require라는 것을 사용하여 http 모듈을 불러옵니다.

불러온 http모듈을 http라는 변수에 저장합니다.


http모듈안에는 createServer라는 기능을 가지고있습니다.

createServer라는 것을 사용하여 서버를 생성 할 수 있습니다.

http.createServer( callback() ){}의 형태를 띄우고 있는 것을 볼 수 있습니다.

즉 function handler(req,res)는 콜백함수를 의미하는 것으로

비동기식으로 구현된 것을 알 수 있습니다.


처음 배우는 것이기때문에 비동기방식이라는 것을 다시한번 설명해드리자면

http.createServer라는 함수를 실행하는동안 결과를 기다리지않고

console.log('노드서버 실행완료')를 실행합니다.

그리고 나서 http.createServer가 완료(결과)가 되는 시점에서 callback함수로 데이터를 전달하여 처리하게 되는 원리입니다.


req / res는 각각 request(요청) / respond(응답)을 의미합니다.

req.writeHead를 사용하므로써

서버의 응답코드는 200번 그리고 컨텐트 타입은 text/plain의 값으로 응답을 하겠다라는 것을 의미합니다.


또한 응답을 할 때 Hello world라는 값을 보냅니다.


listen(3000)이라는 것을 사용하여 포트번호 3000번을 쓴다고 정의하였습니다.



서버의 응답코드에 대해 간단히 설명해드리자면


응답코드는 크게

100번대 : 정보

200번대 : 성공

300번대 : 리다이렉션

400,500번대 : 오류

가 있으며,

코딩을 하면서 흔히 404에러같은 상황을 마주치기도하죠^^;


400번대 오류는 클라이언트 쪽 오류

(예를들어 화면에서 문자열을 써야하는데 숫자로 쓴 에러등등..)


500번대 오류는 서버 쪽 오류

(예를 들어 DB, 쿼리 에러등등 .. )



3. cmd(관리자모드로 실행) 하여

생성한 폴더의 경로 까지 갑니다.

cmd 입력 :

cd 생성한 폴더의경로 입력 후 엔터

node hellonode 입력 후 엔터





3. 인터넷 창(크롬 및 파이어폭스로 하시길 권장합니다.)을 열어

다음과 같이 입력합니다.


http://localhost:3000/

OR

http://127.0.0.1:3000/


이라고 입력합니다.





화면에 Hello Node JS가 보인다면 정상적으로 실행이 완료된 것 입니다.


간단하게 nodejs 서버를 생성해 봤습니다.

(쉽죠!? 여기까지 따라오셨다면 앞으로도 문제없이 진도를 나갈 수 있습니다..!)




*팁 : 자바스크립트의 전역 객체


자바 스크립트는 전역 객체를 가지고 있습니다.

자바스크립트는 다른 언어들처럼 함수를 만들고 함수 안에서 변수를 선언하여 사용할 수 있습니다.

함수 안에서 선언된 변수는 그 함수 안에서만 사용할 수 있습니다.(당연한소리..)


하지만, 전역 객체는 함수 안과 밖에서 모두 사용할 수 있는 객체로서 코드의 어느 부분이든지 사용할 수 있습니다.


전역 객체로는

1. console : 방금 사용했듯이 콘솔 창에 결과를 보여주는 객체입니다.

2. process : 프로세스의 실행에 대한 정보를 다루는 객체

(은근히 많이 사용되는 전역객체이기 때문에 process의 속성들을 검색하여 알아보는 것도 좋을거라 생각됩니다^^)

3.exports : 모듈을 다루는 객체

(process와 더불어 굉장히 많이 사용하고 중요한 객체입니다.)





*팁 : 자바스크립트의 undefined / null


앞으로 node.js나 자바스크립트를 다루면서

헷갈리는 것 중에하나가 undefined와 null입니다.

undefined라는 것은 단순히 값이 존재하지 않는다.

null라는 것은 의도적으로 값을 비웠다.


라고 이해하면서 진행하시면 되겠습니다.



*팁 : JSON 형식(javaScript Object Notation)


nodejs뿐만 아니라 클라이언트와 서버가

서로 데이터를 주고받을 때 많이 사용하는

데이터 형식이 JSON입니다.


JSON을 만들기 위해서는 중괄호 {}를 사용하며

중괄호 {} 안에는 Key : value형태로 구성되어있으며

콤마 , 로 구분합니다.


글로는 어려우니 한번 사용해보겠습니다.


{ 
"name" : "MIN-IT" ,
"tell" : "010-xxxx-xxxx"
}


이러한 형식을 띄우는게 JSON입니다.




*팁 : 함수와 메서드??


함수와 메서드는 같은말 일까요?

(정답은 함수로 말하든 메서드로 말하든 크게 구분하지는 않습니다.)


함수라는 것은 자바스크립트에서는 function을 사용해서 만든 것을 의미하는데

함수 안에서 어떤 로직을 만들고 결과 값이 나오는 형태 입니다.


객체 지향 언어(java)에서는 이 함수를 메서드(method)라고 부릅니다.

메서드는 객체를 만들고 그 객체 안에 정의한 함수를 '메서드'라고 부릅니다.


자바스크립트에서도 객체를 만들 수 있습니다. 따라서

자바스크립트 안에서는 함수도 메서드로 있을 수 있지만 크게 구분하지는 않습니다.^^






*노드의 모듈


노드의 모듈이라는 것은 별도의 파일로 분리된 기능들의 모음으로

필요한 모듈들을 불러와 사용합니다.


모듈화를 하는 2가지 이유는

1. 함수들을 재사용할 수있다.(재사용성)

2. 프로그램 관리가편하다(유지보수)

입니다.


예를들어

하나의 파일 안에

1.서버열고

2.각 url요청에 따른 기능들을 정의

3. db처리

등등 하나의 파일에 저장했다면


1.여러 코드들이 섞여있고

2.수정하기 어렵고

3.재사용하지 못 합니다.

따라서 기능 별로 별도의 파일로 만들어 놓고


필요한 곳에서 필요한 파일(모듈)만 가져다 쓰도록 모듈들을 만듭니다.



*듈을 만들기 위한 방법


exports.함수이름 = 함수명;



module.js 파일


function module1(){
console.log('모듈화 된함수');
}

exports.module1 = module1();

module.js파일을 생성했다고 가정하고

그 안에 exports.module1 = module1() 이라고 입력하여

module1 이라는 모듈명을 만들었습니다.




main.js 파일이나 다른 파일에서

require를 사용하여 module1을 불러오면


var module1 = require('module1');

console.log(module1);


module1함수를 사용할 수 있습니다.

(실행 시 콘솔 창에 '모듈화 된함수'가 출력 됩니다.)


java를 예로든다면 생성한 calss를 인스턴스하여 class안의 메서드를 사용할 수 있는 거랑 같은 의미라 생각하시면 되겠습니다.




*외장 모듈


외장 모듈이란 남이 만든 모듈을 의미하며

자바에서는 다양한 라이브러리들과 같은 의미입니다.


node.js에서는 외장 모듈을 사용하기위해서 간단한 방법이 있습니다.

바로 npm 을 사용하는 것입니다.


간단히 외장 모듈을 사용하는 법을 알려드리겠씁니다.


1.cmd입력창에서 nodejs 예제폴더의 경로로 간다.

cd 예제폴더경로명 입력 후 엔터

npm init 입력 후 엔터




엔터를 입력하다보면 yes라는 것이 나오고 엔터를 누르면



package.json 파일이 생성됩니다.


npm init 라는 것은

npm을 초기화하는 것을 의미합니다.



2. 이어서 cmd 창에 다음과 같이 입력합니다.


npm install express



express라는 외장 모듈을 설치하였습니다.


예제 폴더명에 들어가보시면

node_modules라는 폴더가 생성되어 있고

그 안에 express라는 외장모듈이 설치 된 것을 볼 수 있습니다.




3. 이어서 cmd창에

npm install body-parser --save 입력 후 엔터



정상 적으로 설치가 되었습니다.




마찬가지로 node_modules라는 폴더안에 body-parser라는 외장모듈이 설치되었습니다.


그리고 package.json을 보시면

body-parser : 버전

이 명시 되어있는 것을 볼 수있습니다.


npm install express와 달리

body-parser를 설치할 때는

npm install body-parser --save 라고 입력했습니다.


--save라고 입력하게되면 package.json에 입력되는 것을 볼 수 있습니다.



4. 이어서 cmd 창에 다음과 같이 입력합니다.


npm install color --save-dev 입력 후 엔터





정상적으로 설치되었습니다.




npm install color --save-dev 라고 입력하니


devDependecies 에 color : 버전 이 명시되어 있습니다.




*Package.json 의 역할은 무엇일까??


package.json의 내용을 살펴보면

패키지명

패키지 버전

패키지 설명

등등 이있습니다.


그리고 npm install을 할 때

--save 나 --save-dev를 입력하게되면

저절로 외장모듈을 다운로드하면서

package.json에 설치 된 package.json에 명시가 됩니다.


--save를 할 경우 dependencies에 명시되며

운영서버에 필요한 외장모듈을 의미합니다.


--save-dev를 할 경우 devDependencies에 명시되며

개발서버의 외장모듈을 의미합니다.


npm install 외장모듈명

ex) npm install express


대신 npm install 만

입력하게 될 경우

package.json에 명시된 외장 모듈들이 자동으로 다운로드 하게됩니다.

(이해가 안되시면 자동으로 생성된 node_modules 폴더를 삭제하고

cmd 창에 npm install을 입력해보세요)


다른 사람의 프로젝트를 사용하기위해서

일일히 외장모듈을 찾아

npm install 외장모듈명을 입력하는 것이아니라


다른 사람의 프로젝트의 package.json를 사용하여

npm install을 하게되면 다른 사람의 프로젝트에서

사용되는 외장모듈들을 한번에 다운받을 수 있습니다.


즉, package.json의 용도는

프로젝트별 외부 패키지들을 관리해주는 용도입니다.


또한,


처럼 운영서버(실제 돌아가는 서버)에서는

필요하지 않는 외장모듈이 있으며,

개발서버에서

필요한 외장모듈(디버깅모드 , 로그)이 있습니다.


굳이 운영서버에서 필요하지도 않는 로그,디버깅모듈들이 있을 필요가 없기 때문에

필요에 따라 모듈들을 설치할 수 있도록


dependencies = npm install express --save

devDependencies = npm install express --save-dev


나눈 것입니다.


보통 개발서버에서는 운영서버 모듈+ 개발에 필요한 모듈이

있기때문에 dependencies / devDependencies의 모듈 모두를 설치하고


운영서버에서는 운영서버 모듈 만 필요하기때문에

dependencie의 모듈만 설치하게됩니다.




이쯤에서 nodejs 프로젝트를 진행하면서 필요한 개념들을 정리해 보았습니다.


다음 시간은 자바스크립트의 기초부분을 설명하고


본격적으로 node서버를 구축해보겠습니다.


(다 이해하려고 하지마세요. nodejs에서는 이러이러한 것들이 있다 라고


훝어보시고 실제 만들면서 이래서 사용하는구나! 라고 그때 이해하시면되겠습니다.)



감사합니다.

'Node.js' 카테고리의 다른 글

[Node.js] 1장 - Node.js 개념과 설치  (0) 2017.05.07
댓글