해결된 질문
작성
·
322
답변 5
10
안녕하세요. Dev.Kim 님!
먼저 저희 강좌에서는 기본 데이터베이스를 MongoDB를 사용하고 있습니다. 초보자 입장에서 백엔드에 입문할 때 MongoDB가 더 쉽다고 판단이 되어 MongoDB 위주로 설명했습니다.
(여기서 MongoDB가 더 쉽다는 의미는 MongoDB 문법이 자바스크립트 문법과 매우 유사해서 데이터베이스에 입문하시기에는 상대적으로 MongoDB가 쉽다는 것입니다. SQL을 사용하려면 강좌에서 설명해드린 것 처럼 따로 SQL 언어를 익혀야 합니다. SQL과 NoSQL은 프로젝트 성격에 맞게 선택합니다. MySql과 MongoDB를 예로 들면, 데이터가 테이블 형식에 담기는 것이 유리한지, 도큐먼트 형식에 담기는 것이 프로젝트 데이터 구조에 유리한지를 고려하여 선택합니다.)
TypeORM은 일반적으로 RDBMS(MySQL 등)의 ORM입니다. (TypeORM에서도 MongoDB를 지원합니다. 만일, 하나의 앱에서 SQL과 MongoDB를 같이 사용한다면 코드의 일관성을 위해 MongoDB의 ODM을 TypeORM으로 선택하거나 다른 이유로 TypeORM을 선택하는 사례도 있습니다.)
따라서 TypeORM 대신에 MongoDB의 대표적인 ODM인 Mongoose를 사용했습니다. 만일 저희 프로젝트에서 데이터베이스를 MySQL로 사용했다면 TypeORM을 사용했을 것입니다.
강좌에서 다루는 MongoDB + Mongoose 패턴에서 MySQL + TypeORM을 그대로 바꾸어 적용하면 사용할 수 있습니다! (NestJS 패턴은 동일하지만 데이터베이스가 다르므로 세부 문법은 달라집니다.)
실무에서의 NestJS와 DB, ORM 조합은 프로젝트 성격에 따라 다르게 선택합니다. 상대적으로 많이 선택하는 조합은 아래와 같습니다. (하나의 예시이고 정말 다양하게 조합을 할 수 있습니다. )
1. MySQL을 사용하는 백엔드 Rest API 프로젝트 조합 예시
NestJS + MySQL + TypeORM
2. MongoDB를 사용하는 백엔드 Rest API 프로젝트 조합 예시
NestJS + MongoDB + Mongoose
3. PostgreSQL를 사용하는 백엔드 GraphQL 기반 프로젝트 조합 예시
(참고로 RDBMS에서는 MySQL 뿐만 아니라 PostgreSQL, MariaDB 등 여러가지가 있습니다.)
NestJS + PostgreSQL + Prisma + Apollo
저희 강좌는 수많은 조합중에 "1. 많이 쓰이고", "2. 응용이 쉽고", "3. NestJS의 구조와 패턴을 배우는 데에 초점을 맞출 수 있는" 조합인 2번을 선택했습니다. 1번 조합도 실무에서 많이 쓰입니다. 3번 조합은 GraphQL 프로젝트에서 PostgreSQL을 기반으로 한다면 선택할 수 있는 조합입니다.
결국 어떤 DB를 선택하느냐에 따라 TypeORM을 선택할 수도 있고 Mongoose를 선택할 수도 있습니다. TypeORM나 Mongoose 외에도 Sequelize, Prisma 등 다양한 ORM 도구가 있습니다.
참고로 저는 실무에서 2번 조합을 기반으로 사용하고 있습니다.
추가적으로, NestJS에서 Mongoose 대신에 TypeORM을 연결하는 보너스 강의도 고려해보겠습니다.
감사합니다. :)
1
1
안녕하세요. 강의 잘 듣고 있습니다.
강의를 듣다보니 비슷한 질문이 있어 요청 드립니다.
답변 내용중에,
1. MySQL을 사용하는 백엔드 Rest API 프로젝트 조합 예시
NestJS + MySQL + TypeORM
저는 MySQL 위주로 사용해서 이 조합의 예시 코드도 몹시 궁금합니다.
시간상 강의가 어려우시면 1번 항목에 대한 예시 코드라도 부탁드립니다.
감사합니다.
1
하나의 어플리케이션에서
MongoDB,MySQL 모두 사용하는 경우가 많이 있을까요?
가령 사용자정보는 RDBMS로, 특정 로그성 대용량 데이터들은 NOSQL로 적재하여 사용하고자 합니다.
이때 위에서1번 2번 조합으로 사용한다고 가정했을때, 문제가 될만한 요소가 있을지도 궁금합니다.
말씀하신 것처럼 유저 데이터를 관계형 DB에 저장하고 비정형 데이터(예를 들어 날씨 데이터라고 하겠습니다.)를 따로 MongoDB에 적재하는 경우를 예로 들면, MySQL을 TypeORM이나 Sequelize ORM으로 사용하고 MongoDB를 Mongoose로 사용할 수 있습니다. 이 경우 네스트에서 쉽게 설계가 가능합니다.
네스트는 모듈 단위로 설계가 용의하기 때문에 App Module에 Mongoose, TypeORM 셋업을 하고 Weather Module에는 Mongoose Module을 import 해서 사용하고 User Module에는 TypeORM Module을 import해서 사용하시면 됩니다. 따라서 문제될만한 요소는 없습니다.
아래의 코드는 예시입니다. :)
이렇게 TypeORM 또한 Mongoose 를 사용하는 패턴과 유사하게 사용하고 네스트에서는 모듈간 책임을 확실하게 나누어 개발이 편리합니다.
TypeORM 관련 문서 링크 참고하시면 좋을 것 같습니다.
추가적으로 궁금하신 거 있으시면 편하게 말해주세요.
감사합니다 :)
1
안녕하세요. qiulong Xin 님!
지금 오픈 진행중인 "NestJS 프로젝트 2"가 완료되면 MySQL + TypeORM 기반의 미니 프로젝트를 제작하겠습니다.
감사합니다.