본문 바로가기

Others/NODE.JS

Express 설치 및 기본코드분석

(복습)

nodejs에서 웹서버 만들기 코드를 다시 한번 해석해보자


(축약형)



(기본형)



Line 1 : 웹서버가 되기 위해서는 Nodejs의 http 모듈을 사용한다. 그 모듈을 (const) http 변수에 담았다.


Line 6 : http 변수에 담겨있는 http 객체가 가지고 있는 createServer라는 함수를 호출.

createServer에 의해 만들어진 서버를 제어할 수 있는 객체(const server)를 return 한다.


Line 12 : 이 서버거 어떻게 들어온 사용자에 응답을 받을 것인지 바라보게 하는 것 ( 리슨하게 하는 것 )

Listen 작업은 시간이 여러가지 이유로 인해 시간이 걸릴 수도 있다. 그래서 콜백으로 비동기적으로 적용시킨다.


Line 7-9 : 실제로 사용자가 line12를 통해 들어올 때 어떤 내용을 출력할 것인지 익명함수로 제공. 두개의 인자를 받는데 첫번째 인자는 request(요청)과 관련된 것, 두번째 인자는 응답(response:어떤 정보를 요청한 사용자에게 응답할 것인가)과 관련되어 있다. 




이런식으로 사용한다면, 정말 간편하다. 하지만 사람은 만족이 없고 해야할 일은 많기에 훨씬 더 적은 코드로 많은 일을 하게 해주는 프레임워크라는 것이 존재한다. Node를 이용해서 만들어진 프레임워크(Express)통해 만들어보자.



홈페이지 : expressjs.com/ko/

서버 쪽 애플리케이션을 쉽게 구현할 수 있도록 되어 있다.




Express 설치하기


npm init : 해당 디렉토리를 npm 프로젝트로 선언하는 명령어 = npm이 관리하는 패키지로 선언.

그럼 npm이 제공하는 서비스를 받을 준비가 되는 것.




1. npm init (npm init이 되어 있다면 바로 2번으로)

성공적으로 설치되었다면 package.json 파일이 생성됨을 확인 할 수 있다.


2. npm install --save express

npm이 express 패키지를 다운로드 받아서 해당 디렉토리에 위치시키고 package.json 안에 dependecies에 express(버전)을 확인 할 수 있다.



Express를 이용해서 웹 애플리케이션 만들기


3. 파일 만들기 ( app.js )


 



app.js : 이런 파일을 메인파일, 메인애플리케이션 또는 엔트리 애플리케이션이라고 불린다.


어떤 프로젝트를 만들 때, 규모가 커짐에 의해서 여러개의 파일로 하나의 애플리케이션을 만든다.

그 중에서 '누구를 실행시킬 때 애플리케이션이 동작할 수 있는가'라고 하는 가장 최초로 실행되는 최초의 진입점이되는 애플리케이션이 필요한데 그 애플리케이션을 메인파일, 메인애플리케이션, 엔트리애플리케이션 등이라고 불리운다.


add.js라고 하는 것은 express에서 권장하는 메인 애플리케이션의 이름이다. (물론 아무거나 사용가능하지만, app.js 관습적인 이름임.)


Line1 : express라고 하는것을 npm을 통해서 설치했기 때문에, express라고 하는 모듈을 프로젝트에 로드한다.

로드한 express를 사용하기 위해서 require return 값을 받기 위해 변수에 담는다.


Line 2 : express로 만든 애플리케이션을 제어하기 위해서, express 모듈을 통해서 애플리케이션이라고 하는 객체를 만들어야 한다.

모듈은 사실 함수라서, 함수를 실행(express();)하면 그 함수는 애플리케이션을 리턴하고 그 애플리케이션을 여러 작업을 통해 완성시켜가게 된다.


Line1,2 : 이 라인은 특정 의미보다는, express를 만든 사람이 이런 형식으로 시작하라고 약속해 놓는 거라고 생각하자.

이 두 줄을 통해서 앱을 가져왔으니, 이 앱을 이용해서 애플리케이션을 만들어보자


Line 12-14 : 이 앱은 listen이라고 하는 메소드가 있다.

그 메소드에 포트번호를 지정해주면, 이전에 Nodejs를 통해 웹서버를 만들었던 것처럼 우리의 웹애플리케이션이 3000포트를 리스닝하게 된다. 리스닝이 성공했으면 그 다음인자에 정의한 콜백함수가 실행되면서 성공했다는 것을 확인하기 위해서 화면에 무엇인가를 실행하게 된다.


Line 4 : 사용자가 홈페이지로 접속했을 때, 홈페이지에 접속했다 라는 화면을 보여주고 싶다면 app.get()이라고 하는 함수를 호출해야 한다.


- 사용자가 웹에 접근할 때 get 또는 post 방식으로 접근할 수 있다. 일반적으로 url로 직접 타이핑해서 접속하는 것은 get 방식으로 접근하는 것이기 때문에 이 메소드를 호출하고 있는 것. 그리고 get 방식으로 접속한 사용자 중에서 홈페이지로 접속한 사용자를 구분하기 위해서 '/'를 사용한다. ('/'는 루트를 구분하기 위한 것인데 아무것도 없으면 홈인것.)

- 사용자가 home ('/')으로 접속했을 때 get이라는 메소드를 통해서 두번째 인자로 전달한 함수가 실행되도록 약속되어 있다. (by 사용설명서)

이 함수는 get()의 인자로 들어온 함수는 형태가 사용설명서가 약속되어있다. 첫번째 매개변수는 request, 두번째는 response가 들어온다고 약속되어 있다. 첫번째 매개변수의 값으로 사용자가 요청한 것과 관련된 정보를 담고 있는 request 객체를 전달하는 것이고, 두번째로 response를 통해서는 사용자가 요청한 정보에 의해서 응답(응답에 대한 객체를 전달해 줌)을 할 수 있는 여러가지 방법을 담고 있다.


이런 get() 메소드를 라우터라고 하고, 라우터가 하는 일을 라우팅이라고 한다.


(라우터 : '길을 찾는다'라는 의미.)


즉, 어떤 요청이 들어왔을 때 길을 찾을 수 있도록 연결해주는 기능을 하는 것이 get()이라는 라우터가 하는 일.




ex) 

사용자 : 웹브라우저를 사용해서 웹애플리케이션으로 접속하는 사람

웹애플리케이션 : 라우터와 컨트롤러는 이름들로 이루어져있고, 그것이 무엇인지 코드로 받는다.


사용자가 root('/')로 들어오게 되면 get.('/')이라는 라우터가 받고 그것을 두번째 인자로 전달되었던 익명함수를 실행시켜 send()메소드를 통해 응답해주고 있다.


Line 8-9 : 사용자가 login('/login')로 들어오게 되면 get.('/login')이라는 라우터에 두번째 인자인 익명함수 내용 실행.


get()의 역할 : 사용자의 요청과 그 요청에 대한 처리인 콘트롤러를 중개해주는 역할

라우터라고 하는 것은 웹 애플리케이션을 만든다 했을 때 가장 중요한 것 중에 하나. (너무너무 중요함)

렇기 때문에 공부한 내용의 위 코드를 꼭 숙달할 필요가 있다!



Line 5 : 응답을 해주기위해서 res라는 객체에 send()라는 함수가 표현되어 있다. (이는 사용설명서에 나와있다.)




번외 & 중간정리 >>


- 연결성


단어?

의미를 전달하고 의미를 만들어 내는 역할

기본적으로 하나의 단어는 하나의 의미를 가지고 있다. 하지만 사회의 발전 속에서 좀 더 섬세한 의미들이 필요해지게 된다. 이에 의해 하나의 단어가 여러가지의 의미를 가지게 된다. 유사하지만 다양한 의미를 갖게 된다. 


이런식으로 하나의 단어가 가지고 있는 한계를 극복하기 위해 많은 노력을 하지만,

단어와 단어를 연결해서 새로운 의미를 만들르기도 한다 이를 문장이라고 한다. (언어에 대한 위대함)


인간의 언어 : EX) 

영어는 어순에 따라서 새로운 의미를 만들어내는 문법을 가지고 있다.

예를 들어서 10개의 명사와 10개의 동사를 결합한다면 총 20개의 단어로 총 100가지(경우의 수)의 의미를 만들 수 있다.

좀 더 긴 문장(3형식이상)을 만들면 20개의 단어를 가지고 더 많은 경우의 수를 생각해 볼 수 있기도 하다.



프로그래밍 : EX)


JavaScript vs Nodejs


서로 어떤 관계에 있을까?


기본적으로 Nodejs는 파일을 읽고쓰는 fs, 네트워크를 통해 어떤일을 할 수 있는 http, 운영체제를 제어할수 있는 os 등 여러가지 기능을 기본적으로 제공한다. Nodejs가 제공하는 기본적인 기능들을 자바스크립트라는 프로그래밍 언어의 문법에 맞게 결합하여 개발자가 의도하는 프로그래밍을 만들 수 있다.


이것이 가능한 이유는 Nodejs는 기초적인 명령들을 제공하고 자바스크립트라는 프로그래밍 언어가 Nodejs가 제공하는 명령들을 조합해서 새로운 명령들을 만들어낼 수 있다. 앞서 말했던 것처럼 이는 어마어마한 가능성을 가지고 있다고 볼 수 있다.


module vs npm


모듈이라는 것은 나의 프로그램 안에서 부품으로 사용하는 작은 프로그램.

이 세상에는 여러개의 모듈들이 만들어져 있고, 내가 만든것도 있고 아닌것도 있고 ...


npm이라는 것이 있기 때문에 예를들면 express, jade, underscore이라는 모듈을 npm을 통해 우리의 프로그램에 담아 다양한 애플리케이션을 만들 수 있다.


모듈과 npm이라고 하는 것은 우리가 Nodejs를 통해서 웹애플리케이션을 만든다라고 했을 때 너무너무 중요하다.



router vs controller


라우터 : 사용자의 접속(요청)을 어떤 컨트롤러에 연결해 줄까 결정하는 것.

컨트롤러 : 회원가입 로직, 홈페이지 표현 콘트롤러, 에러화면 콘트롤러 등 라우터를 사용자의 요청에 의해 각각 적절한 곳으로 보낼 수 있다.



- javascript , npm, router : 우리가 웹애플리케이션을 만드는데 있어서 너무나 중요하며, 사용자 요청에 의해 연결하려는 것.

- nodejs, module, controller : 연결할 대상을 제공해주는 것








'Others > NODE.JS' 카테고리의 다른 글

Express-웹페이지를 표현하는 방법  (0) 2017.09.11
Express] 정적파일을 서비스하는 법  (0) 2017.09.11
동기와 비동기  (0) 2017.09.07
모듈과 NPM  (0) 2017.09.07
웹 애플리케이션 만들기  (0) 2017.09.07