You Can Become A
늦게 시작해도 누구든지 노력하면 개발자가 될수 있어요 !
[EXPRESS] 📚 미들웨어 이론 & 실용 💯 정리
미들웨어 작성 미들웨어는 익스프레스의 핵심이다. 요청과 응답의 중간(middle, 미들)에 위치하여 미들웨어 라고 부른다. 미들웨어는 요청과 응답을 조작하여 기능을 추가하기도 하고, 나쁜 요청을 걸러내기도 한다. 익스프레스 내에서 웹 요청과 응답에 대한 정보를 사용해서 필요한 처리를 진행할 수 있도록 분리된 독립적인 함수이다. 그리고 각각의 미들웨어는 next() 메소드를 호출해서 그 다음 미들웨어가 작업을 처리할 수 있도록 순서를 넘길 수 있다. 위 사진에서, function(req, res, next) {} 부분이 바로 미들웨어 인 것이다. ⚠️ 뇌정지 당하기전의 예방지식! 노드를 배우면서 우리는 함수 인자에 콜백함수가 들어가 있는 형태를 자주자주 봐왔다. 이 함수는 비동기 함수가 처리되고 그 결과를..
[EXPRESS] 📚 익스프레스 설치 & 사용해보기
본 강좌는 Node.js강의를 선행 학습 하셔야 합니다. 'FRAMEWORK ⚙️/Node.js' 카테고리의 글 목록 기술블로그를 운영하고 있습니다. inpa.tistory.com express 프레임워크 express는 경량화 웹 개발 프레임 워크로, 노드를 이용한 웹 서비스나 웹 애플리케이션 개발에 가장 널리 쓰이는 확장 모듈 중 하나이다. express는 기본 모듈 중 하나인 http 모듈을 이용하여 웹 서버를 구축하고 데이터를 표시하는 방식을 좀 더 추상화하여 웹 서비스나 웹 애플리케이션 개발을 더 편리하고 수월하게 할 수 있도록 다양한 API를 제공한다. Node.js에서의 구현과 동일하게 이벤트 처리를 통합해 가는 기본적인 개발 스타일은 변함이 없지만, 준비되어 있는 다양한 객체를 통해 쉽게 ..
[NODE] 🛠️ 바벨(Babel) 설치 & 사용법
바벨(Babel) 웹 코딩을 할 때 가장 까다로운 것 중 하나가 웹 표준의 하위호환성을 맞추는 것이다. html이나 자바스크립트 코드에 최신 기술들만 쓰면 구식 브라우저에서 작동하지 않을 확률이 크고, 그렇다고 죄다 구닥다리 코드를 쓰자 하면 또 불편하고 찝찝해진다. 이것을 해결하기 위해 나온 것이 바로 바벨이라는 툴이다. 이 툴은 자바스크립트의 코드를 구버전에 맞게끔 변환시켜주는 역할을 한다. 이러한 행동을 트랜스파일링 이라고 불리운다. BABEL PACKAGE 설치 프로젝트에 따라 설정이 다를 수 있으므로 전역으로 설치하지 말고 로컬로 설치하도록 하자. npm install --save-dev @babel/core @babel/cli @babel/node @babel/preset-env @bab..
[NODE] 🛠️ nodemon 설치 & 사용 방법 정리
nodemon 모듈 Node.js 개발 시 자바 스크립트 파일들을 수정 할때마다 매번 ctrl+c를 통해 node를 종료 후 다시 실행해줘야 하는 번거로움 이 있었습니다. 하지만 파일들을 모니터링하고 있다가 수정될 경우 자동으로 서버를 재실행시켜주는 스크립트 모니터링 유틸리티 nodemon를 이용하면 번거로움이 상당히 줄어듭니다. nodemon 설치 npm 1.0이상을 사용할 경우 nodemon은 커맨드라인에서 명령어를 사용할 것이기 때문에 -g 옵션을 붙혀서 글로벌로 설치를 합니다. $ npm install nodemon -g nodemon 사용법 기존에 node.js 애플리케이션을 실행할 때 node app.js와 같이 실행해 주었다면 nodemon 명령어를 사용해서 다음과 같이 실행해 주면 됩니다...
[NODE] 📚 이벤트 루프 🔁 setTimeout / setImmediate / process.nextTick 차이점
Event loop 이벤트 루프는 Node.js의 Main thread로, 내부의 각 Phase를 돌면서 애플리케이션을 실행 합니다. 아래 그림과 같이 각 Phase는 Queue로 이루어져있습니다. Queue에 우리가 등록한 Callback들이 알맞게 담겨서 자신의 실행을 기다리게 되는데요. 각 Phase는 자신 Queue의 모든 Job을 수행하거나, 제한 갯수까지 실행한 후에 다음 Phase로 이동합니다. 이 중에서 우리는 timers, poll, check 단계만 필요합니다. Phase 대상 처리 작업 timer setTimeout(func, delay) setInterval(func, delay) delay가 지났으면, 등록된 Callback 실행 poll I/O 대부분의 Callback 실행 ch..
[NODE] 📚 클러스터(cluster) 모듈 - 멀티 프로세서
Cluster 기본적으로 싱글 스레드인 노드가 CPU 코어를 모두 사용할 수 있게 해주는 모듈 포트를 공유하는 노드 프로세스를 여러 개 둘 수 있음 요청이 많이 들어왔을 때 병렬로 실행된 서버의 개수만큼 요청이 분산됨 서버에 무리가 덜 감 코어가 8개인 서버가 있을 때: 보통은 코어 하나만 활용 cluster로 코어 하나당 노드 프로세스 하나를 배정 가능 성능이 8배가 되는 것은 아니지만 개선됨 단점: 컴퓨터 자원(메모리, 세션 등) 공유 못 함. 각각 독립적인 프로세스를 띄우는거라, 서로 공유가 안됨. -> Redis 등 별도 서버로 해결 - 워커 쓰레드는 쓰레드를 여러개 만드는 거라면, (cpu작업을 분담) - 클러스터는 프로세스를 여러개 만드는 것. (서버를 주로 여러개 실행) 마스터 프로세스는 C..
[NODE] 📚 child_process 모듈 (다른 언어환경 이용)
child_process 앞서 배운 워커 스레드는 구현이 힘듭니다. 하지만, 노드에서 다른 언어로 만든 서버를 호출 할 수도 있습니다. 싱글스레드의 한계에 봉착하여, 노드 사용을 주저할때 단비 같은 기능입니다. 즉, 하드한 작업은 다른 언어에서 실행하도록하고 그 결과를 노드 서버가 받아서 다시 브라우저로 전달하면 완벽합니다. const { exec } = require('child_process'); var process = exec('dir'); // 마치 우리가 터미널에서 dir를 치는 거와 같은 역할을 한다. // 결과물 출력은 반드시 우리가 직접 구현해줘야 한다. process.stdout.on('data', function (data) { console.log(data.toString()); }..
[NODE] 📚 Worker_Threads 모듈 (멀티 쓰레드 구현)
Worker Thread 이해하기 Node.js가 시작되면, 다음이 실행됩니다. 하나의 프로세스 : 어디서든 접근 가능한 전역 객체이자 그 순간 실행되고 있는 것들의 정보를 가지고 있는 프로세스 하나의 스레드 : 단일 스레드는 주어진 프로세스에서 오직 한 번에 하나의 명령만이 실행된다는 뜻. 하나의 이벤트 루프 : 노드를 이해하기 위해 가장 중요한 부분 중 하나입니다. 이는 자바스크립트가 단일 스레드라는 사실에도 불구하고, 언제든 가능한 callback, promise, async/await 를 통해 시스템 커널에 작업을 offload 하게 합니다. 이로서 노드가 비동기식, 비차단 I/O 의 특성을 가집니다. 하나의 js 엔진 인스턴스 : js 코드를 실행하는 컴퓨터 프로그램입니다. 하나의 노드js 인스..
[NODE] 📚 예측 불가능한 에러 처리하기 (uncaughtException)
노드 uncaughtException 모든 코드를 try{} catch {} 로 감싸는 것은 귀찮은 일이다. 하지만 정말 어쩌다가 예기치 못한 에러가 나와 싱글 스레드인 노드가 죽어버려 서버가 아예 다운 되는 현상이 생길 수 있다. 이러한 예측하지 못한 에러를 모아 catch로 한방에 처리할수 있는 방법이 있다. 단, 최후의 수단으로 사용해야 한다. 콜백 함수의 동작이 보장되지 않음 따라서 복구 작업용으로 쓰는 것은 부적합 에러 내용 기록 용으로만 쓰는 게 좋음 // uncaughtException 이 모든 에러를 잡아주지는 않음. // 따라서 여기에 복구 코드를 넣는건 비추천함. // 단순히 에러 발생 확인용으로만 사용 process.on('uncaughtException', err => { conso..
[NODE] 📚 https / http2 모듈 (보안 강화 서버)
기존 http 서버 const http = require('http'); http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); res.write('Hello Node!'); res.end('Hello Server!'); }) .listen(8080, () => { // 서버 연결 console.log('8080번 포트에서 서버 대기 중입니다!'); }); http ssl 서버 const https = require('https'); const fs = require('fs'); https.createServer({ // 인증기관으로부터 발급받은 인증서 cert,key,ca파일들..
[NODE] 📚 쿠키 & 세션 다루기
자바스크립트 쿠키 다루기 노드 쿠키 다루기에 앞서, 자바스크립트로 쿠키 다루는 법을 먼저 공부하고 오는 것을 추천한다. [JS] 📚 쿠키(Cookie) 🍪 다루기 선행 학습 [WEB] 🌐 쿠키 / 세션 정리 비연결성(Connectionless)과 비상태성(Stateless) HTTP 프로토콜에는 비연결성(Connectionless)과 비상태성(Stateless)이라는 특징이 있습니다. 이는 서버의 자원을 절약하.. inpa.tistory.com 쿠키 전송 서버 만들기 const http = require('http'); http .createServer((req, res) => { // 만일 쿠키가 있으면, 읽는다. console.log(req.url, req.headers.cookie); // Set-..
[VSCode] 💽 터미널 알록달록하게 꾸미기
VSCode 내장 터미널 하이라이팅 이번 시간에는 vscode 터미널을 알록달록하게 꾸며보는 법을 살펴볼 것이다. 1. 터미널 색깔 템플릿 고르기 해당 사이트에서 여러 터미널 색깔 템플릿을 고를 수 있다. 좌측 nav메뉴에서 원하는 템플릿을 고르고, Copy to clipboard를 클릭하자. Base16 Terminal Colors for Visual Studio Code glitchbone.github.io 2. setting.json 파일을 열기 3. 데이터를 setting.json에 추가하기 "workbench.colorCustomizations": { "terminal.background":"#1D2021", "terminal.foreground":"#A89984", "terminalCursor..