공학계열이라면, 전공시간에 관계형 데이터베이스(RDB, RDBMS)를 들어보거나, 배우고 사용해 봤을 것이다.
나 역시 공학계열(지능정보통신)이기에 MySQL을 사용하여, RDB를 만들어 본 기억이 있다.
또한, DB를 배울 때, 다양한 데이터 베이스 형식을 배웠다.
이번엔, DB의 종류를 간단하게 살펴보고, RDB를 선택한 이유와 개념 등을 정리하며, RDBMS를 왜 사용하는지 까지 알아볼 것이다.
DB(Database)란?
데이터베이스는 한 마디로 데이터의 집합이라고 할 수 있다.
데이터베이스는 일상생활 대부분의 정보를 저장하고 관리할 수 있다. 오늘날 카톡을 보내고 받는 메시지, 인스타그램이나 페이스북 그리고 X(구 트위터) 등 게시글이나 사진, 우리가 사용하는 카드 등의 정보가 모두 데이터베이스에 기록된다.
DBMS란?
데이터베이스를 데이터의 집합이라고 정의한다면, 이런 데이터베이스를 관리하고 운영하는 소프트웨어를 DBMS라고 한다.
다양한 데이터가 저장되어 있는 데이터베이스는 여러 명의 사용자나 응용 프로그램과 공유하고 동시에 접근이 가능해야 한다.
온라인 쇼핑몰 (쿠팡, 무신사)
- 재고 관리: 마지막 남은 신발 1켤레를 10명이 동시에 "결제하기"를 눌렀을 때, 딱 1명만 결제되고 나머지 9명에게는 "품절"을 띄워주는 역할을 DBMS가 합니다.
DBMS 종류
대표적으로 MySQL, 오라클(Oracle), SQL 서버, MariaDB 등이 있다.
소프트웨어 각각의 사용 방법과 특징이 다르지만, 특정 목적을 위해서는 어떤 것을 사용해도 무방하다.
| DBMS | 기업 | OS | 기타 |
| MySQL | Oracle | Unix, Linux, Windows, Mac | 오픈 소스(무료), 상용 |
| MariaDB | MariaDB | Unix, Linux, Windows | 오픈 소스(무료), MySQL 초기 개발자들이 독립해서 만듦 |
| PostgreSQL | PostgreSQL | Unix, Linux, Windows, Mac | 오픈 소스(무료) |
| SQL Server | Microsoft | Windows | 주로 중/대형급 시장에서 사용 |
| DB2 | IBM | Unix, Linux, Windows | 메인프레임 시장 점유율 1위 |
| Access | Microsoft | Windows | PC용 |
| SQLite | SQLite | Android, iOS | 모바일 전용, 오픈 소스(무료) |
DBMS의 분류
DBMS의 유형은 계층형(Hierarchical), 망형(Network), 관계형(Relational), 객체지향형(Object-Oriented), 객체관계형(Object-Relational) 등으로 분류된다. 현재 사용되는 DBMS 중에는 관계형 DBMS가 가장 많은 부분을 차지한다.
계층형 DBMS(HDBMS: Hierarchical)
간단한 비유: 족보, 혹은 윈도우 폴더 구조
초창기(60년대) 모델이며, 데이터가 트리(Tree) 형태의 구조를 가진다.
- 특징: 부모와 자식 관계가 1:N으로만 연결된다.
- 비유:
- 폴더: 'C드라이브 > Program Files > Game' 처럼 상위에서 하위로만 내려간다.
- 예시: 회사 조직도(사장 > 부장 > 사원)
- 단점:
- 유연성 부족: 한 사람이 두 부서에서 일하는 경우(다대다)를 표현하기 너무 어렵다.
- 구조 변경 어려움: 부모가 삭제된다면, 자식도 사라지는 등 관리가 까다롭다.
망형 DBMS (NDBMS: Network)
간단한 비유: 복잡하게 얽힌 거미줄
계층형의 단점(1:N만 가능)을 해결하기 위해 등장했다.
데이터들이 그래프(Graph) 형태로 연결된다.
- 특징: 자식도 여러 부모를 가질 수 있다.
계층형의 단점 중 하나인 N:M(다대다) 관계 지원 가능 - 비유: 전력망, 도로망
- 단점:
- 너무 복잡함: 구조가 거미줄처럼 얽혀 있어서, 프로그래머가 그 연결 구조를 다 알고 있어야 데이터를 꺼낼 수 있다.
설계와 변경이 매우 어렵다.
- 너무 복잡함: 구조가 거미줄처럼 얽혀 있어서, 프로그래머가 그 연결 구조를 다 알고 있어야 데이터를 꺼낼 수 있다.
관계형 DBMS (RDBMS: Relational)
간단한 비유: 엑셀 표
망형의 복잡함을 해결하기 위해 수학적 이론(집합론)을 바탕으로 등장했다.
데이터를 테이블로 정리한다.
- 특징:
- 데이터를 행과 열로 구성된 표에 저장한다.
- SQL이라는 표준 언어로 누구나 쉽게 데이터를 다룬다.
- 구조가 단순하고 이해하기 쉽다.
- 대표 프로그램: Oracle, MySQL, SQL Server, PostgreSQL
- 현재: 전 세계 데이터베이스 시장의 주류이다.
객체지향형 DBMS(OODBMS: Object-Oriented)
간단한 비유: 자바 객체를 그대로 저장 가능
프로그래밍 언어가 객체지향(Java, C++ 등)으로 발전하면서 등장했다.
- 등장 배경: RDBMS는 좋은데, 자바 객체를 억지로 테이블에 맞춰서 저장하려니 너무 힘들다(패러다임 불일치; 객체를 테이블로 변환) -> 그냥 객체를 통째로 넣어 관리
- 특징: 객체를 그대로 저장하므로 상속, 다형성 같은 개념을 DB에서도 사용할 수 있다.
- 단점: SQL처럼 강력하고 표준화된 검색 언어가 부족했고, 비쌌으며, RDBMS의 안전성을 따라가지 못해 주류가 되지 못했다.
현재는 서의 사장되었다.
객체관계형 DBMS(ORDBMS: Object-Relational)
RDBMS의 성능과 객체지향의 장점을 융합
- 특징: 기본은 RDBMS의 테이블이지만, 사용자 정의 타입, 상속, 객체 저장 등 객체지향적 요소를 지원한다.
- 현재의 모습: 사실상 우리가 쓰는 현대의 Oracle, PostgreSQL, MySQL 등은 엄밀히 말하면 ORDBMS이다.
(하지만 편의상 그냥 RDBMS라고 부른다.)
한 눈에 비교하기
| 종류 | 구조 | 관계 표현 | 장점 | 단점 | 대표 예시 |
| 계층형 | 트리(Tree) | 1:N(부모-자식) | 데이터 접근 속도 빠름 | 구조 변경 어려움, 유연성 낮음 | IMS |
| 망형 | 그래프(Graph) | N:M(다대다) | 계층형보다 유연함 | 구조가 너무 복잡함 (설계 난이도) | IDS |
| 관계형 | 테이블(Table) | Key(PK, FK) | 업무 변화에 유연함, 표준 SQL 사용 | 대용량 데이터 처리 시 성능 이슈(Join 등) | Oracle, MySQL, MariaDB |
| 객체지향 | 객체(Object) | 참조 (Reference) |
객체지향 언어와 호환성 좋음 | 표준 부족, 시장성 낮음 | ObjectStore |
| 객체관계 | 테이블 + 객체 | Key + 참조 | RDB의 안정성 + 객체의 편리함 | RDB보다 조금 더 복잡할 수 있음 | Modern Oracle |
여기서 RDBMS를 좀 더 자세히 알아보면,
RDB와 RDBMS 구별
RDB( Relational Database )
RDB(Relational Database, 관계형 데이터베이스)는 데이터를 행과 열로 이루어진 테이블이라는 표 형태로 정리하고, 이 테이블들끼리 관계를 맺도록 설계된 데이터의 저장 구조를 말하며, 엑셀 파일처럼 표와 행으로 저장하고 관리한다.
RDBMS( Relational Database Management System )
RDBMS( Relational Database Management System, 관계형 데이터베이스 관리 시스템)는 RDB 형태의 데이터를 생성하고, 수정하고, 삭제하고, 안전하게 보관해 주는 소프트웨어 프로그램이다.
우리가 설치해서 실행하는 프로그램(Oracle, MySQL 등)이며, SQL이라는 언어를 알아듣고 일을 처리한다.
RDB를 엑셀 파일이라고 한다면, RDBMS는 엑셀 프로그램이고 파일을 생성, 수정, 저장을 할 수 있다.
RDBMS
RDBMS는 중개자 역할을 한다.
사용자와 실제 데이터 사이에서 중개자 역할을 하여, 사용자가 SQL을 던지면, RDBMS는 그것을 해석하고, 최적의 경로를 찾아, 하드디스크에서 데이터를 꺼내온다.
RDBMS의 내부 작동 원리(SQL 처리 과정)
SELECT * FROM MEMBER;
라는 쿼리를 날렸을 때, RDBMS 내부에서는 다음과 같은 3단계 과정을 거친다.
파서(Parser) - 문법 검사관
- 가장 먼저 SQL 문법이 맞는지 검사한다.
- 오타가 없는지?, 존재하는 테이블인지?, 권한은 있는지?를 체크한다.
- 문법이 틀리면 여기서 바로 에러(Syntax Error)를 뱉는다.
옵티마이저(Optimizer) - 최고의 전략가
- RDBMS의 두뇌이며, 데이터를 가져오는 방법은 수천 가지가 넘는다. (인덱스를 탈지, 전체를 탐색할 지 등)
- 옵티마이저는 각 방법의 비용(Cost)을 계산해서 가장 빠르고 효율적인 경로(실행 계획)를 결정한다.
실행기(Executor) - 작업 반장
- 옵티마이저가 짜준 계획대로 실제 스토리지 엔진(Storage Engine)에게 데이터를 가져오라고 명령한다.
RDBMS의 저장소 구조 (Storage Engine)
RDBMS는 속도를 위해 디스크(HDD/SSD)와 메모리(RAM)를 아주 똑똑하게 사용한다.
데이터 파일 (Data File)
- 실제 데이터가 영구적으로 저장되는 하드디스크 공간이다.
버퍼 풀 (Buffer Pool / Cache)
- 메모리(RAM) 공간이다.
- 디스크는 속도가 느리기 때문에, RDBMS는 자주 쓰는 데이터를 메모리(버퍼)에 올려둔다
- 사용자가 데이터를 찾을 때, 디스크에 가기 전에 메모리를 먼저 탐색한다. (Hit하면 엄청 빠름)
로그 파일 (Redo/Undo Log)
- 블랙박스로, 모든 변경 사항을 기록한다
- 데이터를 쓰다가 전원이 꺼져도, 이 로그 파일을 보고 복구한다.
RDBMS가 반드시 지키는 4가지 규칙 (ACID)
RDBMS가 엑셀이나 파일 시스템과 차별화되는 가장 큰 이유는 트랜잭션(Transaction)의 안정성을 보장하기 때문이다. 이를 ACID 성질이라고 한다.
- Atomicity (원자성): "전부 다 하거나, 아예 안 하거나." (송금 중 오류 나면 원상복구)
- Consistency (일관성): "규칙을 위반하지 않음." (숫자 컬럼에 문자가 못 들어감, 잔액은 마이너스가 될 수 없음 등)
- Isolation (격리성): "끼어들기 금지." (내가 수정 중인 데이터를 남이 건드리지 못함)
- Durability (지속성): "영원히 저장." (커밋이 완료되면, 컴퓨터가 폭파되어도 데이터는 보존되어야 함 - 백업/로그 이용)
RDBMS의 데이터 구조 (계층)
- 데이터베이스 (Database): 가장 큰 저장소 단위.
- 테이블 (Table): 데이터를 담는 표 (엑셀 시트).
- 컬럼 (Column/Attribute): 세로 열. 데이터의 속성 (이름, 나이, 주소).
- 로우 (Row/Tuple/Record): 가로 행. 실제 데이터 한 건 (홍길동, 20세, 서울).
- 인덱스 (Index): 검색 속도를 높이기 위한 목차. (책 뒤의 색인 같은 역할)
인덱스
B-Tree (Balanced Tree) 또는 그 개량형인 B+Tree를 사용하여 데이터를 찾는다.
"뚱뚱한 노드" (한 노드에 데이터가 많음)
- 이진트리는 노드 하나에 데이터가 1개뿐이지만, B-Tree는 노드 하나에 데이터를 여러 개(예: 100개) 담을 수 있다.
- 비유: B-Tree는 "넓고 낮은 계단"
"높이가 낮음" (핵심!)
- 데이터가 100만 개 있어도, B-Tree는 트리의 높이(Depth)가 3~4단계면 끝난다.
- DB 관점: DB에서 한 단계를 내려가는 건 "디스크를 한 번 읽는 것(I/O)"과 같다.
높이가 낮을수록 디스크를 적게 읽으니 엄청나게 빠르다.
"항상 균형을 유지함"
- 데이터가 어떻게 들어오든, 트리의 높이를 일정하게 유지하도록 스스로 재정렬(Balancing)한다.
절대 한쪽으로 쏠리지 않는다.
면접 답변식 요약
네, RDBMS(관계형 데이터베이스 관리 시스템)는 데이터를 행(Row)과 열(Column)로 이루어진 2차원 테이블 형태로 저장하고, 테이블 간의 관계(Relation)를 통해 데이터를 체계적으로 관리하는 소프트웨어입니다.
가장 큰 특징은 데이터의 중복을 최소화하고, 트랜잭션(ACID)을 지원하여 데이터의 무결성과 일관성을 강력하게 보장한다는 점입니다.
저는 프로젝트에서 Oracle을 사용하여 회원 정보와 주문 내역 간의 관계를 PK와 FK로 설계하고, SQL을 통해 데이터를 관리하며 데이터베이스의 구조적인 안정성을 경험했습니다.
'Daily Dev Q&A 정리 템플릿' 카테고리의 다른 글
| 25.12.17 정규화에 대해서 설명해주세요. (0) | 2025.12.17 |
|---|---|
| 25.12.16 자바의 람다 표현식이란? (0) | 2025.12.16 |
| 25.12.12 프레임워크가 무엇이고 무엇을 사용했나요? 라는 질문에 대해 정리하기 (0) | 2025.12.14 |
| 25.12.11 자바의 빌더 패턴(Builder Pattern) (0) | 2025.12.11 |
| 25.12.10 자바에 제네릭을 왜 사용할까? (1) | 2025.12.10 |