내배캠 42일차

·2022년 12월 25일
0

내일배움캠프

목록 보기
45/142
post-thumbnail

TODO

  • ORM?
  • 과제코드 복습

ORM?

Object Relational Mapping, 객체-관계 매핑

  • 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑 즉, 연결해주는 것을 말한다.
    객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터 베이스는 테이블을 사용한다.
    => 객체 모델과 관계형 모델 간의 불일치가 존재한다.
    => ORM을 통해 객체 간의 관계를 바당으로 SQL을 자동으로 생성하여 불일치를 해결한다.

장점&단점

  1. ORM을 이용하면 SQL Query가 아닌 직관적인 코드(메서드)로 데이터를 조작할 수 있어 개발자가 객체 모델로 프로그래밍하는 것에 도움이 된다.
  2. ORM은 독립적으로 작성되어 있어, 재사용 및 유지보수의 편리성이 증가한다.
  3. DBMS에 대한 종속성이 줄어든다.
    =>데이터구조와 객체지향 모델 사이의 간격을 좁힐 수 있다.
  4. ORM으로만 서비스를 구현하기 어렵다.
    => 사용하기에는 편하지만 설계를 신중하게 해야 함.
    => 프로젝트의 난이도가 올라 갈수록 설계하기 어려워짐.

Node.js ORM Library ‘Sequelize’

sequelize는 Node.js의 모듈로 sql작업을 쉽게 할 수 있도록 도와주는 ORM 라이브러리이다.

시퀄라이즈를 사용하면 자바스크립트 코드로 sql을 제어가능하다.

시퀄라이즈로 MySQL, MariaDB, PostgreSQL, SQLite, MSSQL 등 다양한 RDBMS와 호환된다.

과제코드 복습

routes/user.js

정규표현식

// 유저 고유번호, 1day
    const accessToken = jwt.sign(
      {
        userId: user.userId,
      },
      "sparta-secret-key",
      { expiresIn: "1d" }
    );

    // Access Token in Cookie
    res.cookie("accessToken", accessToken);
    return res
      .status(200)
      .json({ message: "로그인에 성공했습니다!", token: accessToken });

routes/post.js

  1. 게시글 작성
const { userId } = res.locals.user.dataValues;

=> 결과

//console.log(res.locals.user.dataValues)
{
  userId: 2,
  nickname: 'zzz',
  password: '1234',
  createdAt: 2022-12-25T12:48:22.000Z,
  updatedAt: 2022-12-25T12:48:22.000Z
}
  1. 전체게시글조회
//테이블 조인
const posts = await Post.findAll({
      include: [
        {
          model: User,
          attributes: ["nickname"],
          required: true,
        },
      ],
    });

=> 결과

//response
{
      "postId": 6,
      "title": "qwer",
      "content": "qwer",
      "likes": 0,
      "createdAt": "2022-12-25T13:17:07.000Z",
      "updatedAt": "2022-12-25T13:17:07.000Z",
      "userId": 2,
      "User": {
        "nickname": "zzz"
      }
  1. 상세 게시글 조회
const post = await Post.findOne({
      where: { postId },
      include: [
        {
          model: User,
          attributes: ["nickname"],
          require: true,
        },
        {
          model: Comment,
          attributes: ["comment", "createdAt"],
          include: [
            {
              model: User,
              attributes: ["nickname"],
            },
          ],
        },
      ],
    });

=> 결과

//response
{
  "post": {
    "postId": 6,
    "title": "qwer",
    "content": "qwer",
    "likes": 0,
    "createdAt": "2022-12-25T13:17:07.000Z",
    "updatedAt": "2022-12-25T13:17:07.000Z",
    "userId": 2,
    "User": {
      "nickname": "zzz"
    },
    "Comments": []
  }
}
profile
개발자 꿈나무

0개의 댓글