본문 바로가기

전체 글

(14)
[섹션 5] 미들웨어 알아보기 익스프레스는 미들웨어로 구성이 된다. 라우터에 있는 콜백함수도 미들웨어이다 app.use(미들웨어)를 하게 되면 모든 라우터에서 해당 미들웨어가 실행이 된다. 또한 app.use(경로, 미들웨어) 하게되면 특정 경로에서만 해당 과정을 거치게 된다. 지금 딱 생각이 나는 거는 유료 칼럼 플랫폼에서 결제한 사람을 체크할 때 쓰면 유용할 것 같다. 미들웨어는 next가 필요하다 app.use((req, res, next) =>{ console.log('all'); next(); //next가 있어야 다음 미들웨어나 라우터로 넘어갈 수 있다 }); next가 없다면 다음 미들웨어나 라우터로 넘어가지 않는다. 그래서 꼭 next()를 써줘야 한다. 라우터 매개변수 app.get('notice/:id', (req,..
[섹션 5] express 기본 알아보기 기본 구성 const express = require('express'); const app = express(); app.set('port', process.env.PORT || 3000); //포트 설정 app.get('/', (req, res)=>{ res.send("hello Express"); }); app.listen(app.get('port'), () =>{ console.log(app.get('port')); }); 1-3 줄은 app이라는 변수를 선언해주고 express()를 대입한 과정이다. 이제 밑에서부터 app.OOO 이런 형태로 쭉 서버를 짜나가게 된다. 하나씩 살펴보자면 app.set('port', process.env.PORT || 3000); //포트 설정 app.set은 서..
[섹션 4] npm npm이란 Node Package Manager의 약자이다. 다른 사람들이 만들어놓은 라이브러리를 모아둔 저장소라고 보면 된다. 내가 개발에서 정말 마음에 들어하는 부분은 오픈소스가 잘 되어있다는 것이다. 예를 들어 나는 디자이너들과도 협업을 많이 하는데 거기는 저작권이라는 게 정말 빡세다. 법적인 저작권이야 물론 어떤 분야에서나 지켜져야 하겠지만 a가 동료 b의 디자인을 막 가져다 쓰는 것도 자존심 상하고 얼굴 붉히고 그런다. 반면 개발자는 뭔가 악의적이지 않다면 그런 경우가 잘 없다. 사실 그 두명 다 자기가 짠 코드가 아니라 구글링으로 긁어온 것이기 때문에 별 신경도 쓰지 않는다. 설령 자기가 짠 코드라도 오픈해놓는 경우가 많다. (개발자 특성이 그런 것일 수도 있겠다) 쨋든 그런 특성이 극대화된 ..
[섹션3-3] https, http2, Cluster https는 웹 서버에 SSL 암호화를 추가하는 모듈이다. 요즘에는 http가 적용되어있는 곳은 아예 크롬에서 막아버리기도 하는 등 거의 필수가 되어버린 옵션이다. const https = require('https'); const fs = require('fs'); https.createServer({ cert: fs.readFileSync('도메인 인증서 경로'), key: fs.readFileSync('도메인 비밀키 경로'), ca: [ fs.readFileSync('상위 인증서 경로'), fs.readFileSync('상위 인증서 경로'), ], }, (req, res) => { res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' })..
[섹션3-2] 쿠키와 세션 쿠키 클라이언트에서 서버에 무언가를 요청을 할 때마다 서버는 얘가 누군지를 모른다는 특징이 있다. 한번 연결 된다고 해서 끝이 아니라는 말. 그러면 우리가 로그인을 하고 네이버 카카오 같은 곳들을 자유롭게 활보할 수 있는 건 어떻게 하는 것일까? 위의 말대로라면 페이지가 바뀔 때마다 로그인을 해야할 것 같은데 말이지. 첫번째로 든 나의 생각은 '로그인도 결국 서버에 정보를 보내는 거니까 모든 요청에 로그인 정보를 담게 하면 되겠네' 였다. 그리고 역시 이런 생각은 나 이전에 여러 천재들이 방법을 구현해놓는다. 그게 바로 쿠키이다. 쿠키는 http 서버에서 아래와 같이 세팅할 수 있다. const http = require('http'); http.createServer((req, res) => { con..
[섹션 3] http 서버 이제 드디어 서버를 만들어 본다. 서버는 무엇일까? 쉽게 말해서 브라우저에서 000해주세요 하면 000을 해주는 애다. 그리고 000해주세요, 삭제해주세요 같은 요청을 보낼 때 http 라는 프로토콜을 사용하게 된다. (우리가 한국어를 사용하고 미국에 가서는 영어를 사용해야 하듯이 서버와 클라이언트 사이에서는 http를 사용한다고 보면 된다. 서버는 보통 도메인(naver.com 같은 것)을 하나 구입해서 쓰는 경우가 많은데 개발시에 도메인을 구입하기란 꽤 부담이다. 그래서 기본적으로 localhost를 쓸 수 있다. 그리고 이 localhost 뒤에는 보통 :3000 같은 포트를 열 수 있어서 localhost:3000과 같은 형태로 많이 쓰게 된다. https에서는 443 포트가 기본 포트이고 htt..
[섹션 2-2] 노드 내장 객체, 내장 모듈, 파일 시스템 알아보기 내장 객체 global: 브라우저의 window같은 역할. window와 같이 모든 파일에서 접근이 가능해진다. 그리고 생략도 가능하다. setimmediate: setTimeout(callback, 0)하고 비슷한데 실행 순서에 차이가 있다고 하니 setImmediate를 사용하자. process.env: 시스템 환경 변수들이 들어있는 객체. 주로 코드에 노출되면 안되는 비밀키(db 비밀번호, 서드파티 앱 키 등)을 보관하는 용도로 쓰인다. 찾아보니 express로 가면 dotenv를 사용해서 process.env에 접근한다고 나와있다. process.nextTick: 이벤트루프를 공부할 때 비동기함수 간에도 서열이 있다는 것을 알게 되었다. process.nextTick도 서열이 강한 놈중 하난데 p..
[섹션 2-1] 노드 기본 기능 살피기 모듈 노드는 자바스크립트 코드를 모듈로 만들 수가 있다. 모듈이 어렵다면 그냥 쪼갠 코드라고 보면 좋을 것 같다. 보통은 기능 별로 쪼갠다. 사실 말이 다를 뿐이지 리액트의 컴포넌트도 비슷한 역할을 한다고 본다. 노드에서는 노드만의 CommonJS 모듈 시스템 을 쓴다고 하는데 요즘은 ES 모듈로 갈아타고 있는 추세라고 한다. 기본적인 사용 방법은 아래 코드와 같다. module.exports = checkFunc; module.exports = {odd, even}; //여러개 한꺼번에 보낼 때 exports.odd = "홀수"; //module.export 대신 exports만 씀 기본적으로 1번째 줄 처럼 작성을 하고, 여러개일 때는 2번째 줄처럼 작성한다. 특이하게 module이라는 것을 생략할 ..