HTTP에 담아보내는 나의 목적
= HTTP method
HTTP = 규약
따라서, 정해진 용어가 존재하고 적절한 method를 사용해야 함
method
백엔드에만 쓰이는 게 아니다!(페이팔, 이베이 등은 node.js를 써서 유명하긴 함)
node.js는 여러 자바스크립트를 위해 운동장 깔아주는 역할, 즉, 자바스크립트가 스크립트 언어 이상으로 프로그래밍 언어 역할을 할 수 있도록 지원하는 플랫폼.
Node.js는 넷플릭스, 에어비엔비, 나사, 우버 등에서 사용됨
싱글스레드
이벤트 기반
논블록킹 I/O
세 가지 특징 쉽게 이해하기
주방장이 한 명인 주방이 있다고 가정해보자.
주방장이 한 명이면, 주문이 자꾸 밀려들어와도 혼자서, 한명이서 어떻게든 요리를 해내야 한다.
→ `싱글 스레드`
요리 2개가 동시에 들어왔다고 가정해보자. 하나는 라면, 하나는 볶음밥이다.
라면의 요리 소요 시간은 총 10분이지만 물 끓이는데 5분이 걸린다.
볶음밥은 바로 5분동안 볶아주면 된다.
그렇다면, 라면이 끓는동안 아무것도 안하고 라면물만 지켜보는 게 아니라, 그 시간에 볶음밥을 볶아야 옳은 선택이다.
→ `논블록킹 I/O`
요리 주문이 안 들어온다면, 요리를 할 필요가 없다.
→ `이벤트 기반` (**이벤트가 있어야만 일을 한다**(즉, 이벤트가 없다면 일을 안 한다))
노드 버전 확인 명령어
node -v
setTimeout(원하는 시간이 지나고 안의 인자로 받은 것 실행해주는 모듈)모듈 사용해보기
순서상으로는 third보다 second가 먼저 출력되어야 하는데, 모듈 덕분에 third가 먼저 출력된 모습
function first(){
console.log('첫 번째');
}
function second(){
console.log('두 번째');
}
function third(){
console.log('세 번쨰');
}
first();
setTimeout(second, 2000);
third();
모듈은 선배 개발자들이 미리 만들어놓은 코드 덩어리.
어디까지를 모듈이라고 칭할지, 덩어리를 어떻게 정의할지 다 내 마음!
하나의 함수를 각자 마음대로 짜는 것처럼 모듈도 마음대로 짤 수 있음
모듈을 가져다가 쓰는 방법 2가지
우리가 도서관에 가면, 엄청 많은 책들이 세부적으로 분류가 되어있고, 우리는 필요한 기준(작가, 내용, 출판사 등)에 따라서 판별해서 책을 고르게 된다.
모든 책을 다 볼 필요도 없고 본인 기준에서 원하는 책을 볼 수 있다는 장점도 있지만, 너무 방대한 선택지 중에서 고르기 어렵거나 힘들고 찾는데 시간이 오래 걸린다는 단점도 있다.
라이브러리는 모듈과 거의 비슷하다고 볼 수 있다.
모듈처럼 이미 만들어진 코드 덩어리이고 우리는 이걸 편의와 목적에 따라서 가져와 쓸 수 있다.
프레임워크는 틀 안에서 일하는 것이다.
내가 만들고 싶은 서비스를 구현하는데 필요한 모든 일을 틀 안에서 이미 존재하는 것이다.
프레임워크는 서비스 완성을 위해 필요한 라이브러리(모듈)을 다 틀 안에 넣어뒀다.
이미 내장된 모듈은 그냥 사용하면 되지만, 외부 모듈을 사용하려면 특별한 명령어가 필요하다.
바로, npm
NPM
외부 모듈을 내 프로젝트에 설치할 수 있도록 해주는 역할 담당하는 NPM
우리 입장에서는 간단하지만, npm 입장에서는z 파일 다운받아서 우리 대신에 풀어서 쓸 수 있도록 하는 것
npm이 저장소에 외부 모듈을 설치를 우리가 원하는 프로젝트에 자동으로 해줌
npm install 모듈
npm uninstall 모듈
npm i 모듈명 -g
내 컴퓨터에 있는 모든 프로젝트에 해당 모듈 설치하는 것 <추천하진 않음>
유명한 모듈 중 하나인 figlet 사용해보는 실습을 해보자.
npm 사이트에서 찾아서 코드 vscode에서 돌려보자.
var figlet = require("figlet");
figlet("Hello World!!", function (err, data) {
if (err) {
console.log("Something went wrong...");
console.dir(err);
return;
}
console.log(data);
});
결과물
_ _ _ _ __ __ _ _ _ _
| | | | ___| | | ___ \ \ / /__ _ __| | __| | | |
| |_| |/ _ \ | |/ _ \ \ \ /\ / / _ \| '__| |/ _` | | |
| _ | __/ | | (_) | \ V V / (_) | | | | (_| |_|_|
|_| |_|\___|_|_|\___/ \_/\_/ \___/|_| |_|\__,_(_|_)
작동 방식
figlet(매개변수1,매개변수2)
매개변수1은 프린팅하고 싶은 문자
매개변수2는 콜백함수
문자열을 받아서, 아스키 아트를 생성한 후 두번째 매개변수 function 콜백 함수를 실행하는 방식
콜백 함수 쪼개보기
let http = require('http'); // 내장 모듈(npm 불필요)
function onRequest(request, response){
response.writeHead(200, {'Content-type' : 'text.html'});
response.write('Hello Node.js');
response.end();
}
http.createServer(onRequest).listen(8888);
// http 모듈의 createServer 함수에 할일을 다 한 다음에
// onRequest 콜백 함수를 실행시킴
이전에 작업했던 HTTP 서버 파일
http.createServer(onRequest).listen(8888);
이 부분에서 HTTP 모듈의 createServer 함수에 할일을 다 한 다음에
onRequest 콜백 함수를 실행시키는 것 확인 가능
⚠️ 참고) var, let, constvar - 함수레벨 스코프, 전역 변수
let - 블록 레벨 스코프
const - 블록 레벨 스코프, 상수, 초기 할당 이후 변경 불가능
⚠️ 참고) 탬플릿 문자열
템플릿 문자열 도입 전
console.log(num1 + 'X' + num2 + "=" + num3);
템플릿 문자열 도입 후
console.log(`${num1} X ${num2} = ${num3}`);
백틱과 ${}를 이용해서 간단하게 문자열 생성 가능, 특히나 변수 삽입이 매우 쉬워짐
npm uninstall figlet
// 결과
// removed 1 package, and audited 12 packages in 535ms
npm uninstall 명령어 사용하면 됨
모듈 객체는 package.json에서 확인 가능
figlet 모듈 설치 전에는 객체 안에 아무것도 없었는데 반해서
설치 후에는 figlet 정보 확인 가능
dependencies는 사용할 것들에 대한 키
package.json vs package-lock.json
후자는 좀 더 구체적인 정보를 담은 파일