-
[TIL] 0125 노드 입문 2주차 복습카테고리 없음 2024. 1. 25. 20:40
데이터베이스
: 어플리케이션 종료 시 데이터가 다 소멸하는 인 메모리 (In-Memory) 방식과 다르게, 어플리케이션이 종료된 후에도 데이터가 보존되는 영속성 의 특징을 가진다.
DBMS
: Database Management System, DB를 운영하고 관리하는 소프트웨어
RDB
: Relational Database, 데이터의 형식이 지정되어 있어 일관된 데이터가 중요한 은행 등에서 사용
NoSQL (ex) MongoDB)
: Non-relational Database, 데이터 형식이 지정되어 있지 않아 유연하게 확장 가능, 다양한 형식의 데이터를 빠르게 저장, 검색 가능
ODM
: Object Document Mapper, JS 의 object 와 MongoDB의 document 사이에서 매핑을 수행하는 도구
: JS 코드에서 작업하는 object 를 MongoDB 데이터베이스의 document 로 쉽게 변환하거나, 반대로 변환해주는 작업을 수행
MongoDB 의 Document
: 각 데이터 하나하나를 나타냄, Key-Value 쌍과 JSON 형식으로 구성
mongoose 의 Collection
: 여러개의 document 를 보유할 수 있는 구성요소, JSON 형식이며 고정된 구성요소가 존재하지 않음.
mongoose 의 Schema
: collection 에 들어가는 document 가 어떤 종류의 값을 가질 것인지 정의, 어떤 필드가 있어야 하는지 & 필드의 데이터 타입을 정의
ex)
const UsersSchema = new mongoose.Schema ({
name : String,
age : Number,
createdAt : {type: date, default : Date.now}
});
const dafaultSchema = new mongoose.Schema ({
defaultId : {
type : number,
required : true, // 필수사항
unique : true // 중복값 허용 x
}
});
mongoose 의 Model
: DB에 데이터를 저장& 읽어올 때 사용되는 데이터의 구조
Middleware
: 서버의 요청 - 응답 과정에서 중간에 위치하여 특정 기능을 수행하는 함수
: 순서대로 실행되어 위치가 중요
: app.use (req, res, next) => { 필요 코드 }; // 미들웨어 생성
Joi
: 데이터 유효성 검증을 위한 라이브러리
: 여러 타입과 규칙을 이용해 유효성을 검증할 수 있으며, 검증되지 않으면 오류를 발생시킴
ex)
import Joi from 'joi';
// Joi 스키마를 정의
const schema = Joi.object({
name: Joi.string().min(3).max(30).required(),
});
// 검증할 데이터를 정의
const user = { name: 'Foo Bar' };1) 검증
// schema를 이용해 user 데이터를 검증
const validation = schema.validate(user);
// 검증 결과값 중 error가 존재한다면 에러 메시지를 출력
if (validation.error) {
console.log(validation.error.message);
} else {
// 검증 결과값 중 error가 존재하지 않는다면, 데이터가 유효하다는 메시지를 출력합니다.
console.log('Valid Data!');
}2) 비동기적 검증
try {
const validation = await schema.validateAsync(user);
console.log ('valid data!');
} catch {
console.log(error.message);
}
ex) 할일 생성 API
/** 할 일 생성 API 리팩토링, 에러 처리 **/
router.post('/todos', async (req, res) => {
try {
// 클라이언트에게 전달받은 데이터를 검증합니다.
const validateBody = await createTodoSchema.validateAsync(req.body);
// 클라이언트에게 전달받은 value 데이터를 변수에 저장합니다.
const { value } = validateBody;
// Todo모델을 사용해, MongoDB에서 'order' 값이 가장 높은 '해야할 일'을 찾습니다.
const todoMaxOrder = await Todo.findOne().sort('-order').exec();
// 'order' 값이 가장 높은 도큐멘트의 1을 추가하거나 없다면, 1을 할당합니다.
const order = todoMaxOrder ? todoMaxOrder.order + 1 : 1;
// Todo모델을 이용해, 새로운 '해야할 일'을 생성합니다.
const todo = new Todo({ value, order });
// 생성한 '해야할 일'을 MongoDB에 저장합니다.
await todo.save();
return res.status(201).json({ todo });
} catch (error) {
console.error(error);
// Joi 검증에서 에러가 발생하면, 클라이언트에게 에러 메시지를 전달합니다.
if (error.name === 'ValidationError') {
return res.status(400).json({ errorMessage: error.message });
}
// 그 외의 에러가 발생하면, 서버 에러로 처리합니다.
return res
.status(500)
.json({ errorMessage: '서버에서 에러가 발생하였습니다.' });
}
});에러 처리 미들웨어
: 에러, 요청, 응답, 다음 미들웨어를 호출하는 함수
ex)
app.use (err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Something broke!');
});
app.js
: 전체 어플리케이션의 시작점, 미들웨어와 라우터를 등록하며 서버를 시작하는 역할
routes
: Express.js 의 라우터를 관리하기 위해 사용, 각 API 경로를 정의하며 해당 경로에서 실행될 함수를 관리하는 역할을 담당
schemas
: MongoDB를 사용하기 위한 mongoose 의 스키마 및 모델을 정의하기 위해 사용하며, 데이터의 구조와 처리할 메서드를 정의
assets
: 프론트엔드 파일을 서빙하기 위해 사용하는 폴더
Git
: 체계적 개발, 프로그램의 배포를 도와주는 형상 관리 도구 이자 버전 관리 시스템
- Repository
: Local (컴퓨터에 존재), Remote (Git 서버에 존재)
- Commit
: 새로 변경된 내용을 기록하는 단위
- Branch
: 협업 시 작업이 충돌되지 않도록 해주는 개념
: Working directory (개인) > Staging area (git add) > Local repository (git commit) > Remote repository (git push) 순
git init
git add . / git add app.js
git commit -m "first commit"
git remote add <name> <URL> // git remote add origin https://github.com/..... / git remote -v 로 현재 파일 확인 가능
git push
git clone : 원격 저장소의 프로젝트를 복제하여 다운로드하는 명령어
git pull : 최근 변경사항을 가져와 코드를 최신 상태로 유지하는 명령어
.gitignore
: git이 추적하지 않아야 하는 파일이나 폴더를 지정하는 파일
: 프로젝트 최 상단에 파일을 두고 내용을 node_modules 등 으로 작성한다.
Git hub SSH Key (secure shell)
: 네트워크 상에서 암호화된 통신을 할 수 있도록 하는 프로토콜의 일종
터미널 명령어
ls : 현재 경로의 파일을 보여줌 / ls -la : 숨겨진 파일까지 보여줌
pwd : 현재 내 위치
mkdir 이름 : 내 위치 아래에 이름으로 폴더 생성
cd : 폴더 이동
cp -r 복사할 파일이나 폴더/ 붙여넣을 위치 : 복사 붙여넣기