데이터베이스를 사용할 때 ORM을 많이 사용하게 되는데 ORM이 무엇인지 먼저 알아보겠다.
객체와 관계형 데이터베이스의 데이터를 자동으로 변형 및 연결하는 작업이다.
ORM을 이용한 개발은 객체와 데이터베이스의 변형에 유연하게 사용할 수 있다.
(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;
})
개발에서 추상화라는 것은 추상화를 많이 하면 할수록 어떠한 복잡한 로직을 알지 못하더라도 그 로직을 간단하게 사용할 수 있게 해 준다. (불필요한 정보는 숨기고 중요한 정보만을 표현해서 프로그램을 간단하게 해준다.)
예를 들어서, 커피를 마시기 위해서 커피머신을 이용할 줄 알면 커피 머신이 어떻게 작동하는지 몰라도 커피를 마실 수 있는 것과 같다.
데이터베이스도 사용하는 방법에 따라 추상화가 많이 되어있는 라이브러리를 사용할수도 있고 그렇지 않은 라이브러리를 사용해서 데이터베이스를 컨트롤 할 수도 있다.
이제 추상화 정도를 3단계로 나눠서 살펴보면 다음과 같다.
데이터베이스 드라이버는 데이터베이스 연결(때때로 연결 풀링)을 처리한다. 이 수준에서는 원시 SQL 문자열을 작성하여 데이터베이스에 전달하고 데이터베이스에서 응답을 받는다.
Node.js 생태계에는 이 계층에서 작동하는 많은 라이브러리가 있다.
다음은 세 가지 인기 있는 라이브러리이다.
이러한 각 라이브러리는 기본적으로 동일한 방식으로 작동한다. 데이터베이스 인증 정보를 가져오고, 새 데이터베이스 인스턴스를 인스턴스화하고, 데이터베이스에 연결하고, 문자열 형식으로 쿼리를 보내고 결과를 비동기적으로 처리한다.
이것은 단순한 데이터베이스 드라이버 모듈과 완전한 ORM을 사용하는 것의 중간 수준이다.
이 계층에서 작동하는 가장 주목할만한 모듈은 Knex이다.
이 모듈은 몇 가지 다른 SQL 언어에 대한 쿼리를 생성할 수 있다. 이 모듈은 앞서 언급한 라이브러리 중 하나에 의존한다. — Knex와 함께 사용하려는 특정 라이브러리를 설치해야 한다.
여기서 작성하는 쿼리는 기본 SQL 쿼리와 매우 유사한다. 또한 한 가지 좋은 점은 문자열을 연결하여 SQL을 형성하는 경우(종종 보안 취약점이 발생함)보다 훨씬 더 편리한 방식으로 프로그래밍 방식으로 동적 쿼리를 생성할 수 있다는 것이다.
최고 수준의 추상화입니다. ORM으로 작업할 때 일반적으로 더 많은 설정을 사전에 수행해야 한다. ORM의 요점은 이름(object relational mapping)에서 알 수 있듯이 관계형 데이터베이스의 데이터를 애플리케이션의 객체(클래스 인스턴스)에 매핑하는 것이다.
SQL이 아닌 ORM 자체를 배우게 된다.
(각각 특정 ORM 자체를 배우는 시간도 오래걸리며 ORM 들 마다 다른 문법을 사용하는 곳도 많다.)
ORM을 이용해서 복잡한 호출을 하면 성능이 좋지 않을 수 있다.
TypeORM이란?
TypeORM은 node.js에서 실행되고 TypeScript로 작성된 객체 관계형 매퍼 라이브러리이다.
TypeORM은 MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, SAP Hana 및 WebSQL과 같은 여러 데이터베이스를 지원한다.
npm init
package.json 파일 생성한다.
프로젝트 정보와 의존성(dependencies)을 관리하는 문서이다.
패키지 설치 시 여기에 그 정보가 기록된다.(이름, 버전등)
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 정의에 도움이 된다..
root 폴더 아래 src/index.ts를 작성해준다.
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"
},
npm install pg typeorm reflect-metadata —save