inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

08-05 게시판 CRUD API

ERROR [TypeOrmModule] Unable to connect to the database

해결된 질문

2986

jay kang

작성한 질문수 10

0

 ERROR [TypeOrmModule] Unable to connect to the database이 에러가 일어났다 안일어났다가해요.

 

nestjs에서 typeorm으로 mysql에 table entity를 저장해주는 과정에서 db에 접속이 안되었다. 1. TypeOrmModul.forRoot안의 오타확인 -> 없었다 2. Entity에 이상이 있는지확인 -> 없었다 3. 구글링에서는 대부분이 오타문제이거나 데이터베이스를 생성해주지않았다는 문제라고했다 -> 데이터베이스도 켜져있었고 티미널이랑 dbeaver에서도 mysql과 접속이 되고있는것으로 확인 4. 컴퓨터가 버그로 안되는 걸로 예상해 잠시 종료했다가 실행 -> 역시안됐다 5. 비밀번호를 숫자로 입력해서 string이아닌 number형식으로 작성했는데 password는 string 타입만 작성가능하다고 오류가나왔다 - 문제해결 -> root 비밀번호를 string타입으로 변경하니까 오류가 해결되었다 -> 숫자로 입력하니 넘어오는 과정에서 숫자가 string형태로 변경되어 접속오류로 판명 -> 비밀번호는 문자열로.....

-> 이게 전날에 연결이 안되어서 해본결과였고 오늘 했을때에는 연결이되었는데 두번째 접속을 하니까 연결이 안되서

dbeaver에서랑 터미널에서 접속을 했을때는 문제가 없었습니다.

왜계속해서 이런오류가 불규칙적으로 일어나는지 모르겠습니다.

그리고 두번째 질문은 nestjs독스에서는 synchronize: true,이부분을 false로 권장하고있는데 그이유로는 데이터 손상?유실이 있을수있다고 써져있는데 수업중에는 true로되어야지 동기화가 된다고 하셔서 이부분도 설명 부탁드릴수있을까요

마지막으로 세번째 질문으로는 dbeaver에서재연결요청을 했을때 Datasource was invalidated

Live connection count: 2/2

이렇게 나오는데 이러면 mysql이 켜져있는 상태인건가요? 해당 database는 다볼수있는데 offline인데 그전에 연결이되서 볼수있는건가하는 의심이 들어서질문드렸습니다

import { ApolloDriver, ApolloDriverConfig as ad } from '@nestjs/apollo';
import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
import { BoardsModule } from './apis/boards/boards.module';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Board } from './apis/boards/entities/board.entity';

@Module({
  imports: [
    BoardsModule,
    // ProductsModule,
    // UsersModule,
    GraphQLModule.forRoot<ad>({
      // forRoot의 데이터타입지정 <> -> 제네릭 부분
      driver: ApolloDriver,
      autoSchemaFile: 'src/commons/graphql/schema.gql', // 자동으로 스키마 파일을 생성 .gql로마무리 해주기
      // 실행은 package.json이 있는 위치에선
      // graphql은 스키마 파일이 있어야 실행이 가능하다
      // 자동이든 직접 작성하든 작성해주어야한다.
    }),
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: 'localhost', // 도커할때는 네임레졸루션이 들어가야함
      port: 3306,
      username: 'root',
      password: 'root',
      database: 'myproject',
      entities: [Board], // 해당하는 테이블을 작성
      logging: true, // 어떻게 변형되어서 넘어가는지 디버깅
      synchronize: true, // entity.ts와 db를 동기화 해주는 작업
    }),
  ], // 합치는 부분
})
export class AppModule {}

javascript node.js express docker tdd rest-api nestjs

답변 1

0

노원두

안녕하세요! Daon님!

위에서 차례대로 답변을 드리도록 할게요!

  1. ERROR [TypeOrmModule] Unable to connect to the database이 에러가 일어났다 안일어났다가해요.

    => 아무래도 도커를 기반으로 실행을 하신 것 같아요! 도커 mysql 서비스가 활성화 되고 나서, nestjs가 mysql에 연결될 수 있어요!

    따라서, 어떨 때는 바로 되고, 어떨 때는 한참 있다가 되고, 어떨 때는 안되고 하는 이유는 도커 mysql이 얼마나 빠르게 활성화가 되느냐에 달려있다고 보시면 될 것 같아요!

     

  2. 그리고 두번째 질문은 nestjs독스에서는 synchronize: true,이부분을 false로 권장하고있는데 그이유로는 데이터 손상?유실이 있을수있다고 써져있는데 수업중에는 true로되어야지 동기화가 된다고 하셔서 이부분도 설명 부탁드릴수있을까요

    => 실제 서비스를 운영(production 모드라고 불러요)함에 있어서는 synchronize: false로 놓고 사용합니다.
    그러면 동기화를 어떻게 하나요? 이 부분은 최초 1회만 synchronize: true로 전체 동기화를 시키고, 이후부터는 false로 진행하게 돼요!
    (이후부터 변경되는 데이터베이스 구조에 대해서는 SQL 쿼리문을 직접 전송하여 변경합니다. 이와 관련하여서는 typeorm db migration - https://typeorm.io/migrations#creating-a-new-migration 을 참고해 주세요)

    그러면 이제, 왜 synchronize: true로 자동화하지 않고 일일이 직접 봐줘야하는가에 대해서 아주 간단한 예시만 하나 들어드릴게요!

    [예시] 
    컬럼이 3개(email, password, name) 있는 User 테이블에 10명의 데이터가 있습니다.
    여기서 name을 myname으로 바꾸고 synchronize: true 하면 어떻게 될까요?
    컴퓨터는 name이 myname으로 바뀌었는지 모릅니다.
    name을 삭제하고 myname을 새로 만들 뿐이죠.
    따라서, 10명의 name이 날라가겠죠?!

    이러한 이유에서, 실제 운영되고 있는 서비스에서는 synchronize: false로 놓고 사용합니다.

     

  3. 마지막으로 세번째 질문으로는 dbeaver에서재연결요청을 했을때 Datasource was invalidated

    Live connection count: 2/2

    이렇게 나오는데 이러면 mysql이 켜져있는 상태인건가요
    => 네 맞아요!, DBeaver에서 초록색으로 체크되어있는 연결된 데이터베이스가 2개라는 뜻입니다!
    해당 데이터베이스를 클릭하시고, 마우스오른쪽을 누르신 다음 Refresh를 눌러보세요!
    만약, 아직도 연결중이라면 정상적으로 Refresh 되어 진행이 될 것이고, 연결이 해제된 상태라면 에러가 뜨면서 종료가 될 것이랍니다!^^

1

jay kang

그러면 dokcer mysql이 아니라 dbeaver에서 연결한 mysql로 작업하고 확인하기위해서는 어떻게 하는게 좋을까요?

0

노원두

네! Daon님!

도커이든 로컬이든 상관 없이 해당 mysql이 실행되고 나서 nestjs를 켜신다던가, dbeaver 접속을 시도해 주세요!

그래프 ql 문서 사용할때 느낌표 남는거 어떻게 없애나요?

0

84

2

강의 전체 소스 코드를 받고싶습니다.

0

76

2

fontawesome 사용 문의

0

79

2

소스 코드 부탁드립니다~

0

85

2

깃 레포지터리 소스

0

87

2

커리큘럼12.css 정렬 에 나오는 과제 정답알고싶어요

0

74

2

10-01 Entity TypeOrmModule.forRoot 에 entities

0

89

3

강의 버전관련 문의입니다

0

103

2

Ubuntu 설치 관련

0

61

1

schema.gql 질문 드립니다.

0

51

1

서버 재실행시 Many to Many

0

102

3

input 관련 문의

0

90

2

Rest API 보다는 graphql이 주된 내용인데

0

131

2

강의 전체 소스코드 받을수있을까요?

0

156

1

도커볼륨 마운트 관련

0

127

2

findOne 타입스크립트오류

0

109

1

http => htrtps 호출 인증서 신뢰 오류

0

354

1

self-signed certificate in certificate chain 에러 발생

0

417

1

mongoose 설치 오류

0

142

1

특정 API, 특정 IP 허용 (단일경로에 CORS 활성화)

0

283

2

08-06

0

180

3

구조랑 패턴 관련해서 질문

0

125

2

mydocker

0

128

2

coolsms statuscode 2000 인데 전송안돼는 경우 확인.

0

156

1