[데이터베이스] 2. ORM이란?

Shy·2023년 10월 5일
0

NodeJS(Express&Next.js)

목록 보기
36/39
post-thumbnail

ORM이란?

데이터베이스를 사용할 때 ORM을 많이 사용하게 되는데 ORM이 무엇인지 먼저 알아보겠다.

ORM (Object Relational Mapping) 이란?

객체와 관계형 데이터베이스의 데이터를 자동으로 변형 및 연결하는 작업이다.

ORM을 이용한 개발은 객체와 데이터베이스의 변형에 유연하게 사용할 수 있다.

ORM vs Pure Javascript

(orm을 사용해서 board 테이블에서 데이터 가져오는 방법과 orm 사용하지 않고 가져오는 방법 비교)

const boards = Board.find({ title: 'Hello' , status: 'PUBLIC' });
db.query('SELECT * FROM boards WHERE title = "Hello" AND status = "PUBLIC" , (err, result) => {
       if(err) { 
          throw new Error('Error')
      }
      boards = result.rows;
})

ORM과 Node.js 추상화 계층

개발에서 추상화라는 것은 추상화를 많이 하면 할수록 어떠한 복잡한 로직을 알지 못하더라도 그 로직을 간단하게 사용할 수 있게 해 준다. (불필요한 정보는 숨기고 중요한 정보만을 표현해서 프로그램을 간단하게 해준다.)

예를 들어서, 커피를 마시기 위해서 커피머신을 이용할 줄 알면 커피 머신이 어떻게 작동하는지 몰라도 커피를 마실 수 있는 것과 같다.

데이터베이스도 사용하는 방법에 따라 추상화가 많이 되어있는 라이브러리를 사용할수도 있고 그렇지 않은 라이브러리를 사용해서 데이터베이스를 컨트롤 할 수도 있다.
이제 추상화 정도를 3단계로 나눠서 살펴보면 다음과 같다.

저수준: 데이터베이스 드라이버

데이터베이스 드라이버는 데이터베이스 연결(때때로 연결 풀링)을 처리한다. 이 수준에서는 원시 SQL 문자열을 작성하여 데이터베이스에 전달하고 데이터베이스에서 응답을 받는다.
Node.js 생태계에는 이 계층에서 작동하는 많은 라이브러리가 있다.

다음은 세 가지 인기 있는 라이브러리이다.

  • mysql: MySQL (mysql을 위한 데이터베이스 드라이버)
  • pg: PostgreSQL (postgres를 위한 데이터베이스 드라이버)
  • sqlite3: SQLite (sqlite를 위한 데이터베이스 드라이버)

이러한 각 라이브러리는 기본적으로 동일한 방식으로 작동한다. 데이터베이스 인증 정보를 가져오고, 새 데이터베이스 인스턴스를 인스턴스화하고, 데이터베이스에 연결하고, 문자열 형식으로 쿼리를 보내고 결과를 비동기적으로 처리한다.

중간수준: 쿼리 빌더

이것은 단순한 데이터베이스 드라이버 모듈과 완전한 ORM을 사용하는 것의 중간 수준이다.
이 계층에서 작동하는 가장 주목할만한 모듈은 Knex이다.

이 모듈은 몇 가지 다른 SQL 언어에 대한 쿼리를 생성할 수 있다. 이 모듈은 앞서 언급한 라이브러리 중 하나에 의존한다. — Knex와 함께 사용하려는 특정 라이브러리를 설치해야 한다.

여기서 작성하는 쿼리는 기본 SQL 쿼리와 매우 유사한다. 또한 한 가지 좋은 점은 문자열을 연결하여 SQL을 형성하는 경우(종종 보안 취약점이 발생함)보다 훨씬 더 편리한 방식으로 프로그래밍 방식으로 동적 쿼리를 생성할 수 있다는 것이다.

고수준: ORM

최고 수준의 추상화입니다. ORM으로 작업할 때 일반적으로 더 많은 설정을 사전에 수행해야 한다. ORM의 요점은 이름(object relational mapping)에서 알 수 있듯이 관계형 데이터베이스의 데이터를 애플리케이션의 객체(클래스 인스턴스)에 매핑하는 것이다.

  • typeorm
  • sequelize
  • prisma

ORM사용의 단점

  • SQL이 아닌 ORM 자체를 배우게 된다.
    (각각 특정 ORM 자체를 배우는 시간도 오래걸리며 ORM 들 마다 다른 문법을 사용하는 곳도 많다.)

  • ORM을 이용해서 복잡한 호출을 하면 성능이 좋지 않을 수 있다.

ORM사용의 장점

  • 하나의 소스 코드를 이용해서 여러 데이터베이스로 쉽게 교체 가능하다.
  • 중복 코드 방지
  • SQL 인젝션 취약점으로부터 보호
  • 모델 유효성 검사 지원
  • TypeScript 지원

TypeORM

TypeORM이란?
TypeORM은 node.js에서 실행되고 TypeScript로 작성된 객체 관계형 매퍼 라이브러리이다.

TypeORM은 MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, SAP Hana 및 WebSQL과 같은 여러 데이터베이스를 지원한다.

TypeORM 특징과 이점

  • 모델을 기반으로 데이터베이스 테이블 체계를 자동으로 생성한다.
  • 데이터베이스에서 개체를 쉽게 삽입, 업데이트 및 삭제할 수 있다.
  • 테이블 간의 매핑 (일대일, 일대 다 및 다 대다)을 만든다.
  • 간단한 CLI 명령을 제공한다.
  • TypeORM은 간단한 코딩으로 ORM 프레임 워크를 사용하기 쉽다.
  • TypeORM은 다른 모듈과 쉽게 통합된다.

TypeORM을 이용한 앱 개발

링크

프로젝트 폴더 생성

package.json 파일 생성

npm init

package.json 파일 생성한다.
프로젝트 정보와 의존성(dependencies)을 관리하는 문서이다.
패키지 설치 시 여기에 그 정보가 기록된다.(이름, 버전등)

tsconfig.json

TypeScript로 짜인 코드를 JavaScript로 컴파일하는 옵션을 설정하는 파일이다.
TypeScript 컴파일은 tsc라는 명령어를 사용한다.
아래 커맨드로 tsconfig.json 파일을 생성한다.

npx tsc --init

옵션에 대한 설명 링크

필요한 모듈 설치

npm install morgan nodemon express

npm install typescript ts-node @types/node @types/express @types/morgan —save-dev 
  • nodemon
    서버 코드를 변경 할 때마다 서버를 재시작하 일을 자동으로 대신 해준다.

  • ts-node
    Node.js 상에서 TypeScript Compiler를 통하지 않고도, 직접 TypeScript를 실행시키는 역할을 한다.

  • morgan
    nodeJS 에서 사용되는 로그 관리를 위한 미들웨어 이다.

  • @types/express @types/node
    Express 및 NodeJS에 대한 Type 정의에 도움이 된다..

express 코드 작성

root 폴더 아래 src/index.ts를 작성해준다.

package.json 파일 수정

package.json 파일을 수정한다.
아까 설치한 nodemon과 ts-node를 이용하여 서버를 시작하는 스크립트를 작성한다.

"scripts": {
  "start": "ts-node src/server.ts",
  "dev": "nodemon --exec ts-node ./src/server.ts",
  "test": "echo \"Error: no test specified\" && exit 1"
},

백엔드 서버 실행 후 접속

express 앱에 typeorm 을 이용한 데이터베이스 연결

필요한 모듈 설치

모듈 설치 링크

npm install pg typeorm reflect-metadata —save
profile
초보개발자. 백엔드 지망. 2024년 9월 취업 예정

0개의 댓글