개발 낙서장

데이터베이스(DB, DataBase) 본문

Java

데이터베이스(DB, DataBase)

권승준 2024. 2. 13. 19:54

✅ 데이터베이스?

한 마디로 데이터의 집합 혹은 데이터의 저장소이다.
목적에 따라 저장소를 만들고 그 안에 데이터를 저장할 수 있게 하는 공간이다.

mysql에서 show databases; 커맨드를 입력하면 내가 생성한 DB들을 볼 수 있다.
이렇게 DB를 생성하고 그 안에 데이터를 저장하는 것이다.

✅ DBMS?

그렇다면 DB를 조작할 무언가가 있어야 하는데 DBMS가 그 역할을 한다.
DBMS(Database Management System)이란 데이터베이스를 관리하고 운영하는 소프트웨어 시스템이다.

DB는 한 사람, 한 컴퓨터에서 이뤄지지 않는다. 수많은 사람이 수많은 컴퓨터를 통해 DB에서 데이터를 읽고 쓰고 수정하고 삭제한다. 이런 동시 접속 및 데이터 공유를 가능케 해주는게 DBMS이다.
은행 서비스를 예로 들면 은행 직원이 계좌를 생성하고 조회하기도 하고, ATM 기기에서 통장 잔고를 확인하거나 돈을 넣고 빼기도 하고, 인터넷 뱅킹으로 다른 사람에게 송금하기도 한다.
이런 동시다발적 작업을 DBMS에서 관리하고 운영한다.

✅ DBMS의 종류

DBMS는 소프트웨어이다. 그래서 각자 목적에 맞게, 기능과 성능이 다른 수많은 DBMS가 있다. 가장 대표적인게 MySql이고 Oracle, MSSQL 등이 있다.

DBMS 제작사 작동 운영체제 기타
MySQL Oracle Unix, Linux, Windows, Mac 오픈 소스(무료), 상용
MariaDB MariaDB Unix, Linux, Windows 오픈 소스(무료),
MySQL 초기 개발자들이 독립해서 만듦
PostgreSQL PostgreSQL Unix, Linux, Windows, Mac 오픈 소스(무료)
Oracle Oracle Unix, Linux, Windows 상용 시장 점유율 1위
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)

현재는 RDB(Relational Database, 관계형 데이터베이스)가 가장 많이 쓰인다고 한다.

🌐 계층형 DBMS

계층형 DBMS는 1960년대에 등장한 첫 DBMS 개념이다. 말 그대로 계층적 구조(트리 형태)를 가지며 부모-자식 관계로 이루어져 있다.
처음 나온 DBMS이기 때문에 문제점이 많은데, 데이터 탐색이 어렵고(반드시 부모 노드를 거쳐 탐색해야 함) 데이터에 중복이 발생하기 쉬우며 데이터 탐색이 어렵기 때문에 추가와 수정, 삭제 작업이 비효율적이다.

🌐 망형 DBMS

망형 DBMS는 계층형 DBMS의 문제점을 개선하기 위해 1970년대에 등장한 DBMS이다. 계층적 구조를 가지지만 다른 노드들끼리도 연결된 DBMS이다.
데이터의 접근이 훨씬 수월하며 계층형 DBMS의 가장 큰 단점인 종속성 문제를 해결했지만 DB가 커질 수록 구조가 점점 더 복잡해지며 DB 수정이 어렵고 프로그래머가 DB의 모든 구조를 파악하고 있어야 한다.

🌐 관계형 DBMS

오늘날 DB를 생각하면 떠오르는 구조가 관계형 데이터베이스이다. DB 안에 테이블이라는 단위로 나눠져있으며 테이블은 열(column)과 행(row)으로 이루어져 있다.
많이 사용되는 MySql이 관계형 DBMS이다.

기존에 사용하던 계층형, 망형 DBMS의 단점을 모두 해결했다. 각 테이블이 독립적이고 고유 Key를 통해 테이블 간 종속 관계도 가능하다. 또한 프로그래머가 DB의 모든 구조를 알 필요 없이 필요한 테이블 간 구조만 알고 있으면 된다. 고유 인덱스가 존재하기 때문에 데이터 탐색 속도 또한 빠르다. 그리고 데이터 무결성을 보장한다.
하지만 단점이 존재하는데 칼럼 변경이 쉽지 않고 관계가 많을 수록 쿼리가 매우 복잡해진다. 그리고 수평 확장이 불가능해 성능을 향상시키려면 수직 확장으로만 가능하므로 비용이 많이 든다.

참고 자료 : 한빛미디어 혼공학습단

'Java' 카테고리의 다른 글

단위 테스트  (1) 2024.02.16
[Spring] DTO와 Entity  (0) 2024.02.15
[Spring] Filter 예외 처리  (0) 2024.02.05
[Spring] 쿠키와 세션  (0) 2024.01.25
Jackson  (0) 2024.01.18
Comments