TIL 36 | Server & Express

dabin *.◟(ˊᗨˋ)◞.*·2021년 9월 13일
0

Node.js

목록 보기
2/11
post-thumbnail
post-custom-banner

참고자료는
https://youtu.be/NoLV5iP5FNY
정말 쉽게 설명해주신다! (feat. 닭갈비집 알바..)

Server

클라이언트의 요청에 의해 네트워크를 통해 정보나 서비스를 전달하는 컴퓨터. 닭갈비 집에 가서 닭갈비를 시키면 닭갈비 한 판을 가져다주신다. 즉, 갖다 주시는 분, 서빙하는 사람이 server라고 생각하면 된다. 요구를 하면 가져다주는 것! 다시 웹으로 와서 생각해보면 네이버 쇼핑을 누르고 쇼핑정보 갖다주세요~ 하는 것이 클라이언트의 요청이고, 서버가 넹! 하고 보낸 정보를 브라우저에서 해석해서 알려준다.

서버 개발자는 어떤 일을 할까?

내가 네이버 웹툰 서버 개발자라고 하면, '어떤 사람이 이 주소로 접속하면 네이버 웹툰 메인 html 파일 전송해드리세요' 하는 코드를 짜는 것이다.

요청

서버는 '요청'을 받으면 그 내용을 보내준다. 보내는 방법 중 HTTP 요청에 대해 알아보자. HTTP 요청 방식은 읽기(GET), 쓰기(POST), 수정(PUT), 삭제(DELETE)의 네가지가 있다.

NodeJS

Javascript는 HTML 조작과 변경을 위해 만들어진 언어다. Javascript 해석은 누가 할까? 해석은 브라우저가 담당하며, 각 브라우저마다 자바스크립트 해석 엔진이 있다. 크롬 브라우저는 V8엔진, 모질라는 SpiderMonkey, IE는 Chakra 엔진을 가지고 있다. 크롬의 V8 해석엔진의 성능이 뛰어났고, 크롬에서 V8 엔진만 떼와 살을 붙여 Node.js로 출시하게 되었다. Node.js가 자바스크립트 언어가 브라우저 내에서 말고도 외부 환경에서도 쉽게 실행이 될 수 있게 도와주기 위해 만들어졌다. 즉, Node.js는 V8엔진을 사용한 자바스크립트 실행창, 실행환경(런타임)이다.

Node.js로 서버를 만드는 이유중 하나는 Non-blocking I/O이다. 고객 네 명이 있다고 치면, 고객한테 요청을 모두 동시에 받는다. 그 후에 처리 속도가 빠른 것부터 결과를 하나씩 전달한다. 그 후에 어려운 작업들을 성공시키고 결과를 전달한다. 즉, 빠르다! SNS나 채팅 서비스는 요청이 매우 많은데, 일반 서버로 구현된 서비스는 서버가 멈출 가능성이 있는 반면 Node.js로 구현한 서버는 서버가 멈추거나 느려지지 않는다. 물론 일반 프로그래밍 언어 또한 서버 스케일링 혹은 멀티쓰레딩을 하면 문제를 보완할 수 있다. 다시 Node.js로 돌아와서, Non-blocking 특성 떡분에 채팅과 SNS에 자주 사용이 되고 있으며 코드가 매우 짧고 쉽다는 특징이 있다.

Express 라이브러리

Express is fast, unopinionated, minimalist web framework for node.js. 라우팅과 로직의 모듈화를 위해 사용된며, 읽기 쉽고 유연하고 지속 가능한 백엔드 앱을 개발할 수 있도록 돕는 프레임워크다.

Express를 사용하면 간편하게 get, post등의 메서드를 붙여 사용할수 있고, 각각의 요청으로 처리하는 함수를 분리해 직관적으로 코드를 설계할 수 있다.

서버를 띄우기 위한 기본 setting

const express = require('express'); // 라이브러리 첨부
const app = express(); // 라이브러리 사용해 객체 생성, app에 담는 것이 컨벤션!

app.listen(8080, function() {
	console.log('listening on 8080')
})
; // 서버 오픈할 곳 지정 8080 port에 띄우고 함수 실행해주세요

app.get('/path', function(req, res){
  res.send('블라블라')
}); // localhost:8080/path 접속시 블라블라 뜸!

app.get('/', function(req, res){
  res.sendFile('__dirname + '/index.html')
}); // 접속한 유저에게 index.html 보여주시지요

//terminal
node 파일명.js

//주소창
localhost:8080 
------------------------------------------
//terminal 서버 재실행 자동화 
npm install -g nodemon //-g는 global을 뜻함.
yarn add global nodemon

//서버실행
nodemon 파일명.js

res응답 메소드

  • res.send(): 다양한 유형의 응답을 전송. send에 전해진 argument에 따라서 Content-Type이 자동적으로 만들어진다. String, Object, Array등의 type일 수 있다.
  • res.json(): JSON 응답 전송. 데이터를 자동으로 json 형식으로 바꾸어서 보낸다. 즉, content-type 헤더를 application/JSON으로 고정한다. 결국 res.json()도 마지막에 res.send()를 호출한다.
  • res.end(): 응답 프로세스를 종료. 보내줄 데이터가 없는데 response를 끝내고 싶을 때 사용한다. 이 메서드를 사용할 일은 거의 없다. 주로 404를 리턴해주어야 할 때 사용하기도 한다. res.json()이나 res.send() 또한 응답을 종료해주기 때문에 명시적으로 res.end를 해줄 필요는 없다.
  • res.sendStatus(): 응답 상태 코드를 설정한 후 해당 코드를 문자열로 표현한 내용을 응답 본문으로서 전송한다.
profile
모르는것투성이
post-custom-banner

0개의 댓글