본문 바로가기

이노베이션캠프/TIL

이노베이션 캠프 4일차_MongoDB, 미들웨어, Joi, Prettier


MongoDB

 

MongoDB란?

  • 비관계형 데이터베이스(NoSQL) 중 하나 입니다.
  • 모든 데이터가 JSON 형태로 저장됩니다.
  • 복잡한 데이터 구조를 쉽게 저장할 수 있는 장점

MongoDB Atlas

  • MongoDB AtlasMongoDB의 클라우드 버전입니다. 이를 통해 어디에서나 쉽게 데이터베이스에 접근할 수 있게됩니다.

Studio 3T

Studio 3T란?
  • Studio 3T는 MongoDB의 데이터를 더욱 편리하게 관리할 수 있는 GUI 툴입니다.
  • Studio 3T는 API의 사용을 도와주는 API Client처럼 MongoDB를 위해서 만들어진 MongoDB Client입니다.
  • MongoDB에 저장된 데이터를 직접 확인하고 수정할 수 있기 때문에, JavaScript 코드로만 데이터를 확인하고 수정하는 것보다 더욱 효율적으로 작업과 테스트를 할 수 있는 툴입니다.

DB Client와 API Client의 다른점은?

  • DB Client:
    • 직접 데이터베이스에 접근해 데이터를 조회, 추가, 수정, 삭제하는 기능을 제공합니다.
    • SQL, NoSQL과 같은 다양한 유형의 데이터베이스를 지원합니다.
    • Studio 3T는 이러한 DB Client의 한 종류로, MongoDB를 관리할 수 있는 툴입니다.
  • API Client:
    • 웹 서비스의 API에 연결하여 서버와 데이터를 송수신합니다.
    • REST API와 Socket 같은 다양한 프로토콜을 지원합니다.

 

mongoose


코드에서 MongoDB 적용하기

  • JavaScript 코드에서 DB Client 역할을 하는 무언가가 있어야 데이터베이스에 연결을 할 수 있습니다. mongoose 라이브러리를 이용해 데이터베이스에 연결할 수 있습니다.

 

  •  mongoose라는 라이브러리의 개념
    •  mongoose는 MongoDB에 데이터를 쉽게 읽고 쓰게 해주는 JavaScript 라이브러리입니다.
    • ODM(Object Document Mapper)이라고도 부릅니다.
    • ODM(Object Document Mapper)이란, JavaScript의 객체(Object)와 MongoDB의 문서(Document) 사이에서 ‘매핑’을 수행하는 도구입니다.
  • mongoose의 문서란?
    • MongoDB에서 가지고 있는 각 데이터 하나하나를 문서(Document)라고 정의합니다.
    • 1개 이상의 Key-Value의 쌍으로 이루어져있습니다.
    • JSON 형식으로 구성되어있습니다
  • mongoose의 컬렉션이란?
    • 컬렉션(Collection)은 여러개의 문서(Document)를 보유할 수 있는 MongoDB의 구성요소입니다.
    • JSON 형식의 여러가지 문서(Document)를 보유할 수 있습니다.
    • 컬렉션(Collection)은 고정된 구성요소가 존재하지 않고, 유연하게 구성할 수 있습니다.
    • 이후에 설명할 관계형 데이터베이스(RDB)Table과 동일한 역할을 합니다.
  • mongoose의 스키마란?
    • 스키마(Schema)컬렉션(Collection)에 들어가는 문서(Document)가 어떤 종류의 을 가질 것인지 정의하기위해 사용합니
    • 예시
const UsersSchema = new mongoose.Schema({
  name: String, // 문자열 타입입니다.
  age: Number, // 숫자 타입입니다.
  favorites: [String], // 문자열 배열 타입입니다.
  createdAt: { type: Date, default: Date.now }, // 날짜 타입입니다.
  someId: mongoose.Schema.Types.ObjectId // ObjectId 타입입니다.

})

 


미들웨어 (Middleware) 

미들웨어 (Middleware)란?

  • 미들웨어(Middleware)서버의 요청(Request)-응답(Response) 과정에서 중간에 위치하여 특정 기능을 수행하는 함수라고 볼 수 있습니다.
  • 예를 들어, 모든 요청에 대해서 로그(Logging)를 남기거나, 특정 사용자만 API를 접근(Authentication & Authorization)하게 하고 싶을 때도 미들웨어를 사용합니다
  • 미들웨어는 어디에 위치시키느냐에 따라 다르게 동작합니다. 일반적으로 어플리케이션에 등록된 순서대로 실행됩니다.
  • 여러개의 미들웨어가 겹치는 경우, 이는 첫번째 미들웨어부터 순차적으로 진입하게 됩니다.
  • 하지만 미들웨어를 거치는 중간에 next() 가 실행되지 않으면 다음 미들웨어는 실행되지 않고, 클라이언트의 요청은 거기서 종료됩니다.

 

  • Express.js의 미들웨어는 어떤게 있나요?
    • app.use(express.urlencoded({ extended: false }));
    • app.use(express.json());

 

  • Router와 미들웨어의 차이
    • Router와 미들웨어는 서로 다른 방식처럼 보이지만 Router는 미들웨어 기반으로 구현된 객체이므로 미들웨어와 동일한 방식으로 작동됩니다.
    • 즉, Router는 미들웨어 함수를 특정 경로에 바인딩하는 역할을 하며, 요청이 들어온 URL 경로에 따라 서로 다른 미들웨어를 실행시킬 수 있게 도와줍니다.

 


Joi

Joi란?

  • Joi는 JavaScript 유효성 검증을 위한 라이브러리입니다. Joi는 여러 타입과 규칙을 이용해 유효성을 검증할 수 있으며, 유효성 검증에 실패하면 오류를 발생시킵니다.

Prettier


Prettier란?

  • 코드 서식 관리 도구
  • 어떤 규칙들을 제공하는지 살펴보기
const config = {
  trailingComma: "es5", // ES5에서 제원하는 위치에 쉼표를 추가합니다.
  tabWidth: 4, // Tab의 너비를 4 스페이스로 설정합니다.
  semi: false, // 세미콜론을 사용하지 않습니다.
  singleQuote: true, // 따옴표를 작은 따옴표(')를 사용합니다.
};

export default config;