HTTP Method
생성(등록) | POST |
조회 | GET |
수정 | PUT(덮어쓰기), PATCH(일부 수정) |
삭제 | DELETE |
기타 | HEAD, OPTIONS, CONNECT, TRACE |
Node.js
자바스크립트는 원래 웹 브라우저 위에서만 실행이 가능했다. Node.js는 자바스크립트가 웹 브라우저 밖에서도 구동될 수 있도록 환경을 구축해 놓은 플랫폼이다.
특징
1. 싱글 스레드
우리는 vscode로 작업하면서 백그라운드에는 유튜브를 띄워놓을 수 있다. 이것을 멀티 프로세스라고 하며 프로세스는 현재 실행 중인 프로그램이라고 생각하면 된다.
스레드는 하나의 프로세스 안에 존재하는 흐름을 말한다. 여러 흐름이 동시에 실행되면 멀티 스레드, 하나의 흐름만 존재하면 싱글 스레드라고 한다.
node.js 자체는 싱글 스레드가 아니지만 자바스크립트를 실행하는 스레드는 단 하나이기 때문에 node를 싱글 스레드라고 한다.
2. 이벤트 기반
이벤트가 발생하면 미리 지정해둔 작업을 수행하는 방식을 말한다. 이벤트의 예시로는 어떤 것을 클릭한다거나 네트워크 요청을 보내는 것 등이 있다.
3. 논블로킹 I/O
잠깐 C 언어 얘기를 해보겠다. C언어는 블로킹 I/O 방식으로. Input/Output 요청이 발생하면 그 요청이 완료될 때까지 기다린다. 지정한 시간 동안 대기하라는 명령인 sleep()을 실행하면(스레드가 하나만 있다고 가정) 그 시간 동안 가만히 있다가 sleep 이후의 코드를 실행한다.
node.js는 논블로킹 I/O 방식을 사용한다. Input/Output 요청이 발생해도 완료될 때까지 기다리지 않고 다음 명령을 실행한다.
console.log("1");
setTimeout(function () {
console.log("2");
}, 2000);
console.log("3");
2를 2초 뒤에 실행시키라는 명령을 받았으니 2초 기다렸다가 2를 출력하고, 그 다음 명령으로 3을 출력하는 방식은 블로킹 방식이다. node.js는 논블로킹 방식이므로 2초가 지나서 2를 출력할 때까지 아무것도 안 하고 있는 게 아니라, 2초가 될 때까지 그 뒤의 명령을 실행한다. 따라서 출력 값이 1 3 2가 된다.
라이브러리 & 프레임워크
라이브러리
모듈이라고도 부르며, 미리 만들어둔 코드 덩어리를 말한다. 내장 라이브러리, 외장 라이브러리가 있고, 사용자가 라이브러리를 만들 수도 있다.
프레임워크
필요할 것같은 라이브러리를 미리 다 내장시켜 놓은 틀이다.
NPM
외부 라이브러리를 설치할 수 있게 해주는 역할을 한다. node를 설치할 때 같이 깔리기 때문에 별도의 설치는 필요하지 않다.
라이브러리 설치
아래 두 명령어 중 아무거나 사용하면 된다.
npm install 라이브러리명
npm i 라이브러리명
package.json 파일에서 설치된 라이브러리와 그 라이브러리의 버전을 확인할 수 있다.
라이브러리 삭제
아래 명령어를 실행하면 package.json 파일에서도 자동으로 사라진다.
npm uninstall 라이브러리명
콜백 함수
함수의 매개변수로 변수 또는 값을 전달하는 것이 아니라 함수를 전달하는 경우가 있다. 이때 전달하는 함수를 콜백 함수라고 한다. 아래 코드에서는 onRequest가 콜백 함수에 해당한다.
let http = require('http');
function onRequest(request, response) {
response.writeHead(200, { 'Content-Type': 'text/html' });
response.write('Hello Node.js');
response.end();
}
http.createServer(onRequest).listen(8888);
'데브코스' 카테고리의 다른 글
[4주차 - DAY1] REST API 디자인 및 구현(1) (0) | 2024.03.18 |
---|---|
[3주차 - DAY5] Express.js 기반의 웹 서버 구축 및 응용(2) (0) | 2024.03.15 |
[3주차 - DAY3] API (0) | 2024.03.13 |
[3주차 - DAY1] 스프린트1 프로젝트 (0) | 2024.03.11 |
[2주차 - DAY5] 웹 실습(2) (0) | 2024.03.08 |