Connection

๊ผด์ฅ๋งˆ์Šคํƒ€ยท2021๋…„ 7์›” 30์ผ
0

TypeORM

๋ชฉ๋ก ๋ณด๊ธฐ
1/5
post-thumbnail

[ Working with Connection ]

๐Ÿข What is connection

  • ์•ฑ๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์€ connection์„ ์„ค์ •ํ•œ ํ›„์—๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.
  • typeORM์˜ connection์€ connection pool์„ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉ.
  • query runner๋Š” ๋ณ„๋„์˜ connection์„ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•œ๋‹ค.
  • connection pool ์ƒ์„ฑ์€ ์„ค์ •(DB์ ‘์†์— ๊ด€ํ•œ ์„ค์ •)์ด ์™„๋ฃŒ๋˜๋ฉด ์ž๋™ ํ˜ธ์ถœ๋œ๋‹ค.
  • createConnectionํ•จ์ˆ˜ ์‚ฌ์šฉ์‹œ ์ž๋™์œผ๋กœ, ์„ค์ •ํ•œ connection์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • disconnection์— ํ•ด๋‹นํ•˜๋Š” ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์‹œ connection ์†Œ๋ฉธํ•œ๋‹ค.
  • connection์˜ ์†Œ๋ฉธ์€ ๋ฐ˜๋“œ์‹œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์—ฐ๋™ ์ž‘์—…์ด ์ข…๋ฃŒ ๋œ ์ดํ›„์—ฌ์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ ์›น์„œ๋น„์Šค๋Š” ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๊ฐ€ ํ•ญ์ƒ ์‹คํ–‰์ค‘์ด๋ฏ€๋กœ connection์ด ํ•ญ์ƒ ๊ตฌ๋™๋˜๋Š” ํ˜•ํƒœ์—ฌ์•ผํ•œ๋‹ค.

๐Ÿฆ• Createing a new Connection

TypeORM๊ณผ DB ์—ฐ๊ฒฐ์—๋Š” ๋ช‡๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.
๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ createConnection / createConnections ์˜ ์‚ฌ์šฉ์ด๋‹ค.

1๏ธโƒฃ createConnection : ๋‹จ์ผ connection ์ƒ์„ฑ

import {createConnection, Connection} from "typeorm";

const connection = await createConnection({
    type: "mysql",
    host: "localhost",
    port: 3306,
    username: "test",
    password: "test",
    database: "test"
});

โ—๏ธ ๋‹จ์ผ url์†์„ฑ๊ณผ DB ํƒ€์ž…์œผ๋กœ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ

createConnection({
    type: 'mysql',
    url: 'mysql://root:1234@localhost/HongDB'
})

2๏ธโƒฃ createConnections : ์—ฌ๋Ÿฌ๊ฐœ์˜ connection์ƒ์„ฑ
โ—๏ธ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

import {createConnections, Connection} from "typeorm";

const connections = await createConnections([{
    name: "default",
    type: "mysql",
    host: "localhost",
    port: 3306,
    username: "test",
    password: "test",
    database: "test"
}, {
    name: "test2-connection",
    type: "mysql",
    host: "localhost",
    port: 3306,
    username: "test",
    password: "test",
    database: "test2"
}]);

3๏ธโƒฃ ์œ„์™€ ๊ฐ™์€ ๋ฐฉ์‹์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ DB์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ์ •์˜ํ•˜๊ณ  createConnection()๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DB์™€ ์—ฐ๋™ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— ormconfig.json ํŒŒ์ผ์— ์œ„์™€๊ฐ™์€ ์ •๋ณด๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์ž๋™์œผ๋กœ DB์™€์˜ ์—ฐ๋™์ด ์‹คํ–‰๋œ๋‹ค.

// ormconfig.json
import {createConnection, createConnections, Connection} from "typeorm";

- const connection: Connection = await createConnection();

- const secondConnection: Connection = await createConnection("test2-connection");

- const connections: Connection[] = await createConnections();
  • connection์„ ์ƒ์„ฑ ํ›„ getconnection ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ์–ด๋””์„œ๋“  ์—ฐ๊ฒฐ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
// main.js
import {getConnection} from "typeorm";

const connection = getConnection();

const secondConnection = getConnection("test2-connection");

๐Ÿฆ‘ Using ConnectionManager

DB์™€์˜ ์—ฐ๊ฒฐ์ด ๋˜๋Š” ์‹œ์ ์„ ์ œ์–ดํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด ๋”ฐ๋กœ ์—ฐ๊ฒฐ์— ๊ด€ํ•œ ํด๋ž˜์Šค๋‚˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค.
์ด ๊ธฐ๋Šฅ์€ ์ด๋ฏธ typeorm์— ๋‚ด์žฅ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„์ด๋‹ค.
ํ•˜์ง€๋งŒ ๋งŒ์•ฝ ์‚ฌ์šฉ์‹œ ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•œ๋‹ค.
์ด ๋ฐฉ๋ฒ• ์‚ฌ์šฉ์‹œ getConnection() ์‚ฌ์šฉ๋ถˆ๊ฐ€.
ํด๋ž˜์Šค ์ƒ์„ฑํ›„ connectionManager.get ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ๋Œ

// ex) connectionManager.js

import {getConnectionManager, ConnectionManager, Connection} from "typeorm";

const connectionManager = getConnectionManager();
const connection = connectionManager.create({
    type: "mysql",
    host: "localhost",
    port: 3306,
    username: "root",
    password: "1234",
    database: "HongDB",
});
await connection.connect(); // performs connection

๐Ÿฆฅ Working with Connection

Connection์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋“ค์„ ์กฐ์ž‘(CRUD)ํ•˜๋Š” ํ–‰์œ„๋ฅผ ๋งํ•œ๋‹ค.
Typeorm์€ ์ƒ์„ฑํ•œ Connection์ •๋ณด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผ, ๋ณดํ†ต ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฉ”์†Œ๋“œ๋“ค์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•œ๋‹ค.

1๏ธโƒฃ getManager()๋ฉ”์†Œ๋“œ(= Entity Manager()๋ฉ”์†Œ๋“œ)
getManager(Entity Manager)๋ฅผ ํ†ตํ•ด Entity๋ฅผ ์ œ์–ด(CRUD)ํ•  ์ˆ˜ ์žˆ๋‹ค.

import {getManager, getRepository} from "typeorm";
import {User} from "../entity/User";

export class UserController {

    @Get("/users")
    getAll() {
        return getManager().find(User);
    }
}

๋˜๋Š”

import {getManager} from "typeorm";
import {User} from "./entity/User";

const entityManager = getManager(); // getManager()๋ฅผ entityManager๋กœ ์ทจ๊ธ‰
const user = await entityManager.findOne(User, 1); // ๋ณ€์ˆ˜ user์— id๊ฐ’1์ธ ํ–‰์˜ ์ •๋ณด ์ž…๋ ฅ
user.name = "Umed"; // ์ •๋ณด ๋ณ€๊ฒฝ
await entityManager.save(user); // ๋ณ€๊ฒฝ๋œ ์ •๋ณด๋ฅผ ์ €์žฅ

2๏ธโƒฃ getRepository()๋ฉ”์†Œ๋“œ
getManager()๋ฉ”์†Œ๋“œ์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ํŠน์ • Entity๋ฅผ ํ•œ์ •ํ•˜์—ฌ ์ž‘์—…์„ ์ œํ•œํ•œ๋‹ค.

import {getManager, getRepository} from "typeorm";
import {User} from "../entity/User";

export class UserController {

    @Get("/users/:id")
    getAll(@Param("id") userId: number) {
        return getRepository(User).findOne(userId);
    }

}

๋˜๋Š”

import {getRepository} from "typeorm";
import {User} from "./entity/User";

const userRepository = getRepository(User); // ์ž‘์—…ํ•  ํŠน์ • Entity ์ง€์ •
const user = await userRepository.findOne(1); // ๋ณ€์ˆ˜user์— id๊ฐ’1์ธ ํ–‰์˜ ์ •๋ณด ์ €์žฅ
user.name = "Umed"; // ์ •๋ณด ๋ณ€๊ฒฝ
await userRepository.save(user); // ๋ณ€๊ฒฝ๋œ ์ •๋ณด ์ €์žฅ

โ—๏ธ getManager()๋ฉ”์†Œ๋“œ์™€ getRepository()๋ฉ”์†Œ๋“œ์˜ ์ฐจ์ด์ 
getManager()๋ฉ”์†Œ๋“œ๋Š” ๋ชจ๋“  Entity๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
๋ฐ˜๋ฉด, getRepository()๋ฉ”์†Œ๋“œ๋Š” ๋‹จ์ผ Entity๋งŒ์„ ์ง€์ •ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•œ๋‹ค.

// getManager()๋ฉ”์†Œ๋“œ
const manager = getManager();
const user = manager.create(User);

// getRepository()๋ฉ”์†Œ๋“œ
const repository = connection.getRepository(User);
const user = repository.create();

๋˜ ๋‹ค๋ฅธ ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด์ž

// getManager()๋ฉ”์†Œ๋“œ
const manager = getManager();
manager.find(User);

// getRepository()๋ฉ”์†Œ๋“œ
getRepository(User).find();

3๏ธโƒฃ getConnection()๋ฉ”์†Œ๋“œ
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๋ฉด, getConnection๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ ์–ด๋””์„œ๋“  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
ํ•ด๋‹น ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ๋“ค์„ ์ œ์–ด(CRUD)ํ•œ๋‹ค.

// user.js
import {getConnection} from "typeorm";
import {User} from "../entity/User";

export class UserController {

    @Get("/users")
    getAll() {
        return getConnection().manager.find(User);
    }

}

getConnection()๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Entity๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด(๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘)์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ์‹์„ ์š”๊ตฌํ•œ๋‹ค.

  • Find Options: getRepository()์™€ EntityManager()๋Š” query builder๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฟผ๋ฆฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธ์ ์ธ find๊ธฐ๋Šฅ์ด ์ œ๊ณต๋œ๋‹ค.
  • query builder: ํ•ด๋‹น ๊ธฐ๋Šฅ์€ sql๋ฌธ์„ ๋Œ€์ฒดํ•˜์—ฌ entity๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
const firstUser = await connection
    .getRepository(User)
    .createQueryBuilder("user")
    .where("user.id = :id", { id: 1 })
    .getOne();

[ Using ormconfig.json ]

๐Ÿฃ Creating a new connection from the configuration file

  • ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ DB ์—ฐ๊ฒฐ ์˜ต์…˜์€ ๊ด€๋ฆฌ์˜ ํŽธ๋ฆฌ๋กœ ์ธํ•ด ๋ณ„๋„๋กœ ํŒŒ์ผ์— ์ €์žฅํ•œ๋‹ค.
  • typeorm์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ DB์—ฐ๊ฒฐ ์„ค์ • ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
  • ormconfig.jsonํŒŒ์ผ์„ ์ž‘์„ฑํ•˜์—ฌ package.json ํŒŒ์ผ๊ณผ ๋™์ผํ•œ ๊ณณ์— ์œ„์น˜์‹œํ‚ค๋ฉด ๋ณ„๋„์˜ 'ํŒŒ์ผ์„ ์ฝ์–ด์˜ค๋Š” ์„ค์ •'๊ฐ™์€ ๊ตฌ์„ฑ์„ ์š”๊ตฌํ•˜์ง€ ์•Š๊ณ  createConnection์„ ํ†ตํ•ด DB์™€์˜ Connection์„ ์‹คํ–‰ํ•œ๋‹ค.
  • ormconfig.json๊ณผ ๊ฐ™์ด ์œ ์„ค์ • ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ํŒŒ์ผ์€ ๋‹ค์–‘ํ•œ ํŒŒ์ผ ํ˜•์‹์„ ์ง€์›ํ•œ๋‹ค.
  • ormconfigํŒŒ์ผ์— ํฌํ•จ๋  Database์—ฐ๊ฒฐ ์˜ต์…˜ ์ •๋ณด๋Š” ์•„๋ž˜๋ฅผ ์ฐธ๊ณ ํ•˜์ž
    <๊ณต์‹ํ™‰ํŽ˜์ด์ง€: ormconfig์— ํฌํ•จ๋  ์˜ต์…˜๊ฐ’๋“ค ์ฐธ๊ณ >
    .json, .js, .ts, .env, .yml .xml.
import {createConnection} from "typeorm";

const connection = await createConnection();

๐Ÿฆ† Using ormconfig.json

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ jsonํ˜•์‹์œผ๋กœ ์ƒ์„ฑํ•  ๊ฒฝ์šฐ ์•„๋ž˜์™€๊ฐ™์ด ์ž‘์„ฑํ•œ๋‹ค.
  • ํ•ด๋‹น ํŒŒ์ผ์€ ๋ฐ˜๋“œ์‹œ ํ”„๋กœ์ ํŠธ ๋‚ด์˜ package.json๊ณผ ๋™์ผํ•œ ์œ„์น˜๋ฅผ ์š”๊ตฌํ•œ๋‹ค.
  • ์•„๋ž˜ ์˜ˆ์‹œ์—์„œ ์ถ”๊ฐ€๋กœ ๋‹ค๋ฅธ ์˜ต์…˜๋“ค์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

1๏ธโƒฃ ๊ธฐ๋ณธ ์ž‘์„ฑ๋ฒ• (๋‹จ์ผ connection)

{
   "type": "mysql",
   "host": "localhost",
   "port": 3306,
   "username": "test",
   "password": "test",
   "database": "test"
}

2๏ธโƒฃ ๊ธฐ๋ณธ ์ž‘์„ฑ๋ฒ• (๋‹ค์ค‘ connections)

[{
   "name": "default",
   "type": "mysql",
   "host": "localhost",
   "port": 3306,
   "username": "test",
   "password": "test",
   "database": "test"
}, {
   "name": "second-connection",
   "type": "mysql",
   "host": "localhost",
   "port": 3306,
   "username": "test",
   "password": "test",
   "database": "test"
}]

๐Ÿฉ Using ormconfig.js

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ jsํ˜•์‹์œผ๋กœ ์ƒ์„ฑํ•  ๊ฒฝ์šฐ ์•„๋ž˜์™€๊ฐ™์ด ์ž‘์„ฑํ•œ๋‹ค.
  • ํ•ด๋‹น ํŒŒ์ผ์€ ๋ฐ˜๋“œ์‹œ ํ”„๋กœ์ ํŠธ ๋‚ด์˜ package.json๊ณผ ๋™์ผํ•œ ์œ„์น˜๋ฅผ ์š”๊ตฌํ•œ๋‹ค.
  • ์•„๋ž˜ ์˜ˆ์‹œ์—์„œ ์ถ”๊ฐ€๋กœ ๋‹ค๋ฅธ ์˜ต์…˜๋“ค์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
module.exports = {
   "type": "mysql",
   "host": "localhost",
   "port": 3306,
   "username": "test",
   "password": "test",
   "database": "test"
}

์ง€์› ํ™˜๊ฒฝ์ด ๊ฐ–์ถฐ์งˆ ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด ECMAScript moduleํ˜•์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

export default {
   "type": "mysql",
   "host": "localhost",
   "port": 3306,
   "username": "test",
   "password": "test",
   "database": "test"
}

๐Ÿช‚ Using environment variables

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ormconfig.env๋ฐฉ์‹์œผ๋กœ ์ƒ์„ฑํ•  ๊ฒฝ์šฐ ์•„๋ž˜์™€๊ฐ™์ด ์ž‘์„ฑํ•œ๋‹ค.
  • ํ•ด๋‹น ํŒŒ์ผ์€ ๋ฐ˜๋“œ์‹œ ํ”„๋กœ์ ํŠธ ๋‚ด์˜ package.json๊ณผ ๋™์ผํ•œ ์œ„์น˜๋ฅผ ์š”๊ตฌํ•œ๋‹ค.
TYPEORM_CONNECTION = mysql
TYPEORM_HOST = localhost
TYPEORM_USERNAME = root
TYPEORM_PASSWORD = admin
TYPEORM_DATABASE = test
TYPEORM_PORT = 3000
TYPEORM_SYNCHRONIZE = true
TYPEORM_LOGGING = true
TYPEORM_ENTITIES = entity/*.js,modules/**/entity/*.js

์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ Typeorm์˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋ชฉ๋ก์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

TYPEORM_CACHE
TYPEORM_CACHE_ALWAYS_ENABLED
TYPEORM_CACHE_DURATION
TYPEORM_CACHE_OPTIONS
TYPEORM_CONNECTION
TYPEORM_DATABASE
TYPEORM_DEBUG
TYPEORM_DRIVER_EXTRA
TYPEORM_DROP_SCHEMA
TYPEORM_ENTITIES
TYPEORM_ENTITIES_DIR
TYPEORM_ENTITY_PREFIX
TYPEORM_HOST
TYPEORM_LOGGER
TYPEORM_LOGGING
TYPEORM_MAX_QUERY_EXECUTION_TIME
TYPEORM_MIGRATIONS
TYPEORM_MIGRATIONS_DIR
TYPEORM_MIGRATIONS_RUN
TYPEORM_MIGRATIONS_TABLE_NAME
TYPEORM_PASSWORD
TYPEORM_PORT
TYPEORM_SCHEMA
TYPEORM_SID
TYPEORM_SUBSCRIBERS
TYPEORM_SUBSCRIBERS_DIR
TYPEORM_SYNCHRONIZE
TYPEORM_URL
TYPEORM_USERNAME
TYPEORM_UUID_EXTENSION

๐Ÿคผ Overriding options defined in ormconfig

๋กœ์ง์— ๋”ฐ๋ผ ormconfigํŒŒ์ผ์„ ์žฌ์ •์˜ ํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.
์ƒํ™ฉ์— ๋งž์ถ”์–ด DB์—ฐ๊ฒฐ ์„ค์ • ์ •๋ณด๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

const connectionOptions = await getConnectionOptions();

Object.assign(connectionOptions, { namingStrategy: new MyNamingStrategy() });

const connection = await createConnection(connectionOptions);

[Connection APIs]

connection์— ๊ด€๋ จ๋œ ์ฆ‰, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜๋Š” ํ–‰์œ„์— ๊ด€๋ จ๋œ Typeorm์—์„œ ์ œ๊ณตํ•˜๋Š” API๋“ค์— ๋Œ€ํ•˜์—ฌ ์•Œ์•„๋ณด์ž.

  • ๊ธฐ๋ณธ์ ์œผ๋กœ DB์—ฐ๊ฒฐ์„ ๊ตฌํ˜„ํ•˜๋Š” API
  • DB์— ์ ‘๊ทผํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์–ดํ•˜๋Š” API
    ๋“ฑ๋“ฑ์ด ์ œ๊ณต๋œ๋‹ค.

๐ŸŽน Main APIs

๐Ÿ‰‘ createConnection()

  • connection์„ ์ƒ์„ฑํ•œ๋‹ค.
  • ์—ฐ๊ฒฐ ์˜ต์…˜ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์ƒ๋žต๋œ ๊ฒฝ์šฐ ormconfigํŒŒ์ผ ๋˜๋Š” env์—์„œ ์—ฐ๊ฒฐ ์˜ต์…˜์„ ์ฝ์–ด์˜จ๋‹ค.
import {createConnection} from "typeorm";

const connection = await createConnection({
    type: "mysql",
    host: "localhost",
    port: 3306,
    username: "test",
    password: "test",
    database: "test"
});

๐Ÿ‰‘ getConnection()

  • createConnection()๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑํ•œ connection๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
import {getConnection} from "typeorm";

const connection = getConnection();

๐Ÿ‰‘ getRepository()
Connection๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ํŠน์ • Entity๋ฅผ ๊ฐ€์ ธ์™€ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.

import {getRepository} from "typeorm";

const userRepository = getRepository(User);

const blogRepository = getRepository(Blog, "secondary-connection"); // ์–ด๋–ค Connection(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค)์—์„œ ๊ฐ€์ ธ์˜ฌ์ง€ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. 

Connection APIs

๐Ÿ‰‘

profile
๋ฐฑ์—”๋“œ ์—”์ง€๋‹ˆ์–ด ๊ผด์ฅ์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€