개발자혜수 홈으로 이동개발자혜수

Hyesu's Blog

테크블로그

공부하면서 기록을 남겨요

데이터베이스: 데이터베이스는 왜 필요할까? RDB와 NoSQL 알아보기

2026.08.10. DB

1. 데이터베이스란 무엇일까요?


1️⃣ 그냥 문서로 관리한다면 문제가 무엇일까요?

학교에서 학생 정보를 엑셀 파일이나 텍스트 파일로 관리하고 있다고 해볼게요.

단순히 문서로만 관리하면 어떤 문제가 생길까요?

1. 데이터가 중복될 수 있어요. 2. 같은 파일을 동시에 수정하면 어떤 정보를 믿어야 할지 알기 어려워요. 3. 데이터가 사라질 위험이 있어요. 4. 검색이 어려워요. 5. 접근 권한을 제어하기 어려워요.

2️⃣ 그래서 데이터베이스가 왜 필요한데?

위에서 살펴본 것처럼 단순히 문서로 관리하면 분명 불편한 점이 있는데요, 이걸 해결하기 위해 나온 개념이 바로 데이터베이스예요.

(요즘은 구글 스프레드시트 같은 문서 도구도 내부적으로 데이터베이스를 쓰기 때문에 체감이 덜 될 수도 있어요.)

데이터베이스는 대략 이런 걸 해줘요.

  1. 데이터를 구조화해서 저장하고,
  2. 여러 사용자가 동시에 안전하게 접근하게 하고,
  3. 일관성을 유지하면서
  4. 빠르게 검색할 수 있게 해줘요.

2. 관계형 vs 비관계형의 차이

데이터베이스는 크게 두 종류로 나눌 수 있어요.

이 둘의 역할은 앞에서 살펴본 것과 동일하지만, 데이터를 저장하는 형태가 다르다는 점에 주목해서 보면 이해하기 쉬워요.

✅ 관계형 데이터베이스

관계형 데이터베이스 예시 테이블

1. 테이블 형태예요.

가장 중요한 특징은 데이터를 표(테이블) 형태로 저장한다는 점이에요.

2. 스키마가 고정되어 있어요.

데이터베이스에서 스키마(Schema)란 간단히 말하면 데이터베이스의 구조(개체, 속성, 관계)와 제약 조건에 대한 정의예요.

위 이미지에서는 이름/나이/성별이라는 속성을 미리 정해놓고 데이터를 넣기 시작해요.

3. 테이블끼리 관계를 연결할 수 있어요.

테이블 간 관계 예시

수강하는 과목이 무엇인지 알고 싶다면, 학생 테이블과 수강 테이블을 학번으로 연결해서 관리할 수 있어요.

(다만 위 이미지는 어디까지나 관계를 보여주기 위한 예시이고, 실제로는 정규화가 덜 된 테이블이에요. 이 부분은 추후 정규화 글에서 다뤄볼게요.)

실제로 이렇게 연결해서 조회하면 어떤 모습일지 SQL로 한번 볼게요.

학번이 2025001인 학생이 듣는 과목 이름을 조회해 보겠습니다.

SELECT s.name, c.course_name
FROM students s
JOIN enrollments e ON s.student_id = e.student_id
JOIN courses c ON e.course_id = c.course_id
WHERE s.student_id = '2026001';
name  | course_name
------+-------------
신짱구 | 사회의 이해
신짱구 | 윤리와 사회

학생 테이블에는 학번/이름/전공 같은 학생 정보만 있고, 어떤 과목을 듣는지는 수강 테이블에만 적혀있어요. 그런데도 학번으로 두 테이블을 연결(JOIN)하면 이렇게 학생별 수강 과목을 바로 뽑아낼 수 있죠. 앞서 살펴본 “데이터 중복” 문제(학생 이름을 여러 파일에 나눠 적어야 했던 상황)를 테이블 분리 + 관계로 풀어낸 거예요.

4. 표준 언어로 관리할 수 있어요.

문서를 영어/한국어 등 여러 언어로 관리하는 것보다 공통 언어 하나로 관리하면 누구든 다룰 수 있는 것처럼,

데이터베이스에서는 SQL이라는 표준 언어로 데이터를 관리해요.

5. 데이터의 정합성을 중요하게 여겨요.

은행이나 결제 시스템처럼 정확함이 생명인 곳에서는 RDB가 거의 필수예요.

왜 그런지는 트랜잭션과 락(Lock)을 공부해보면 자연스럽게 이해할 수 있어요. (다음 글에서 더 자세히 다뤄볼게요)

여기까지가 관계형 데이터베이스가 무엇인지에 대한 내용이에요.

대표적인 제품으로는 MySQL, PostgreSQL, Oracle 등 아주 다양한 제품이 있어요.

비관계형 데이터베이스

RDB가 관계를 표현하는 데 초점이 맞춰져 있다면, NoSQL은 상대적으로 데이터를 유연하게 저장하는 것에 더 초점이 맞춰져 있어요.

대표적인 제품으로는 문서형은 MongoDB, Key-Value형은 Redis, 컬럼형은 Cassandra, 그래프형은 Neo4j 등이 있어요.

조금 더 와닿는 사용 예시를 하나 들어볼게요.

이 사례에서 보이듯 NoSQL은 대용량 데이터를 여러 서버에 나누어 저장할 수 있어서 수평 확장이 쉬워요.

다만 강한 정합성보다는 속도와 유연성이 중요한 곳에서 주로 쓰여요. 예를 들면 로그 데이터, 실시간 채팅, 속도가 중요한 캐시 등이에요.

그래서 뭘 골라야 하죠?

지금까지 살펴본 내용을 정리해볼게요.

1. RDB

2. NoSQL

무조건 이 데이터베이스를 사용해야 한다. 는 아니고, 실무에서는 한 서비스 안에서도 두 종류를 같이 쓰는 경우가 대다수이예요.

결제 정보는 RDB에 세션이나 캐시는 Redis 같은 NoSQL 에 그리고 채팅이나 로그는 MongoDB 등등 섞어서 사용해요.

과연 이 데이터가 정합성이 가장 중요한지, 아니면 속도나 유연성이 더 중요한지를 먼저 고민해보면 선택하기 더 쉬울 것 같습니다.

오해할 수 있는 부분은

NoSQL을 쓰면 🤔 무조건 빠르고 확장이 잘 될 거라고 생각하기 쉬운데, RDB식 사고 그대로 데이터를 나눠 담으면 오히려 여러 번 조회해야 해서 더 느려질 수 있어요.

NoSQL은 “스키마가 없다”기보다는 “스키마를 정의하고 지키는 책임이 DB가 아니라 애플리케이션 쪽으로 옮겨간다“에 더 가까워요.

(참고로 NoSQL이 확장성을 얻는 대신 정합성 일부를 포기하는 이유를 이론적으로 설명하는 게 CAP 이론이에요. 다음에 이에 대한 글을 작성할 수 있다면 작성해보겠습니다! )

DBMS 란?


DBMS(DataBase Management System)는 데이터베이스를 사람이나 프로그램 대신 관리해주는 소프트웨어예요.

앞서 이야기한 데이터베이스의 필요성(구조화, 동시 접근, 일관성, 빠른 검색)을 실제로 구현해주는 게 바로 DBMS예요.

  1. 데이터 정의: 테이블 구조(스키마)를 만들고 관리해요.
  2. 데이터 조작: SQL 같은 언어로 데이터를 넣고, 조회하고, 수정하고, 지울 수 있게 해줘요.
  3. 동시성 제어: 여러 사용자가 동시에 접근해도 데이터가 꼬이지 않게 락(Lock) 등을 관리해요.
  4. 트랜잭션 관리: “계좌이체”처럼 여러 작업이 하나로 묶여야 할 때, 중간에 실패하면 전부 되돌리는(롤백) 기능을 제공해요. → ACID 보장
  5. 보안/권한 관리: 누가 어떤 데이터에 접근할 수 있는지 통제해요.
  6. 장애 복구: 시스템이 갑자기 꺼져도 데이터를 복구할 수 있게 로그를 남겨요.
  7. 성능 최적화: 인덱스, 쿼리 실행 계획 등을 통해 빠른 검색을 지원해요.

MySQL, PostgreSQL, MongoDB, Redis 모두 각자의 방식으로 이런 역할을 해주는 DBMS인 셈이에요.

정리하며


문서로만 데이터를 관리하면 중복, 동시 수정 충돌, 유실, 검색 어려움, 권한 관리 어려움 같은 문제가 생기고, 이걸 해결하기 위해 데이터베이스라는 개념이 나왔어요.

데이터베이스는 크게 관계형(RDB)과 비관계형(NoSQL)으로 나뉘는데, RDB는 테이블 형태로 스키마를 고정하고 정합성을 중요하게 여기는 반면, NoSQL은 유연한 스키마로 대용량 데이터를 빠르고 유연하게 다루는 데 강점이 있어요. 그리고 이 데이터베이스를 실제로 운영해주는 소프트웨어가 DBMS고요.

다음에는 관계형 데이터베이스의 핵심인 정규화에 대해서 알아봅시다 !

목록으로 돌아가기

댓글