티스토리 뷰

Backend/꾸준히 TIL

[TIL-2] NestJS + AWS RDS 시작하기

개발하는 후딘 2022. 10. 26. 16:36
728x90
반응형

왜 AWS RDS 를 쓰게 됐는지?

다른 팀원이 내 로컬에 있는 mysql 을 이용해서

외부에 있는 유저가 데이터베이스를 같이 사용할 수 있도록 하고 싶었다.

구글링으로 한시간 가량 서칭하다가 시간이 소요되고 팀원들이 기다리게 되어 결국은 성공하지 못했다.

즉, 공통의 데이터베이스를 사용하지 못하고, 따로 각자 로컬호스트에 있는 mysql을 사용하게 된 것이다.

 

구글링을 시도는 해봤고 따라했고 확인을 받았지만, 블로그에 있는 그대로 시도하지 못했다.

MySQL 외부 접속 & 접근 허용하기 참고 블로그

- https://solbel.tistory.com/663

 

mysql 외부 접속 및 허용 제거 (경로 참고)

http://blog.servis.co.kr/index.php/2019/06/28/mysql-not-allowed-to-connect/ mysql 외부접속 허용및 제거 웹서버와 디비서버를 분리할경우 외부에서 mysql에 접속하려면 외부접속 권한이 필요하다 일반적으로..

grooveshark.tistory.com

 

MySQL 외부 접근 허용하기 - 스마일서브 IDCHOWTO닷컴

ODBC등 외부에서 MySQL에 접속을 하려면, MySQL 접속이 허용되어있어야 합니다. 1. 테이블 살펴보기먼저, mysql에 들어가서 다음 방법을 이용해 접근 상태를 확인합니다.mysql> use mysql;mysql> select host, user

idchowto.com

 

MySQL 접속 명령어

1.데이터 베이스 접속하기 mysql -u 사용자명 -p 데이터베이스이름 mysql -u root (계정과 비번을 만들지 않았을때) mysql -u root -p(루트 비번이 있을때) 2.데이터베이스 추가 mysqladmin -u root -p create 데..

vkein.tistory.com

 

(1) grant

cli로 mysql로 연결해서 사용했고 명령어로 모든 외부에서 접근할 수 있도록 권한을 설정해봤다.

$ mysql> grant all privileges on *.* to 'root'@'%' identified by 'root의 패스워드'

 

발생에러메시지

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 to use near 'mysql> grant all privileges on *.* to 'root'@'%' identified by '비밀번호'' at line 1

 

 

(2) 어지저찌하다가... root를 추가했지만 결과는 똑같았다.

 

물론 나도 시간에 쫓겨서 재빠르게 못했지만, 외부사람들이 내 mysql에 접속 성공 했더라도

내 mysql과 연결하는데 걸리는 시간이 1초이상 걸릴 것이다.

아무래도 내컴퓨터가 종료되면 데이터베이스가 필요한 다른 팀원들은 사용하지 못할 것이다.

또한 아무래도 보안상 좋지 않을 것 같다는 우려가 들었다.

그래서 한번 큰맘먹고... 클라우드 RDS 를 도전해보기로 했다.

 

다른 팀원들은 열심히 과제중이긴한데...

팀원들 보는 앞에서 제대로 요구사항을 맞춰주지 못하고, 안절부절 불안해하는

1년차 주니어개발자인 내가 너무 부끄럽고 창피하다... 

 

그리고 현재 나는 NestJS에 익숙하지 않기때문에... 좀더 학습이 필요한 거같아서

몸도 안좋기도하고, 생각이 잘 떠오르지 않았다. 다른 팀원들보다 먼저 퇴근을 했다.. 

우리 멋있는 팀원들 너무 미안해요.. 부족해서 조금 하루만 이빠이 해볼게요!


AWS RDS 가 뭐지?

AWS RDS(Relational Database Service)는 클라우드에서 간단하게 데이터베이스를 설치 & 운영할 수 있는 확장할 수 있는 관리형 서비스 이다. 아마존 서비스 프리티어를 이용해보기로 했다. RDS는 12개월 동안 사용할 수 있다.


AWS RDS 인스턴스를 만들어보자!

- 참조블로그

 

[AWS] Amazon RDS 시작하기 및 MySQL 워크벤치 연결하기

Amazon RDS 시작하기 및 MySQL 워크벤치 연결하기 Amazon RDS는 Relational Database Services의 약자로, 클라우드에서 관계형 데이터베이스를 더욱 간편하게 설정, 운영 및 확장할 수 있는 서비스입니다...

scshim.tistory.com

 

난 MySQL로 했다. 위에 친절한 블로그를 그대로 따라해봤다.. ㅎㅎ

템플릿은 당연히 '프리티어' 로 했다. 마스터 아이디와 비밀번호 까먹지말자~ 웬만하면 기록해서 잘보이는 곳에 두자... ㅎㅎ

 

스토리지는 최소값으로 했다. 그리고 혹시나 몰라서 자동조절 활성화를 했다.

 

 

 

데이터베이스 포트는 3306 으로 하는게 좋다.

왜냐하면 mysql workbench와 같은 프로그램에서 연결해서 조회할 때 3306 포트를 기본으로 하기때문이다.

(mysql 기본포트가 3306이기도하다.)

 

아래 암호인증은 기본값으로 했고 나머지도 그냥 그대로 두고 데이터베이스를 생성했다.

인스턴스가 생성하기까지 시간이 걸린다!


MySQL Workbench에 연결시켜보자

새로운 커넥션을 생성합니다.

 

 

aws 대시보드에서 생성된 rds 인스턴스 정보를 클릭하면 다음과 같은 창이 나옵니다.

 

(1) 엔드포인트 주소 복사하기

"엔드포인트 주소입니다." 핑크색 테두리 박스가 인스턴스 엔드포인트 입니다. 이 주소를 복사합니다.

그리고 인바운드규칙은 0.0.0.0/0 을 기본으로 설정 되어있습니다.

 


(2) 인바운드 규칙 편집하기 

더보기

mysql workbench에서 접근이 가능하게 만들기 위해서 인바운드 규칙을 편집해야됩니다.

 

1단계: 유형이 CIDR/IP - Outbound 인 보안그룹 링크를 클릭해주세요.

* (1) 단계의 '연결 & 보안' 바로 밑에 '보안그룹 규칙' 이 있습니다.

 

 

2단계: 보안그룹에 있는 해당 보안그룹 아이디를 클릭합니다.

 

3단계: '규칙 추가' 하여, '유형'과 '소스'를 선택후 규칙을 저장합니다.

유형: 'MYSQL/Aurora'

소스:  'Anyware IPv4' - '0.0.0.0/0' 


(3) MySQL 워크밴치에 연결 (Test Connection)

 

hostname 영역에는 '엔드포인트 주소'를 복사하면 된다.

port는 aws rds 인스턴스에서 설정한 포트값으로 하면된다.  Username도 인스턴스 계정이름을 했다. 나는 admin으로 했다. 

 


NestJS 프로젝트와 RDS 를 연결시켜보자.

  • framework: NestJS
  • database: AWS RDS(MySQL)
  • orm: type-orm

 

1. vscode 터미널에서 NestJS 프로젝트 세팅

$ nest i -g @nestjs/cli

$ nest new project-name

'project-name' 디렉토리 안에 있는 파일들을 모두 루트디렉토리로 이동.

 

2. package.json에 mysql 추가

$ npm i mysql --save

 

3. configModule 설치

$ npm i --save @nestjs/config

 

4. TypeORM 모듈 설치

$ npm i typeorm @nestjs/typeorm mysql2

 

5. app.module.ts 의 @Module영역의 imports 에 추가하기.

// app.module.ts

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { UsersModule } from './users/users.module';

@Module({
  imports: [
    ConfigModule.forRoot({
      // 다른모듈에서 imports에 등록안해도 constructor(config: ConfigService){} 으로 가져다 쓸 수 있도록 한다.
      isGlobal: true,
      envFilePath: process.env.NODE_ENV,
    }),
    TypeOrmModule.forRootAsync({
      imports: [ConfigModule],

      /*
      userFactory는 객체를 재정의할 인스턴스를 제공하기 위해 인스터화될 클래스들을 제공.
      동적으로 Provider를 생성. 인수를 받고 함수로 값을 만든느 것 또한 가능하다.
      async/await 를 사용하여 database연결등 비동기 작업에 대한 DI가 가능.
      */
      useFactory: async (configService: ConfigService) => {
        return {
          type: 'mysql',
          host: configService.get('DB_HOST'),
          port: configService.get<number>('DB_PORT'),
          username: configService.get('DB_USERNAME'),
          password: configService.get('DB_PASSWORD'),
          database: configService.get('DB_NAME'),
          entities: [],
          migrations: [__dirname + '/src/**/*.entity{.ts,.js}'],
          synchronize: true,
          autoLoadEntities: true,
          logging: true,
          keepConnectionAlive: true,
        };
      },
      inject: [ConfigService],
    }),
    UsersModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

 

.env파일에는 연결된 데이터베이스 정보를 불러옵니다.

// .env

DB_HOST=aws-rds엔드포인트주소
DB_PORT=3306
DB_USERNAME=aws-rds에 등록된 계정
DB_PASSWORD=aws-rds에 등록된 패스워드
DB_NAME=데이터베이스이름

 

 

 

[AWS] RDS

AWS 클라우드에서 관계형 데이터베이스를 쉽게 설치 및 운영, 확장할 수 있는 웹 서비스관리 용이확장성, 비용, 보안 등 손쉽게 제어 가능Amazon AuroraPostgreSQLMySQLMariaDBORACLEMicro SQL Server표준 생성 설

velog.io

 

 

SSH(RDS) + Nestjs(TypeORM)

📌 SSH tunnel 라이브러리를 통한 RDS + Typeorm(NestJS) 연결 방법ssh tunnel 라이브러리를 통해 RDS와 TypeORM(Nestjs)를 연결해보고자 한다.구글링 했을 때 참조할 만한 레퍼런스가 많이 부족했고,기존 방법들

velog.io

 

728x90
반응형

'Backend > 꾸준히 TIL' 카테고리의 다른 글

[AWS RDS & TypeORM] 에러해결하기 & 코드리뷰  (0) 2022.10.29
Git Rebase  (0) 2022.10.28
[typeorm] typeorm  (0) 2022.10.25
[mysql] CLI 명령어로 mysql connection 부르기  (0) 2022.10.15
SSL  (0) 2022.10.15
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함