반응형
config를 인식하지 못하는 문제
- 우선, typeorm을 간단히 소개하자면 현재 내가 사용하는 DB 툴(mysql)에서 스키마를 만들고, 진행하는 프로젝트로 연결을 하기 위해서 사용하기 위한 툴이다. (그 반대 작업도 가능하게 해 줌!)
- 나는 mysql을 사용하였고, typeorm-model-generator를 사용해서 내가 사용할 DB의 스키마들을 nest에서 작성한 뒤, 그 테이블(스키마)들을 mysql로 옮겨주는 작업을 시도했다.
- 이 작업에서 typeorm과 연결하기 위해 필요한 ormconfig.ts라는 파일을 다음과 같이 만들어주었는데
import { TypeOrmModuleOptions } from '@nestjs/typeorm';
import * as dotenv from 'dotenv';
import { ChannelChats } from './src/entities/ChannelChats';
import { ChannelMembers } from './src/entities/ChannelMembers';
import { Channels } from './src/entities/Channels';
import { DMs } from './src/entities/DMs';
import { Mentions } from './src/entities/Mentions';
import { Users } from './src/entities/Users';
import { WorkspaceMembers } from './src/entities/WorkspaceMembers';
import { Workspaces } from './src/entities/Workspaces';
dotenv.config();
const config: TypeOrmModuleOptions = {
type: 'mysql',
host: 'localhost',
port: 3306,
username: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_DATABASE,
entities: [
ChannelChats,
ChannelMembers,
Channels,
DMs,
Mentions,
Users,
WorkspaceMembers,
Workspaces,
],
migrations: [__dirname + '/src/migrations/*.ts'],
cli: { migrationsDir: 'src/migrations' },
autoLoadEntities: true,
charset: 'utf8mb4',
synchronize: false,
logging: true,
keepConnectionAlive: true,
};
export = config;
- 이 파일은 어떤 옵션들을 넣어서 어떻게 DB를 생성할지 그리고.(dot) env와 함께 DB명, DB 비밀번호 등등의 속성을 끌어다가 사용할 수 있도록 하는 일종의 typeorm의 환경 설정 파일이다.
- 이 파일을 만들어주고, app.modules.ts 에서 다음과 같이 forRoot() 속성 안에 ormconfig.ts 파일을 연결(import)을 해주었다.
import * as ormconfig from './ormconfig';
- 그런데 이 녀석이 인식이 안되어서 config를 찾을 수 없다는 오류를 내뱉었다...
- 이때 당시에 뭘 어떻게 해야 할지를 몰라서 임시방편으로다가 ormconfig 파일을 사용하지 않고,
이런 식으로 대체를 했더니 어찌어찌 해결이 되긴 해서 테이블이 쭉 만들어졌었다!
- 하지만... 만들어진 테이블 안에 임시 데이터를 넣기 위해서 seeding을 사용하려는데
마찬가지로 config가 없다는 오류를 내뱉었다 ㅠ
stack overflow 구글링 결과?!
https://stackoverflow.com/questions/52187328/how-to-specify-ormconfig-ts-for-typeorm
- 폭풍 구글링으로 찾아낸 원인?
- 그러니까 위의 stackoverflow를 읽어보면, typeorm은 ormconfig.json 파일을 읽고, ormconfig.ts 파일은
읽지 못하는? 그런 게 있다고 한다.
- 그러니까 위의 stackoverflow를 읽어보면, typeorm은 ormconfig.json 파일을 읽고, ormconfig.ts 파일은
그래서 ts 파일을 제대로 읽게 하려면 package.json의 script 부분을 수정을 해주어야 한다고 한다!
- 나 같은 경우는 아래와 같이 typeorm 명령어를 추가해 주었고..
(package스크립트 추가 사진 첨부)
- 어떻게든 ormconfig.ts를 인식시켜야 한다는 것에 초점을 두었다.
- 그러고 나서 dotenv 파일도 프로젝트 전역에서 접근하여 읽을 수 있도록 바꿔주었다! (thanks to 무루뭉!)
-
// 변경 전 import dotenv from 'dotenv'; // 변경 후 import * as dotenv from 'dotenv';
- 변경 후 , npm run seed:run 명령어 실행! 그러니 오류가 바뀐 것을 알 수 있었다!!!!
드디어.. ormconfig.ts 파일이 제대로 읽히고 있다는 것을 알게 되었다!
그래서 이전에 임시방편(ormconfig.ts를 이용하지 않는 방법)으로 만들었던 테이블들을 drop 시키고,
다시 한번 제대로 확인해보기 위해서 synchronize : true로 설정한 뒤, 서버를 실행시키니
적용이 되어 정상적으로 만든 테이블들이 mysql로 생성되는 모습이다!
그리고 위에서 본 Channels라는 모듈이 없다는 에러는 아래와 같이 경로를 수정해서 해결!
명령어를 통해서 테이블에 임시 데이터 생성!
> npm run seed:run
config 인식 문제 해결 후 또 다른 문제..?
- 근데.. 난 분명"일반"이라는 채널을 만들었는데 깨져있는 모습이다..?
또 해결해야 할 게 늘었구나..ㅎㅎ
아무튼 이번 포스팅에서는 거진 2일이 걸려서 해결한 문제였다..
그래도 해결하여 mysql에 생성된 테이블과, 칼럼 데이터를 보니 편-안 했다!
[ typeorm-model-generator 공식 문서 참조 ]
https://www.npmjs.com/package/typeorm-model-generator
반응형
'🌈 프로그래밍 > 삽질' 카테고리의 다른 글
안드로이드 로컬 앱을 빌드하는 과정 (2) | 2024.11.17 |
---|---|
zsh: command not found: mysql (0) | 2023.01.10 |
[ postgres ] DataTypeNotSupportedError: Data type "Object" in "~" is not supported by "postgres" database. (0) | 2021.12.02 |
[ typeORM ] SyntaxError: Cannot use import statement outside a module (1) | 2021.12.02 |
[ 9/7 삽질 기록 ] MySQL 한글 깨짐?! (0) | 2021.09.07 |