TIL

23/12/23 TIL __ typeORM 연결 에러

GABOJOK 2023. 12. 23. 23:38

 

 

 

강의를 따라하던 도중 데이터 베이스 연결에서 오류가 낫다. 

오류를 해결하려고 방법을 찾아서 시도를 해보면, 또 다른 에러를 만나고, 

그 에러를 해결하기 위해 다른 방법을 찾아서 시도를 하면, 또 다른 에러를 만나고.

이렇게 돌고 돌아서 다시 처음의 에러를 만나는 .. 그런 상황이였다. 

 

결론부터 말하자면, 문제의 원인을 아주 잘못 파악하고 있었고, 

에러메세지의 원인이 아주 다양하며,

데이터베이스 설정에 문제가 없는지, 어떤 특성이 있는지 파악을 했어야만 했다는 생각이다.

 

 

 

 

ERROR 1396 (HY000): Operation CREATE USER failed for ...

 

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax

 

ERROR 1227 (42000): Access denied; you need (at least one of) the CREATE USER

 

ERROR 1227 (42000): Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation

 

 

 

현재 나는 aws rds를 사용하고 있었다는 점을 먼저 말해둔다.

일단 내가 제시하고 싶은 해결 방법은 이렇다. 

 

 

 

1. 가장 먼저. vscode의 mysql 의 상태를 확인해 보자.

만약 상태가 이상하다면? 뭔가 에러문구가 있다면?

 

rds의 인스턴스를 삭제하고, 다시 생성한후, vscode와 연결을 해준다. 

 

 

 

만약 상태가 이상 없다면? _ 

 

시퀄라이즈와, 프리즈마에서는 디비 설정할때 dbname 을 적어주면, 

알아서 적은 이름으로 테이블이 자동 생성 된다. 

그러나. 안타깝게도 typeORM에서는 자동생성 되지 않고, 새로 직접 만들어 준 뒤에 연결을 시도해야 한다. 

create database board

 

이런식으로 해당 db의 new query를 클릭해서 입력해 주면 원하는 이름으로 테이블이 생성이 된다. 

 

 

이후, typeORM 을 설정해줄때에,

mysql을 설치해서 로컬 환경에서 사용하는 경우와,

rds를 이용해서 사용하는 경우를 구분해야만 한다. 

 

여기서 아주 큰 오류가 있었다. 

 

강의에서는 로컬 환경에서 사용하고 있었고,

나의 경우 rds에서 사용하고 있었는데,

강의를 따라서 설정을 하다보니, 처음에는 이렇게 설정을 했었다. 

 

import { TypeOrmModuleOptions } from '@nestjs/typeorm';
import { User } from 'src/auth/user.entity';
import { Board } from 'src/boards/board.entity';

export const typeORMConfig: TypeOrmModuleOptions = {
  type: 'mysql',
  username: '마스터 사용자 이름',
  password: '비번',
  host: 'localhost',
  port: 데이터베이스의 포트번호,
  database: '조금전에 만든 테이블 이름',
  entities: [__dirname + '/src/migrations/*.ts'],
  synchronize: true,
  logging: true,
};

 

 

 

 

그런데, 잘못 설정을 한것이였다. 

나는 로컬 환경이 아닌 rds 환경이였기 때문에 host에 엔드포인트 주소를 넣어야만 했고,

entities에서는 전체파일이 아닌, 작업한 파일을 선택해서 넣어주어야만 했다. 

 

import { TypeOrmModuleOptions } from '@nestjs/typeorm';
import { User } from 'src/auth/user.entity';
import { Board } from 'src/boards/board.entity';

export const typeORMConfig: TypeOrmModuleOptions = {
  type: 'mysql',
  username: '마스터 사용자 이름',
  password: '비번',
  host: '데이터베이스의 엔드포인트 적기',
  port: 데이터베이스의 포트번호,
  database: '조금전에 만든 테이블 이름',
  entities: [만든 모듈들],
  synchronize: true,
  logging: true,
};

 

 

  

 

이렇게 설정하고 실행하니 드디어 되었다...

나의 헛수고들을 일일히 기록해 두었지만, 문제 해결에 딱히 의미없던 방법들이라 올리지 않는다. 

문제에 대한 이해 없이 무작정 검색하고, 제시하는 내용들을 시도하는게

오히려 독이 되었던것 같다. 

 

에러가 나오면, 무조건 검색보다, 

좀더 생각하고, 내 코드를 좀더 살펴보는 부분이 필요한 것 같다.