
드디어 node.js 수업을 시작했다. node.js는 이번에 처음 배우는 데 npm으로 초기 세팅하는 것이 어려워서 많이 버벅거리고 삽질을 했다. 처음에 vscode terminal로는 명령어가 실행이 안되길래 git bash로 바꿔서 하니까 해결 됐다. 그리고 백엔드 수업은 확실히 더 어려운 것 같다. 나만 어려운게 아닌 것 같아서 그나마 위안을 삼으며 공부 중이다.
npm: node package managernpm init: 프로젝트 생성(초기화)npm install: package 설치 (* install 대신 i로 축약 작성 가능)npm remove: package 삭제npm start: 프로젝트(스크립트) 실행npm install [package-name] --save-dev: 배포전 개발용으로만 사용하는 패키지npm install --production: 프로젝트 배포할때 개발용 의존성을 포함할 필요가 없는 경우npm i [package-name] --global: 전역 패키지npx: npm 패키지를 설치하지 않고 사용할 수 있게 해주는 도구module= library- 프로젝트가 라이브러리에 의존하기 때문에 라이브러리를 의존성이라고도 함
- 모듈 불러오기
require('URL');- 모듈 내보내기
module.exports.모듈명 = 모듈명혹은module.exports = {}로 한번에 내보낼 수 있음.- Node.js의 모듈은 첫 require 시에 캐시 되고, 두 번 실행되지 않음. 따라서, 코드를 여러 번 실행하기 위해선 함수 모듈로 작성해야 함.
- express 설치
npm install express-generator -g
Express로 서버를 만들고 mongoDB, mongoose로 데이터베이스를 다루는 방법에 대해 학습하고 postman도 사용해보았다. postman을 쓰니 확실히 api 테스트가 간편했다. 그리고 나는 관계형 데이터베이스만 알고 있었는 데 처음으로 NoSql에 대해 배우니 개념이 정말 많이 달라서 헷갈렸다. table이라던지 이런 용어도 다르게 사용하니 더 개념이 와닿지 않았던 것 같다. Express로 서버 만드는 부분은 처음에는 정말 이해가 안 되고 어려웠는 데, 계속 보다보니 코드 짜는 형식(?)이 눈에 익어서 조금은 이해가 가는 것 같다. 간단한 예제는 혼자서 짤 수 있을 것 같은데 프로젝트가 커지면 정말 어려울 것 같다는 생각이 든다...
- Express는 웹 및 모바일 애플리케이션을 위한 일련의 강력한 기능을 제공하는 간결하고 유연한 Node.js 웹 애플리케이션 프레임워크
- express 초기 세팅
npm install express-generator -g
express [프로젝트명]
cd [프로젝트명]
npm istall
npm start미들웨어(Middleware)는 HTTP 요청(req)과 응답(res) 사이에서 필요한 처리를 진행해주는 함수이며,next를 통해 다음 미들웨어 실행 여부를 결정. 미들웨어는 HTTP 응답이 마무리될 때까지 실행되고, next() 함수를 호출하지 않으면 미들웨어 사이클이 멈추게 됨router.get('/', (req, res, next) => { res.send('Hello Express'); });
에러 처리 미들웨어: err, req, res, next를 인자로
갖는 함수app.use((err, req, res, next) => { res.send('Error'); });
MVC 패턴(Model - View - Controller)Model- 데이터에 접근View- 데이터를 표현Controller- Model을 통해 데이터에 접근하여, 처리 결과를 View로 전달- API를 테스트할 수 있는
postmanMongoDB: Nosql Database로, 관계없이 유연한 설계 가능하고 JSON 데이터에 훨씬 친화적- MongoDB의 구조 -
Database(sql의 database와 유사) >Collection(sql의 table과 유사) >Document(sql의 row와 유사)- Mongoose는 데이터베이스와의 연결상태를 간단하게 관리할 수 있게 해줌
npm i mongoose: Mongoose 설치- mongoDB에서는 join을 지원하지 않음. Mongoose의
populate를 사용하여 쉽게 구현 가능.- 스키마 정의하기 -
new Schema({})- 데이터 타입과 필수유무 정의
user: { type: 타입 [String, Number...], required: 필수유무요소 [true || false] }
- 모델 만들기 -
mongoose.model()- mongoose 연결하기 -
mongoose.connect('')// 모듈을 불러옴 const mongoose = require('mongoose'); const Schema = mongoose.Schema; // 스키마 정의 const userSchema = new Schema({ name: { type: String, required: true } }); // 모델을 생성하여 모듈 형태로 내보냄 const user = mongoose.model('user', userSchema); module.exports = user;