나무모에 미러 (일반/밝은 화면)
최근 수정 시각 : 2024-11-10 21:36:29

데이터베이스


파일:나무위키+유도.png  
은(는) 여기로 연결됩니다.
SCP 재단의 문서에 대한 내용은 SCP-001/The Database 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
참고하십시오.

[[컴퓨터공학|컴퓨터 과학 & 공학
Computer Science & Engineering
]]
[ 펼치기 · 접기 ]
||<tablebgcolor=#fff,#1c1d1f><tablecolor=#373a3c,#ddd><colbgcolor=#0066DC><colcolor=white> 기반 학문 ||수학(해석학 · 이산수학 · 수리논리학 · 선형대수학 · 미적분학 · 미분방정식 · 대수학(환론 · 범주론) · 정수론) · 이론 컴퓨터 과학 · 암호학 · 전자공학 · 언어학(형태론 · 통사론 · 의미론 · 화용론 · 음운론) · 인지과학 ||
하드웨어 구성 SoC · CPU · GPU(그래픽 카드 · GPGPU) · ROM · RAM · SSD · HDD · 참조: 틀:컴퓨터 부품
기술 기계어 · 어셈블리어 · C/C++ · C# · Java · Python · BIOS · 절차적 프로그래밍 · 객체 지향 프로그래밍 · 해킹 · ROT13 · 일회용 비밀번호 · 사물인터넷 · 와이파이 · GPS · 임베디드 · 인공신경망 · OpenGL · EXIF · 마이크로아키텍처 · ACPI · UEFI · NERF · gRPC · 리버스 엔지니어링 · HCI · UI · UX · 대역폭 · DBMS · NoSQL · 해시(SHA · 브루트 포스 · 레인보우 테이블 · salt · 암호화폐) · RSA 암호화 · 하드웨어 가속
연구

기타
논리 회로(보수기 · 가산기 · 논리 연산 · 불 대수 · 플립플롭) · 정보이론 · 임베디드 시스템 · 운영 체제 · 데이터베이스 · 프로그래밍 언어{컴파일러(어셈블러 · JIT) · 인터프리터 · 유형 이론 · 파싱 · 링커 · 난해한 프로그래밍 언어} · 메타데이터 · 기계학습 · 빅데이터 · 폰노이만 구조 · 양자컴퓨터 · 행위자 모델 · 인코딩(유니코드 · MBCS) · 네트워크 · 컴퓨터 보안 · OCR · 슈퍼컴퓨터 · 튜링 머신 · FPGA · 딥러닝 · 컴퓨터 구조론 · 컴퓨터 비전 · 컴퓨터 그래픽스 · 인공지능 · 시간 복잡도(최적화) · 소프트웨어 개발 방법론 · 디자인 패턴 · 정보처리이론 · 재귀 이론 · 자연어 처리(기계 번역 · 음성인식) · 버전 (버전 관리 시스템 · Git · GitHub)

1. 개요2. 상세3. 특징4. 설계5. 종류
5.1. 관계형(Relational)5.2. 키-값형(KV store)5.3. 객체형(Object)5.4. 문서형(Document)5.5. 컬럼 패밀리형(Column Family)5.6. 벡터형(Vector)
6. DB 에러7. 함께 보기

1. 개요

DataBase / DB

여러 사람에 의해 공유되어 사용될 목적으로 통합하여 관리되는 데이터의 집합을 말한다.

2. 상세

줄여서 DB. 특정 다수의 이용자들에게 필요한 정보를 제공한다든지 조직 내에서 필요로 하는 정보를 체계적으로 축적하여 그 조직 내의 이용자에게 필요한 정보를 제공하는 정보 서비스 기관의 심장부에 해당된다.

일반적으로 응용 프로그램과는 별개의 미들웨어[1]를 통해서 관리된다. 데이터베이스 자체만으로는 거의 아무 것도 못하기 때문에 그걸 관리하는 시스템과 통합돼 제공되며 따라서 정확한 명칭은 데이터베이스 관리 시스템(DBMS)[2]이 된다. 데이터베이스 제공되는 건 CSV같이 아주 단순한 데이터에 국한되는데 이걸 직접 사용하는 경우는 많지 않고 이런 데이터를 RAW데이터로 간주해 다른 DBMS시스템에 적재하고 사용하는 게 일반적이다.[3]

간단히 비유하자면 데이터베이스 자체는 화물(데이터)을 저장할 수 있는 창고 그 자체의 역할만 수행하고, 화물을 적재하거나 적재된 화물을 처리할 수 있는 능력은 없다. 이 때문에 DBMS라는 관리자들을 고용하여 화물을 적재하거나 이동시키는 등 크레인과 같은 여러가지 업무를 수행하도록 하는 것이다.

관계형 데이터베이스(RDBMS)가 가장 널리 쓰이고 있다. 그리고 이 관계형 데이터베이스를 이용하기 위한 표준 언어가 만들어져 있는데 그것이 SQL이다. 구조화 질의 언어(Structured Query Language)의 약자. 예전에는 관계형 데이터베이스가 데이터베이스의 대명사처럼 여겨졌으나 요즘에는 다른 형태의 데이터베이스도 많이 나와있다. 가히 데이터베이스 춘추전국시대. 이런 비-관계형 데이터베이스는 NoSQL이라 불린다. SQL을 사용하지 않는 데이터베이스라는 다소 장난스런 표현. 물론 정식 명칭은 각자 가지고 있다. 객체형, 문서형, 컬럼형 등등이 해당된다.

관계형 데이터베이스를 이용하기 위해 만들어진 SQL 문은 배워 두면 컴퓨터공학과 상관없는 분야라도 아주 쓸 데가 많다. 컴퓨터로 하는 일에서 대부분을 차지하는 작업은 바로 정렬탐색인데 이 두 작업을 가장 전문적으로 처리하는 건 데이터베이스이다. 컴퓨터로 계산을 하는 경우는 의외로 정렬과 탐색에 비하면 비중이 낮은 편이다. 근데 사실 이 과정이 결국 계산이다.

최근 SQL과 같이 데이터베이스의 정렬탐색을 활용하여 데이터를 전문적으로 처리하는 데이터 사이언티스트 직업이 주목받고 있다.

간혹 무겁게 DB까지 돌리지 말고 파일로 하나하나 저장해놓으면 DB보다 훨씬 간편하지 않냐는 사람도 있다. 하지만 파일의 경우 간단한 작업을 할 때는 DB에 비해서 간단하고 오버헤드[4]도 적은 편이나, 게시판을 만드는 등의 작업을 할 경우 DB에 비해서 훨씬 밀린다. 인덱싱, 멀티쓰레드 작업으로 인해 파일에 비해 더 빠르고, 파일에서 몇 줄로 처리해야 할 일들을 DB에선 단 한 줄만으로도 처리할 수가 있어서 본격적인 작업을 하려면 DB를 사용하는 것을 권한다. 이는 말하자면 개인간 소포를 보낼 때는 상대방에게 직접 최단거리로 보내는 것이 낫지만, 택배회사 급의 물량은 물류센터 없이 직접배송으로 처리할 수 없는 것과 같다.

기업들에서는 비형식적 데이터도 관리하기 위해 데이터 웨어하우스(DW)를 구축하는 경우가 많아졌다.

전산직 공무원 (전산 개발) 시험에서는 9급의 경우 컴퓨터일반 과목에서, 7급의 경우 데이터베이스 과목에서 다뤄지는 내용이다.

데이터베이스의 보안에는 3요소가 있다.[5]
데이터베이스 보안은 이 3가지가 상실되는 것을 막는 것을 의미한다. 방어 수단은 접근 제어, 추론 제어, 흐름 제어, 암호화 등이 있다.

3. 특징


정보처리기사 도서에서는 1. 동시공유 2. 계속적인 변화 3. 중복의 최소화 4. 실시간접근성 5. 내용에 의한 참조 라고 나와있는데 순서대로 "동계중 실내" 라고 외우면 편하다.

4. 설계

데이터베이스 설계 단계는 요구 조건 분석, 개념적 설계, 논리적 설계, 물리적 설계, 구현, 운영 및 개선 단계로 이루어져 있다.[7]

5. 종류

5.1. 관계형(Relational)

데이터베이스계의 주류. 아직도 주류의 자리에서 내려오지 않고 있다. 데이터를 로우(Row: 행, 줄)와 컬럼(Column: 열, 칸)이라는 일종의 표 형태로 저장한다.[8] 데이터의 종속성은 관계(Relation)으로 표현한다.

한 테이블에 있는 모든 로우는 같은 길이의 컬럼을 가지고 있으며 이 컬럼의 구조와 데이터의 관계가 테이블 스키마(Schema)로 사전 정의된다.

역사가 오래된 만큼 가장 신뢰성이 높고 데이터의 분류, 정렬, 탐색 속도가 빠르다. SQL은 고도로 정교한 검색 쿼리를 제공하며 상상하는 거의 모든 방식으로 데이터를 다룰 수 있게 해 준다. 또한 트랜잭션(Transaction) 지원이 매우 강력하여 신경만 제대로 써주면 데이터가 안 들어가는 경우는 있어도 잘못 들어가는 경우는 없다. 예를 들어 금융거래시 구매자 통장에서 돈이 빠져나가고 뒤이어 판매자 통장에 돈이 들어와야 거래가 정상적으로 끝나게 되는데 만약 판매자 통장을 관리하던 컴퓨터가 맛이 갔다고 한다면 RDBMS는 롤백을 통해 구매자 통장의 잔금을 원상복구 시키면서 거래를 취소한다. 여기선 간단하게 설명했지만 현실에서는 네트워크 이상, 데이터 비트 오염, 하드디스크 이상, 동시성 문제 등 데이터 무결성을 보장하기 위해 넘어야 할 산이 많다. 근데 이 모든 상황을 다 고려해서 그 어떤 상황에서도 데이터 무결성을 '보장'하는 게 RDBMS의 특징이다. 다른 타입의 DBMS는 이정도의 데이터 무결성을 보장하지 못한다. 한마디로 없는 돈이 허공에서 솟아날 수도 있고 있던 돈이 증발할 수도 있다.[9]

다만 스키마를 수정하기가 어렵고, 데이터가 2차원 표형태로만 출력되기 때문에 트리 구조로 조직화되는 '객체'들과 궁합이 잘 안맞는 게 문제다. 이 문제는 ORM(Object-Relation Mapping)기법으로 땜빵하고는 있으나 밑에 설명하는 객체형, 문서형 DB가 더 객체 친화적이므로 신규 프로젝트를 시작하는 경우라면 ORM과 객체형 DB사이에서 잘 저울질해보자.

다만 DBMS가 부하분산이 잘 안된다. 읽기 작업은 분산이 되지만 쓰기 작업을 분산하려면 고도의 기술력에 더해 전략까지 필요하다.

5.2. 키-값형(KV store)

모든 데이터를 키(Key)와 값(Value)의 쌍으로 매핑한다. Key를 어떻게 인덱싱했느냐에 따라 다르지만 보통 특정 값 하나를 찾아내는 데에는 가장 뛰어난 성능을 보인다. 하지만 데이터를 그룹화하고 정렬하는 기능은 없다시피하다. 대신 RDBMS에 비해 가볍고, 빠르고, 다루기 쉽다.

언뜻 보면 1차원 데이터만 다룰 수 있을 것 같이 생겼지만 Value에 넣을 수 있는 값이 자기 자신의 Key를 포함하여 Any object이기 때문에(크기 제한은 있을 수 있다) 대부분의 데이터를 다룰 수 있다. 물론 다른 DBMS는 이런 데이터 조직화를 도와주는 각종 도구를 제공하므로 2차원 이상 데이터는 KV store 말고 다른 걸 찾아보는 게 좋다.

웹 캐시나 세션 데이터, 쇼핑몰의 장바구니 데이터 등을 담는 데에 최적인 DB여서 이쪽으로 활용을 많이 한다. 그 외에 KV store는 데이터베이스의 크기가 상대적으로 작아 메모리에 통째로 올려놓고 구동하는 것도 쉽기 때문에 인-메모리 데이터베이스로 많이 사용된다. 인-메모리 데이터베이스는 그 특성상 매우 고속으로 동작하는 대신 데이터의 안정성을 전혀 보장하지 않는데 장바구니 같은 건 날아가도 상관없는 데이터이면서 반응이 즉시 와야 하는 성격이라 주로 선택된다. KV store로 세션을 처리하는 웹 서버도 하드디스크에 부담을 상당히 덜어주면서 반응이 아주 빠르다. 그러니까 일종의 '임시 데이터' 저장소로서의 입지를 굳게 다지고 있다.

5.3. 객체형(Object)

프로그래밍 언어에서 객체지향의 개념이 포함되었듯이, 관계형 데이터베이스 이후, 데이터베이스에서도 객체지향을 구현한 것이 바로 객체형 데이터베이스이다. 이러한 DBMS를 ODBMS라고 한다.

다만, 데이터베이스 분야에서는 ODBMS가 주류가 되지는 못했는데, 이유는 쿼리 사용이 복잡해지기 때문이다. 다른 형태의 DBMS가 도태된 이유와 같은 것. 때문에 아직까지도 RDBMS 방식이 널리 사용되고 있다.

5.4. 문서형(Document)

JSON 유사 형식의 문서로 데이터를 저장 및 쿼리하도록 설계된 비관계형 데이터베이스이다.
문서의 구조가 변화가 동적으로 허용된 문서형 데이터베이스는 바인더 서류철과 비슷한 성격을 가졌다. 바인더철에 추가로 종이를 꽂거나(삽입), 꽂힌 종이를 다른 걸로 갈아넣거나(갱신), 종이를 찾거나(조회) 하는 일에는 뛰어나지만 새로운 내용이 추가되어 목차가 바뀌거나 (구조변형), 여러 종이에 걸쳐 있는 어떤 값을 다 더하거나(통계) 하는 일에는 취약하다.
문서형 데이터베이스는 종이 하나에 모든 관련 데이터를 다 담아두므로 보통 다른 종이에 무슨 데이터가 어떻게 저장되든 상관하지 않는다. 인덱스만 있으면 인덱스와 관련된 하위 내용이 쉽게 조회된다.

관계형 데이터베이스와 문서형 데이터베이스의 차이점은 2차원 초과하는 데이터를 관계형 데이터베이스에 입력할 때 정규화해서 관계를 맺어야 하지만 문서형 데이터베이스는 인덱스의 하위 구조로 입력할 수 있다.
특히 데이터를 지속적으로 '쌓아 올리는' 응용(예를 들어 금융거래 기록 저장)에서는 성능이 관계형 데이터베이스에 비해 떨어진다.

키-값형 데이터베이스와 문서형 데이터베이스의 차이점은 문서의 구조 여부로 구분 할 수 있다 Key-Value는 문서의 구조를 표현할 수 없고, 문서형 데이터베이스는 문서의 구조를 mappings로 표현할 수 있다.

객체형 데이터베이스와 문서형 데이터베이스의 차이점은 구조의 강제고정 및 구조의 변경 가능여부이다. 대부분의 객체형 데이터베이스는 type으로 객체의 형태를 강제로 고정하며 type에 맞게 데이터를 삽입하고 데이터가 변경되지 않는 상태에서 객체의 형태를 변경할 수 있지만 MongoDB나 CouchDB같은 대부분의 문서형 데이터베이스는 할 수 없다.
MongoDB는 다음과 같은 기능을 제공한다.
* mappings.dynamic을 true로하면 자동으로 인덱싱되고, false로 하면 자동으로 인덱싱되지 않는다.
* MongoDB 6.0 이상에서는 데이터가 변경되지 않는 상태에서 문서의 구조를 수정 및 삭제하는 기능을 제공하지 않는다.

ElasticSearch또는 OpenSearch에서는 다음과 같은 기능을 제공한다.
* mappings.dynamic을 strict로 하면 문서의 구조가 다른 데이터를 추가할 수 없다.
* settings.index.mapping.ignore_malformed에서 true로 하면 문서에서, mappings.properties안의 각각의 Field에서 ignore_malformed를 true로 하면 Field에서 type이 다른 데이터를 입력하지 못하게 할 수 있다.
* POST _reindex?wait_for_completion=false을 사용하여 데이터가 변경되지 않아도 source에 작성한 문서의 구조에서 dest에 작성한 문서의 구조로 변경할 수 있다.

문서형 데이터베이스는 데이터가 다계층의 객체 형태일 때 객체형에 비해 상대적으로 쿼리가 단순하여 좋다.

5.5. 컬럼 패밀리형(Column Family)

컬럼 패밀리형는 컬럼들의 집합이다. 해쉬 테이블을 생각하면 되는데,하나의 테이블에 식별하기 위한 Key와 여러개의 컬럼이 달려 있는 형태의 컬럼 패밀리이다.카산드라 또는 HBase가 대표적인 컬럼 패밀리형 DB이다.

관계형, 객체형과 컬럼 패밀리형 데이터베이스의 차이점은 컬럼의 값이 컬럼의 통일성 여부이다. 관계형, 객체형 데이터베이스는 특정 행(row)에 특정 컬럼(column)이 있으며 값이 있을 수 있고 없을 수도 있다. 또한 컬럼에 순서가 없다. 그렇지만 컬럼 패밀리형은 특정 행(row)에 값이 있는 곳에서만 컬럼(column)이 있으며 컬럼(column)들 간에 순서가 있다.

문서형 데이터베이스와 컬럼 패밀리형 데이터베이스의 차이점은 조회시 문서구조의 강제여부이다. 대부분의 문서형 데이터베이스는 자료의 형태를 고정 할 수 없지만 컬럼 패밀리형 데이터베이스는 컬럼을 미리 정의 해서 사용하므로 자료의 형태를 고정할 수 없다.

컬럼 패밀리형은 관계형 데이터베이스에 비해 데이터를 검색, 분석을 빠르게 할 수 있도록 다양한 서버와 네트워크 시스템을 이해하고 구축해야 한다. 이에 따라 초보자는 클라우드 컴퓨팅 서비스로 제공되는 제품으로 가져다 쓰는 것이 좋다.

5.6. 벡터형(Vector)

비정형 데이터를 수치화해 벡터 형태로 저장해 데이터 간의 관계성을 쿼리하는데 특화된 데이터베이스. 벡터 데이터베이스에 입력된 데이터는 벡터 임베딩(또는 벡터화)되어 고차원 공간에서 벡터로 저장된다.

데이터 간의 유사성을 검색하는데 유리하기 때문에 ChatGPT 이후 LLM을 위시한 인공지능이 성장하면서 주목받고 있다.

6. DB 에러

각종 정보를 저장하는 데이터베이스(DataBase)의 약자가 DB 이기 때문에, 많은 곳에서 두부라는 애칭으로 불린다.
게임의 경우 게임의 실행파일을 제외한 그 나머지들, 책방이라면 책의 목록을 정리해 둔 PC, 웹사이트라면 회원정보나 게시물의 내용을 모두 저장해둔 서버 등, 뭔가를 운영하고 실행하기 위해 필수불가결한 존재이다. 하지만...

파일:attachment/두부/동음이의어/c0027899_479ac2ab233a1.jpg


이와 같이 웹 사이트를 이용하는 도중 갑자기 접속이 안되면서, 이 메세지와 함께(예시 화면은 제로보드 DB 접속 에러화면) 마왕으로 각성하는 경우가 있다.

웹 사이트와 마찬가지로 게임이나 유틸리티와 같이 컴퓨터에 설치되는 프로그램들도 자신의 DB에 이상이 생기면 에러메세지와 함께 작동불능이 되지만, 이 경우 이용자 개인의 불편사항에 머무르는 편이기 때문에 웹 사이트 서버의 DB 에러와 같이 여러 사람이 동시에 겪을 정도의 파괴력이 나오지 않아 마왕이라고 일컬어지는 일은 별로 없다.

디시에서도 실세갤의 판단 여부를 가늠할 때 두부에러가 얼마나 자주 일어나느냐에 따라 결정하던 시절이 있었다. 스갤은 실제로 명경기나 그에 준하는 사건이 터질 때 수시로 두부 에러를 일으켰다. 최근에는 서버 증설&이지디씨 무력화&갤 인구감소 등의 이유로 웬만해선 두부 에러를 보기 어렵다.

7. 함께 보기


[1] 미들웨어는 서로 다른 어플리케이션(응용프로그램)이 통신을 효율적으로 할 수 있도록 중간에 위치한 소프트웨어이다. 쉽게 예를 들자면 A마을과 B마을 사이에 개울이 있는데, 이를 그냥 건너도 무리는 없지만 옷이 젖거나 개울에 휩쓸려 넘어지는 사고가 발생할 수 있다. 따라서 교량(미들웨어)을 통해 효율적으로 서로 교류하고자 하는 것. 물론 차이가 심한 응용프로그램의 경우 미들웨어가 없으면 아예 서로 통신을 못한다.[2] DataBase Management System[3] 프로그래밍 언어란 대부분의 상황에서는 데이터베이스를 다루기 위해 존재하는 것이다. 프로그래밍 언어만 가지고는 조건문과 반복작업 그 이상의 일을 결코 할 수 없다.[4] 어떤 작업을 처리하는데 소요되는 자원이라고 생각하면 된다.[5] 이병욱.데이터베이스 총론.그린.2009.pp.350~351[6] 빠른 처리를 위해서 RAM에 올려서 돌리는 경우도 있다. 당연하지만 변경 사항을 보조기억장치에 저장하지 못한 상태에서 서버 전원이 나가면 변경사항은 개박살이 난다. 다만 대부분은 UPS가 있어 서버 째로 백업전원이 있고, 일부 서버나 하드웨어 형식의 램디스크 같은 경우엔 부품 자체에 데이터 휘발 방지용 비상 배터리가 달려있는 경우도 있다. RAID 카드에도 있는 경우가 있는데 휘발성인 RAM을 캐쉬로 사용하는 레이드 카드에서 캐쉬 데이터를 미처 저장하지 못하고 시스템이 뻑가버렸을 때(예시: 동생이 가정용 서버 컴퓨터의 플러그를 뽑아버려서 서버가 강제 종료된 경우) 일정 시간동안 캐쉬(RAM)에 저장된 데이터가 휘발하지 않게 해주는 역할을 한다. 물론 빨리 컴퓨터 시스템이나 전원설비를 고쳐서 다시 돌리지 않으면 언젠가는 배터리가 방전되고 극단적인 경우 레이드 볼륨이 깨져서 데이터가 공중분해 될 수도 있지만..(보통은 배터리까지 나갔더래도 캐쉬에 저장되어있던 데이터만 날아가는 게 일반적이긴 하다.)[7] 이기적in 정보처리기능사 실기 기능서, 영진닷컴, 2016, 1-194~1-195[8] 실제로 Microsoft Excel을 간단한 데이터베이스 용도로 쓰는 일이 많다.[9] 때문에 신뢰성이 목숨보다 중요한 은행들은 RDBMS를 쓴다. 카카오뱅크가 몇년 전 채널계(대외 연계 담당 시스템)에 MySQL을 도입했다는 것만으로 업계에 엄청난 화제가 되었을 정도이다. 기타 모든 은행들은 오라클 데이터베이스를 사용 중이며 카카오뱅크도 계정계(여-수신 등 금융 관련 핵심 시스템)는 오라클이다.