[React-NodeJs-MySQL 프로젝트 세팅(restAPI+GraphQL)] (7) server: DB환경 세팅- RDS 생성 및 연결,ORM(Sequelize) 세팅 및 테스트

2021. 3. 10. 17:17개인 프로젝트/기본 프로젝트 환경 세팅

필요한 서버, 클라이언트 환경 구축과 통신, api에 대한 기본적인 테스트까지 모두 끝났다.

이제DB를 세팅하여 실제 DB에 접근해보고, 다음장에서 최종 테스트를 해보겠다.

 

1) DB 생성

 

DB는 MySQL을 사용할것이다.

MySQL은 AWS의 RDS를 사용한다.

public 접근을 모두 허용해주어야 한다.

DB정보 중 엔드포인트, 포트, 사용자, 비밀번호 네가지를 기억하자.

모두 서버에서 연결할 때 config로 사용할 정보들이다.

 

graphQL은 추후에 MongoDB를 이용할까 하는데, 이번 세팅에서는 restAPI만 DB에 연결해보겠다.

MongoDB는 MongoDB대로 Mongoose를 사용하여 연결하면 된다.

 

 

2) Sequelize 설치 및 세팅

 

DB 스키마를 서버에서 관리하기 위해서는 model이 필요하다.

그리고 이는 ORM으로 관리하는데, nodeJS에서는 sequelize가 많이 쓰인다.

sequelize설치 후 sequelize init을 해주면 DB접근에 필요한 폴더 및 파일들이 생성된다.

기본 세팅을 위해서는 model의 index파일, 그리고 config파일이 필요하다.

 

config에 DB정보들을 입력해준다.

AWS RDS에서 기억하라고 했던 정보들을 .env에 입력해주면된다.

이때 dialect은 DB의 종류를 말하고, host는 endpoint를 뜻한다.

 

DB접근은 model의 index파일에서 만들어진 sequelize 객체를 통해 진행된다.

sequelize init을 하면 기본으로 만들어지는 코드이긴한데, 우리가 필요한 대로 바꿀 필요가 있다.

db라는 객체를 만들어 sequelize객체를 담아준다.

sequelize 객체에는 스키마 이름이 추가로 들어간다.

 

여기서 주목할 부분은 db.모델 부분이다.

예시코드에서는 test를 불러오는데, 이는 같은 models 폴더내에 test라는 테이블을 정의해두었기 때문이다.

실제 테이블 정의 방법은 아래에서 이어서 설명하겠다.

무튼 이렇게 정의한 테이블을 모두 index파일로 불러와야한다.

 

이렇게 export된 sequelize를 server.ts에서 sync 시켜주면 DB에 접근한다.

 

서버를 재시작하면 알아서 정의된 모델들을 db에 만들어준다.

(혹시 자동생성되지 않으면 workbench로 확인해보고 해당 이름을 가진 테이블만 만들어주자)

 

이렇게 sequelize로 DB에 접근하면, sequelize에서 제공하는 메소드를 통해 쿼리를 작성할 수 있다.

 

 

3) model 정의

 

model정의는 즉 실제 DB 테이블을 정의하는 것이다.

나중에 tyepscript를 적용하려면... 좀 더 복잡하지겠지만

test라는 테이블만 간단히 만들었다.

각 컬럼을 필요한대로 정의해주면 된다.

테이블간의 관계는 index.ts에 정의해준다.(이 부분은 나중에 sequelize를 이용한 RDB 설계 포스팅에 상세하게 설명하겠다)

 

이렇게 정의한 모델은 필요한 API로직에 import하여 사용한다.