책(200)
-
[6장] Express / Router
Express에선 라우팅을 깔끔하게 관리할 수 있도록 도와주는 라우터 미들웨어를 제공한다. 미들웨어이긴 하지만 사실상 Application과 유사한 기능을 몇몇 갖추고있다. 이게 무슨소리인가 싶을텐데, const app = express( ); 로 선언했던 app 객체와 기능적으로 비슷한 부분이 많다는 뜻으로, 라우팅 기능은 당연하고 app.use( ) 메서드도 쓸 수 있고 이거저거 할 수 있는게 많다는 뜻. 1. 라우팅 기본 이런저런 기능을 덧붙이기에 앞서 라우팅을 깔끔하게 관리해보자. app.js에서 라우팅하는 코드를 줄줄이 짜는게 아닌, routes 폴더를 따로 생성 후 요청 경로에 맞는 라우트 파일을 만들어 별도 관리하는 것이다. # express.Router( [options] ) - caseS..
2022.05.07 -
[6장] Express/multer
multer부분을 따로 뺀 이유는 사용 자체가 어려운 편에 속하고, 짚고 넘어가야 할 개념들이 많기 때문이다. 그렇다고 모른 채 지나간다면 파일 업로드를 처리할 수 없으므로 차근차근 알아보기로 하자. 1. 파일업로드의 본질 1.1 HTTP 메시지 이전에도 설명했지만 HTTP 요청/응답은 Header와 Body로 구성되어 있다. Header를 보고 '어떤 형태'의 데이터인지 확인하고 Body를 보고 구체적인 '내용'을 확인할 수 있는 것이다. 즉, 모든 HTTP 메시지는 Header와 Body가 적절한 형태로 채워져 있어야 소프트웨어가 동작할 수 있다. 1.2 클라이언트 → 서버 파일 업로드 과정 이해하기 파일 업로드를 구현한다고 해보자. 클라이언트 측에서 파일을 실어서 서버로 보낼 것이고, 서버는 이를 ..
2022.05.06 -
[6장] Express
1. 프로젝트 시작 익스프레스는 http모듈의 불편함을 개선한 웹 서버 프레임워크이다(라이센스 : MIT) 이를 이용해서 서버를 만들어볼건데 그에 앞서 Node.js에서 프로젝트를 시작할 땐 무조건 package.json 파일을 만들고 시작하자. 그 후 Express 패키지를 다운받아준다. 책에선 CommonJS를 사용했지만 임의로 ESM으로 바꿔봤다. 1.1 기본 // CommonJS 대신 ESM을 사용하기로 했다 (내 맘) // __dirname은 ESM에선 없음 import express from 'express'; import path from 'path'; // path.resolve( [path] ) // 인수로 전달받은 경로들을 절대경로로 변환한다 // 만약 전달받은 인수가 없으면 현재 작업..
2022.05.05 -
[5장] npm 패키지 매니저
1. npm; node package manager 말 그대로 노드 패키지 매니저. 자바스크립트 프로그램(모듈)이 패키지란 이름으로 npm에 등록되어 있어 원하는 패키지를 npm에서 찾아 설치할 수 있다. 이 때 A라는 패키지는 다른 B라는 패키지를 사용하고 있을 수도 있는데, 이러한 관계를 의존 관계라고 부른다. ※ yarn : 페이스북이 내놓은 패키지 매니저. npm 서버가 너무 느리면 대용으로 사용할 수 있다. 2. package.json 필요한 패키지를 추가하다보면 어느새 패키지 수가 100개를 넘기는 일이 부지기수다. 또한, 패키지는 저마다 고유한 버전이 있으며, 버전별로 기능이 다를 수 있다. 따라서 방대하고 복잡한 패키지의 버전을 관리할 필요성이 생겼고, 이를 실제로 관리해주는 파일이 바로 ..
2022.05.04 -
[4장] 서버 만들기 (cluster)
4. cluster 싱글 프로세스로 동작하는 노드가 CPU 코어를 모두 사용할 수 있게 해주는 모듈. 포트를 공유하는 노드 프로세스를 여러 개 둘 수 있어서 요청이 많이 들어와도 병렬로 실행된 서버의 개수만큼 요청이 분산되게 할 수 있다. 예를 들어 코어가 4개라고 치자. 노드는 보통 코어 하나만 활용하지만 cluster 모듈을 설정하면 코어 하나당 노드 프로세스 하나가 돌아가게끔 할 수 있다. 즉 같은 역할을 하는 서버를 4개 만큼 독립되게 열어두는 것. 성능이 꼭 4배가 되는건 아니더라도 코어를 하나만 쓸 때와 비교하면 성능이 개선된다. 물론 메모리를 공유하지 못하는 단점도 존재. 1) 클러스터링 해보기 더보기 const cluster = require('cluster'); const http = r..
2022.05.03 -
[4장] 서버 만들기(쿠키와 세션)
3. 쿠키와 세션 클라이언트에서 보내는 요청에는 기본적으로 '누가' 요청을 보냈는지까진 포함돼있지 않다. 물론 IP주소나 브라우저의 정보는 받아올 수 있지만 그게 구체적으로 어떤 사람인지는 알 방법이 없는 것이다. 이는 HTTP 프로토콜 환경이 "connectionless, stateless"한 특성을 가지기 때문. 더보기 비연결성 ( Connectionless ) 비연결성은 클라이언트가 요청을 한 후 응답을 받으면 그 연결을 끊어 버리는 특징을 의미한다. HTTP 프로토콜은 인터넷 상에서 다수의 사용자들을 통신하기 위해서 비연결성이라는 방식을 채택. 무상태 ( Stateless ) 무상태는 통신이 끝나면 상태를 유지하지 않는 특징을 의미. 연결을 끊는 순간 클라이언트와 서버의 통신을 끝내며 상태 정보는..
2022.05.03