ʕ ˙ɷ˙ ʔค

카테고리 없음

Node.js

YJ_P 2023. 4. 28. 11:05

[ 논 블로킹 I/O ]

1. 이전 작업이 완료될 떄 까지 기다리지 않고, 다음 작업 수행

2. 오래걸리는 작업은 백그라운드에서 처리

 

[ 싱글 스레드 ]

- 스레드란 작업을 실행하는 단위 

- 주어진 작업을 핸개의 스레드가 처리하는 것 

- 주어진 작업을 혼자 처리하는 방식

- 스레드에 문제가 생길 시 전체에 문제가 생길 가능성 있음

- 메모리나 기타 자원을 효율적으로 사용 가능 

 

[ 멀티스레드 ]

- 여러개의 스레드가 일을 나눠 처리

- 하나의 스레드가 문제 생겨도 다른 스레드로 대체 가능

- 스레드간의 작업 전환 비용, 놀고 있는 스레드 문제 발생

 

[Node.js 장점] 

1. 싱글 스레드, 논블로킹 I/O에 따른 빠른 속도

2. 컴퓨터 자원을 덜 사용

3. I/O작업이 많은 서버로 적합(채팅, 스트리밍)

4. 자스를 사용하기에 프론트엔드 개발자 사용 용이

4. 생산성이 높음 

 

[Node.js 단점 ]

1. 싱글 스레드 기반이라 자원을 많이 먹는 작업이 오면 부하가 크게 걸림

2. CPU 코어 한개만 사용 => CPU작업 많은 서버로 부적합 (게임서버) 

3. 로직이 복잡한 경우 콜백함수의 늪에 빠질 수 있음

4. 에러가 발생하면 프로세스 자체가 죽음

 

[ Node.js 어울리는 서비스 ]

1. 간단한 로직으로 구성된 서비스

2. 빠른 응답시간 요구된 서비스

3. 빠른 개발이 요구된 서비스

4. 비동기방식에 어울리는 서비스 (채팅, 스트리밍)

 

스코프 - 변수에 접근할 수 있는 범위 

비구조화 할당 - 객체 , 배열안의 값을 추출해서 변수, 상수에 바로 선언하는 문법

 

서버란? 

네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 혹은 프로그램 

웹 사이트를 클릭하거나 url을 통해 들어가려는 우리가 클라이언트이고 서버는 클라이언트의 요청에 대한 응답하는 것 

 

로컬호스트localhost = 현재 컴퓨터의 내부 주소 = 127.0.0.1 (IP(Internet Protocol)

- 서버 개발할 때 테스트 용으로 많이 쓰인다. 

 

port -> 서버내의 프로세스를 구분하는 번호 

- 서버에서는 다양한 일을 처리한다(HTTP, DB 등등) 

 

const http = require("http");  //http는 서버를 쉽게 구축하는 패키지

http 
	.createServer((req, res) => {     //createServer 서버를 구축하기 위해 생성하고 콜백함수로 req, res를 받아서 요청과 응답 진행하는 함수
    	res.writeHead(200, { "Content-Type": "text/html" }); 
        res.end("<p>Hello World~!!!</p>"); 
        })
        .listen(3000, () => {           //listen 서버를 만들고 서버를 대기시킬 수 있는 함수
        	console.log("3000번 포트 서버 접속 완료!");
         });

서버에 접속하는 코드 

 

[ Postman ]

서버 개발 시 이를 테스트할 수 있는 툴 

구글에 Postman다운로드 입력하고 다운로드 받기 

 

[ API 서버 ]

요청을 받고 응답하는 서버 

밑에는 API서버 만드는 코드 

const http = require("http");  //http는 서버를 쉽게 구축하는 패키지

http 
	.createServer((req, res) => {     //createServer 서버를 구축하기 위해 생성하고 콜백함수로 req, res를 받아서 요청과 응답 진행하는 함수
    	if(req.url === "/") {
        	res.writeHead(200);    //응답 보냈을 때 정상이면 200번 잘못 들어갔을 때 400번 
            res.end("main url");
          } else if (req.url === "/upload") {
         	res.writeHead(200);
            res.end("upload url"); 
          } else if (req.url === "/delete") {
          	res.writeHead(200);
            res.end("delete url");
          } else {
          	res.writeHead(404); 
            res.end("Not found!!!);
          }  
         })
        .listen(3000, () => {           //listen 서버를 만들고 서버를 대기시킬 수 있는 함수
        	console.log("3000번 포트 서버 접속 완료!");
         });

코드실행 시키고 postman으로 잘 작동하는지 확인하기 postman에  http://localhost.3000 

http://localhost.3000/upload 입력하기 

 

http 는 다른 개발자가 만들어 놓은 패키지를 사용하는 것 쉽고 효율적으로 개발 가능

자바스크립트에는 다양한 패키지가 있다 

 

[ npm] node package manager 

방대한 패키지를 모아서 설치/관리해주는 툴

Node.js로 만들어진 패키지를 설치하고 관리해주는 툴 

 

[ 패키지 문제점 ] 

패키지를 설치하다 보면 서로 의존되는 패키지들이 존재 

패키지 버전마다 기능이 다를 수 있는 문제 

 

설치한 패키지 버전을 관리해주는 파일 package.json  

 

express 프로그램을 만들기 위한 기본 툴 프로그램을 만들기 위한 기본 툴

[ 기존]                                     [express]

1. req.url 파싱                       1. req.get('경로')

2. req.method 확인               2. req.query로 확인 

3. 쿼리문 작성 

 

express-generator는 express의 기본 구조를 만들어 줌