[포스코x코딩온] 웹개발자 풀스택 과정 4주차 | Node.js

구준희·2023년 7월 27일
0

[포스코x코딩온]교육

목록 보기
10/40
post-thumbnail
post-custom-banner

Node.js

  • 구글 크롬의 자바스크립트 엔진에 기반해 만들어진 Javascript 런타임
  • 이벤트 기반, 비동기 I/O 모델을 사용해 가볍고 효율적
  • npm 패키지 사용가능

설치

Node.js 사이트 링크


다운로드하고

계속 next 누르다 보면 완료

설치 됐으면 win+R 누르고 cmd 확인


node -v, npm-v 쳐서 버전확인

npm이란?

  • Javascript로 개발된 각종 모듈의 설치, 업데이트, 구성, 제거 과정을 자동화하여 관리해주는 기능

폴더 만들고 그 폴더로 이동한 다음에 gitbash에 npm-init 치고 엔터 광클하면 완료됨

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

package.json

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

package.json

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

Node.js의 특징

1. 자바스크립트 언어 사용

2. Single Thread

프로세스

  • 실행중인 프로그램
  • 운영체제에서 할당하는 작업의 단위

Thread(스레드)

  • 프로세스 내에서 실행되는 흐름의 단위
  • 하나의 프로세스에는 n개의 스레드가 존재하며 동시에 작동할 수 있다.
  • Node.js는 사용자가 직접 제어할 수 있는 스레드는 하나이다.
    • 싱글 스레드가 주어진 일을 하나밖에 처리 못한다.
    • Non-blocking I/O 기능으로 일부 코드는 백그라운드(다른 프로세스)에서 실행 가능
    • 에러를 처리하지 못하는 경우 멈춘다.
    • 프로그래밍 난이도가 쉽고, cpu, 메모리 자원을 적게 적용한다.
    쓰레드 이해짤.jpg

3. Non-blocking I/O

  • 동기(Synchronous)
    • 데이터의 요청과 결과가 한 자리에서 동시에 일어나는 것
    • 시간이 얼마나 걸리던지 요청한 자리에서 결과가 주어진다.
    • 한 요청에 서버의 응답이 이루어질 때까지 대기해야 한다.
  • 비동기(Asynchronous)
    • 동시에 일어나지 않는 것
    • 요청한 후 기다리지 않고 다른 활동을 한다.
  • I/O 작업
    • 파일 시스템 접근(읽기, 쓰기, 만들기 등) 네트워크 요청
  • Node.js는 표준 라이브러리의 모든I/O 메서드를 비동기 방식으로 제공한다.

4. 비동기적 Event-Driven

  • Event-Driven : 이벤트가 발생할 때 미리 저장해둔 작업을 수행(ex. 클릭, 네트워크 요청, 타이머 등)
  • 이벤트 리스너(Event Listsener) : 이벤트 등록 함수
  • 콜백 함수(Callback Function) : 이벤트가 발생했을 때 실행되는 함수

Call stack

first() -> second() -> third() -> console -> console -> console 순서로 읽는다.
LIFO방식(Last In First Out): 제일 늦게 들어간넘이 제일 먼저 나온다.

EventLoop

function run(){
    console.log("1초 뒤 실행")
}

console.log("시작");
setTimeout(run, 1000);
console.log("끝");

결과 : 시작 -> 끝 -> 1초 뒤 실행 순서로 출력
setTimeout은 run이 실행시 백그라운드로 보내버리고 console이 출력되고 1초 뒤 1초뒤 실행이라는 문구출력

Node.js의 역할

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

모듈(Module)

모듈이란?

  • 특정한 기능을 하는 함수나 변수들의 집합
  • 재사용 가능한 코드 조각

모듈의 장점

  • 코드 추상화
  • 코드 캡슐화
  • 코드 재사용
  • 의존성 관리

모듈의 특징

  1. 각각의 모듈은 상대적으로 독립성을 가지고 있다.
  2. 모듈 내부에는 그 모듈을 하나로 통합하는 수 많은 조합들이 존재할 수 있다.
  3. 독립된 모듈간의 조합은 현저히 줄어든다.
  4. 한 부분이 고장을 일으키면, 고장의 원인이 된 해당 모듈만 교체하면 된다.
  5. 해당 모듈을 교체하여도 다른 시스템에 영향을 주지 않는다.
  6. 복잡한 시스템 전반에 대한 통제의 필요성을 줄여 복잡성을 최소화 한다.
  7. 상호간에 조립 및 교체가 용이하도록 설계되었다면, 모듈 그 자체제 대한 상세한 기능을 알지 않아도 된다. 다만, 전반적인 기능을 이해하기만 하면 된다.

모듈 만들기

// 하나의 모듈 파일에 여러개 만들기
const a = "a 변수"
const b = "b 변수"

module.export = {a, b};
// 하나의 모듈 파일에 하나 만들기
function example(){
  	return a+b;
}
module.export = example;

가져올 때

// const{}로 가져올 때는 구조분해해 가져오기에 이름이 동일해야 한다.
const {a, b} = require("파일경로");
// 하나만 내보낸 모듈은 다른 이름이어도 불러올 수 있다.
const returnString = require("파일경로");

서버만들기

http 통신

http 모듈

  • Nodejs를 통해 서버를 구축하는 방법은 http와 express 두개이다.
  • http 모듈
    • 웹 서버를 구동하기 위한 node.js 내장 웹 모듈
    • server 객체, request 객체, response 객체를 사용한다.
    • server 객체 : 웹 서버를 생성할 때 사용하는 객체
    • response 객체 : 응답 메세지를 작성할 때 두 번째 매개변수로 전달되는 객체
    • request 객체 : 응답 메세지를 작성할 때 첫 번째 매개변수로 전달되는 객체

http 모듈서버 만들기

const http = require('http');
const server = http.createServer();

server.listen(8080, function(){
  console.log('8080포트로 서버 실행');
});

이거 서버 실행하고 터미널 안먹으면 Ctrl+c 눌러서 서버 꺼줘야됨

const http = require('http');

const server = http.createServer(function(request, response){
  response.writeHead(200);
  response.("<h1>He11o!</h1>");
  response.("<p>End</p>");
});

server.listen(8080, function(){
  console.log('8080번 포트로 서버 실행');
});

Response 객체
writeHead : 응답 헤더 작성
write : 응답 본문 작성
end : 응답 본문 작성 후 응답 종료

localhost와 port

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

server 객체

listen()서버를 실행하고 클라이언트를 기다린다.
close()서버를 종료한다.
on()server 객체에 이벤트를 등록한다.
request클라이언트가 요청할 때 발생하는 이벤트
connection클라이언트가 접속할 때 발생하는 이벤트
close서버가 종료될 때 발생하는 이벤트
checkContinue클라이언트가 지속적인 연결을 하고 있을 때 발생하는 이벤트
upgrade클라이언트가 http 업그레이드를 요청할 때 발생하는 이벤트
clientError클라이언트에서 오류가 발생할 때 발생하는 이벤트

http 응답

  • 1XX : 처리중
    • 100 : continue
    • 102 : processing
  • 2XX : 성공
    • 200 : OK
    • 201 : Created
    • 202 : Accepted
  • 3XX : 리다이렉트(다른 페이지로 이동)
  • 4XX : 요청 오류
    • 400 : 잘못된 요청
    • 401 : 권한 없음
    • 403 : 금지됨
    • 404 : 찾을 수 없음
  • 5XX : 서버 오류
profile
꾸준히합니다.
post-custom-banner

0개의 댓글