반응형

 

  Nest.js 에서 터널링 하는 방법을 아무리 찾아봐도 안되어서, 테스트를 위해 꼼수를 쓰기로 했다.

  어차피 로컬에서 접속할때만 필요하고, 서버에 소스 올라가면 터널링이 불필요하므로, 이 방법으로 쓰기로 했다.

 내가 터널링 해보려고 별짓을 다 했다.

 

 

내 PC -> 베스천 서버 -> 비공개 서버(Mysql 설치 서버)

(키페어 상태, 모두 3306 방화벽 오픈 상태)

 

 

우선 Nest.js 에 mysql을 사용하도록 npm으로 다운로드 한다.

 

1. 설정 파일을 셋팅하기 위해서 dotenv 를 설치한다.

npm install dotenv

 

2. mysql을 사용하기 위해서 mysql2를 설치한다.

npm install --save @nestjs/typeorm typeorm mysql2

 

 

 

3. Root 디렉토리에 [ .env ] 파일 생성

 

4. .env  파일에 아래 정보 삽입

# 운영 디비 접속 정보
# DB_HOST=DB 서버 IP
# DB_PORT=3306
# DB_USERNAME=DB ID
# DB_PASSWORD=DB PASSWORD
# DB_DATABASE=DB 스키마명

# 로컬 개발 접속 정보
DB_HOST=127.0.0.1
DB_PORT=5003
DB_USERNAME=DB ID
DB_PASSWORD=DB PASSWORD
DB_DATABASE=DB 스키마명

 

5..database.module.ts 파일을 생성한다.

 

config(); 를 수행해줘야지, .env 설정 파일을 불러 올 수 있다.

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { config } from 'dotenv';

config();

@Module({
  imports: [
    TypeOrmModule.forRootAsync({
        useFactory: () => ({
        type: 'mysql',
        host: process.env.DB_HOST,
        port: Number(process.env.DB_PORT),
        username: process.env.DB_USERNAME,
        password: process.env.DB_PASSWORD,
        database: process.env.DB_DATABASE,
        synchronize: false,
        logging: true,
        dropSchema: false,
        // entities: [ entities 추가 ],
      }),
    }),
  ],
})


export class DatabaseModule {}

 

6. app.module.ts

 

 위에서 생성한  imports에 DatabaseModule 을 추가해준다. 

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { DatabaseModule } from './database/database.module';

@Module({
  imports: [
    DatabaseModule
  ],
  controllers: [AppController],
  providers: [
    AppService
  ],
})
export class AppModule {}

 

7. 이제 프로젝트 경로에 가서

 

   npm run start:dev

 

실행하면, 아래와 같이 당연히 연결이 안된다고 나온다.

 

이제 AWS DB 서버로 접속하기 위해서 터널링을 할 차례다. (꼼수)

 

8. MobaXterm 을 설치한다.

https://mobaxterm.mobatek.net/download.html

 

MobaXterm free Xserver and tabbed SSH client for Windows

The ultimate toolbox for remote computing - includes X server, enhanced SSH client and much more!

mobaxterm.mobatek.net

 

9. 상단 메뉴에 Turnneling 버튼을 누른다.

 

 

10. 하단에 New SSH tunnel 버튼을 누른다.

 

11.

   11-1) Forwarded port : 5003

            내 PC에서 접속할 접속 Port 이다.

 

   11-2) SSH server : AWS 베스천 서버 ip

            SSH login : 베스천 서버 ID

            SSH port :  22

 

    11-3) Remote server : db가 설치된 서버 ip (비공개 서버)

             Remote port : 3306 (mysql 서버 port)

 

설정 후 하단 Save

 

 

12. 추가된 항목에 열쇠 모양을 눌러서 pem 파일을 선택해서 등록한다.

 

 

13. 이제 시작 버튼을 누른 후, 정지 버튼이 계속 활성화 되어 있으면 성공.

 

 

 

 

이제 내 PC에서 5003 Port 를 경유하여, 디비 서버에 있는 Mysql 3306 Port로 접속이 가능하게 되었다.

 

 

14. 이제 서버를 다시 시작하면 접속이 될 것이다.

 

npm run start:dev

 

반응형