2-1. 데이터베이스와 MongoDB
1) 이전에는 어떤 문제가 있었나요?
- 서버 종료하거나 재시작 .. 데이터 전부 날아감 .. 인 메모리(In-Memory) 방식으로 저장했기 때문
- 데이터베이스 ~ 앱 종료된 후에도 데이터가 보존되는 영속성(Persistence)이라는 특징을 갖게 된다.
- 영속성(Persistence)이 없는 데이터는 상품 등록 API와 같이 인 메모리(In-Memory)에만 존재하며, 프로그램이 종료되면 데이터가 사라지게 된다.
2) 데이터베이스란?
- 데이터베이스는 '데이터의 집합'이라고 할 수 있다. 실제 데이터가 저장되는 저장소 역할을 수행함
- 데이터베이스를 실제로 운영하고, 관리하는 소프트웨어를 DBMS(Database Management System)라고 부른다.
- "데이터베이스에 저장한다" : DBMS가 설치된 서버에 데이터를 저장한다는 의미
- DBMS가 설치된 서버 컴퓨터를 데이터베이서 서버(DB 서버)라고 부를 수 있따.
- 즉, DB 서버의 모든 데이터는 DBMS가 관리하게 됨.
3) 데이터베이스의 종류
- 관계형 데이터베이스 : Relational Database (RDB)
- 데이터의 형식이 정해져있고, 데이터 간의 관계를 맺어 모순이 없는 데이터를 유지할 수 있도록 도와줌.
- 은행과 같이 정확하고 일관된 데이터가 중요한 경우에 주로 사용된다.
- 모순이 없는 데이터 : 무결성과 정합성이 높은 데이터
- 비관계형 데이터베이스 : Non-relational Database (NoSQL)
- 데이터의 형식 고정 X, 유연 확장 가능 DB
- SNS 서비스, 빅데이터와 같이 다양한 형식의 데이터를 빠르게 저장하고 검색하는 경우에 주로 사용
- 유연하게 저장되는 만큼 저장되는 데이터를 제대로 관리하지 않으면 DB에 저장된 데이터를 신뢰할 수 없게 된다.
- MongoDB란
- 비관계형 데이터베이스(NoSQL) 중 하나
- 모든 데이터가 JSON 형태로 저장됨
- 복잡한 데이터 구조를 쉽게 저장할 수 있는 장점
- 데이터베이스 서버의 확장을 손쉽게 줄이고 늘일 수 있다.
2-2. MongoDB 대여하기
1) MongoDB Atlas란?
- MongoDB Atlas는 MongoDB의 클라우드 버전
2-3. MongoDB Client : Studio 3T
1) Studio 3T란?
- Studio 3T는 API의 사용을 도와주는 API Client처럼 MongoDB를 위해서 만들어진 MongoDB Client이다.
2) DB Client와 API Client의 다른 점은?
- 모두 서버에 연결해 데이터를 보내는 것까지는 같은 개념이지만, 사용되는 개념과 기능은 크게 다릅니다.
- DB Client
- 직접 데이터베이스에 접근해 CRUD
- SQL, NoSQL 지원
- API Client
- 웹 서비스의 API에 연결하여 서버와 데이터를 송수신
- REST API와 Socket 같은 다양한 프로토콜을 지원
2-4. 코드에서 MongoDB 적용하기
1) 내 코드에서 MongoDB에 연결하려면 뭘 해야 할까요?
- API에 MongoDB를 연결해서 데이터를 주고받기 위해
- JavaScript 코드에서도 DB Client 역할을 하는 무언가가 있어야 DB에 연결할 수 있다.
2) mongoose라는 라이브러리의 개념
- mongoose는 MongoDB에 데이터를 쉽게 읽고 쓰게 해주는 JavaScript 라이브러리입니다.
- mongoose를 ODM(Object Document Mapper)이라고도 부릅니다.
3) mongoose 설치
4) mongoose의 문서(Document)란?
- MongoDB에서 갖고 있는 데이터 하나하나를 문서(Document)라고 정의한다.
- 1개 이상의 Key-Value 쌍으로 이루어져 있다.
- JSON 형식으로 구성되어 있다.
5) mongoose의 컬렉션(Collection)이란?
- 여러 개의 문서를 보유할 수 있는 MongoDB의 구성 요소
- JSON 형식의 여러가지 문서를 보유할 수 있음
- 컬렉션은 유연하게 구성할 수 있음
- 관계형 데이터베이스(RDB)의 Table과 동일한 역할을 한다
6) mongoose의 스키마(Schema)란?
- 컬렉션에 들어가는 문서가 어떤 종류의 값을 가질 것인지 정의하기 위해 사용
- 데이터의 구조 / 제약 사항 ~ 데이터를 모델링 할 때 사용
- 어떤 필드가 있어야 하는지, 필드는 어떤 데이터 타입을 가져야 하는지 정의
- 대표적인 스키마 타입
- null : null 값과 존재하지 않는 필드
- String : 문자열
- Number : 숫자
- Date : 날짜
- Buffer : 파일을 담을 수 있는 버퍼, UTF-8이 아닌 문자열을 저장
- Boolean : ture or false
- ObjectId(Schema.Types.ObjectId) : 객체 ID, 주로 다른 객체를 참조할 때 넣음
- Array : 배열 형태의 값
7) mongoose의 모델(Model)이란?
- 데이터를 저장하고 읽어올 때 사용되는 데이터의 구조
- 스키마를 바탕으로 만들어지고, JS 객체와 MongoDB 간의 상호작용
- 사용자의 데이터를 저장하려면 사용자(Users) 모델을 사용하여 데이터를 생성, DB에 저장
8) 웹 서버에서 MongoDB에 연결하기
defaultId // 실제 사용될 데이터의 이름
type : Number // 데이터 타입이 숫자임을 나타냄
required : true // 이 필드가 반드시 있어야 함을 나타냄
unique : true // 이 필드의 값이 유일해야 함을 나타냄
2-5. mongoose를 이용해 REST API 구현하기
exec .. promise .. 동기 .. 비동기 ...
데이터 조회할 때 exec 안 붙이면 데이터가 정상적으로 조회되지 않을 수 있다
exec 안 붙이고 await 하면 .. 해당하는 데이터가 promise 형태로 동작하지 않기 때문에 데이터가 조회가 안 될 수 있다. mongoDB에서 데이터를 조회할 때에는 웬만해선 exec를 붙여야 한다고 알고 있자.
---
TypeError: Cannot destructure property 'goodsId' of 'req.body' as it is undefined.
npm install body-parser
2-6. [할 일 메모 사이트] 준비 단계
2-7. [할 일 메모 사이트] API 서버 준비하기
의존성 - 패키지 - 라이브러리
- app.use('/api', router)
- app.use는 미들웨어를 사용하게 해주는 코드!
- 맨 처음 인자 값에 들어간 /api에 의해서 http:127.0.0.1:8080/api 경로로 접근하는 경우에만 json 미들웨어를 거친 뒤, router로 연결되기 하는 것
- express.json 미들웨어?
- express.json 미들웨어는 클라이언트의 요청(Request)을 받을 때 body에 있는 데이터를 정상적으로 사용할 수 있게 분석해주는 역할을 한다.
2-8. [할 일 메모 사이트] Mongoose Scheme 설계하기
- MongoDB를 도입하기 위해 필요한 데이터와 형식을 정의하는 것 .. 스키마(Schema) 설계
2-9. [할 일 메모 사이트] Create, Read 구현하기
- sync로 하면 비정상적인 데이터에 접근하게 될 수 있다.
- node.js 특징 .. 비동기 ..
- async - awiat 어떻게 동작하는지 알아보고 하시길 ..
- 데이터 유효성 검사(Validation)란, 전달받은 데이터가 예상한 형식과 일치하는지 확인하기 위한 작업
2-10. [할 일 메모 사이트] Update, Delete
--
2-11. 미들웨어 (Middleware)
1) 미들웨어 기본 개념
미들웨어란 무엇일까요?
- 웹 서버에서 요청을 받을 때, 모든 요청에 대한 공통적인 처리를 하고 싶을 수 있다. 이때 필요한 것이 바로 미들웨어(Middleware)
- 미들웨어는 서버의 요청-응답 과정에서 중간에 위치하여 특정 기능을 수행하는 함수라고 볼 수 있다.
2) Express.js에서 미들웨어 작성해보기
3) 미들웨어는 어떤 경우에 사용하는 게 적합할까요?
4) 여러 개의 미들웨어가 겹치는 경우 동작하는 방식
res.send() .. next()
2-12. 데이터 유효성 검증 라이브러리 Joi
1) Joi란?
- Joi는 JavaScript 유효성 검증을 위한 라이브러리입니다. Joi는 여러 타입과 규칙을 이용해 유효성을 검증할 수 있으며, 유효성 검증에 실패하면 오류를 발생시킵니다.
2) 유효성 검증(Validation)이란 무엇인가?
3) Joi 설치하기
4) Joi를 이용한 Validation 시작하기
..
7) try/catch 설정하기
2-13. 에러 처리 미들웨어
1) 에러 처리는 왜 필요할까요?
- 원하지 않았던 비즈니스 로직이 수행되지 않도록 하기 위해
2) Express.js의 에러 처리 미들웨어
- err : 이전 미들웨어에서 발생한 에러를 전달받은 객체
- req, res : 일반적으로 사용하는 HTTP 요청과 응답을 관리하는 객체
- next : 다음 미들웨어를 실행하는 함수
- 에러 처리 미들웨어는 Nest.js 프레임워크에서 Exception Filter라는 이름으로 불린다.
3) 에러 발생 시 에러를 처리하는 미들웨어 작성하기
4) 에러 처리 미들웨어 등록하기
- 에러 처리 미들웨어는 왜 Router 하단에 등록하는 건가요?
- 미들웨어는 등록된 순서대로 실행됨 ..
- 반대로, 라우터 처리 이전에 미들웨어를 등록하면 라우터에서 발생한 에러를 처리할 수 없음
5) 할 일 등록 API 리팩토링
- app.js
- 전체 어플리케이션의 시작점
- 미들웨어와 라우터를 등록하며, 서버를 시작하는 역할
- middlewares
- 미들웨어를 정의하기 위해 사용함
- 에러 핸들러, 로깅, 사용자 인증과 같은 미들웨어를 이 폴더에서 관리
- routes
- Express.js의 라우터를 관리하기 위해 사용
- 각 API 경로를 정의, 해당 경로에서 실행될 함수를 관리하는 역할
- schemas
- MongoDB를 사용하기 위한 mongoose의 스키마 및 모델을 정의하기 위해 사용
- MongoDB 데이터의 구조와 데이터를 처리할 메서드를 정의하는 역할을 담당함
- assets
- 프론트엔드 파일을 서빙하기 위해 사용하는 폴더
- 아키텍처 패턴
- Layerd Architecture
- DDD(Domain Driven Development)
- Clean Architecture
2-14. 코드 서식 알아보기
2-15. Prettier
2-16. 배포를 위한 Git 학습
- .gitignore 파일?
- .gitignore 파일은 프로젝트에서 Git이 추적하지 않아야 하는 파일이나 폴더를 지정하기 위한 파일
2-17. Github에 Repository 올리기
2-18. 환경 설정하기
2-19. AWS EC2 instance 생성
2-20. AWS EC2 Node.js 설치
2-21. 서버 프로그램 실행 및 웹사이트 접속
2-22. 서버와 도메인 연결하기
'Coding > 내일배움캠프' 카테고리의 다른 글
[내일배움캠프] Node.js 4기 TIL | Day 25 | 24.01.23.(화) (0) | 2024.01.24 |
---|---|
[내일배움캠프] Node.js 4기 TIL | Day 24 | 24.01.22.(월) (0) | 2024.01.23 |
[내일배움캠프] Node.js 4기 TIL | Day 22 | 24.01.19.(금) (1) | 2024.01.20 |
[내일배움캠프] Node.js 4기 TIL | Day 21 | 24.01.18.(목) (1) | 2024.01.19 |
[내일배움캠프] Node.js 4기 TIL | Day 20 | 24.01.17.(수) (0) | 2024.01.17 |