본문 바로가기
스타트업/만들기

DB란 무엇인가?

by 회색연필 2018. 7. 12.

데이터베이스(사진 @Pixabay)



"DB가 뭐예요?"

몰라서 묻는 게 아니다. 아니 사실 몰라서 묻는 거다. 

DB가 뭘까? 자료구조론에서 배우는 그건가? 

왜 배우지? 

다들 SQL, 테이블을 말하지만 그게 왜 쓰이는지 말해주는 사람이 없다. 

초보자는 답답하다. 그래서 정리해 보았다.


1. 도대체 DB가 뭐예요?


DB는 두가지 의미로 불린다. 

하나는 DB 어플리케이션이다. 

둘째는 데이터 그 자체이다. 

혼용해서 부르기 때문에 알아서 들어야 한다.

참고로 어플리케이션이란, 

PC 프로그램 같은 걸 통털어서 부르는 말이다.

유래가 있는데 여기선 넘어가자.


전자는 데이터를 관리하는 전용 어플리케이션이다. 

제품으로는 "오라클"이나 "MySQL"이 있다. 

설치를 위해 Disk 상에 물리적인 공간을 필요로 한다.


"안드로이드 앱 개발할 때는 필요없는데요?"

그래, 필요가 없다. 

sqlite 가 있기 때문이다. 

참고로 sqlite는 폰 전용 DB다. 

나도 모르게 있어서 필요 없다고 생각한 거다.


"전 코딩을 잘해서 직접 개발해서 쓸 건데요~"

물론, 나 혼자 쓰는 거라면 직접 짜도 상관 없다. 

하지만, 데이터가 많거나 여러 명이 함께 써야 한다면 많은 기능이 필요하다. 

그래서 보통 처음부터 DB 어플리케이션을 사용한다.


2. DB가 왜 필요해요?


계산기 앱은 DB가 필요없다. 사진기 앱도 마찬가지다. 

하지만, 예약시스템은 아니다. 

어딘가 인터넷에 데이터를 저장해야 한다. 

사용자 많으면 다수의 데이터를, 서비스가 복잡하면 많은 량의 데이터를 저장해야 한다.


데이터를 구조화 해서 저장하고 삭제하다 보면, 

좀 안정적으로 작동하는 프로그램을 찾다 보면, 

DB 어플리케이션을 쓰는 게 낫겠다 싶다.


2인 이상이 동시에 데이터를 수정하거나 

1,000명 이상이 몰려들면 생각보다 만들어야 할 기능이 많아진다.


원래 그런 목적으로 만들어진게 DB 어플리케이션이다. 

그래서 가성비, 안정성 측면에서 DB를 사용하게 된다.


3. SQL 이 뭐예요?


DB가 발전하면서, 데이터에 접근할 때마다 C 로 프로그램을 짜니 귀찮았다. 

그래서 컴파일하지 않고, 명령어를 치면 바로 데이터가 나오는 언어를 만들었다.

그게 SQL (Structured Query Language)이다. 

표준이 있기는 한데 제조사마다 조금씩 다르다.


요즘은 SQL을 통하지 않고서는 DB프로그램에서 데이터를 꺼내올 수 없다. 

SQL이 데이터를 꺼내오는 창구역할을 하기 때문이다.


문법은 쉬운 편이다. 

나름 프로그래밍 언어라 이걸로 다소 복잡한 프로그램을 만들 수도 있다. 

변수 선언도 가능하고 Function 이나 Procedure 도 가능하다.


어쨌든 서버 프로그램을 짜다 보면 이건 필수다. 

초보라면 책을 하나 사자. 

체계적으로 배워두면 아무래도 편하다. 

열심히 공부하면 1~2주에 마스터 할 수 있다.


4. 꼭 SQL을 알아야만 하나요?


이론적으로는 SQL을 쓰지 않고 개발할 수 있다. 

하지만, 현실적으로는 거의 불가능하다. SQL은 필수다. 

현대 기업에서는 데이터가 기업의 자산이다. 

따라서 DB를 안쓰는 기업은 없다.


서버 프로그램은 대부분 응용프로그램과 DB어플리케이션이 종합되어 작동한다. 

그래서 SQL 을 이용해 프로그램을 짜는 것은 서버 개발 입문 과정에 해당한다.


mongodb 같이 NoSQL 계열도 있다. 

하지만 제품특성이 달라서 그것만 쓰는 경우는 흔치 않다. 

그러니 시간 날 때 익혀두도록 하자.


5. RDBMS 와 NoSQL 는 뭐가 다른가요?


RDBMS 란 Relational Database Management System 이다. 

"관계형 데이터베이스"라고 읽는다. 

여기서 관계란 상관관계, X와 Y, 2차원 구조를 말한다.


회사 문서의 대부분은 표로 되어 있다. 

2차원 데이터이다. 

회계문서는 더욱 그렇다. 이런 2차원 도표를 "테이블"Table이라고 한다.

그래서 RDBMS 는 데이터 기본구조가 "테이블"이다. 

검색, 저장, 수정 등의 로직들이 다 그렇게 만들어졌다.


그런데, 표가 아닌 데이터에는 사용하기 불편했다.

mp3, 블로그 본문 등은 표로 표현할 수 없다. 

새로운 자료구조가 나오긴 했지만, 

종종 굳이 이렇게까지 써야 하나 싶다. 

그래서 NoSQL 이 등장했다.


NoSQL 은 비교적 자료구조가 간단하다.

그래서 자료구조를 내맘대로 쓸 수 있다. 

쉽고 자유도가 높다.

대신 전체적으로 관리할 때 까탈스럽다.

SQL같은 내부조작 언어가 있긴한데, 문법이 Java 랑 많이 닮았다.

db.collection.find() 이런 식이다.


NoSQL 을 쓰면 문서단위 데이터 처리가 편하다. 

document 기반이라고 표현한다. 

하지만, 복잡한 통계함수를 사용하긴 불편하다.

2차원 데이터로 표현해야 하기 때문이다.


초보자라면 RDBMS 로 먼저 시작하기를 추천한다. 

왜냐하면 참고서적이 많아서 그렇다.


6. DB를 따로 공부해야 하나요?


대부분의 DB는 "데이터 관리자 모드"와 "개발자 모드"가 있다. 

일반 User 와 DBA (Database Administrator) 모드라고 표현한다. 

눈에 안보이지만, 기능들이 나뉘어져 있다. 


개발자 모드는 웹 페이지에서 버튼 클릭시 DB에 데이터를 저장하는 케이스다.

관리자 모드는, 1억건 정도의 태그정보를 한번에 업데이트하거나 삭제하는 케이스를 말한다.


개발자 모드는 비교적 간단하다. 

Create, Query, Delete, Update (=CRDU)만 할 줄 알면 된다. 

더 많이 알면 좋겠지만, 몰라도 대부분의 기능구현은 한다.


하지만, 관리자 모드는 해당 어플리케이션을 깊게 공부를 해야 한다. 

정확히 말하면 DB어플리케이션 다루기 공부다. 

Oracle DBA 는 오라클 잘 다루는 사람이다. 

MySQL, Oracle, Informix 등 제품마다 조금씩 다르다. 

대부분 같지만 각 회사 제품만의 특징들이 있다.


7. 오라클이 뭐예요?


오라클은 전세계 RDMS 시장을 거의 독점하고 있는 회사다. 

옛날에는 Informix, Sybase 등 경쟁제품이 많았다. 

하지만, 요즘은 이 제품의 점유율이 월등히 높다. 

우리나라는 은행권이나 공공부문에 거의 다 들어가 있다. 

심지어 MySQL 도 오라클이 샀다.


사실 오라클도 개발자 모드에서는 별다른 장점이 없다. 

그냥 다른 RDBMS 제품이랑 똑같다.


하지만, "관리자 모드"는 다르다. 

아마 실시간 백업 및 복원이 제대로 지원되는 유일한 제품일 것이다. 

그리고 빵빵한 기술지원 조직들이 있다. 

물론 유료이긴 하지만... 

비싼 요금을 받는다.


최근 클라우드의 등장으로 시장이 죽을 걸로 예상했다. 

하지만, 빠른 태세전환으로 잘 살아가고 있다. 

아마 앞으로도 그러지 않을까 싶다.


"매트릭스"에서 선지자 "오라클"이 이 제품을 빗대어 만들었다.


8. ERD는 왜 그리는 거예요?

ERD는 RDBMS 상에서 사용되는 데이터베이스 논리구조다. @Pixabay


메인프레임 시절에는 복잡한 기능의 서버 프로그램을 만들기 어려웠다. 

그래서 데이터 중복 오류가 일어나지 않게 DB 어플리케이션 상의 관리로직들이 있었다.


그러다 보니 테이블을 미리 그려 놓고 상호 의존성을 체크하는 일이 중요했다. 

특히 테이블 100개 이상을 머리로 관리하기는 어려웠기 때문이다.


그래서, 먼저 종이에 그려보는 과정이 있었다. 

그게 ERD 이다. 

Entity Relational Diagram. 

이건 이야기하자면 길다. 

그러니 일단은 넘어가자.


테이블 수가 작으면 안 그리기도 한다.  

귀찮아서...


하지만, 초보라면 꼭 그려보기를 추천한다. 

의미 없는 거라도 그려보기 시작하면 복잡한 머리 속이 정리된다. 

고수들도 거의 그렇게 그린다.



반응형

댓글