본문 바로가기
카테고리 없음

서비스 아키텍처 설계를 위한 데이터베이스 선택 기준

by nacjji 2025. 4. 14.

 

데이터베이스, 어떻게 선택해야 할까?

서비스를 처음 설계할 때 가장 많이 하는 고민 중 하나가 바로 데이터베이스 선택이다. 관계형(RDBMS)으로 충분할까? NoSQL도 같이 써야 할까? 처음엔 단순하게 시작하더라도, 서비스가 커질수록 데이터 구조나 성능 요구가 달라지기 마련이다.

이번 글에서는 서비스 아키텍처에서 데이터베이스를 선택할 때 고려해야 할 요소들과, RDBMS 단독 사용 vs RDBMS + NoSQL 혼합 사용에 대한 판단 기준을 정리해본다.


1. 일관성 vs 성능

일관성이 중요한 데이터

  • 예를 들어 결제 정보, 사용자 계정, 인증 데이터처럼 실수가 생기면 안 되는 정보들은 강한 일관성이 보장돼야 한다.
  • 이런 경우에는 트랜잭션을 안정적으로 처리할 수 있는 RDBMS가 안정적인 선택이다.

성능이 중요한 데이터

  • 반대로 게시물 조회수나 좋아요/싫어요처럼 사용자 반응을 빠르게 저장하고 불러와야 하는 데이터는 읽기 성능이 중요하다.
  • 이 경우엔 구조가 유연하고 빠르게 읽어올 수 있는 NoSQL이나 캐시가 유리할 수 있다.

2. 서비스 규모와 트래픽

  • 서비스가 커질수록 게시물 읽기 요청은 기하급수적으로 늘어난다.
    단순히 DB 하나로만 처리하려고 하면 병목 현상이 생기기 쉽다.
  • 반면 결제나 사용자 데이터는 상대적으로 요청이 적지만, 신뢰성이 매우 중요하다.
    이런 특성에 맞게 데이터 저장 방식을 나누는 게 효율적이다.

3. 개발과 운영 난이도

  • RDBMS는 익숙하고 툴도 많다. ORM, 마이그레이션, 쿼리 튜닝 등 익숙한 도구들이 많아서 개발과 운영이 수월하다.
  • NoSQL은 자유로운 구조 덕분에 유연하지만, 러닝커브가 있다. 스키마 없이 데이터를 다루는 방식이 익숙하지 않다면 도입에 신중할 필요가 있다.

4. 데이터 모델링 관점에서 보면?

유형 적합한 DB

사용자, 게시물, 결제 등 관계 중심 데이터 RDBMS
좋아요, 조회수, 로그 등 구조가 단순한 반복 데이터 NoSQL 또는 캐시

RDBMS만 사용할 경우

👍 장점

  • 데이터 일관성 보장
  • 트랜잭션 관리가 쉬움
  • PostgreSQL이라면 JSONB를 활용해 반정형 데이터도 저장 가능

👎 단점

  • 조회 트래픽 증가 시 병목 가능성
  • 서버가 커져도 수평 확장(샤딩)이 어렵다

💡 추천 전략

  • 서비스 초반엔 RDBMS만으로 충분하다
  • JSONB로 유연하게 데이터 처리 가능
  • 필요 시 읽기 전용 Replica를 붙여서 조회 부하를 분산시킨다

RDBMS + NoSQL 혼합 전략

👍 장점

  • 대량의 읽기 트래픽 처리에 유리
  • 로그나 사용자 행동 데이터처럼 자주 쓰이고, 자주 읽히는 데이터는 NoSQL이 효율적
  • 분산 구조 설계가 쉬워 확장성도 좋음

👎 단점

  • 같은 데이터가 RDBMS와 NoSQL에 중복 저장될 수 있음
  • 데이터 동기화 문제 발생 가능

💡 추천 전략

  • 유저 행동 로그, API 호출 기록, 오류 로그 등은 NoSQL에 저장
  • 필요한 경우 Elasticsearch처럼 검색에 최적화된 DB도 고려
  • Redis를 활용해 자주 쓰이는 콘텐츠는 캐싱

결론: 단순하게 시작하고, 점진적으로 확장하자

서비스 초기에 모든 걸 완벽하게 설계할 순 없다. 중요한 건 지금 당장 필요한 것부터 차근차근 시작하고, 필요에 따라 확장할 수 있는 여지를 두는 것이다.

  • 초반에는 PostgreSQL 하나로 시작해도 충분하다.
  • 트래픽이 늘면 읽기 전용 Replica를 붙여 성능을 보완하고,
  • 로그, 조회수, 캐시 등은 NoSQL이나 Redis로 분리해서 처리하는 구조로 점진적인 확장을 고려하자.

이런 식으로 단계별로 아키텍처를 설계하고 확장하는 방식은, 작은 팀에서도 효율적으로 데이터 구조를 관리할 수 있게 해준다. 무엇보다도, 문제를 미리 예측하고 준비하는 게 가장 좋은 설계다.