This chapter applies only to TypeScript
๊ฒฝ๊ณ ์ด ๊ธฐ์ฌ์์๋ ์ปค์คํ
ํ๋ก ๋ฐ์ด๋ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ TypeORM ํจํค์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก DatabaseModule์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช
ํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ด ์๋ฃจ์
์๋ ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ ์ฉ @nestjs/typeormํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ ์๋ตํ ์ ์๋ ๋ง์ ์ค๋ฒ ํค๋๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ [์ฌ๊ธฐ] (/techniques/sql)๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
TypeORM์ node.js ์ธ๊ณ์์ ๊ฐ์ฅ ์ฑ์ํ ORM (Object Relational Mapper)์
๋๋ค. TypeScript๋ก ์์ฑ๋์์ผ๋ฏ๋ก Nest ํ๋ ์ ์ํฌ์์ ์ ์๋ํฉ๋๋ค.
Getting started
์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ชจํ์ ์์ํ๋ ค๋ฉด ํ์ํ ๋ชจ๋ ์ข
์์ฑ์ ์ค์นํด์ผํฉ๋๋ค.
$ npm install --save typeorm mysql
์ฐ๋ฆฌ๊ฐ ํด์ผํ ์ฒซ๋ฒ์งธ ๋จ๊ณ๋typeorm ํจํค์ง์์ ๊ฐ์ ธ์จ createConnection()ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๋ ๊ฒ์
๋๋ค. createConnection()ํจ์๋ Promise๋ฅผ ๋ฐํํ๋ฏ๋ก async provider๋ฅผ ๋ง๋ค์ด์ผํฉ๋๋ค.
@@filename(database.providers)
import { createConnection } from 'typeorm';
export const databaseProviders = [
{
provide: 'DATABASE_CONNECTION',
useFactory: async () => await createConnection({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: 'root',
database: 'test',
entities: [
__dirname + '/../**/*.entity{.ts,.js}',
],
synchronize: true,
}),
},
];
warning ํํธ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ฐ๋ผ * .providers.ts ์ ๋ฏธ์ฌ๊ฐ ์๋ ๋ณ๋์ ํ์ผ๋ก ์ฌ์ฉ์ ์ง์ ๊ณต๊ธ์๋ฅผ ์ ์ธํ์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ๋๋จธ์ง ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ํด ์ก์ธ์ค ๊ฐ๋ฅํ๋๋ก ์ด๋ค ๊ณต๊ธ์๋ฅผ ๋ด ๋ณด๋ด์ผํฉ๋๋ค.
์ด์ @Inject() ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ Connection ๊ฐ์ฒด๋ฅผ ์ฃผ์
ํ ์ ์์ต๋๋ค. Connection ๋น๋๊ธฐ ์ ๊ณต์์ ์์กดํ๋ ๊ฐ ํด๋์ค๋ Promise๊ฐ ํด๊ฒฐ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.
Repository pattern
TypeORM์ ๋ฆฌํฌ์งํ ๋ฆฌ ๋์์ธ ํจํด์ ์ง์ํ๋ฏ๋ก ๊ฐ ์ํฐํฐ์๋ ์์ฒด ๋ฆฌํฌ์งํ ๋ฆฌ๊ฐ ์์ต๋๋ค. ์ด ๋ฆฌํฌ์งํ ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์์ ์ป์ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ฒซ์งธ, ์ฐ๋ฆฌ๋ ์ต์ํ ํ๋์ ์ค์ฒด๊ฐ ํ์ํฉ๋๋ค. ๊ณต์ ๋ฌธ์์์ Photo ์ํฐํฐ๋ฅผ ์ฌ์ฌ์ฉ ํ ๊ฒ์
๋๋ค.
Photo ์ํฐํฐ๋ photo ๋๋ ํ ๋ฆฌ์ ์ํฉ๋๋ค. ์ด ๋๋ ํ ๋ฆฌ๋ PhotoModule์ ๋ํ๋
๋๋ค. ์ด์ ๋ฆฌํฌ์งํ ๋ฆฌ ๊ณต๊ธ์๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
warning ์๋ฆผ ์ค์ ์์ฉ ํ๋ก๊ทธ๋จ์์๋ ๋งค์ง ๋ฌธ์์ด์ ํผํด์ผํฉ๋๋ค. PHOTO_REPOSITORY์ DATABASE_CONNECTION์ ๋ถ๋ฆฌ ๋ constants.ts ํ์ผ์ ๋ณด๊ดํด์ผํฉ๋๋ค.
์ด์ @Inject() ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ Repository<Photo>๋ฅผ PhotoService์ ์ฃผ์
ํ ์ ์์ต๋๋ค :
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ ๋น๋๊ธฐ์ด์ง๋ง Nest๋ ์ต์ข
์ฌ์ฉ์๊ฐ ์ด ํ๋ก์ธ์ค๋ฅผ ์์ ํ ๋ณผ ์ ์๋๋ก ํฉ๋๋ค. PhotoRepository๋ db ์ฐ๊ฒฐ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ผ๋ฉฐ, PhotoService๋ ์ ์ฅ์๋ฅผ ์ฌ์ฉํ ์ค๋น๊ฐ ๋ ๋๊น์ง ์ง์ฐ๋ฉ๋๋ค. ๊ฐ ํด๋์ค๊ฐ ์ธ์คํด์คํ๋๋ฉด ์ ์ฒด ์์ฉ ํ๋ก๊ทธ๋จ์ ์์ํ ์ ์์ต๋๋ค.
๋ง์ง๋ง PhotoModule์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
warning ํํธ PhotoModule์ ๋ฃจํธ ApplicationModule๋ก ๊ฐ์ ธ ์ค๋ ๊ฒ์ ์์ง ๋ง์ญ์์ค.