ํฐ์คํ ๋ฆฌ ๋ทฐ
NestJS๋ก ํ๋ก์ ํธ ๋ง๋ค์ด๋ณด๊ธฐ - 3 (DB์ฐ๋)
๋๋์ด๋ฐ๐พ 2023. 2. 16. 23:33์น์ดํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค๋ฉด์ ๊ฐ์ฅ ๋ง์ด ํ์๋ก ํ๋ ๊ฒ์ค์ ํ๋๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋์ธ๋ฐ, Nest.js์์๋ ๊ณต์์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ํด๋ผ์ด์ธํธ ๋ชจ๋์ ์ ๊ณตํด์ฃผ๊ณ , Typescript์ ORM์ธ TYPE ORM์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด์ ํ๋ก์ ํธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๋์์ผ๋ณด๊ฒ ์ต๋๋ค.
์ผ๋จ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํ์ํ ํ ๋ฐ, ๋ณดํต ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ณ๋์ ์๋ฒ๋ ํน์ ํด๋ผ์ฐ๋์์ ์ ๊ณตํ๋ ์๋น์ค๋ฅผ ์๊ฒฉ์ผ๋ก ๋ถ์ด์ ์ฌ์ฉํ๋๊ฒ ์ผ๋ฐ์ ์ด๋, ๊ฐ๋จํ๊ฒ ํ ์คํธํ๋ ์ฉ๋์ด๋๋งํผ DB๋ ๋์ปค๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ๊ฒ ๋์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. (๋์ปค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์น๋์๋ค๋ ๊ฐ์ ํ๊ฒ ์งํํ๊ฒ ์ต๋๋ค.)
1. MYSQL image ๋ค์ด๋ฐ๊ธฐ
$ docker pull mysql
๋ฒ์ ์ ๋ฐ๋ก๊ธฐ์ ํ์ง ์๊ณ image๋ฅผ ๋ค์ด๋ฐ์ผ๋ฉด ์ต์ ๋ฒ์ ์ ๊ธฐ์ค์ผ๋ก mysql ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ฐ๊ฒ ๋ฉ๋๋ค.
2. Container ์คํ
$ docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=root -d -p 3306:3306 mysql
์์์ ๋ค์ด๋ฐ์ ์ด๋ฏธ์ง๋ฅผ ์คํํ๋๋ฐ, ๋ช๊ฐ์ง ์ต์ ๋ค์ด ํ์ํฉ๋๋ค.
- --name : ์ปจํ ์ด๋ ์ด๋ฆ
- -e MYSQL_ROOT_PASSWORD : ํจ์ค์๋ ์ค์
- -d : ๋ฐฑ๊ทธ๋ผ์ด๋(๋ฐ๋ชฌ)์ผ๋ก ์คํ
- -p : ํฌํธ๋ฐ์ธ๋ฉ
๋์ปค์คํ์ด ์ ๋๋ก ๋๋ค๋ฉด, docker ps ๋ช ๋ น์ด๋ก ์คํ์ด ๋๋์ง ํ์ธํ ์ ์์ต๋๋ค.
3. Mysql ์ ์ ํ ์คํธ
์ปจํ ์ด๋๊ฐ ์ ๋๋ก ๋ณ๋ค๋ฉด DBMS๋ก ์ ์์ด ๊ฐ๋ฅํฉ๋๋ค. ์ ๋ DBeaver ๋ผ๋ DBMS ํด๋ก ์ฌ์ฉํ์์ต๋๋ค.
์ฐธ๊ณ ๋ก MYSQL8 ๋ฒ์ ์ดํ๋ถํฐ ๋ฐ๋ก ์ ์ํ๋ คํ์ ๋ ์๋์ ์๋ฌ๊ฐ ํ๋ ๋ฐ์ํ์ต๋๋ค.
Public Key Retrieval is not allowed
allowPublicKeyRetrieval=true ์ต์ ๊ฐ์ ์ค์ ํ์ฌ ํด๊ฒฐํ์ต๋๋ค.
MySql ๊ณต์์ฌ์ดํธ์์ MITM ๊ณต๊ฒฉ์ ๋ฐฉ์ดํ๊ธฐ ์ํด ํด๋น ๋ํดํธ ์ต์ ๊ฐ์ false๋ก ์ค์ ํ๋ค๋ผ๋ ์ค๋ช ์ ํฉ๋๋ค.
DBeaver๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฐ์ ํ์๋ ์๋์ ๊ฐ์ด ์ต์ ์ค์ ์ ํ ์ ์์ต๋๋ค.
4. Database ์์ฑ
DDL ๋ฌธ์ผ๋ก๋ Database๋ฅผ ๋ง๋ค์ด๋๋๊ณ , ์๋๋ฉด DBMS์ UI๋ก ๊ฐ๋จํ๊ฒ ๋ง๋ค ์๋ ์์ต๋๋ค.
ํ๋ก์ ํธ์ ์ฌ์ฉํ Database ์ด๋ฆ์ store๋ผ๊ณ ์ง๋๋ก ํ๊ฒ ์ต๋๋ค.
5. Nestjs ํ๋ก์ ํธ์์ DB ์ฐ๊ฒฐ (์ถ์ฒ: https://docs.nestjs.com/techniques/database)
Nest.js ๊ณต์ ๋ฌธ์์ ๋ณด๋ฉด ์ฌ๋ฌ๊ฐ์ง ORM ์ฐ๊ฒฐ์ ๊ณต์์ ์ผ๋ก ์ง์ํ๊ณ ์์ต๋๋ค. ๊ทธ์ค์์ TypeORM์ ์ฌ์ฉํ๋ คํฉ๋๋ค.
์ผ๋จ Mysql์ ์ ์ํ๊ธฐ์ํ ๋ชจ๋๋ค์ ์ค์นํ๋๋ก ํ๊ฒ์ต๋๋ค.
$ npm install --save @nestjs/typeorm typeorm mysql2
ํจํค์ง ์ค์น ํ์ DB ์ ์์ ๋ชจ๋ํํ ์ฝ๋๋ฅผ ์์ฑํ๊ณ , ํด๋น ๋ชจ๋์ ๋ฃจํธ๋ชจ๋์ importํ๋ ์ฝ๋์ ๋๋ค.
src/common/db.module.ts
import { Module } from '@nestjs/common';
import {TypeOrmModule} from '@nestjs/typeorm';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: 'admin1234',
database: 'store',
entities: [],
synchronize: true,
}),
],
providers: [],
exports: [],
})
export class DatabaseModule {}
๋ฃจํธ๋ชจ๋์ ์์ ์์ฑํ DatabaseModule์ import ํฉ๋๋ค.
src/app.module.ts
import { Module } from '@nestjs/common';
import {TypeOrmModule} from '@nestjs/typeorm';
import { DatabaseModule } from '@Common/db.module';
@Module({
imports: [
DatabaseModule,
TypeOrmModule.forFeature([]),
]
})
export class AppModule {}
forFeature์์ entity๋ฅผ ๋ฃ์ผ๋ผ๊ณ ๋์ด์์ง๋ง Database.module.ts ํ์ผ์์ entity ์ ๊ฒฝ๋ก๋ฅผ ์ถํ์ ๋ค์ ์ก์์ค๊ฑฐ๊ธฐ ๋๋ฌธ์ ์ด๋ฒ์ ์ผ๋จ ์ฐ๊ฒฐ๋ง ํ๋ค๋ ์๊ฐ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ผ์ import ํ ๋ ์ ๋๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ๊ธฐ์ํด tsconfig.json ํ์ผ์ path ์ค์ ์ ์ถ๊ฐํด์ค๋๋ค.
{
"compilerOptions": {
...
"paths": {
"@Common/*": ["./src/common/*"]
}
}
}
์ด๋ ๊ฒ ์์ฑ์ ๋๋ธํ npm run start:dev ํน์ yarn start:dev (์ ๋ yarn์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์์ฑํ์ต๋๋ค) ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์คํ์ํต๋๋ค.
์ ๊ฐ ์์ค์์๋ ์ง์๋์ ๋ช๋ช ๋ชจ๋๋ค์ด ์์ด์ OrderModule ๊ฐ์๊ฑด ์๋ง ์๋์ฌํ ๋ฐ, ์ค์ํ๊ฑด ์๋ฌ๊ฐ ์๋๋ค๋ ๊ฒ๊ณผ TypeOrmCoreModule, DatabaseModule ์ dependencies initialized๊ฐ ์ ์์ ์ผ๋ก ๋๋ฉด ์ฑ๊ณตํ๊ฒ๋๋ค.
DB ๋ชจ๋์ ๊ณ์ ์ ๋ณด๋ฅผ ์ด๋ ๊ฒ ํ๋์ฝ๋ฉ์ผ๋ก ์ฐ๊ฒ๋๋ฉด ๋์ค์ ๊ด๋ฆฌํ๊ธฐ๊ฐ ์ด๋ ค์์ง๊ณ ,
๊ฐ๋ฐ ํ๊ฒฝ์ ๋ฐ๋ผ ์ปค๋ฅ์
์ ๋ณด๋ฅผ ๊ด๋ฆฌํด์ผํ๊ธฐ๋๋ฌธ์ ์ฝ๊ฐ ๋ค๋ฌ์ด์ผํ ํ์๊ฐ ์๋๋ฐ, ๊ทธ๊ฑด ์ดํ์ ๊ณผ์ ์์ ํฌ์คํ
ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
'Node.js > Nest.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
NestJS๋ก ํ๋ก์ ํธ ๋ง๋ค์ด๋ณด๊ธฐ - 4 (configuration ์ ์ฉ) (0) | 2023.02.22 |
---|---|
NestJS๋ก ํ๋ก์ ํธ ๋ง๋ค์ด๋ณด๊ธฐ - 2 (๋๋ ํ ๋ฆฌ๊ตฌ์ฑ) (0) | 2023.02.14 |
NestJS๋ก ํ๋ก์ ํธ ๋ง๋ค์ด๋ณด๊ธฐ - 1 (nestjs/cli) (0) | 2023.02.10 |
- Total
- Today
- Yesterday
- ๋น๋๊ธฐ ์์ฒญ
- Spring Async
- Spring
- sequelize
- backend-framework
- nestjs/cli
- node.js
- @nestjs/config
- android
- DeferredResult
- ๊ธฐ์์ฒญAPI
- JavaScript
- nestjs project
- typeorm
- nestjs configService
- ํ๋ก๊ทธ๋๋จธ์ค
- nestjs module
- Request_Limit_Exceeded
- nestjs directory
- node.js backend
- foreignkey
- docker mysql
- ์๊ณ ๋ฆฌ์ฆ
- typeorm ์ฐ๊ฒฐ
- Promise error
- Promise bulk
- nestjs typeorm
- NestJS
- nestjs config
- nestjs doc
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |