node js 21.05.05
- Node.js : 크롬 v8 엔진으로 만든 자바스크립트 런타임. 이벤트 기반 및 논블로킹 IO 모델 특성을 가지고 있다.
https://expressjs.com/ko/
fetch로 서버에 request 할 때 fetch 인자 url이 현재 접속 사이트와 다르다면 request가 실패 할 수 있다.
Browser Security
```js const githubID = ‘kimcoding’
3-Tier Architecture
sequelize : MySQL 작업을 쉽게 할 수 있도록 도와주는 라이브러리.
CRUD(Create / Read / Update / Delete)
multer : 이미지, 동영상 등을 비롯한 여러가지 파일들을 멀티파트 형식으로 업로드할 때 사용하는 미들웨어.
미들웨어는 익스프레스의 핵심이다. request와 response의 중간에 위치하여 미들웨어라고 부른다.(라우터와 에러 핸들러 또한 미들웨어의 일종). 미들웨어는 요청과 응답을 조작하여 기능을 추가하기도하고, 나쁜 요청을 걸러내기도 합니다.
미들웨어는 req, res, next를 파라미터로 가지는 함수(에러 처리 미들웨어만 예외적으로 err, req, res, next)이다.app.use()나 app.get(), app.post() 등으로 미들웨어를 장착한다.
express : 서버를 제작하는 과정에서 불편함을 해소하고 편의 기능을 추가한 웹 서버 프레임워크.
SemVer(Semantic Versioning:유의적 버전) : 패키지 버전 번호를 어떻게 정하고 올려야 하는지 명시하는 규칙
npm(Node Package Manager)
서버에 요청을 보낼 때 주소를 통해 요청의 내용 표현. (주소가 /inde.html이면 서버의 index.html을 보내달라는 뜻) 요청의 내용이 주소를 통해 표현되므로 서버가 이해하기 쉬운 주소를 사용해야한다.
서버는 클라이언트가 있기에 동작한다. 클라이언트에서 서버로 요청(request)을 보내고, 서버에서는 요청의 내용을 읽고 처리한 뒤 클라이언트에 응답(response)한다. 따라서 서버는 요청을 받는 부분과 응답을 보내는 부분이 있어야한다.
쿠키 : 서버와 클라이언트간 통신함에 있어 서비스 지속성(로그인 등)을 위한 목적으로 클라이언트 측에 저장하는 작은 기록 정보.
https : https 모듈은 웹 서버에 SSL 암호화를 추가. GET / POST 요청 시 오가는 데이터를 암호화화여 중간에 다른 사람이 요청을 가로채더라도 내용을 확인 할 수 없게 한다.
cluster : 기본적으로 싱글 프로세스를 동작하는 NODE가 CPU 코어를 모두 사용할 수 있게 해주는 모듈. (멀티 노드 프로세스, 병렬 실행, 요청 분산) 서버에 무리가 덜 가고 성능이 좋아진다. 하지만 메모리를 공유하지 못하는 등의 단점도 있다. 세션을 메모리에 저장하는 경우 문제가 될 수 있다. 이는 레디스 등의 데이터베이스를 도입하여 해결 가능하다.
비동기 메서드 사용시 fs 메서드를 여러번 실행해도 백그라운드에서 동시에 처리되는데, 바로 스레드풀 덕분이다. fs외에도 내부적으로 스레드 풀을 사용하는 모듈로는 crypto, zlib, dns, lookup등이 있다.
노드는 대부분의 method를 비동기 방식으로 처리한다. 하지만 몇몇 method는 동기 방식으로 사용 가능하다.(특히 fs 모듈)
fs module : 파일 시스템에 접근하는 모듈. 즉 파일을 생성/삭제/읽기/쓰기, 폴더 생성/삭제 가능.
노드에서는 예외 처리가 정말 중요하다. 예외란 보통 처리하지 못한 에러를 가리킨다. 예외들은 실행중인 노드 프로세스를 멈추게 만든다.
on(‘data’, 콜백) : ‘data’라는 이벤트가 발생할 떄 콜백 함수 호출. on(‘end’, 콜백) : ‘end’라는 이벤트가 발생할 떄 콜백 함수 호출.
fs는 단순히 파일 읽기/쓰기 뿐만 아니라 파일을 생성하고 삭제할 수 있으며 폴더를 생성하고 삭제할 수 있다.
child_process : 노드에서 다른 프로그램을 실행하고 싶거나 명령어를 수행하고 싶을 때 사용하는 모듈. 즉 다른 언어의 코드를 실행하고 결괏값을 받을 수 있다. 노드 프로세스 외에 새로운 프로세스(child_process)를 띄어서 명령을 수행하고 노드 프로세스에 결과를 알려준다.
readFile 등에서 받아온 data를 data.toString()으로 변환하는 이유는 data가 buffer이기 때문이다.
worker_threads : 노드에서 멀티 스레드 방식으로 작업 가능한 모듈
utill : 각종 편의 기능을 모아둔 module
노드는 웹 브라우저에서 사용 되는 javascript보다 더 많은 기능 제공한다. 운영 체제 정보 접근, 클라이언트가 요청한 주소에 대한 정보 가져오기 등 노드는 이러한 기능을 하는 모듈을 제공한다.
process 객체는 현재 실행되고 있는 노드 프로세스에 대한 정보를 담고 있습니다.
모듈(module) : 특정한 기능을 하는 함수나 변수들의 집합.
exports 객체로도 모듈 생성 가능.
내장 객체 및 내장 모듈 : 따로 설치하지 안항도 바로 사용가능한 객체와 모듈.