
HTTP 란 두 컴퓨터간에 텍스트 데이터를 주고 받는 길이러한 HTTP 라는 길로 요청(request) 과 응답(response) 2가지를 서로 주고 받을 수 있습니다.웹브라우저에서 Front-end 서버가 실행중이라면, 작성한 게시물 텍스트 데이터를 HTTP를 통해

API란 HTTP 요청을 Back-end 컴퓨터에 보냈을때 실행되는 Back-end 기능입니다.Front-end에서 HTTP라는 길을 통해서 데이터를 Back-end에 보내 저장했습니다.하지만 데이터가 하나가 아닌 여러개 일때는 한 번의 통신만으로 해결되지 않고, 각각

API의 종류는 크게 rest-API, graphql-API 로 2가지가 있습니다.1\. 함수 이름의 차이rest-API는 API 이름이 홈페이지 주소처럼 생겼습니다.graphql-API는 \`API 이름이 일반적인 함수'와 같습니다.2\. 응답 결과물의 차이rest-

endpoint란?→ API가 서버에서 리소스에 접근할 수 있도록 가능하게 하는 URL 입니다.graphql이 없던 시절 즉, rest-api를 사용하던 시점의 가장 큰 문제점은 너무 많은 endpoint가 만들어진다는 점 이었습니다.rest-api 에서는 post,

JSON은 자바스크립트의 객체 표기법입니다. 백엔드에서 응답을 받을 때, 객체 자체를 주고 받을 수 없습니다.따라서 객체를 문자열로 묶어서 객체를 담은 문자열을 보내게 되는데, 객체를 담은 문자열을 객체 표기법 이라고 합니다.즉, 백엔드에서 응답의 결과물로 넘겨주는 것

웹 서비스는 Front-end 서버, Back-end 서버 그리고 DataBase(DB) 로 이루어져 있습니다.yarn dev, npm start 등을 이용해 실행시키면서 생성된 포트가 동작하고 있는 컴퓨터를 프론트엔드 서버라고 합니다.프론트 엔드 서버 프로그램 → y
ORM, ODM이란 (ORM객체 관계형 데이터베이스 매핑, ODM객체 문서형 데이터베이스 매핑)객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해준다. 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용하기 때문에 객체 모델과 관계형
공식 홈페이지의 설명 > Node.js는 크롬 v8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임입니다. 즉 노드는 서버도 아니고, 자바스크립트 엔진도 아닌 자바스크립트가 돌아가는 런타임입니다. > 런타임? 런타임이란 쉽게 말해서 실행기를 뜻합니다. 특정 언어로

노드는 V8과 libuv를 내부적으로 포함 >v8 엔진 : 오픈 소스 자바스크립트 엔진 > 속도 문제 개선 libuv : 노드의 특성인 이벤트 기반, 논블로킹 I/O 모델을 구현한 라이브러리 이벤트 기반 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식 >

네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램(response) 서버에 요청을 보내는 주체 (브라우저, 데스크탑 프로그램, 모바일 앱, 다른 서버에 요청을 보내는 서버, request)ex) 브라우저(클라이언트, 요청)가 네이버 웹사이트(서

REPL은 Read-Eval-Print-Loop의 약자로 애플리케이션 실행 상태에서 사용자가 입력한 명령어(소스코드)를 읽고(Read) 명령어를 평가(Eval)하고 결과를 출력(Print)한 다음 다시 입력을 기다리는 상태로 돌아가는 과정을 반복(Loop)합니다Java

모듈 : 특정한 기능을 하는 함수나 변수들의 집합모듈로 만들면 여러 프로그램에서 재사용 가능노드는 자바스크립트 코드를 모듈로 만들 수 있음위와 같은 코드로 export 가능, 또한 module. 를 생략하고도 아래와 같이 가능하지만 module.exports 와 exp
ECMAScript 모듈(ES모듈)은 공식적인 자바스크립트 모듈 형식입니다. ( import, export... ). 노드에서는 아직까지 CommonJS 모듈(require, exports...) 를 쓰긴 하지만, ES 모듈이 표준으로 정해지면서 브라우저와 노드 모두에

Node로 서버도 만들고, 앱 도만들고, iot, 머신러닝...등 여러가지를 만들 수 있었던 이유는 Node자체가 가지고 있는 다양한 기능을 제공하기 때문입니다.ex) module.exports를 바로 쓸 수 있었던 이유는 node 내의 내장 기능이기 때문입니다.노드의

노드는 파일 시스템에 접근할 수 있었던 것처럼 process 명령어로 운영체제에도 접근이 가능합니다시스템 환경 변수들이 들어있는 객체비밀키(데이터베이스 비밀번호, 서드파티 앱 키 등)를 보관하는 용도로도 쓰임환경 변수는 process.env 로 접근 가능일부 환경 변수
운영 체제의 정보를 담고 있음모듈은 require로 가져옴 (내장 모듈이라 경로 대신 이름만 적어줘도 됨)자세한 명령어와 설명은 공식 홈페이지 참조=> https://nodejs.org/dist/latest-v21.x/docs/api/os.html경로 처리할

인터넷 주소를 쉽게 조작하도록 도와주는 모듈입니다.url 처리에는 크게 두 가지 방법이 있는데, 하나는 예전부터 노드에서 사용하던 방식의 url과, 노드 버전 7에서 추가된 WHATWG 방식의 URL 입니다.요즘은 브라우저에서도 사용하는 WHATWG 방식을 사용하여 호

암호화는 가능하지만 복호화는 불가능암호화 : 평문 => 암호화 ( asdf => @$sefe23121cv:!@- 복호화 : 암호화 => 평문 ( @$sefe23121cv:!@문자열을 고정된 길이의 다른 문자열로 바꾸는 방식abcdefgh 문자열 => qvew복호화 불

Node에서 멀티 스레드 방식으로 작업할 수 있는 방법 > 하지만 Node에서 멀티 스레드 방식은 극히 드뭄, cpu를 많이 써야되는 암호화나, 압축같은 경우를 직접 구현할 때 사용하거나 함 > 보통은 싱글 스레드로 작업하는 것으로 생각하고, Worker-threads

파일 시스템에 접근하는 모듈파일/폴더 생성, 삭제, 읽기, 쓰기 가능웹 브라우저에서는 제한적이었으나 노드는 권한을 가지고 있어 가능!!파일 읽기 예제위 단순히 data의 결과만 보면 buffer 01 f4 이런 식으로 나와 있는데 이는 컴퓨터가 읽기 위한 010101같

버퍼 : 일정한 크기로 모아두는 데이터일정한 크기가 되면 한 번에 처리 및 전송예를 들어 16바이트까지 데이터를 모아두었다가 16바이트가 되는 순간 처리버퍼의 형식은 010101과 같은 데이터를 16진법으로 표기한 것버퍼링 : 버퍼에 데이터가 찰 때까지 모으는 작업스트

createReadStream으로 파일을 읽고 그 스트림을 전달받아 createWriteStream으로 파일을 쓸 수 있다. (파일 복사 유사)이렇게 스트림끼리 연결하는 것을 '파이핑'이라고 한다.즉 stream으로 분할받아 받아온 데이터를 조작이 가능하다.예시를 보면

fs, crypto, zlib 등의 모듈의 메서드를 실행할 때는 백그라운드에서 거의 동시에 실행됨스레드풀이 동시에 처리해 줌 (4개 동시에 처리)위와 같이 cyprot로 암호화를 해주는 작업이 8개가 실행이 되면 몇 개씩 동시에 시작이 되는지 확인해보면 아래와 같다4개

예외(Exception) : 처리하지 못한 에러노드 스레드를 멈춤노드는 기본적으로 싱글 스레드라 스레드가 멈춘다는 것은 프로세스가 멈추는 것에러 처리는 필수try / catch, then / catch...JS 는 예외와 에러가 거의 동일한 의미기본적으로 try cat

서버와 클라이언트의 관계클라이언트가 서버로 요청(request)을 보냄서버는 요청을 처리처리 후 클라이언트로 응답(response)를 보냄http 요청에 응답하는 노드 서버createServer로 요청 이벤트에 대기req 객체는 요청에 관한 정보가, res 객체는 응답
이전의 코드위에서 자동으로 h1, p 등을 html 코드로 인식 못하는 브라우저가 몇 존재한다. 따라서 이러한 경우 html이라는 것을 알려줘야 한다위처럼 write, end로 직접 문자열을 넣어서 하는 것은 너무 비효율 적fs 모듈로 html 파일을 읽어서 전송하기

서버에 요청을 보낼 때는 주소를 통해 요청의 내용을 표현/index.html이면 index.html을 보내달라는 뜻항상 html을 요구할 필요는 없음서버가 이해하기 쉬운 주소가 좋음REST API(Representational State Transfer)서버의 자원을

요청(request)에는 한 가지 단점이 있음누가 요청을 보냈는지 모름 (ip 주소와 브라우저 정보 정도만 앎)로그인을 구현해서 누가 보냈는지 확인해야 함쿠키와 세션이 필요쿠키 : 키 = 값의 쌍name = mumu로그인 뿐만 아니라 데이터를 보낼 때 내가 누군지 함께

웹 서버에 SSL 암호화를 추가하는 모듈오고 가는 데이터를 암호화해서 중간에 다른 사람이 요청을 가로채더라도 내용을 확인할 수 없음요즘에는 HTTPS 적용이 필수(개인 정보가 있는 곳은 특히!)주소 왼쪽에 자물쇠 아이콘이 나타남http 서버를 https 서버로 변경암호

기본적으로 싱글 스레드인 노드가 CPU 코어를 모두 사용할 수 있게 해주는 모듈포트를 공유하는 노드 프로세스를 여러 개 둘 수 있음요청이 많이 들어왔을 때 병렬로 실행된 서버의 개수만큼 요청이 분산됨서버에 무리가 덜 감코어가 8개인 서버가 있을 때: 보통은 코어 하나만

Node Package Manager노드의 패키지 매니저즉 다른 사람들이 만든 소스 코드들을 모아둔 저장소남의 코드를 사용하여 프로그래밍 가능이미 있는 기능을 다시 구현할 필요가 없어 효율적오픈 소스 생태계를 구성중패키지: npm에 업로드된 노드 모듈모듈이 다른 모듈을

http 모듈로 웹 서버를 만들 때 코드가 보기 좋지 않고, 확장성도 떨어진다.react, vue처럼 프레임워크를 이용하여 해결대표적인 것이 express, Koa, Hapi코드 관리도 용이하고 편의성이 많이 높아짐직접 만들거나 npm init 명령어로 생성nodemo
res.sendFile 로 손쉽게 HTML 서빙이 가능하다위 처럼 res.sendFile로 html을 서빙해 주는데, 이 때 경로를 명확하게 하기 위해 단순한 경로를 적어주는 것이 아닌 path.join으로 경로를 명확하게 써 준다.

서버를 만들었을 때 공통적으로 실행을 시켜주고 싶은 것이 있을 때, 예를 들어 아래 코드를 보자위 처럼 공통적으로 실행하고 싶은 코드가 있을 때, 일일이 하나하나 넣어주면 불필요한 코드의 반복이 된다. 때문에 미들웨어라는 개념이 등장했다.익스프레스는 미들웨어로 구성됨요

위 코드에서 정확하게 미들웨어는 use가 아닌 안의 함수 (req, res, next) => { console.log(), next()} 가 미들웨어가 된다.요청과 응답의 중간에 위치하여 미들웨어app.use(미들웨어)로 장착위에서 아래로 순서대로 실행됨.미들웨어는 r
원래 http에서는 아래와 같았던 것을express 에서는 아래와 같이 편리하게 쓸 수 있다.try, catch 구문으로 error를 잡아서 , next에 인자로 넘겨주 면, 미들웨어 next가 아닌, 에러처리 미들웨어로 넘어가지게 됨next의 인자에 'route'를

morgan 사용시 아래와 같이 요청을 보냈을 때, 어떻게 응답했는지 알 수 있다. 즉 요청과 응답을 기록하는 라이브러리이다. 로그의 자세한 정도 선택 가능(dev, tiny, short, common, combined)예시) GET / 200 51.267 ms – 1

정적인 파일들을 제공하는 미들웨어인수로 정적 파일의 경로를 제공파일이 있을 때 fs.readFile로 직접 읽을 필요 없음요청하는 파일이 없으면 알아서 next를 호출해 다음 미들웨어로 넘어감파일을 발견했다면 다음 미들웨어는 실행되지 않음express에서 제공하는 미들
미들웨어 동작 레벨은 두 가지로 나뉘어 진다.애플리케이션 레벨라우터 레벨단계는 애플리케이션 => 라우터 단계로 실행순서가 이루어 진다.애플리케이션 레벨과 라우터 레벨은 실행단계의 차이지 기능적으론 다른 점이 없다.애플리케이션 분기 + 라우터 분기로 더 세세하게 요청 u

asd

form 태그의 enctype이 multipart/from-data인 경우기존의 body-parser로는 요청 본문을 해석할 수 없음multer 패키지 필요프론트에서 post로 데이터를 보낼 때, 이미지, 파일등 여러가지를 보낼 대 form-data 형식으로 보냄위 처

app.js 가 길어지는 것을 막을 수 있음userRouter 의 get은 /user 와 /가 합쳐져서 GET /user/가 됨기존의 app.get('/about), app.post('/')... 이 모든 것을 app.js 하나에다가 모든 코드를 넣기에는 app.js

SQL 작업을 쉽게 할 수 있도록 도와주는 라이브러리ORM: Object Relational Mapping: 객체와 데이터를 매핑(1대1 짝지음)MySQL 외에도 다른 RDB(Maria, Postgre, SQLite, MSSQL)와도 호환됨자바스크립트 문법으로 데이터베

users 모델(테이블)과 comments 모델(테이블)을 만들었을 때 두 모델(테이블) 간의 관계를 정의1:N 관계 (사용자(user) 한 명이 댓글(comment) 여러 개 작성), 즉 users 컬럼 하나와 comments 컬럼 여러개가 가능하다는 뜻마찬가지로 1

sequelize의 기능은 javascript로 SQL문을 실행해주는 것이라 하였다. 이를 코드로 비교를 해보면 아래와 같다 위의 SQL구문이 아래의 js 구문으로 실행되게 해주는 것이다.
findOne이나 findAll 메서드를 호출할 때 프로미스의 결과로 모델을 반환한다 (findAll은 모델의 배열을 반환한다).결과 값이 객체로 받아와져, user.name, user.nick 식으로 호출이 가능하다 User 모델의 정보에도 바로 접근할 수 있겠지만,

직접 mysql workbench 들어가서 db를 만들지 않고, 터미널에 ' npx sequelize db:create ' 로 db를 만들 수도 있다.위처럼 routes로 따로 분리를 해준 후 해당 주소로 get, post 등을 요청할 시 작동할 로직을 만들어 준다.r

MySQL같은 SQL 데이터베이스와는 다른 유형의 데이터NoSQL 대표주자인 mongoDB 사용JOIN : 관계가 있는 테이블 끼리 데이터를 합치는 기능 (몽고디비는 aggregate로 흉내 가능)데이터 형식이 자유롭기 때문에 빅데이터, 메시징, 세션, 관리 등(비정형

SDF