KDT 코딩온 개발 14기 수강일기

KDT 포스코X코딩온 웹 과정 14기 19일 - Node.js

worldstroy 2024. 11. 29. 21:57

1. Node.js 란?

구글 크롬의 자바스크립트 엔진(V8 Engine)에 기반해 만들어진 JavaScript 런타임
이벤트 기반, 비동기 I/O 모델을 사용해 가볍고 효율적
npm 패키지는 세계에서 가장 큰 오픈 소스 라이브러리

 

2. package.json

- 패키지들이 서로 의존되어 있어, 문제가 발생할 수 있는데 이를 관리하기 위해 필요한 것.
- 프로젝트에 대한 정보와 사용 중인 패키지 이름 및 버전 정보가 담겨 있는 파일

 

3. package.json의 내부 정보

 

“name” : 패키지 이름
“version” : 패키지의 버전
“main” : 자바스크립트 실행 파일 진입점 ( 문답식에서의 entry point )
“description” : 패키지에 대한 설명
“scripts” : npm run 을 이용해 정해놓는 스크립트 명령어
“license” : 해당 패키지의 라이센스

 

4. npm 사용하기 

npm init  프로젝트를 시작할 떄 사용하는 명령어
package.json에 기록될 내용을 문답식으로 입력한다.
npm init --yes package.json이 생성될 때 기본 값으로 생성된다.
npm install 패키지 이름 프로젝트에서 사용할 패키지를 설치하는 명령어
설치된 패키지의 이름과 정보는 package.json의 dependencies에 입력된다.

 

5. node.js의 특징

JavaScript 언어 사용 JavaScript 언어 한가지로 프론트엔드와 백엔드(서버)를 모두 만들 수 있게 됨.
원래 javaScript는 웹 브라우저 환경에서만 동작하였으나, Node Js의 등장으로 브라우저 없이 바로 실행할 수 있게 됨.
Singe Thread



사용자가 직접 제어할 수 있는 스레드는 하나.
싱글 스레드 방식이라 주어진 일을 한번에 하나만 처리 가능
Non-blocking I/O 기능으로 일부 코드는 백그 라운드( 다른 프로세스 ) 에서 실행 가능
에러를 처리하지 못하는 경우 멈춘다.
프로그래밍 난이도가 쉽고, cpu, 메모리 자원을 적게 사용한다.
에러의 처리가 가장 중요한 요소임
Non-blocking I/O



• 동기 ( Synchronous )
• 데이터의 요청과 결과가 한 자리에서 동시에 일어나는 것
• 시간이 얼마가 걸리던지 요청한 자리에서 결과가 주어진다.
• 한 요청에 서버의 응답이 이루어질 때까지 계속 대기해야 한다.


• 비동기 ( Asynchronous )
• 동시에 일어나지 않는 것
• 요청한 후 응답을 기다리지 않고 다른 활동을 한다.
Ex) 푸드코트의 음식 주문(=요청)과 요리(=수행)

Node.js는 표준 라이브러리의 모든 I/O 메서드를 비동기 방식으로 처리하기에, 동기 방식 처리엔 추가적인 작업이 필요하다.
Event-Driven 이벤트가 발생될 떄 미리 지정해둔 작업을 수행한다.
즉, 클릭, 네트워크 요청, 키 입력 등의 이벤트에 따라  미리 만들어둔 함수가 동록시켜 동작하는 방식이라 보면 됨.
Call Stack  함수를 실행시킨 순서대로 함수가 실행됨

 

6. Node.js의 장점

간단한 로직
대량의 클라이언트가 접속하는 서비스(입출력이 많은 서비스)
빠른 개발 요구
빠른 응답시간 요구
비동기 방식에 어울리는 서비스(스트리밍 서비스, 채팅 서비스 등)

 

7. Node.JS에서의 모듈이란?

 

모듈은 특정한 기능을 하는 함수나 변수의 집합이며 재사용 가능한 코드 조각이다.
모듈은 복잡한 시스템이나 객체를 단순화하여 핵심적인 부분에 집중할 수 있게 해준다.
모듈을 사용하면 코드의 무분별한 변경을 막기위한 코드 캡슐화를 할 수 있다.
코드의 재사용 성이 높아지고, 의존성 관리가 가능하다.
const {}를 통해 내보내기 한 모듈을 가져올 때엔 구조분해를 통해 가져오기에 이름이 동일해야 한다.
단, 하나만 내보낸 모듈은 다른 이름이에도 불려올 수 있다.

 

8. module의 사용방법

 

9. 서버 만들기

 

Node.js를 통해 서버를 구축하는 방법은 http와 express 두가지가 있다

 

 


9-1 http 모듈 이란?


• 웹 서버를 구동하기 위한 node.js 내장 웹 모듈
• server 객체, request 객체, response 객체를 사용한다.
• server 객체 : 웹 서버를 생성할 때 사용하는 객체
• request 객체 : 응답 메시지를 작성할 때 첫 번째 매개변수로 전달되는 객체
• response 객체 : 응답 메시지를 작성할 때 두 번째 매개변수로 전달되는 객체
서버 내에선 Response 객체를 이용해 정보를 주고 받을 수 있다.
writeHead : 응답 헤더 작성
write : 응답 본문 작성
end : 응답 본문 작성 후 응답 종료

 

#. localhost와 port

localhost 컴퓨터의 내부 주소는 127.0.0.1
자신의 컴퓨터를 가리키는 호스트 이름
Port 서버 내에서 데이터를 주고 받는 프로세스를 구분하는 번호
기본적으로 http 서버는 80번포트 사용(생략가능, https는 443)

 

# Server 객체

listen() 서버를 실행하고 클라이언트를 기다린다.
close() 서버를 종료한다.
on() server 객체에 이벤트를 등록한다.

 

# Server 객체 - 이벤트

request  클라이언트가 요청할 떄 발생하는 이벤트
connection 클라이언트가 접속할 떄 발생하는 이벤트
close 서버가 종료될 때 발생하는 이벤트
checkContinue 클라이언트가 지속적인 연결을 하고 있을 떄 발생하는 이벤트
upgrade 클라이언트가 http 업그레이드를 요청할 떄 발생하는 이벤트
clientError 클라이언트에서 오류가 발생할 떄 발생하는 이벤트

 

#. html 파일의 전송

http 전송시 발생되는 응답 코드는 다음과 같다.

 

1XX : 처리중 (100 : Continue, 102: Processing)
2XX : 성공
• 200: OK, 201: Created, 202: Accepted
• 3XX : 리다이렉트(다른 페이지로 이동)
• 4XX : 요청 오류
• 400: 잘못된 요청, 401: 권한 없음, 403: 금지됨 • 404: 찾을 수 없음(Page not found)
• 5XX : 서버 오류

 

9.2 Express 모듈이란?

웹 서버를 생성하는 것과 관련된 기능을 담당하는 프레임워크
웹 애플리케이션을 만들기 위한 각종 메소드와 미들웨어 등이 내장되어 있다.
http 모듈 이용 시 코드의 가독성과 확장성이 떨어지는 문제가 있어, Express라는 프레임워크가 등장했다.

 

#. Express의 사용 방법

npm install express
npm_modules 가 만들어지며 express에 관련된 폴더가 생성
package.json의 dependencies 에 express 기록

express() : Express 모듈이 export 하는 최상위 함수로, express application을 만듬.
app 객체 : Express() 함수를 호출함으로써 만들어진 express application

 

#. EJS 템플릿

문법과 설정에 따라 파일을 html 형식으로 변환시키는 모듈
EJS는 Embedded Javascript의 약자로 자바스크립트가 내장되어 있는 html 파일
확장자는 ejs.

사용 방법은 npm install ejs
app.set('view engine', 'ejs'); // 어떤 view 엔진을 쓸것인지를 결정함. 
app.set('views', './views') //ejs 파일이 모여있는 위치를 결정함.

 

# ejs 문법 사용하기

 

#. node js의 미들웨어란?

 

요청이 들어옴에 따라 응답까지의 중간 과정을 함수로 분리한 것
서버와 클라이언트를 이어주는 중간 작업
use()를 이용해 등록할 수 있다.
이미지, css 파일 및 javascript 파일(front)와 같은 정적 파일 제공
Express 에 있는 static 메소드를 이용해 미들웨어 로드