나만의 학습 기록

최종 목적은 기술 블로그💩

백엔드 공부

관계형 데이터베이스와 비관계형 데이터베이스

밈밍민믹 2026. 4. 12. 19:45

안녕하세요. 평일에는 비가 온 이후로 날씨가 엄청 추웠는데 오늘은 햇빛이 쨍쨍하니 너무 예쁜 날씨네요. 산책하기 딱 좋은 날씨더라고요.

저번 시간에는 버전 관리 시스템인 Git과 저장소 호스팅 서비스인 GitHub에 대해서 간략하게 학습해보았으며, 오늘은 데이터베이스에 대해서 학습 할 예정입니다. 데이터베이스 지식까지 배우면 저희가 진행하는 백엔드의 기초적인 로드맵은 어느정도 학습이 될 것 같네요. 자, 그럼 공부 시작해봅시다.


관계형 데이터베이스

데이터가 열과 행의 테이블 하나 이상에 저장되는 사전 정의된 관계로 데이터를 구성하는 정보 모음. 즉, 데이터를 엑셀 표처럼 행과 열로 정리해서 저장한 다음 그 표끼리 서로 연결해서 관계를 맺고 관리하는 데이터 저장 방식으로 생각하면 된다.


관계형 데이터베이스의 구조

  • 릴레이션은 데이터들을 표의 형태로 표현한 것으로 구조를 나타내는 릴레이션 스키마와 실제 값들인 릴레이션 인스턴스로 구성된다.
  • 하나의 속성이 취할 수 있는 같은 타입의 원자 값들의 집합을 도메인이라고 하며 [학생] 릴레이션에서 '학번'의 도메인은 A001~A003이다.

 

관계형 데이터베이스의 관계

1. One to One

    • 테이블 간 관계가 일대일로 매칭되는 관계를 one to one이라고 한다.
    • 양쪽이 서로 하나씩만 대응하며, 보안상 분리하거나 데이터를 역할별로 나누기 위한 테이블을 분리할 때 사용한다.
    • 보통 한쪽 테이블의 기본키를 다른 쪽에서 기본키이자 외래키(Foreign Key)처럼 사용하거나, 외래키에 UNIQUE 제약 조건을 걸어 1:1을 보장한다.

2. One to Many

  • 테이블 간 관계가 여러 열과 연결되는 관계를 one to many라고 한다.
  • 부모-자신 관계처럼 표현하며, 보통 N쪽 테이블이 외래키를 가짐으로써 표현한다.

3. Many to Many

  • 두 테이블이 서로 각자 다른 테이블의 여러 데이터와 연결될 때에는 두 테이블에 속한 데이터의 조합을 입력하기 위한 중간 테이블이 하나 생성되는데 이걸 Many to Many 관계라고 한다.
  • 반드시 중간 테이블(연결 테이블)을 두며 실제로는 1:N + 1:N 구조로 풀어서 구현한다.

관계형 데이터베이스 특징

  • 관계형 데이터베이스를 구성하는 개체(Entity)나 관계(Relationship)를 모두 릴레이션(Relation)이라는 표로 표현
  • 릴레이션은 개체를 표현하는 개체 릴레이션, 관계를 나타내는 관계 릴레이션으로 구분할 수 있다.
  • 간결하고 보기 편리하며, 다른 데이터베이스로 변환이 용이하지만 성능이 다소 떨어진다.
  • 대표적인 관계형 데이터 베이스로는 PostgreSQL, MySQL, MariaDB, MS SQL, Oracle 등이 존재한다.

 

관계형 데이터베이스의 종류

1. PostgreSQL

오픈 소스 객체-관계형 데이터베이스 시스템으로 다른 관계형 데이터베이스 시스템과 달리 연산자, 복합 자료형, 집계 함수, 자료형 변환자, 확장 기능 등 다양한 데이터베이스 객체를 사용자가 임의로 만들 수 있는 기능을 제공함으로써 마치 새로운 하나의 프로그래밍 언어처럼 무한한 기능을 손쉽게 구현할 수 있다.

 

그렇다면 기존 RDBMS와 어떤 차별점을 가지고 있길래 PostgreSQL을 많이 사용하는것일까요?

기존 RDBMS와의 차이점

  1. 확장성
    • 단순한 관계형 데이터베이스를 넘어서 기능을 확장하며 사용할 수 있다.
    • 예를들어 위치 기반 서비스, 전문 검색, 복잡한 데이터 처리처럼 일반적인 CRUD를 넘어서는 기능이 필요한 경우  PostgreSQL이 더 유연하게 대응할 수 있다.
  2. 표준 SQL 준수와 데이터 무결성
    • 표준 SQL을 잘 따르고 데이터 무결성을 엄격하게 관리하는데 강점이 있다.
    • 복잡한 비즈니스 로직이나 정합성이 중요한 서비스에서 더 안정적으로 활용되는 경우가 많다.
    • 여러 테이블이 복잡하게 연결되거나, 데이터 일관성을 엄격하게 보장해야하는 환경일수록 더욱 유용하다.
  3. 복잡한 쿼리 처리 능력
    • 복잡한 조회와 분석성 쿼리를 처리하는데 일반적인 관계형 데이터베이스보다 복잡한 쿼리 처리에 유용하다.
    • 다중 조인, 서브쿼리, 집계, 윈도우 함수 등 고급 SQL 기능을 적극적으로 활용해야하는 환경에서 더욱 유용하다.
    • 따라서 통계, 리포트, 백오피스, 데이터 분석 기능이 함께 필요한 서비스에서 PostreSQL이 더 적합하다.

또한 PostgreSQL은 전통적인 관계형 데이터베이스의 특성을 유지하면서도 분산 환경이나 유연한 데이터 처리 측면에서 강점을 보여 최근 더욱 많이 사용되고 있습니다.

 

2. MySQL

전세계적으로 가장 널리 사용되고 있는 오픈 소스 관계형 데이터베이스로  데이터를 표 형태로 정리할 수 있고 정렬, 검색과 같은 작업을 빠르고 편리하고 안전하게 할 수 있다.

 

장점

  • 다른 데이터베이스보다 빠르고 저렴하며 안정적인 고유한 스토리지 엔진 아키텍처가 있다.
  • 뷰, 트리거 및 저장 프로시저를 사용하여 개발자에게 더 높은 생산성을 제공한다.
  • 대부분의 운영 체제에서 단 하나의 명령으로 쉽게 설치할 수 있다.

단점

  • 복잡하고 강력할 수 있으므로 소규모 애플리케이션에 적합하지 않을 수 있다.
  • 애플리케이션이 MySQL로 구축되면 기본 데이터베이스 또는 배포를 변경하기 어려울 수 있다.
  • PostreSQL과 같은 일부 다른 데이터베이스만큼 기능이 풍부하지 않을 수 있다.

 

MySQL과 PostgreSQL의 차이점

종류 PostgreSQL MySQL
지향점 정합성, 고급 기능, 확상정, 복잡한 비즈니스 로직 처리에 강점 단순하고 익숙한 구조로 CRUD 중심 서비스에 적합
확장성 확장 모듈, 사용자 정의 기능, 다양한 데이터 타입 지원 등 기능 확장이 뛰어남 전통적인 관계형 데이터베이스 활용에 강하며, 비교적 단순한 구조로 운영하기 쉬움
데이터 무결성 무결성과 일관성을 엄격하게 관리하는데 강점 트랜잭션과 안정성을 제공하며 일반 서비스에 충분히 활용 가능
복잡한 쿼리 처리 다중 조인, 분석성 쿼리, 고급 SQL 활용에 강한 편 일반적인 조회와 CRUD 처리에 강한 편
적합한 환경 통계, 리포트, 백오피스, 복잡한 서비스 로직, 다양한 데이터 구조가 필요한 환경 일반 웹 서비스, 빠른 개발, 익숙한 운영 환경, CRUD 중심 서비스

 

 

평소에는 MySQL을 주로 사용해왔기에 PostgreSQL이 분산 환경이나 확장성이 중요한 시스템에서 더욱 유용하게 활용될 수 있다는 점이 인상적이었네요. 물론 MySQL 역시 샤딩 등을 통해 분산 환경에서 사용할 수 있지만, PostgreSQL은 복잡한 데이터 처리와 확장성 측면에서 더 많은 강점을 가진다는 점을 알게 되었습니다. 또한 MySQL은 익숙하고 접근성이 좋아 소규모 애플리케이션이나 일반적인 웹 서비스에서 많이 사용되지만, 서비스의 규모와 요구사항이 복잡해질수록 PostgreSQL이 더 적합한 선택지가 될 수 있다고 느꼈습니다.

이처럼 관계형 데이터베이스에도 각각의 특징과 강점에 대해서 살펴보았는데, 관계형 데이터베이스가 있다면 그와 대비되는 비관계형 데이터베이스도 함께 알아둘 필요가 있습니다.

 

 

비관계형 데이터베이스

NoSQL

Non Relational Operation Database SQL의 줄임말로 관계형 데이터베이스가 아닌 SQL을 의미하였지만, SQL뿐만 아닌 여러 기능들도 부가적으로 지원한다는 Not Only SQL로 일반화 되었습니다. 관계형 데이터베이스의 고정된 스키마 구조, 수평적 확장의 불가, 복잡한 조인 작업 등의 불편한 점들이 존재하였고, 이러한 단점으로 인해 NoSQL이 등장하게 되었습니다. 데이터 모델을 유연하게 변경할 수 있고, 수평적 확장, 불필요한 Join을 최소화 할 수 있습니다.

특징(장단점 포함)

  • 데이터 간의 관계를 정의하지 않는다.
  • 대용량 데이터를 저장할 수 있으며, 분산형 구조로 설계되어 있다.
  • 저렴한 비용으로 분산처리와 병렬처리가 가능하며, 빅데이터 처리에 효과적이며 데이터 모델의 유연한 변화가 가능하다.
  • 데이터 업데이트 중 장애가 발생하면 데이터 손실 발생하며, 인덱스 구조가 메모리에 저장하므로 충분한 메모리가 필요하며, 데이터 일관성이 항상 보장되지 않는다.
  • 대표적인 NoSQL로 MongoDB, RethinkDB, CouchDB, Dynomo DB 등이 존재한다.

관계형 데이터베이스와 NoSQL의 차이점

종류 관계형 데이터베이스 NoSQL
데이터 모델 테이블 기반 데이터 모델 다양한 모델 지원(key-value, document)
- 반정규화에 의한 설계를 기본으로 한다.
스키마 - 고정된 스키마 사용
- 테이블 설계 단계에서 스키마를 설계하며, 이후 스키마 수정은 번거롭다.
- 동적인 스키마로 필요에 따라 데이터 모델을 동적으로 변경 가능
- 비정형화 스키마구조로 미리 스키마를 선언하지 않음
확장성 Scale-Up Scale-Out
인터페이스 SQL을 통해 데이터 CRUD 가능 쿼리 외 다양한 API를 통한 데이터 CRUD 가능
일관성 모델 ACID 트랜잭션  BASE 모델
용도 - 정형화된 데이터와 트랜잭션 처리가 중요한 경우
- 복잡한 관계를 가진 데이터 처리 및 분석이 필요한 경우
- 대용량 및 실시간 데이터 처리사 필요한 경우
- 유연한 데이터 모델링이 필요한 경우
구조 단일 서버에서 운영되는 중앙집중형 구조 여러 서버 간에 데이터를 분산하여 처리 가능

 

NoSQL 종류

  1. Key-Value Database
    • Redis, Oracle NoSQL DB, VoldeMorte
  2. Wide-Column Database
    • Hbase, Cassandra, GoogleBigTable, Vertica
  3. Document Database
    • MongoDB, CouchDB, Riak, Azure Cosmos DB
  4. Graph Database
    • Sones, AllegroGraph, neo4j, BlazeGraph, OrientDB

 

1. MongoDB

고성능, 고가용성 및 쉬운 확장성을 제공하는 NoSQL, Document 지향 데이터 베이스로 데이터를 배열 및 중첩 Document와 같은 복잡한 데이터 유형을 효율적으로 저장할 수 있는 유연한 JSON과 유사한 형식인 BSON(Binary JSON)으로 저장합니다.

 

특징

1. 스키마

  • MongoDB는 데이터베이스 아래에 여러 개의 테이블 대신 '컬렉션(Collection)'에 JSON 형태의 데이터를 저장하며, 이를 바이너리 포맷으로 변환한 BSON(Binary JSON) 형태로 처리한다.

 

 

빠른 데이터 변경과 비정형 데이터 처리, 개발 속도 향상, 다양한 데이터 구조의 통합을 가능하게 하는 유연한 스키마를 확보할 수 있고, 스키마 벨리데이션이라는 기능을 통해 필요한 경우 RDBMS처럼 스키마 제약을 설정할 수도 있다.

 

2. 복제와 고가용성

대부분의 DB 시스템은 장애에 대비한 고가용성(AH)을 지원하지만, RDBMS는 외부 어플리케이션에 의존해서 장애 발생 시 스위칭하는데 시간이 걸리고, 정상 작동 여부도 관리자가 확인해야하는 번거로움이 존재하는 반면 MongoDB는 Raft 알고리즘을 기반으로 자동 스위칭 기능을 제공해 1초 내외의 지연만 발생하며, read/write concern 및 preference 설정을 통해 데이터 일관성과 트래픽 분산도 지원한다.

 

3. 수평적 확장(샤딩)

데이터를 여러 서버에 분산 저장하여 수평 확장을 가능하게 한다. 기존 RDBMS의 파티셔닝 방식과 달리 MongoDB는 샤드 클러스터 구조를 통해 자동으로 데이터를 분산 처리한다. 샤드키를 사용해 데이터를 분배하고, 이를 통해 대용량 데이터를 효율적으로 처리하며 손쉽게 확장성을 확보할 수 있다.

 

*샤드 클러스터 : 쿼리 라우팅을 담당하는 'mongos', 샤딩 메타데이터를 관리하는 'config 서버', 데이터를 저장하는 'shard 노드'로 구성된다.

 

4. 다양한 인덱싱 기능 지원

MongoDB는 B-Tree 기반 단일 필드 인덱스를 포함해 복합키, 멀티키, 공간 해시, 텍스트 등 다양한 인덱스를 지원하여, 다양한 쿼리에 최적화된 성능을 제공한다.


여기까지 관계형 데이터베이스와 NoSQL에 대해서 학습해보았습니다. 데이터베이스는 단순히 저장소 역할만 하는 것이 아닌 서비스의 규모와 트래픽, 데이터의 특성에 따라 성능과 운영 방식에 큰 영향을 줄 수 있습니다. 그렇기 때문에 RDB와 NoSQL의 특징을 이해하고, 상황에 맞는 선택을 하는 것이 중요합니다. 다음 시간에는 ORM, ACID, 트랜잭션과 같은 데이터베이스의 핵심 개념을 더 깊이 있게 살펴보며, 관계형/비관계형 데이터베이스에 대한 글은 마무리하겠습니다. 수고하세용~