ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

์›น์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค๋ฉด์„œ ๊ฐ€์žฅ ๋งŽ์ด ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒƒ์ค‘์— ํ•˜๋‚˜๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™์ธ๋ฐ, 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๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์˜ต์…˜ ์„ค์ •์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

default ๊ฐ’์œผ๋กœ false๋กœ ์„ค์ •๋˜์–ด์žˆ๋Š”๊ฑธ true๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

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 ๋ชจ๋“ˆ์˜ ๊ณ„์ •์ •๋ณด๋ฅผ ์ด๋ ‡๊ฒŒ ํ•˜๋“œ์ฝ”๋”ฉ์œผ๋กœ ์“ฐ๊ฒŒ๋˜๋ฉด ๋‚˜์ค‘์— ๊ด€๋ฆฌํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์›Œ์ง€๊ณ ,
๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์ปค๋„ฅ์…˜ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•ด์•ผํ•˜๊ธฐ๋•Œ๋ฌธ์— ์•ฝ๊ฐ„ ๋‹ค๋“ฌ์–ด์•ผํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š”๋ฐ, ๊ทธ๊ฑด ์ดํ›„์˜ ๊ณผ์ •์—์„œ ํฌ์ŠคํŒ… ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2024/11   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
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
๊ธ€ ๋ณด๊ด€ํ•จ