docs: 백엔드 기술 선택 => NestJS, TypeORM, MySQL
투두리스트 토이 프로젝트의 Backend 지원을 위한 api를 제작
합니다.
강의 예제가 아니라, 스스로 nestJS로 서버를 만드는 것은 처음이기 때문에 막히는 점이 많습니다.
일요일(11월 13일) 작업에서 고민했던 내용입니다.
왜 TypeORM, MySQL인지?
최근에 혼자 작업한 토이프로젝트에는 편의성을 위해 서버리스인 Firebase의 Firestore를 주로 사용했고,
작년까지는 종종 mongoDB를 사용했습니다.
MySQL은 퍼블리싱 작업을 할 때나, 웹개발을 처음 접했을 때 쇼핑몰들을 만들었던 때에 사용했었습니다.
JQuery에서 React로 넘어와 프론트엔드 개발을 시작한 이후에는, RDS로 작업한 적이 없습니다.
워낙 화면을 그리는 일을 좋아하기 때문에, 100% 백엔드 api 구현은 첫 작업입니다.
이번 nestJS에 사용할 데이터베이스를 선택할 때, TypeORM, Sequelize, Mongoose를 놓고 고민했습니다.
세 가지를 선택한 기준은 백엔드 개발자 분들이 TypeORM, Sequelize를 사용하는 걸 본 적이 있고,
저한테 Mongoose가 익숙하기 때문이었습니다.
NestJS는 도전하는 새로운 스택이기 때문에 익숙한 작업 형태(mongoose)보다는 TypeORM, Sequelize에 눈을 돌리게 되었습니다.
그리고 이전 백엔드를 공부하던 동료들이 TypeORM을 처음 배우고, Sequelize를 나중에 도입하던 모습을 봤었기 때문에
TypeORM이 더 단순할 것이라 생각했고, typescript 지원이 더 잘 되어있다고 알고 있어서 TypeORM을 먼저 사용하려 합니다.
TypeORM의 경우, 주로 SQL 데이터베이스를 대상으로 하고 있어서 NoSQL 기능 지원이 완벽하지 않다고 알고 있어 RDS를 선택했습니다. 또한 백엔드 api를 일정 기간 지원하기 위한 용도의 AWS 계정을 새로 만들었고, RDS 엔진을 선택하는 데 Aurora와 MySQL 선택에 대해 고민하게 되었습니다.
AWS에서 장점으로 내세우는 고가용성이 지금 프로젝트들에 중요하지 않을 것이고, MySQL이 범용적이고, 유연하다고 생각하여 MySQL로 작업했습니다.
MySQL로 작업할 지, 또는 다른 RDS를 사용할 지 고민이 되었기 때문에, main
브랜치에서 chore
브랜치로 이동했습니다.
결론
생각보다 DB 선택에 있어 고민을 오래 하게 되었는데, 이번 작업을 통해 다음 목표를 이뤄보려 합니다.
1) SQL을 복습하고 심화하기
- javascript 쇼핑몰 페이지들은 무조건 테이블 1개로 작업했었기 때문에, 이번
todos
와 tasks
의 관계를 구현하면서 좋은 RDS, 정규화 맛보기가 될 것이라 생각합니다.
2) 테스트에 익숙해지기
- react 컴포넌트보다 REST api가 테스트에 더 용이하다고 생각됩니다. 테스트에 익숙해지고, 테스트 하기 쉬운 코드에 대해 감을 잡아보려 합니다.
- 유닛 테스트와 e2e 테스트를 진행하면서, 좀 더 안정성 있는 서비스를 만드는 습관을 들일 수 있을 것이라 생각합니다.
3) 백엔드 이해하기
- 직접 스웨거 문서를 만들고, api를 짜면서 겪은 경험을 통해서 (1)앞으로 문제 상황이 발생했을 때 원인 파악에 도움이 되고 (2)스스로 해결할 수 있는 범위가 넓어질 것이라고 생각합니다.
- NestJS의 config이나 데코레이터 기능 알기
app.useGlobalPipes(new ValidationPipe({
whitelist: true,
forbidNonWhitelisted: true, // 가비지한 값 아예 거름
transform: true // Param 받아서 넘겨줄 때 타입 맞게 transfrom
}))
4) AWS랑 친해지기 (AWS를 통해서 RDS, Docker 사용하기)
- 서버리스에 편함에 익숙해지면서, AWS에 대한 필요성을 느끼지 못했던 기간이 있습니다.
- 컨퍼런스나 온라인 세션을 통해 AWS에서 제공하는 서비스를 통해 간단히 구현할 수 있는 사례도 알게되었고, 또한 웹개발에 대한 시야를 넓히기 위해서 AWS와 좀 더 친해지려 노력 중입니다.
일요일 공부 끝!