프로젝트에 사용할 DB 정하기
동글에 사용할 DB에 대해 고민 중이다.
아직 마크다운 에디터 기능까지 고려하고 있진 않지만, CMS 특성상 글을 직접 편집할 수 있는 기능이 언젠가는 들어갈 예정이다.
그렇기에 확장성까지 고려하여 DB를 고려 중이고 그 과정을 적어보려고 한다.
RDB VS NoSQL(Document)
가장 크게 고려해야하는 분류는 관계형 DB와 비관계형 DB인 것 같다.
깊게 들어가기엔 내용이 너무 많아질 것 같기 때문에 대표적인 특징과 동글 서비스 기능과 맞는지 판단해보려고 한다.
NoSQL은 아래와 같은 특징이 있다.
- 낮은 지연 시간
- 높은 가용성
- 유연한 스키마 데이터 모델
- 느슨한 ACID
- 수평 확장 가능
- 객체 기반 API
RDB의 특징은 아래와 같다.
- 데이터 무결성 보장
- ACID 규정 준수
그리고 이 둘을 고려하는데 있어서 PACELC 이론을 참고하였고, 아래와 같은 결론이 내려졌다.
- 일단 한국 유저를 타겟으로 하고 있기 때문에 여러 데이터 센터에 걸쳐서 구축할 가능성이 적다.
- 그렇다면 Latency와 Consistency를 고려해야하는데, 우리 서비스는 사용자가 업로드한 글이 중요한 데이터고 이 데이터를 통해 비지니스 로직들을 수행할 것이기 때문에 일관성이 무엇보다 중요하다.
따라서 RDB를 사용할 것이다.
RDB 중 PostgreSQL vs MySQL
RDB 중 PostgreSQL과 MySQL을 많이 사용하는데, 이 두 가지에 대해서 어떤 DB가 더 우리 서비스에 잘 맞는지 알아보려고 한다.
MySQL 특징
- 순수 관계형 데이터베이스
- 기본 데이터 유형 지원
- InnoDB, NDB 클러스터 스토리지 엔진에서 ACID 준수
- 높은 빈도의 읽기 작업 성능 좋음
- 초보자가 사용하기 좋음
- 단일 프로세스
PostgreSQL
- 객체 관계형 데이터베이스
- 여러 데이터 유형 지원
- 항상 ACID 지원
- 높은 빈도의 쓰기 작업 성능 좋음
- 초보자가 사용하기 어려움
- 멀티 프로세스
우리 서비스는 기본적으로 마크다운 에디터 보다는 CMS를 타겟으로 하고 있는 서비스이기 때문에 쓰기 연산보다는 읽기 작업이 빈번하다. 그리고 팀 내에 PostgreSQL을 깊게 사용해본 경험이 있는 개발자가 없기 때문에 MySQL로 시작하는게 좋을 것 같다.
마무리
이렇게 텍스트 파일에 대해 어떤 DB가 좋을지 알아보았다.
찾아보면서 PACELC 이론과 각 DB의 특징을 서비스의 기능과 확장성과 고려하였더니 비교적 쉽게 결정을 내릴 수 있었다.