[포스코x코딩온] 웹 풀스택 5주차 회고 -1

sima·2023년 8월 2일
0

KDT web-8

목록 보기
5/17
post-thumbnail

Node.js

자바스크립트 기반으로 서버사이드 개발에 사용되는 Javascript 런타임
이벤트 기반, Non-Bloking I/O 모델 사용하여 가볍고 효율적

런타임?

프로그래밍 언어가 구동되는 환경, javascript를 서버사이드 언어로 활용하기 위해 나온것이 Node.js

npm

노드 패키지를 관리해주는 틀

  • npm init : 프로젝트 시작
  • npm init --yes : package.json 기본값 생성
  • npm install 패키지 이름 : 프로젝트에서 사용할 패키지 설치, dependencies에 입력됨

package.json

의존관계의 패키지들을 문제가 발생하지 않기 위해 관리해줌, 프로젝트에 대한 정보와 사용중인 배키지 이름 및 버전정보 담겨있음

  • name : 패키지 이름
  • version : 패키지 버전
  • main : js 실행파일 진입점
  • description : 패키지 설명
  • scripts : npm run을 이용해 정해놓는 스크립트 언어
  • license : 패키지의 라이센스

프로세스, 스레드/멀티스레드

  • 프로세스 : 운영체제로부터 자원을 할당받는 작업의 단위
  • 스레드 : 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위
  • 멀티스레드 : 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업하는 것을 의미

멀티스레드 장점

  • 일부 스레드가 중단되거나 긴 작업을 수행할때도 프로그램이 돌아가 응답성 증가
  • 프로세스 내 자원과 메모리를 공유하기 때문에 경제성 증가
  • 다중 CPU 구조에서 스레드가 다른 프로세서에서 병렬로 수행 가능

멀티스레드 단점

  • 스레드 간 자원을 공유하기 때문에 하나의 스레드가 오류로 종료될 경우 전체 스레드 종료 가능성 있음
  • 스레드 간 전역변수 공유하기 때문에 충돌 가능성이 있음

Node.js에서의 스레드

사용자가 직접 제어할 수 있는 스레드는 하나(싱글 스레드)
Non-blocking I/O 기능으로 일부 기능은 백그라운드에서 실행 가능

Non-bloking I/O

  • 동기
    - 데이터의 요청과 결과가 한 자리에서 동시에 일어나는 것
    • 한 요청에 대해 서버 응답이 이루어질 때 까지 다른 요청은 대기
  • 비동기
    - 동시에 일어나지 않고, 요청 후 응답이 올때까지 기다리지 않고 다른 행동 수행

Event-Driven

이벤트가 발생할 때 미리 지정해둔 작업을 수행(클릭, 네트워크 요청, 타이머 등)

모듈

특정한 기능을 하는 함수, 변수들의 집합

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

모듈 만들기

//하나의 모듈 파일에 여러개
const a = 'a 변수';
const b = 'b 변수';

module.exports = { a, b};

//하나의 모듈 파일에 하나
function connect() {
	return a + b;
}

modyle.exports = connect;

//모듈 가져오기
const {a, b} = require(...);
const returnString = require(...);

ES2015문법에서의 모듈

const a = 'a 변수';
const b = 'b 변수';

export {a, b};

function connect() {
	return a + b;
}

export default connect;

//모듈 가져오기
import {a, b} from '...';
import returnString from '...';

Server

http 모듈 : 웹 서버 구동하기 위한 node 내장 모듈

  • server : 웹 서버 생성시 사용하는 객체
  • request / response : 응답매세지 작성 시 매개변수 객체

http모듈 이용해 서버 생성

const http = require('http');
const server = http.createServer((req, res)=> {
	res.writeHead(200);  	//응답 헤더
    res.write(...);			//응답 본문
    res.end(...);			응답 본문 작성후 종료
});

server.listen(8000, ()=> {		//첫번째 매개변수 포트번호, 두번째 callback
	...
}

http 응답

  • 1XX : 처리중 (100 - Continue, 102 - Processing)
  • 2XX : 성공 (200 - OK, 201 - Created, 202 - Accepted)
  • 3XX : 리다이렉트
  • 4XX : 요청오류 (400 - 잘못된 요청, 401 - 권한없음, 403 - 금지됨, 404 - 찾을 수 없음)
  • 5XX : 서버오류

Express 모듈

웹 서버 생성과 관련된 기능을 담당하는 프레임워크, 각종 메서드와 미들웨어 내장
http모듈의 가독성과 확장성을 보완한 프레임워크

Express 설치

npm install express
node_modules가 생성, package_json의 dependencies에 의존성 추가

Express 사용

express() - Express 모듈을 불러오는 최상위 함수
app - Express() 호출함으로써 만들어진 애플리케이션

ejs 템플릿 설치와 사용

ejs - 자바스크립트 내장되어 있는 html파일
npm install ejs

뷰 엔진 설정

app.set('view engine', 'ejs');
app.use('/views', express.static(__dirname + '/views')); //경로와 이름지정

ejs 문법

<% %> - js 코드가 들어가고, 줄바꿈 필요할 시 새로운 <% %> 이용
<%= %> - 값을 출력할 때 사용
<%- include('view의 상대주소') %> - 다른 view파일 불러올 때 사용

미들웨어

  • 요청이 들어옴에 따라 응답까지 중간과정을 함수로 분리
  • 서버와 클라이언트 이어주는 작업
    static - 이미지, css, js같은 정적파일 제공

0개의 댓글