...
NODE.JS
📌 npm
Major(주 버전), Minor(부 버전), Patch(수 버전)
- Major는 하위 버전과 호환되지 않은 수정 사항이 생겼을 때 올림
- Minor는 하위 버전과 호환되는 수정 사항이 생겼을 때 올림
- Patch는 기능에 버그를 해결했을 때 올림
📌 os 모듈
CPU나 메모리, 디스크 용량이 얼마나 남았는지 확인이 필요할 때 사용
📌 process 모듈
- proces.cwd() : node명령을 호출한 작업디렉터리의 절대경로. 만일 C: > node Users/ano/temp/directory.js 일 경우 C: 가 호출 경로
- process.env : 환경변수
- process.nextTick : 가장 먼저 실행하는 이벤트 콜백. setTimeout < promise < nextTick
📌 Event 모듈
// events 모듈 사용
var events = require('events');
// EventEmitter 객체 생성
var eventEmitter = new events.EventEmitter();
// EventHandler 함수 생성
var connectHandler = function connected(){
console.log("Connection Successful");
// data_recevied 이벤트를 발생시키기
eventEmitter.emit("data_received");
}
// connection 이벤트와 connectHandler 이벤트 핸들러를 연동
eventEmitter.on('connection', connectHandler);
// data_received 이벤트와 익명 함수와 연동
// 함수를 변수안에 담는 대신에, .on() 메소드의 인자로 직접 함수를 전달
eventEmitter.on('data_received', function(){
console.log("Data Received");
});
// connection 이벤트 발생시키기
eventEmitter.emit('connection');
console.log("Program has ended");
📌 path 모듈
path 모듈은 운영체제별로 경로 구분자가 달라 생기는 문제를 쉽게 해결하기 위해 등장
- path.dirname(경로): 파일이 위치한 폴더 경로를 보여줍니다.
- path.extname(경로): 파일의 확장자를 보여줍니다.
- path.basename(경로, 확장자): 파일의 이름(확장자 포함)을 보여줍니다. 파일의 이름만 표시하고 싶다면 basename의 두 번째 인자로 파일의 확장자를 넣어주면 됩니다.
- path.join(경로, .. .): 여러 인자를 넣으면 하나의 경로로 합쳐줍니다. 상대경로인 ..(부모 디렉터리)과 .(현 위치)도 알아서 처리해줍니다.
📌 utility 모듈
- util.deprecate: 함수가 deprecated 처리되었음을 알려줍니다.
첫 번째 인자로 넣은 함수를 사용했을 때 경고 메시지가 출력됩니다.
두 번째 인자로 경고 메시지 내용을 넣으면 됩니다. 함수가 조만간 사라지거나 변경될 때 알려줄 수 있어 유용합니다. - util.promisify: 콜백 패턴을 프로미스 패턴으로 바꿔줍니다.
바꿀 함수를 인자로 제공하면 됩니다. 이렇게 바꾸어두면 async/await 패턴까지 사용할 수 있어 좋습니다.
단, 콜백 형태가 (error, data) => { } 형식이어야 합니다. 다행히 노드의 대부분 메소드는 저렇게 되어있습니다.
📌 fs 모듈
📌 버퍼 / 스트림 / 파이프
버퍼 : 일정한 크기로 모아두는 데이터
스트림 : 메모리가 부족해 버퍼를 여러개 보내야 한다면 그게 스트림
파이프 : 버퍼 처리를 파이프 처럼 연결
📌 url 모듈
📌 예측 불가능한 에러 처리하기 (최후의 수단)
// uncaughtException 이 모든 에러를 잡아주지는 않음.
// 따라서 여기에 복구 코드를 넣는건 비추천함.
// 단순히 에러 발생 확인용으로만 사용
process.on('uncaughtException', err => {
console.error("예기치 못한 에러 ", err);
})
EXPRESS.JS
📌 morgan 미들웨어
morgan은 요청과 응답에 대한 정보를 추가로 자세히 콘솔에 기록
📌 cookie-parser 미들웨어
- cookie-parser는 요청과 함께 들어온 쿠키를 해석하여 곧바로 req.cookies객체로 만든다.
- 서명된 쿠키는 req.cookies 대신 req.signedCookies 객체에 들어간다.
- 쿠키를 개인 저장 데이터로 사용할수도 있다. 이를 이용해 쇼핑몰 추천 목록, 광고 팝업 등으로 사용된다.
📌 body-parser 미들웨어
폼 데이터 또는 AJAX 요청으로 온 POST 데이터를 처리한다.
그러나 멀티파트 (이미지, 동영상. 파일) 데이터는 처리하지 못한다. 그 경우 multer 모듈을 사용한다.
📌 static 미들웨어
기본 경로인 / 로 왔을 때, express는 public 폴더 안에 있는 해당 경로의 파일을 찾는다.
app.use('/', express.static(path.join(__dirname, 'public')));
📌 expression-session 미들웨어
세션 관리용 미들웨어.
로그인 등의 이유로 세션을 구현하거나, 특정 사용자를 위한 데이터를 임시적으로 저장해둘 때 매우 유용하다.
세션은 사용자별로 req.session 객체 안에 유지된다.
+ Session Store
세션 스토어는 세션이 데이터를 저장하는 곳을 말한다.
대표적으로 Memory Store, File Store, Mongo Store 가 있다. 보통 Redis를 이용한다.
📌 multer 미들웨어
이미지, 동영상 등을 비롯한 여러 가지 파일들을 멀티파트 형식으로 업로드할 때 사용하는 미들웨어이다.
멀티파트 형식이란 enctype이 multipart/form-data 인 폼을 통해 업로드하는 데이터의 형식을 의미한다.
const upload = multer({
storage: multer.diskStorage({ // 저장한공간 정보 : 하드디스크에 저장
destination(req, file, done) { // 저장 위치
done(null, 'uploads/'); // uploads라는 폴더 안에 저장
},
filename(req, file, done) { // 파일명을 어떤 이름으로 올릴지
const ext = path.extname(file.originalname); // 파일의 확장자
done(null, path.basename(file.originalname, ext) + Date.now() + ext); // 파일이름 + 날짜 + 확장자 이름으로 저장
}
}),
limits: { fileSize: 5 * 1024 * 1024 } // 5메가로 용량 제한
});
// => 이렇게 설정한 upload라는 객체를 뒤에 라우터에 장착하면 된다.
- upload.single() : 미디어 파일 하나 업로드
- upload.array() : 미디어 파일 여러개를 동시에 업로드
- upload.field() : 미디어 파일 하나하나씩 업로드 따로따로
- upload.none() : 미디어 타입이 아닌 거
📌 dotenv 미들웨어
dotenv는 환경변수를 .env파일에 저장하고 process.env로 로드하는 의존성 모듈이다.
📌 라우터
next('route') 라는 코드로 사용하며, 라우터에 연결된 나머지 미들웨어들을 건너뛰고 싶을 때 사용
req.params.id : 라우터 매개변수. '/user/:id'
router.route(주소).get().post() : 라우터 그룹화
📌 req, res 객체 정리
[response]
- res.app: 똑같이 res 객체를 통해 app 객체에 접근한다. res.app.get('')같이 사용 가능.
- res.cookie(키, 값, 옵션): 쿠키를 응답에 설정하는 메서드이다.
- res.clearCookie(키, 값, 옵션): 쿠키를 응답에서 제거하는 메서드이다.
- res.end(): 데이터 없이 응답을 보낸다.
- res.json(JSON): JSON 형식의 응답을 보낸다.
- res.redirect(주소): 리다이렉트할 주소와 함께 응답을 보낸다.
- res.render(뷰, 데이터): 템플릿 엔진을 렌더링하여 응답할 때 사용하는 메서드이다.
- res.send(데이터): 데이터와 함께 응답을 보낸다. 데이터는 문자열, HTML, 버퍼, 객체, 배열 등이 될 수 있다.
- res.sendFile(경로): 경로에 위치한 파일을 응답한다.
- res.set(헤더, 값) / res.setHeader(헤더, 값): 응답의 헤더를 설정한다. req.get()이 헤더값을 가져오는거라면 이건 헤더 설정
- res.status(코드): 응답 시의 HTTP 상태 코드를 지정한다.
res.end()
res.json(JSON)
res.redirect(주소)
res.render(뷰, 데이터)
res.send(데이터)
res.sendFile(경로)
는 각 라우터에 반드시 한번만 써야되는건 잊지말자.
[request]
- req.app: req 객체를 통한 app 객체로의 접근이다. 예를 들어 req.app.get('port')와 같은 식으로 사용할 수 있다.
- req.body: body-parser 미들웨어가 만드는 요청의 본문을 해석한 객체이다.
- req.cookies: cookie-parser 미들웨어가 만드는 요청의 쿠키를 해석한 객체이다.
- req.ip: 요청의 ip 주소를 담는다.
- req.params: 라우트 매개변수에 대한 정보가 담긴다.
- req.query: 쿼리스트링의 정보가 담긴다.
- req.signedCookies: 서명된 쿠키들은 req.cookies 대신 여기에 담긴다.
- req.get(헤더 이름): 헤더의 값을 가져온다. req.get('Content-type')
이 글이 좋으셨다면 구독 & 좋아요
여러분의 구독과 좋아요는
저자에게 큰 힘이 됩니다.