DB, ORM/🧊 typeORM
Typescript 기반 Node에서 typeORM 세팅 및 DB 연결 (pg, mysql)
DarrenKwonDev
2020. 10. 20. 00:52
설치
yarn add typeorm
config
우선 세팅 전 mysql이나 postgresql 등 사용할 관계형 데이터 베이스를 로컬 환경에서 제대로 세팅해두자.
필자는 postgresql을 사용했다. (darrengwon.tistory.com/726)
우선 pg 패키지를 설치하자. pg 문서 읽어보면 나오겠지만 node환경에서 postgresql을 사용하기 위한 패키지이다.
npm install pg --save
yarn add pg
mysql을 사용하고 싶다면 mysql을 받으면 된다.
yarn add mysql2
코드를 작성하는 최상단 경로에 config를 구성해보자. username과 password 부분은 직접 콘솔에서 접속해보고 맞는 지 체크하자.
import { ConnectionOptions } from "typeorm"
const connectionOptions: ConnectionOptions = {
type: "postgres",
host: process.env.DB_ENDPOINT || "localhost",
port: 5432,
username: process.env.DB_USERNAME || "root",
password: process.env.DB_PASSWORD || "",
database: "uber",
synchronize: true,
logging: true,
entities: [
"./entities/**/*.*"
]
}
export default connectionOptions
// https://github.com/typeorm/typeorm의 ormconfig.json 구성 부분을 참고할 것
// connection option은 공식문서 https://typeorm.io/#/connection-options 에서 확인 가능
이제 앱이 실행되는 부분에 typeorm의 createConnection 메서드를 통해 DB와 연결하자. 먼저 앱이 실행되고 DB가 연결되는 것을 막기 위해 DB와 연결된 후 앱이 실행되도록 동기적으로 처리하였다.
import path from "path";
import dotenv from "dotenv";
dotenv.config({path: path.resolve(__dirname, "../.env")}) // import 위치 주의
import { Options } from "graphql-yoga";
import { createConnection } from "typeorm"
import connectionOptions from "./ormConfig";
import app from "./app";
const PORT: number | string | undefined = process.env.PORT;
const PLAYGROUND_ENDPOINT: string = "/playground";
const GRAPHQL_ENDPOINT: string = "/graphql"
const appOptions: Options = {
port: PORT,
playground: PLAYGROUND_ENDPOINT,
endpoint: GRAPHQL_ENDPOINT
}
const handleAppStart = () => console.log(`Server On: http://localhost:${PORT}`)
createConnection(connectionOptions).then(() => {
console.log("DB Connetion Success")
app.start(appOptions, handleAppStart)
}).catch((error) => {
console.log(error)
})
앱을 실행하자 DB가 연결되어 쿼리가 날아가는 모습을 볼 수 있다.
이러한 쿼리를 볼 수 있는 이유는 옵션 설정에서 loggin을 켜줬기 때문이다. 개발단계에서는 켜두도록하자.
query: START TRANSACTION
query: SELECT * FROM "information_schema"."tables" WHERE "table_schema" = current_schema() AND "table_name" = 'typeorm_metadata'
query: COMMIT
Server On: http://localhost:5000