3주차 node.js 기초와 모듈 설치와 삭제
HTTP에 담아내는 목적 = HTTP method
- http = 규약 = 정해둔 용어 존재
- method: http에서의 목적
- 외울 필요는 없어요! 대신 적절한 method를 찾아서 사용해주세요!
- 생성(=등록) : POST
- 조회 : GET
- 수정 : PUT(덮어쓰기) / PATCH
- PATCH: 일부 변경? 부분 수정?
- 삭제 : DELET
- HEAD, OPTIONS, CONNECT, TRACE
node.js
- 백엔드에만 쓰이는게 아님! / 자바스크립트를 위한 운동장 (프론트엔드에도 쓰임: node.js 기반 리액트, 뷰, ...)
- 특징(동작 원리): 싱글 스레드, 이벤트 기반, 논블로킹 I/O
- 주문이 계속 밀려 드러와도, 한명이 어떻게든 쳐냄: 싱글 스레드 (싱글 요리사)
- 주문이 들어와야만 일을 함 (= 주문이 없으면, 일을 안함): 이벤트 기반
- 한 명이 일을 하는데, 요리를 순차적 X, 중간중간 비는 시간이 있으면 다른 요리: 논블로킹 I/O
- 라면 (총 10분, 물 끓는 시간은 5분), 볶음밥 5분 -> 물 끓이는 동안 볶음밥하고 다시 라면 요리 (막히는 게 없당)
노드 확인
- node 들어가기(node), 목록 확인(.help)
- 빠져나가기(.exit), 노드 버전 확인(node -v)
- js 코드 vscode에서 실행하기
이 부분은 강사님의 화면에서는 바로 실행키가 있었는데 버전 차이인지 내 vscode에서는 보이지 않아 적어둔다.
(메뉴바에 실행키가 아예 없어진 줄 알고 알아봤더니 그냥 js코드에서만 안보이는 거였다,,)
node 파일이름.js
논블로킹 I/O 실습
- setTimeout 사용 후 결과
- 동기식, 비동기식을 의미하는 듯: 참고 블로그
- setTimeout 은 비동기식 --> 2초를 기다리지 않고 뒷 라인 코드인 third 실행
모듈
: 내가 만들게 아니라, 선배 개발자들이 미리 만들어둔 코드 덩어리
모듈을 가져다 쓰고 싶으면,,
- 내장모듈(=표준모듈): setTimeout 같은 거
- 외부모듈은 어떻게? npm
모듈 = "라이브러리"?
cf. 라이브러리(feat. 프레임워크)
라이브러리
도서관: 분류 -> 상세 주제의 한권의 책을 골라냄! 기준: "출판사, 작가, 내용, ..." ->
- 장점: 내가 원하는 걸 빌릴 수 있음
- 단점: 고르기 힘듦, 찾는 시간 오래, 도서관 가는 시간, ...
=라이브러리 = 모듈 !
프레임 워크
: 틀 안에서 일하는 것: 내가 만들고 싶은 서비스를 구현하는데 필요한 모든 일을 틀 안에서 하는 것
(프레임 워크는, 필요해 보이는 라이브러리(모듈)를 미리 다 틀 안에 넣어둠)
node.js가 프레임워크는 아님! 런타임(구동 환경)이라고 함
-> Node.js 덕분에 자바스크립트 모듈을 만들 수 있고, 사용도 할 수 있게됨!
(node.js가 없었으면 js를 vscode와 같은 툴에서 사용 X, 원래 웹 브라우저에서 작성)
모듈2: 외부 모듈 사용
- npm: 외부 모듈 설치, js 모듈 관리
: npm이 저장소에 "외부 모듈" 설치를 우리가 원하는 프로젝트에 자동으로 해줌
- npm -v: npm 설치 버전 확인 (node.js 설치할 때 같이 설치)
- npm 사이트에서 필요한 모듈을 찾을 수 있고 오른쪽 intall 명령어를 이용
- i 는 install의 약자
- install -g : global의 약자, 내가 만드는 모든 프로젝트에 해당 모듈이 install 됨 --> 비추!
- 설치 후 화면
- .json 확장자 파일과 node_mudules가 생김
- 공식 사이트의 예제 코드를 실행하면 잘 돌아감!
위의 예제 코드 뜯어보기
- 변수 선언
- require("모듈(예제: figlet)"): figlet이라는 모듈을 가지고 옴
- figlet ("출력될 문자열", 함수)
- "콜백함수": 함수의 매개변수로 변수나 값이 아니라 함수를 전달하는 것!
- 첫번째 매개면수 "출력될 문자열"라는 문자열을 받아서
- 아스키 아트를 만든 다음에
- 두번째 매개변수 function 함수를 실행 = 콜 백 (뒤에서 실행!)
- 익명의 함수: 함수 이름이 없음, 이 함수를 쓸 일이 다른 데는 없어서
- 함수
- 에러가 나면 콘솔에 에러 출력
- 에러 아니면, 콘솔에 문차열을 아스키코드로 바꾼 data 출력
http 예제 뜯어보기
- http 모듈: 내장 모듈 -> 바로 사용 가능
- http.createServer(onRequest).listen(8888);
- createServer와 listen을 이렇게 사용하라고 정해짐
- createServer(onRequest): http 모듈에 createServer 함수 안에서 할 일을 다 한 후, onRequest 콜백 함수를 실행시켜달라고 매개변수를 던진 것
- listen(포트번호)
var, let, const
var vs let, const -> 블록 스코프 추천됨
let vs const
문자열
모듈 삭제
: npm uninstall figlet
- package.json 내용 삭제
- 삭제 전
- 삭제 후
- dependencies: 내가 사용할 것
- json: "키": "값" 형태로 데이터 작성하는 객체