본문 바로가기
개발 공부/데이터베이스

ORM 개념 + im-sprint-shortly-mvc 리뷰

by 크롱이크 2021. 8. 5.

ORM이란?

Object-Relational Mapping의 약자

ORM은 객체 지향 프로그래밍 언어(여기서는 자바스크립트)와 관계형 데이터베이스 간의 연결을 위한 프로그래밍 기법이다.

사실 Node.js MySQL 모듈 등을 사용하여 데이터베이스와 서버 간에 통신이 가능하다.

 

node.js와 mysql을 연결하는 방식에는 몇가지 문제점들이 있다.

1)쿼리문이 길어지게 되면 이와 더불어 전체적인 코드 길이도 같이 길어지게 된다.

2)스키마가 변경되면 관련된 쿼리문들을 다 찾아서 변경해야한다. 유지보수가 쉽지 않다.

3) 관계형 데이터 베이스마다 쿼리문의 문법이 조금씩 달라지는데, 이는 필드에 정의되는 자료형도 마찬가지이다.

 

이러한 문제점들을 보완하고 효율성과 호환성을 높이기 위해 ORM을 사용하게 되었다.

https://sequelize.org/master/index.html

 

Manual | Sequelize

Constraints & Circularities Adding constraints between tables means that tables must be created in the database in a certain order, when using sequelize.sync. If Task has a reference to User, the User table must be created before the Task table can be crea

sequelize.org

Sequelize는 Promise를 기반으로 한 ORM으로서 MySQL 뿐만 아니라 Postgres, MariaDB, SQLite, MSSQL 등

다양한 RDMS를 지원하며 RDMS 환경에 상관 없이 동일한 코드로써 데이터베이스와의 통신이 가능하도록 한다.

그러므로 서로 다른 RDMS 환경으로 마이그레이션을 할 때도 그저 설정 파일에서 RDMS의 종류를 명시해주면 끝이다.

 

 

스프린트 리뷰

이번 스프린트는 우리가 직접 마이그레이션을 만들고, 라우터의 경로를 통해 컨트롤러를 전달하게된다. 

컨트롤러라는 폴더를 만들어 그안에 index.js라는 파일을 만들어 그안에서 데이터를 가공해서 응답하면된다.

(회색 틀안에 있는 과정을 진행한다고 보면 된다. 이번 스프린트에서는 화면에 보여지는 과정까진 하지 않는다.)

우리가 해야할 것은

1) urClass를 잘 읽고, 공식문서를 따라 마이그레이션을 만들어준다.

https://sequelize.org/master/manual/migrations.html

 

Manual | Sequelize

Migrations Just like you use version control systems such as Git to manage changes in your source code, you can use migrations to keep track of changes to the database. With migrations you can transfer your existing database into another state and vice ver

sequelize.org

2) 컨트롤러라는 폴더를 만들고 그안에 index.js라는 파일을 만든다.

3) routes 폴더 안에 index.js를 보고 다음으로 확인해야 하는 것이 link.js라는 것을 확인하고 그 안에서 controller로 갈 수 있는 길을 만들어 준다.

ex)
router.get('/', controller.get);

 4) 그렇게 3개의 길을 만들어 줬다면, controller의 index.js에 들어가서 3가지의 요청을 차례대로 처리해주면된다.

이때는 우리가 데이터베이스에서 정보를 찾아야하기 때문에 sequelize의 메소드들을 사용해야한다.

 

데이터를 찾기위한 혹은 수정하기 위한 메소드 페이지

https://sequelize.org/master/manual/model-querying-finders.html

 

Manual | Sequelize

Model Querying - Finders Finder methods are the ones that generate SELECT queries. By default, the results of all finder methods are instances of the model class (as opposed to being just plain JavaScript objects). This means that after the database return

sequelize.org

요청에 대한 응답은 다음과 같이 이루어져야한다.

const { getUrlTitle, isValidUrl } = require("../../modules/utils");
const { url: URLModel } = require("../../models");

//content-type: application/json
//status code: 200 (성공적으로 조회했을 시)
//response: URL 모델의 목록 (array of objects)

// GET /links 요청시
module.exports = {
    get:async (req, res) => {
        try {
        let result = await URLModel.findAll();
        
        res.status(200).json(result);
        } catch {
            console.log(err);
        }  
    }
    //----------
    //post:
    //---------
    //redirect:
}

 

 

 

아직 공식문서에서 찾는 것이 쉽지않다. 그치만 조금은 경험치가 쌓인듯...?

반응형

댓글