ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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 복사할 파일이나 폴더/ 붙여넣을 위치 : 복사 붙여넣기

     

Designed by Tistory. KYW