Node.js 10

21.11.06 functional programming

functional programming template >>example //함수 A를 호출 //함수 B를 인자로 받아서 함수 C를 호출 //함수 B를 반환 const A = (B) => (C) => { return B } >>protectedResolver export const protectedResolver = (ourResolver) => (root, args, context, info) => { if(!context.loggedInUser){ return { ok: false, error: 'Please log in to perform this action', } } return ourResolver(root, args, context, info) } >>export const protecte..

Node.js 2021.11.07

21.04.27 project#4 주소에 /api 붙이는 이유

1. 클라이언트와 서버를 연결시켜준다. 자바스크립트에서는 '프로토콜, 도메인이름, 포트'로만 접근 가능하다. React 에서는 클라이언트와 서버의 포트 번호가 달라서 클라이언트가 서버에 접근할 수 없는 문제가 있다. 즉, 클라이언트 → 서버로 바로 접근할 수 없고 클라이언트 → 프록시 → 서버 를 통해 클라이언트가 서버에 접근할 수 있다. 프록시를 통해 이를 해결할 수 있다. 2. 도메인 주소를 제외한 URL만 입력해도 서버와 통신 가능하다. React 클라이언트에서 axios 같은 라이브러리로 서버와 통신할 때 서버의 절대 주소를 일일이 입력해야 하는 번거로움을 줄일 수 있다. 로컬의 경우, axios('http://localhost:8001/login') → axios('/login') 프록시를 설정..

Node.js 2021.04.30

21.04.25 project#4 challenge collection 생성

📌models/challenge.js 모듈 불러오기 const mongoose = require("mongoose"); //auto increment 쓸 수 있는 모듈 const autoIncrement = require("mongoose-auto-increment"); autoIncrement.initialize(mongoose.connection); 객체 형식으로 스키마 작성 const ChallengeSchema = new mongoose.Schema({ //챌린지 인덱스 (자산, 건강, 역량, 관계, 취미분야 1~5) challengeIndex: { type: Number, }, //작성자 아이디 registerId: { type: String, required: true, }, //카테고리 ca..

Node.js 2021.04.25

21.04.22 mongoDB 연결 및 postman 사용 연습

📌index.js -세팅 파트 //필요한 모듈 const express = require("express"); const mongoose = require("mongoose"); const bodyParser = require("body-parser"); const app = express(); const port = 5000; //몽고디비 연결 호스트 설정 const config = require("./config/key"); // const { User } = require("./models/User"); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); //몽고 디비 연결 mongoose .connect(c..

Node.js 2021.04.25

21.02.18 스레드풀, 워커스레드

이벤트루프는 싱글스레드 내에 존재한다. 그렇다면 하나의 작업 수행을 완료하기 전에 다른 작업을 수행하지 못하여 한 번 실행했을 때와 두 번 실행했을 때 걸리는 시간이 두 배 차이가 나야 한다. 하지만 crypto 모듈을 예로 실험했을 때 각각 672ms, 679ms 로 차이가 별로 나지 않는 이유는 바로 스레드풀때문이다. ✓ Thread Pool 스레드풀을 사용하는 모듈로는 crypto, zlib, dns. lookup 등이 있다. 스레드풀의 기본 개수는 4개로 다음 예제를 통해 확인할 수 있다. 스레드풀이 작업을 동시에 처리하므로 8 개 작업 중에서 어느 것이 먼저 처리될지 모른다. 하지만 5~8 의 소요시간이 1~4 의 소요시간보다 약 2 배인 것을 확인할 수 있다. 따라서 처음 네 작업이 동시에 실..

Node.js 2021.03.06

21.02.18 Node.js 동작 원리, Event loop

✔ Nodejs Node.js는 싱글스레드로 이루어져 있다. 그 스레드는 이벤트 루프라는 것을 실행하는 메인스레드이다. 이때, 이벤트 루프는 개발자가 생성한 자바스크립트 코드(콜백 함수)를 제어하는 곳이다. *이벤트 루프가 코드를 실행한다고 생각하면 X, 코드를 실행하는 곳은 자바스크립트 엔진인 V8이다. ✔ Libuv Node.js는 이벤트 루프를 작동시킬 때, libuv라는 비동기식 라이브러리를 사용한다. node.js는 싱글 스레드이지만 비동기 메소드를 수행하기 위해 libuv에서 4개의 스레드 풀을 만들고 이를 백그라운드에서 동시에 처리한다. 이로 인해 싱글스레드이지만 작업 처리는 멀티 스레드로 할 수 있는 것이다. 그리고 nodejs가 싱글 스레드 논블로킹 I/O 방식으로 처리할 수 있는 이유는..

Node.js 2021.03.06

21.02.17 통신 프로토콜, 패키지 모듈, 쿠키-세션

프로토콜의 종류가 많은데 이것들의 관계가 제대로 이해가지 않아서 어떤 것이 어떤 프로토콜인지 헷갈렸다. ISO에서 컴퓨터 네트워크 프로토콜 디자인과 통신을 7개의 계층으로 이루어져 있는 OSI 모형으로 정의하였다. 그 중 7계층에 해당하는 응용 계층(Application Layer)에 해당하는 통신 프로토콜 중 http에 대해서 알아볼 것이다. 프로토콜이란? 일반적으로 공통적으로 데이터를 교환하는 방법이나 순서에 대해서 정의한 의사소통 약속, 규칙 체계를 말한다. OSI 계층에 대한 프로토콜들로 많은 종류가 있다. 내가 헷갈리는 프로토콜은 통신 프로토콜과 네트워크 프로토콜이었는데 위의 OSI 모형에 따르면 전혀 다른 개념이었다. HTTP는 7계층 응용 계층에 대한 통신 프로토콜에 포함되고 네트워크 프로토..

Node.js 2021.02.18

21.02.16 스레드, 작업 처리 방식

어제 스쳐지난 것들이 오늘 수업 내용이 될 줄이야... 덕분에 스레드 개념과 운영체제 작업 처리 방식에 대해서 깊이 탐구할 수 있었다. Synchronous, Asynchronous -동기 처리 방식 : 작업을 순차적으로 처리하는 것 -비동기 처리 방식 : 순차적 X ✔ 여기서 생각해봐야 할 것은 융통성 있어 보이는 비동기 처리가 항상 좋은 것인가이다. 비동기적 처리에 있어서 가장 주의해야 할 점은 각 작업 단계의 순서를 보장할 수 없다는 것이다. 만약 1단계의 데이터가 2단계에서 사용된다면 1단계의 작업이 완료되기 전까지 2단계 작업이 호출되더라도 작업을 제대로 수행할 수 없다. ✔ 비동기적 처리의 문제점을 약간 해결? 콜백 함수를 중첩시켜서 비동기적 함수 구조를 하나로 묶을 수 있고 각 작업들을 순서..

Node.js 2021.02.16

21.02.15 배경지식

Node.js는 php, jsp, asp.net과 같이 자바스크립트 엔진을 서버로 사용할 수 있도록 하는 플랫폼이다. 단일 스레드 non-blocking I/O로 빠른 성능을 낼 수 있는 것이 특징! 여기서 스레드는 프로세스 안에서 프로그램 명령을 수행하는 CPU 이용 기본 단위인데 같은 프로세스 내에서는 다른 스레드, 파일 등 프로세스 자원을 공유한다. 단일 스레드는 하나의 프로세스 안에 하나의 제어 모델인 스레드가 있는 것이다. 하나가 아닌 여러 개의 스레드가 있으면 멀티 스레드이다. 단일 스레드와 멀티 스레드는 각자 장단점을 가지고 있고 요청에 대한 빠른 반응이 필요한 네트워크 서버 프로그램일 경우 단일 스레드가 적합하다. non-blocking은 blocking 과 비교되는데 하나의 작업을 실행하..

Node.js 2021.02.15