SMAIVNN
article thumbnail

9월 서비스를 목표로 하는 프로젝트를 시작하게 되었습니다.

새로운 서비스를 만들어보는건 항상 설레는 일이긴합니다.

 

그런데 막상 프로젝트를 시작하면 머리가 지끈지끈 합니다. 프로젝트의 구조를 설계하는 셋업 단계에서 특히 더더욱 그런것 같습니다 ㅠㅠ

 

구조 설계 단계가 끝났고 이제 1차 스프린트를 시작하기에 앞서.. 시작하기도 전에 했던 여러가지 고민들과 결론에 대해서 말해보고자 합니다.

 

무슨 데이터베이스를 선택할까?

이번 프로젝트에서는 데이터베이스 선택부터 너무 힘들었습니다.

저는 주로 도큐먼트db인 MongoDB를 써왔고, 이번 프로젝트에서는 RDB를 써볼까하는 생각을 하였습니다.

혼자 하는 프로젝트이기도 하고 공부도 할 겸 TypeORM + PostgreSQL을 사용할 계획이였습니다.

 

하지만, 막상 하나 딱 선택하자니 성능적인 측면에서 여러가지 고민이 생겼는데요.

프로젝트 기획 이후, 저는 조회 연산이 다른 연산에 비해 특히 많을 것으로 예상했습니다.

https://r-craft.org/sql-vs-nosql-for-data-science/

 

알다시피 RDB는 주로 정형화된 데이터이며 수정이 잦은 데이터에 강하다고 알려져있습니다. 또한 join 연산이 생각보다 복잡해지고 성능이슈가 발생할 수 있죠. 개발 초기, 데이터 구조 자체가 자주 변경될 여지가 있기 때문에 바로 선택하기 망설여졌습니다.

 

반면 MongoDB의 경우 데이터 구조가 자유롭고 조회 연산에 특히 강점을 보입니다. 또한 기획하는 서비스와도 잘 어울리며 개발 초기 단계에서 실제로 진행해보며 구조 잡기도 편합니다. 무엇보다 프로젝트 기한이 정해져 있는 지금, 저에게 익숙합니다.

 

그냥 두서 없이 생각하다보니 선택이 너무 힘들어 여러가지 조건을 생각해보기 시작했습니다.

데이터베이스 분리?

처음에는 그럼 인증, 유저, 결제 등에 대해서 RDB를 사용하고 그 외 부분에서 NoSQL을 사용할까 고민하였습니다.

 

그런데 이렇게 할 경우 여러개의 데이터베이스를 다루는 것에 대한 관리 문제가 컷습니다.

ORM을 사용한다고 하지만 데이터 정합성 문제 등도 발생할 수 있겠죠..

또한 추후 결제를 진행할 때 결제 이후 혹시 진행될 다른 로직에 대한 트랜잭션 문제도 고민이 되었습니다.

 

그럼 CQRS 패턴과 클린 아키텍처를 도입할까?라는 고민으로 이어지게 됩니다.

이들을 통해 다른 데이터베이스를 쉽게 적용할 수 있도록 할까?와 같이 생각이 이어지게 됩니다.

 

현실적인 문제

구조와 아키텍처에 대해서 깊게 생각해보고 이왕하는거 다 적용해보는거 좋지..라고 생각할 때쯤 현실적인 부분에 대해 생각하게 되었습니다.

 

- 일단 9월까지라는 정해진 기간이 있고 그동안 학습할게 많다.

- 익숙하지 않은 rdb를 다시 공부하면서 nextjs를 통한 프론트 작업을 진행해야한다.

 

이미 익숙하지 않은 것을 많이 시도해봐야 하는 시점에서, 관리 리소스를 크게 가져가지 말자고 판단하였습니다.

프로젝트 코드 자체는 추후에 리팩토링, 마이그레이션 하면 되고 처음에는 스프린트 기간에 집중하여 기간안에 프로젝트를 해결하는 것이 우선이 되어야 한다고 생각했습니다.

 

결론적으로

저는 TypeORM + PostgreSQL을 선택하였습니다. 

 

이제 프로젝트가 본격적으로 시작되었습니다.ㅠㅠ 다음에는 스프린트 게시글로 돌아오겠습니다.

profile

SMAIVNN

@SMAIVNN

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!