본문 바로가기

Node.js

(19)
19. [NPM] dependencies vs. devDependencies depencies? package.json이라는 파일안에 들어가면, dependencies에 우리가 npm i라는 명령어를 통해서 설치된 라이브러리들이 들어가 있는 것을 볼 수 있다. dependencies는 우리가 어플리케이션을 배포할 때, 사용할 라이브러리들이 담겨있는 곳이다. 즉, 어플의 로직구현과 관련이 있고, 화면의 동작을 도와주는 라이브러리들이 저장되는 곳이다. devDependenies? 우리 어플가 어플을 개발할 때, 보조해주는 라이브러리들이 저장된다. 예를 들어 웹팩이라던가, js-compression이라던가, 번들 분석기라던가. 이렇게 어플의 로직과는 직접적인 연관이 없는 라이브러리들이 설치된다. devDependencies에 설치를 하려고 할 때는 npm i somethis -D를 붙..
18. HTTP transaction 서버 생성 const http = require('http'); const server = http.createServer((req, res) => { //서버를 생성 }); HTTP 요청이 서버에 들어오면 node가 transaction을 다루려고, reqest와 response 객체를 전달하며 요청 헨들러 함수를 호출한다 요청을 처리하려면 listen 메서드가 server 객체에서 호출 되어야한다. 대부분 서버가 사용하고 있는 포트 번호를 listen에 전달하면 된다. Method, URL, Header 요청을 처리할 때, 우선 메서드와 URL을 확인한 후 이와 관련된 적절한 작업을 실행한다. Body 스트림에 이벤트 리스너를 등록하거나 다른 스트림에 파이프로 연결할 수 있다. 스트림의 'data'와..
17. chunk, buffer , stream Buffer & Stream fs.readFile에서 data.toString()을 거치지 않고 data만 출력하면 와 같이 Buffer가 출력된다. 데이터를 조각(청크, chunk)내어 buffer에 채운 후 다 차면 buffer를 통째로 옮기고 새 buffer에 아직 옮기지 못한 데이터 조각을 다시 채운다. 데이터 조각을 buffer에 채우는 일을 버퍼링(buffering)이라고 부른다. 영상이 버퍼링 중이라며 재생되지 않는 경우를 종종 경험했을텐데 buffer에 데이터를 채울 때까지 기다리는 버퍼링 작업을 말하는 것이다. 한편 buffer가 다 차면 이를 전송하고 다시 buffer를 채우는 버퍼링 작업을 연속하는 것이 스트림(stream)이다. 단발성 single buffer도 존재하지만 지속적으로..
16. Stream Stream stream 은 노드에서 스트리밍 데이터를 이용하기 위한 추상 인터페이스이다. Types of Stream Writable : 데이터를 쓸 수 있는 스트림 ex) fs.createWriteStream() Readable : 데이터를 읽을 수 있는 스트림 ex) fs.createReadStream() Duplex : 읽고 쓸 수 있는 스트림 ex) net.Socket Transform : 데이터를 읽고 쓸 때 데이터를 수정하거나 변환할 수 있는 스트림 ex) zlib.createDeflate() Buffering Writable, Readable 스트림 모두 내부 버퍼에 데이터를 저장합니다. 내부 버퍼는 writable.writableBuffer, readable.readableBuffer을 ..
15. body-parser body-parser 데이터 ( client에서 post로 보내준 데이터) 들을 자동으로 파싱해주어. 필요한 부분인 body 부분을 쉽게 추출해주도록함 app.use(express.urlencoded({extended: false})) 위 코드의 의미를 아라보자 ! 우선, JS 에서 데이터를 주고받을 땐 객체 형태를 선호한다. 이 때문에, JSON을 사용하는 것이다. extended true 객체 형태로 전달된 데이터 내에서 또 다른 중첩된 객체를 허용한다. 따로 설치가 필요한 npm qs 라이브러리를 사용한다. false 중첩된 객체를 허용하지 않는다. node.js 에 기본으로 내장된 queryString 을 사용한다. queryString 과 qs 라이브러리 둘 다 url 쿼리 스트링을 파싱해주는 ..
14. CORS CORS ( Cross-Origin Resource Sharing) CORS란 자신이 속하지 않는 다른 도메인 및 포트에 있는 리소스를 요청하는 cross-origin HTTP 요청 방식. 파란색 이미지는 웹사이트가 구동중인 domain과 동일한 domain-a.com(서버 A)으로부터 자료를 요청하고 수신하지만 아래의 빨간색 이미지는 domain-b.com(서버B)이라는 다른 도메인에 자료를 요청하고 수신한다. ✅ 서버는 기본적으로 CORS 방식을 제한한다 ! 특정 서버 리소스에 다른 임의의 웹 사이트들이 request를 보낼 수 있다면 악의적으로 특정 서버의 세션을 탈취하거나 서버에 무리가 가는 행위 등 문제가 생길 수 있는 행위를 할 수 있기 때문. 해결 방안 : npm install cors 모듈..
13. CRUD CRUD 1. CREATE const { post } = require('./models'); async function main() { const created = await Post.create({ title: 'first title', content: 'second title', }); const multipleCreated = await Post.create([ item1, itme2, ]); } create 함수를 사용하여 Document 생성 create 함수에는 1) Document Object -> 단일 Document 생성 2) Document Object의 Array -> 복수 Document 생성 create는 생성된 Document를 반환해 줌 2. FIND ( READ ) cons..
12. MongoDB MongoDB 란? 대표적인 NoSQL, Document DB Mongo는 Humongous 에서 따온 말로, 엄청나게 큰 DB 라는 의미 -> 대용량 데이터를 처리하기 좋게 만들어짐 RDB vs. NoSQL 1. RDB ? Relational DataBase 즉, 관계형 데이터베이스. 자료들의 관계를 주요하게 다룸 SQL 질의어를 사용하기 위해 데이터를 구조화해야함. 2. NoSQL ? Non SQL 또는 Not Only SQL 구조화된 질의어를 사용하지 않는 데이터베이스 자료 간의 관계에 초점을 두지 않음 데이터를 구조화하지 않고, 유연하게 저장함 NoSQL 을 사용하는 이유 SQL을 사용하기 위해서는 데이터를 구조화하는 것이 필수 (DDL) -> 스키마에 정의된 데이터가 아니면 저장할 수 없는 제약..