안녕하세요! RyuWoong입니다.
정신 없던 프로젝트가 마무리가 되어가니 시간이 생기네요!
이번에는 TypeORM을 연결해보도록 하겠습니다.
가실까요?!
TypeORM?
TypeORM은 ORM 즉, 객체와 관계형 데이터베이스의 데이터를 자동으로 연결(맵핑) 해주는 라이브러리입니다.
Express와 잘 사용하던 ORM 중에 Sequlize라는 라이브러리가 있습니다만, 우리는 TypeScript를 사용하고 있고, 향후 Nest를 사용하게 되면 TypeORM과의 궁합이 더 좋기 때문에 TypeORM을 사용하도록 하겠습니다.
특히 최근에 TypeORM이 3버전으로 올라오면서, 점점 발전하고 있는 라이브러리 입니다.
TypeORM은 클래스형태로 작성하게 되는데 저는 Entity선언부는 클래스형으로, 이외에는 모두 함수형태로 작성하겠습니다.
TypeORM의 공식 문서를 보면, 패턴을 크게 두가지로 나누어 설명하고 있습니다.
ActiveRecord 패턴과 Data Mapper 패턴인데요.
소규모 간단한 프로젝트에서는 ActiveRecord 패턴을 사용하고 확장성 있고 규모가 큰 경우 Data Mapper 패턴을 사용하길 권장하고 있습니다. 간단한 토이 프로젝트에서 서버를 구축하고 싶다면 차라리 Python의 FastAPI를 사용하는게 더 좋다고 생각해서, 저는 규모가 크고 확장성을 필요로하는 경우를 고려해 Data Mapper 패턴을 사용하도록 하겠습니다.
Start!
우선 필요한 라이브러리들을 설치해주도록 하겠습니다.
mysql이 아닌 mysql2입니다! mysql로 설치시 서버를 실행할 때 오류가 발생할 수 도 있습니다.
npm install --save mysql2 typeorm reflect-metadata
TypeORM에서는 데코레이터 함수를 사용하기 때문에 tsconfig.json 에서 세개의 옵션을 설정 해줍니다.
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"strictPropertyInitialization": false
추가로, TypeORM을 사용하기 위해 index.ts 파일 상단에 아래와 같이 선언해 줍시다!
import "reflect-metadata"; //추가
import express, { Request, Response } from "express";
거의 다 됐습니다! 마지막으로 연결할 DB 정보가 담긴 DataSource라는 파일을 만들어 주면 됩니다.
src 폴더 내에 data-source.ts라는 파일을 생성하고 아래와 같이 작성해주세요.
host와 port, username,password,database를 본인의 DB에 맞게 입력해주세요.
// src/data-source.ts
import { DataSource } from "typeorm";
export const AppDataSource = new DataSource({
type: "mysql",
host: "localhost", //DB HOST
port: 3306, // DB 포트 mysql default port는 3306
username: "test", // DB 접속시 계정
password: "test", // DB 접속시 비밀번호
database: "test", // DB내 사용하는 DATABASE
synchronize: true, // 엔티티 동기화 여부, 개발 중일땐 true를 해도 상관없으나 실서버에서는 false로 하고 migration을 하거나, 직접 수정한다.
logging: true,
entities: [],
subscribers: [],
migrations: [],
});
그리고 다시 index.ts로 돌아와 아래와 같이 입력해줍니다.
// src/index.ts
import "reflect-metadata";
import express, { Request, Response } from "express";
import { AppDataSource } from "./data-source";
const app = express();
const port = 4040;
app.get("/", (req: Request, res: Response) =>
res.status(200).send("Hello, RyuWoong?")
);
AppDataSource.initialize().then(() => console.log("☘️ DB Connection")); // 추가
app.listen(port, () => {
console.log(`server on ${port}`);
});
이후 npm start를 입력해서 잘 실행 된다면 TypeORM 연결이 성공적으로 끝났습니다.
다음은 TypeORM의 기본적인 설계 및 사용방법을 알아보겠습니다.
'Back-End > Express.js' 카테고리의 다른 글
[Express] TypeORM 다뤄보기 .03 (0) | 2022.10.09 |
---|---|
[Express] 서버 구성하기 .01 (0) | 2022.09.13 |
[Express] 시작하기 전에 .00 (0) | 2022.09.11 |
삽질의 기록과 일상을 남기는 블로그입니다. 주로 React Native를 다룹니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!