드디어 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를 테스트할 수 있는
postman
MongoDB
: 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;