OT
js는 language(java script), run time(web browser과 node js)라고 할 수 있습니다.
즉, js는 언어일뿐이고 js가 web brower와 node js에서 어떤 기능이 있는지 알아야 합니다.
예를 들어 alert는 web browser에서만 사용되고 node js에서는 사용할 수 없다는 것이 있습니다 .
Node js 의 장점
기본적으로 v8을 사용하기 때문에 속도가 빠릅니다.
event driven과 non-blocking을 사용해 이 특징이 적합할 땐 아주 빨라집니다.
js라는 하나의 언어로 client와 server 모두 구현 가능합니다.
인터넷의 동작 방법
1. client와 server
컴퓨터끼리 연결될 때 요청을 보내는 쪽이 client, 요청을 받는 쪽이 server입니다.
실제로 client가 요청하는 http://a.com같은 도메인을 요청하면, 이 도메인과 일치하는 server의 ip주소로 요청이 들어갑니다.
server
한 개의 server에는 게임, 채팅, 웹, 데이터베이스 server 등 여러 application이 있을 수 있습니다.
여러 개의 server application중 과연 어떤 application을 연결시켜줘서 그 application이 응답할 수 있는걸까?
80번 port에 웹 server를 연결시켜놓고 80번 port를 웹 server가 listening하게 합니다.
http://a.com:80을 요청하면 a.com에 해당하는 ip주소를 가진 서버로 들어와 80번 포트(웹서버)와 연결됩니다.
정확히 말하자면 80번 port에 요청이 들어오니 80번 port를 바라보던(listening) 웹 서버가 연결됩니다.
* :80 은 생략가능합니다. => http를 통해 웹 브라우저를 통해 요청이 들어왔다는 것을 알 수 있기 때문.
따라서 우리가 서버를 만드려면 port와 연결시켜 줘야 합니다.
//websever.js
const http = require("http");
const hostname = "127.0.0.1";
const port = 1337;
http
.createServer((req, res) => {
res.writeHead(200, { "Content-Type": "text/plain" });
res.end("Hello World\n");
})
.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
위는 node js 홈페이지에 나온 server만들기 코드입니다.
코드를 살짝 분석해보자면,
1. 우리가 만든 웹 서버의 hostname은 이 컴퓨터의 ip, port는 1337번이다.
다시 말해, 127.0.0.1로 접속한 사용자에 대해 응답해야하고 우리가 만든 웹 서버가 1337번 port를 listening한다는 것을 알 수 있다.
2. 응답결과는 Hello World를 보여줘라
실행
node webserver.js
또는 (아래는 app.js에 변경사항이 생기면 알아서 서버를 재시작해주는 명령어)
supervisor app.js
모듈
웹 서버를 만드는 일은 굉장히 어렵습니다! 그래서 node js가 기본 웹서버를 아주 잘 만들어뒀네욤. 따라서 우리가 할 일은 node js가 만들어 둔 기본적인 웹서버를 잘 사용하면 되는 것입니다. 위의 코드를 예시로 설명드리겠습니다.
먼저 모듈을 사용하려면 require로 호출해야 합니다.
const http = require('http')
이 맨 윗 줄 코드는 그 아래 application을 구동하기 위해 http라는 모듈을 요구한다는 뜻입니다.
http라는 모듈에는 createServer라는 메소드가 들어있고 이 메소드를 호출하면 새로운 Server객체를 리턴해줍니다.
http
.createServer((req, res) => {
res.writeHead(200, { "Content-Type": "text/plain" });
res.end("Hello World\n");
})
따라서 이 코드는 createServer를 통해 새로운 Server객체를 리턴받았고 이 새로운 Server 객체는 listen이라는 메소드를 가지고 있어서
.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
listen 메소드를 사용할 수 있습니다.
NPM
Node Package Manager의 약자로 Node계의 앱스토어정도로 비교할 수 있습니다!
NPM은 내 프로젝트에 어떤 모듈을 설치, 삭제, 업그레이드, 의존성 관리 등을 합니다.
NPM에서는 1. 모듈이나 2. 독립적으로 실행 될 수 있는 프로그램을 Package라고 합니다.
1. 모듈 설치
모듈 설치는 다른 사람이 만든 sw인 모듈을 내 프로젝트의 부품으로 사용할 때와 독립적인 프로그램을 설치할 때로 나눌 수 있습니다.
1. 다른 사람이 만든 sw인 모듈을 내 프로젝트의 부품으로 사용하려면, 내 디렉토리도 package이기 때문에 먼저 현재 디렉토리 자체를 NPM의 package로 지정을 해줘야 합니다.
❗ NPM의 package로 지정
npm init
그 후, 우리의 sw를 패키지로 만들기 위한 여러가지 환경설정을 하게 됩니다. (환경설정 하는 법은 "더보기"에)
( * 괄호 안에 값이 있으면 엔터를 쳤을 때 자동으로 설정됩니다. * )
name : 프로젝트 이름
version : 버전
description : 설명 (직접 쓰기를 권장)
entry point: 어떤 js파일이 package를 구동시키는 첫 시작인지
test command : TDD(Test Driven Development : 테스트 주도 개발)를 할 때 test를 실행시킬 명령어
git repository : git repo 주소
환경설정을 마치면 프로젝트의 여러 정보가 담긴 package.json이라는 파일이 생성됩니다. 이렇게 되면 우린 이 프로젝트 퐅더를 npm의 package의 디렉토리로 선언을 했습니다. 이제 다른 사람이 만든 것을 우리 프로젝트에 포함시킬 수 있습니다!
이 후, 모듈을 설치하면 node_module 폴더 아래 새로 설치한 모듈의 폴더가 생깁니다. (설치 방법은 아래)
❗ 설치
npm install [프로그램명]
npm install [프로그램명] --save
여기서 --save는 package.json에 의존성이 명시되는지에 대한 것입니다.
--save가 없다면, 모듈을 설치할 때 extraneous가 뜰텐데 이것은 곧 "부가적"임을 의미합니다. 보통 소스코드에 포함시키진 않지만 지금! 필요할 때 사용합니다.
--save를 하면, package.json파일에 설치하는 모듈의 의존성이 명시되고 우리 프로젝트가 새로 깔린 모듈에 의존하고 있다는 것을 표시합니다. 이제 이 프로젝트를 다른 디렉토리에서 사용할 때도 package.json파일만 있으면 언제든 설치한 모듈을 사용할 수 있습니다.
프로그램에 이 모듈이 반드시 사용돼야하고 항상 같이 다녀야하면 --save를 붙여야합니다.
2. 독립적인 프로그램을 설치 할 때,
npm install [프로그램명]
npm install [프로그램명] -g
여기서 -g는 global의 약자로 내 컴퓨터 전체에 설치를 할 것인지에 대한 것입니다.
-g가 있다면 내 컴퓨터 전역에서 사용하는 독립적인 sw로 설치가 된다.는 것이고,
g가 없다면 현재 프로젝트 안에서 부품으로 사용하겠다. 라는 뜻입니다.
2. 사용법
const [내가 소스코드에서 사용할 이름] = reqiure('[프로그램명]');
을 사용해 모듈을 가져오고 공식문서를 통해 메소드를 알아냅니다.
예를 들어 underscore 모듈을 가져오고 싶다면 const _ = require('underscore');를 사용해 "_"로(underscore가 이 변수명으로 많이 쓰임) 모듈을 가져옵니다. undersocre는 array(Object, Function등등)와 관련된 모듈로, first메소드를 사용해 _.first(arr)하면 배열의 첫번째 원소를 반환받습니다.
Callback
a=[3,2,1];
function b(v1,v2){
return v1-v2
};
a.sort(b);
어떤 함수(a)의 인자로 다른 함수(b)를 전달했고 이렇게 전달된 함수(b)를 콜백함수라고 합니다. 또는 누군가에 의해 나중에 호출당할 함수를 말합니다. b함수를 주입함으로써 a함수가 가진 기능을 확장시킬 수 있습니다.
b함수가 다른 곳에서 또 쓰이지 않고 a함수(sort 함수)에서만 1회용으로 쓰인다면 익명함수를 콜백함수로 사용할 수 있습니다.
a=[3,2,1];
a.sort(function(v1,v2){return v2-v1;});
function a(callback){callback();};
> a(function(){console.log("hello")});
hello
위는 callback으로 익명함수를 줬을 때의 예시입니다.
'Nodejs' 카테고리의 다른 글
[Node.js] supervisor 서버 자동on/off (0) | 2021.09.23 |
---|---|
[Node.js] 서버에 데이터 저장 (파일로 저장) (0) | 2021.09.23 |
[Node.js] url 해부하기(query, params), Form으로 데이터 전달 (0) | 2021.09.23 |
[Node.js] express와 jade 설치 및 사용법 (0) | 2021.09.16 |
[Node.js] 동기, 비동기 (0) | 2021.09.15 |