
백엔드 인턴 면접을 보면서 '왜 많은 DB 중에서도 MySQL이죠?', '왜 많은 캐시 서비스 중 Redis죠?', '왜 동적쿼리를 작성하기 위해 Querydsl을 선택하셨죠?'라는 기술 선택의 이유를 묻는 질문을 많이 받았다..!
항상 어떤 기술을 선택하기 전에는,
1️⃣ 그 기술을 왜 도입해야 하는가? (배경)
2️⃣ 도입해서 얻을 수 있는 것은 무엇인가? (장점)
3️⃣ 도입할 때 지불해야 하는 비용은? (단점)
을 고려해 봐야 하는데, 해당 부분을 놓치고 있었던 것 같다..🥲
그래서 why 시리즈를 만들어 내가 지금까지 사용한 기술들을 선택하는 과정을 정리해 보려 한다!
그리고 바로 첫번째 시리즈는 🌟 DB 기술 🌟이다!
우리는 서비스를 제공하기 위해 데이터를 저장해야 한다. 누군가가 열심히 작성한 게시글이 저장되지 않고 사라진다면, 아무도 그 서비스를 이용하고 싶지 않을 것이기 때문이다
이 이야기를 들은 어떤 사람은 '파일로 데이터를 저장하면 되지 않나요?' 라고 이야기 한다. 그리고 이 질문으로부터 DB를 사용해야 되는 이유가 설명된다! 왜냐하면 데이터베이스는 파일 시스템의 단점을 보완하기 위해 생겨났기 때문이다!
데이터베이스의 장점
그리고 다양한 사용 사례를 위해 고안된 다양한 종류의 데이터베이스가 있다!
대표적으로 사용되는 DB인 RDBMS와 NoSQL에 대해서 살펴보자 🔍
데이터가 행과 열로 저장되는 테이블 기반 데이터베이스로 RDBMS의 표준 언어가 바로 SQL이다.
RDB에는 테이블을 조인하여 정보 간 관계를 설정할 수 있는 기능이 있어, 여러 데이터 간의 관계를 쉽게 이해하고 정보를 얻을 수 있다.
예시) MySQL, MariaDB, PostgreSQL
👍🏻 장점
👎🏻 단점
"Not Only SQL", NoSQL을 사용하면 구조화된 스키마(sachem) 없이 데이터를 여러 컬렉션과 노드에 저장할 수 있으며, 제한된 조인 쿼리를 지원하며 수평적으로 확장할 수 있다.
예시) MongoDB, Redis, Apache Cassandra
👍🏻 장점
👎🏻 단점
결국, 가용성과 확장성을 더 중요하게 생각한다면 NoSQL을!
데이터 무결성과 정확성을 더 중요하게 생각한다면 RDBMS를 사용하는 것이 적합해 보인다!
💡 프로젝트 당시 팀원 모두 NoSQL 경험이 없기도 했고, 서비스에 검색, 통계와 같이 조인을 사용하는 복잡한 쿼리문을 작성해야 하는 경우가 많았기 때문에 RDBMS를 사용하기로 결정했다!
위에서 보았듯이 RDBMS에는 대표적으로 MySQL, MariaDB, PostgreSQL 등이 있다! 이 중에서 어떤 RDB를 사용해야 할까?

장점
👍🏻 읽기 중심 작업에 탁월
👍🏻 큰 시장 점유율과 풍부한 학습 리소스
👍🏻 사용자 친화적
장점
👍🏻 읽기 중심 작업에 탁월
👍🏻 MySQL 보다 향상된 성능
👍🏻 MySQL과 100% 호환
👍🏻 MySQL보다 더 많은 스토리지 엔진과 더 큰 연결 풀
👍🏻 쓰기 작업이 MySQL 보다 빠름
👍🏻 사용자 친화적
장점
👍🏻 테이블 파티셔닝 DDL 기능
👍🏻 마스터-스탠바이 복제 지원 (스탠바이 서버의 다운타임을 최소화하여 거의 실시간 복제가 가능)
👍🏻 대량의 데이터와 복잡한 쿼리를 다룰 때 탁월
👍🏻 동시 쓰기를 지원하기 때문에 읽기/쓰기 작업이 빠름
: 트랜잭션 격리 및 스냅샷을 구현하고 ACID를 완벽하게 준수
👍🏻 NoSQL(Json 타입, 배열) 지원 (Json 타입에 인덱스 지원)
단점
👎🏻 학습 곡선이 있음
👎🏻 읽기 집약 프로세스에 약함
: 각 connection에 대한 새로운 프로세스를 포크할 때, 상당한 양의 메모리를 할당 (메모리 사용량 ↑)
결국, PostgreSQL은 복잡한 쿼리에서 MySQL/MariaDB 보다 탁월하며, 대량 데이터와 분석 작업에 더 성능이 좋다. 반면 MySQL/MariaDB는 간단한 쿼리에서 PostgreSQL을 압도하고 더 사용자 친화적이며 전문가를 찾기도 쉽다.