공부용 블로그

RDBMS 개념 익히기 본문

설계/RDBMS

RDBMS 개념 익히기

tomato212 2018. 10. 31. 12:33


RDBMS를 '관계형' 데이터 베이스라 하는데 그럼 데이터베이스란 무엇인지 먼저 알아보자. 


데이터 베이스란 체계화 된 데이터의 모음이다. 즉, 작성된 목록으로써 여러 응용 시스템들의 통합된 정보들을 저장하여 운용할 수 있는 공용 데이터들의 묶음이다. 


여러 사람이 공유하고 사용할 목적으로 통합 관리되는 정보의 집합이다. 논리적으로 연관된 하나 이상의 자료의 모음으로 그 내용을 고도로 구조화함으로써 검색과 갱신의 효율화를 꾀한 것이다. 즉, 몇 개의 자료 파일을 조직적으로 통합하여 자료 항목의 중복을 없애고 자료를 구조화하여 기억시켜 놓은 자료의 집합체라고 할 수 있다.


- 위키백과


데이터 베이스의 역사를 살펴보자.

(http://www.datanet.co.kr/news/articleView.html?idxno=114558 페이지를 읽고 +모르는 단어 의미 추가함)


톰 길번과 가상메모리

2차 세계대전을 전후해서 대서양을 사이에 두고 유럽과 북미에서 진행됐던 진공관을 이용한 전자식 컴퓨터의 개발은 아이오와 대학의 ABC 컴퓨터, 펜실베니아 대학의 애니악, 폰 노이만의 애니박 등 많은 성과를 낳았다. 펜실베니아 대학에서 애니악을 만든 에커트와 모클리가 QWERTY 키보드 타자기로 유명한 레밍턴 랜드사에 합류해 최초의 상용 컴퓨터인 유니박을 만들고, 이에 자극 받은 토마스 왓슨 주니어가 IBM의 본격적인 컴퓨터 산업 진출을 결정하고 IBM 701을 만들면서 두 회사간 본격적인 메인 프레임 컴퓨터 경쟁의 시대에 접어들게 됐다.

당시 보조기억장치에 비해서 턱없이 부족한 메인 메모리 사이트에 대한 대안으로 멘체스터 대학의 톰 길번가상 메모리페이징, 그리고 멀티 프로그래밍이이라는 개념을 제안했다. 톰 길번이 제안한 가상 메모리 개념은 현대의 컴퓨터에서도 여전히 중요하게 쓰이는 혁신적인 개념으로, 1956년 시작돼 1962년에 완료된 아틀라스(Atlas) 프로젝트에서 완성된다. 이후 발전하는 가상메모리와 페이징 그리고 페이징 교체 알고리즘에 대한 다양한 아이디어는 DBMS의 버퍼 캐시를 관리하기 위한 알고리즘의 토대가 됐다.




IBM 701 operator's console


1) 진공관

진공속에서 금속이 가열될 때 전자가 방출되는 열전자방출 현상(에디슨 효과)을 전기장으로 제어하여 정류, 증폭 등의 특성을 내는 금속회로가 들어간 유리 부품.

과거 전자회로의 부품으로 많이 쓰임. 진공관의 발명으로 인해 전기공학과 전자공학이 구분되기 시작함. 옛날에는 라디오부터 컴퓨터까지 전자회로라 불리는 것에는 모두 쓰였다. 하지만 부품크기, 발열, 짧은 수명 등의 단점이 있다. 


2) 가상 메모리 

메모리로서 실제 존재하진 않지만 사용자에게 있어 메모리로써의 역할을 하는 메모리이다. 다시 말해 프로그램이 수용될 때는 가상 메모리의 크기에 맞춰 수용되는 것이다. 그러나 가상 메모리에 수용된 프로그램이 실행될 때는 실제 물리 메모리를 필요로 하게 되는 것이다. 그렇다면 가상 메모리는 왜 필요한 것일까. 컴퓨터 시스템이 구조적인 발전을 거듭하기 위해서는 참으로 많은 인력과 시간의 투자가 있어야 한다. 처리 속도가 빨라지는 것. 메모리가 증가되는 것. 모뎀 속도가 향상 되는 것 등의 발전은 결코 쉬운 것이 아니다. 보다 중요한 것은 프로그램의 용량이 커지는 것에 비해 메모리 용량을 크게 한다는 것은 참으로 많은 걸림돌이 존재한다는 것이다. 그렇기에 프로그램을 사용하는 이들로서는 한정된 메모리의 크기를 고려해야 한다. 바로 이러한 문제를 해결하기 위해 등장한 것이 가상메모리인 것이다. 


예를들어, 나에게 필요한 수백권의 개발 관련 책들이 있다. 그러나 책상에 보관할 수 있을만큼만 구입할 수 있다면?
책상옆에 책장을 마련해 그곳에 필요한 개발 관련 서적들을 꽂아두고 당장 필요한 책만 뽑아서 책상으로 옮겨 온다면 책상 크기에 맞춰 서적을 구입하는 문제가 해결될 것이다. 

책 = 프로그램
책장 = 가상 메모리
책상 = 물리 메모리 

가상 메모리는 실제 메모리보다 훨씬 큰 용량을 가지고 있다. 
10배에서 20배까지라고 생각해두면 될 것이다. 그렇기에 프로그램 사용자들은 실제 메모리 용량이 아닌 가상 메모리 용량에 맞춰 프로그램을 사용할 수 있기에 보다 자유로울 수 있는 것이다. 그렇지만 가상 메모리안에서 프로그램이 실행될 때는 실제 메모리에 머물러 있어야 하는 것이 아닌가. 당연한 말이다. 그러나 프로그램이 실행될 때 반드시 프로그램 전체가 실제 메모리에 있을 필요는 없다. 현재 실행되어야 하는 부분만이 실제 메모리에 옮겨져 있으면 되는 것이므로 실제 메모리 용량보다 큰 프로그램이 가상 메모리를 통해 실행 가능하게 된 것이다. 그렇다면 여기서 꼭 짚어봐야 할 것이 있다.
가상 메모리에 프로그램이 실행될 경우 어떤 과정을 통해 실제 메모리로 옮겨지게 되는 것일까. 책장에 꽂혀 있는 수백 권의 책들 중에서 현재 읽어야 할 책들을 보다 빠르고 정확하게 옮겨다 줄 무언가가 필요한 것처럼 말이다. 바로 이러한 역할을 맡고 있는 것을 mapping이라고 한다. 현재 mapping은 MMU라는 하드웨어를 통해 지원되고 있다. 


*MMU(Memory Management Unit)
메모리를 효율적으로 관리할 수 있도록 여러가지 기능을 하드웨어로 구현한 반도체 칩. CPU와 메모리의 중간에 위치하여 프로그램에서 사용되는 가상 주소를 메모리에 해당하는 물리 주소로 변환하는 작업을 수행한다.   

가상 메모리와 실제 메모리 사이에서 재빠른 중계의 역할을 맡고 있는 매핑은 paging과 segmentation, 그리고 이 두가지 방식을 혼합한 방법 등 3가지가 있다. 가장 각광받고 있는 방법은 paging이다. 

3) 페이징
페이징 방식에서는 가상 메모리상의 주소 공간을 일정한 크기의 페이지로 분할하게 되는데 실제 메모리 또한 가상 메모리와 같은 크기로 페이지를 분할하게 된다. 페이지는 1byte, 2byte, 4byte등으로 시스템에 따라 그 크기가 정해져 있지만 대부분의 경우 4byte의 크기를 사용한다. 페이지 크기는 단편화를 고려해 작을수록 좋겠지만 무조건 작은 것 역시 문젯거리가 발생한다. 페이지 크기를 작게 한다는 것은 그만큼 페이지수가 많아지는 것을 의미한다. 이렇게 되면 페이지 단위의 입출력이 너무 자주 일어나게 되어 그만큼 전체적인 시스템 처리 성능이 저하되기 때문이다. 

그렇다면 페이지 테이블이란?
가상 메모리와 실제 메모리를 페이지로 나누어 놓았다고 해서 페이지끼리 자율적으로 매핑을 할 수 있을까. 바로 매핑이 가능하기 위해서는 가상 메모리의 페이지와 실제 메모리의 페이지를 연결시켜 주기 위한 매핑 테이블이 필요하다. 페이지 테이블은 가상 메모리의 페이지 넘버와 실제 메모리의 페이지 프레임이 하나의 순서쌍으로 저장되어 있는 도표이다. 이러한 도표를 사용하여 프로그램에서 사용되는 가상 주소를 실제 메모리 주소로 변환하게 된다. 도서관에서 몇 번 책장에 어떤 책이 꽂혀 있다는 열람자료가 없다면 우리는 책 한권을 찾기 위해 온종일 헤맬지도 모르는 일이다. 

*페이지 프레임
가상 메모리에서 사용되는 하나의 페이지에 대응하는 실제 메모리 영역. 가상 메모리에서 사용되는 페이지와 같은 크기를 갖고 있다. 

Q. 가상 메모리에서 사용되는 페이지와 같은 크기를 갖고 있으면 결국 실제 메모리의 용량도 가상 메모리 만큼 커지는 것 아닌가?가상 메모리를 실제 메모리보다 훨씬 더 크게 쓸 수 있다고 했는데? 

이러한 페이지 테이블은 가상 메모리 안에 존재하게 되는데 페이지 테이블이 메모리 안에 존재함으로써 시스템 성능은 하락할 수 밖에 없다. 왜냐하면 메모리 영역에 두 번의 접근을 시도해야 하기 때문이다. 페이지 테이블을 통해 주소를 찾기 위한 한번의 접근과 페이지 테이블을 통해 확인된 실제 메모리 페이지 프레임에 접근하는데  또 한번이 필요하다. 이러한 문제점을 해결하기 위해 앞서 언급한 MMU라는 하드웨어를 통해 매핑시키는 것이다. 프로그램 외부 영역에 위치한 하드웨어의 지원을 받아 매핑 기능을 수행하게 되면 매핑을 위한 메모리 접근이 필요하지 않기 때문이다. 

Q. 그럼 MMU를 통해서 페이지 테이블에 접근하고 페이지 프레임을 찾는다는 것? 아니면 페이지 테이블에서 찾을 필요없이 MMU가 알아서 가상에서 물리주소로 변환?

이제 가상 주소의 bit에 대해 알아보자.
주소 bit을 살펴보는 이유는 그 안에 어떤 정보들이 담겨있기에 가상 메모리 주소가 실제 메모리 주소를 찾아 가는가를 알아보기 위해서이다. CPU에서 하나의 프로세스가 수행되기 위해선 주소버스(address bus)를 통해 주소 비트(address bit)를 보내게 된다. 

* 주소 버스(address bus)
메모리의 주소가 전달되는 버스를 말하며, 주소 비트란 메모리에 주소를 지정하기 위하여 사용되는 비트를 말한다. 

CPU가 갖는 주소 버스가 32bit일 경우 32bit의 가상 주소 비트가 보내지는 것이다. 32bit의 가상 주소 비트가 보내지면 이 중 20bit를 차지하는 가상 페이지 넘버를 가지고 페이지 테이블을 찾게 된다. 또한 나머지 12bit의 페이지 내부 주소(offset)를 가지고 페이지의 상대적인 위치를 찾게된다. 다시 말해 가상 페이지 넘버를 가지고 실제 메모리 상의 페이지 프레임의 시작 번지를 찾게 되고, 페이지 내부 주소를 가지고 현재 필요로 하는 데이터가 페이지 프레임 내부 어디에 위치해 있는지 확인하게 되는 것이다. 바로 페이지 프레임 시작 번지에 내부 주소를 더해야만 실제 주소가 구해지는 것이다. 이렇게 실제 페에지 주소를 찾기 위해 사용되는 가상의 주소를 PTE(Page Table Entity)라고 한다. 

(가상 메모리 출처 http://l2men.tistory.com/21)

.

.

.

.

위의 데이터 베이스의 역사는 링크 주소를 통해 더 자세히 읽어보도록 하자.

(DB의 전체흐름을 파악하기는 좋으나 정리(관련 용어 검색)하다 지침)

아래는 데이터 베이스의 전체적인 흐름에 대해 간단히 정리.



60~70년대는 DBMS의 개념이 등장해서 시장에서 자리잡기 시작할 무렵이었고, 80년대에는 관계형 DBMS를 중심으로 단순 OLTP(On-Line Transaction Processing) 업무에 널리 사용되기 시작했다.

90년대 초반부터 데이터 웨어하우스와 같은 대용량 데이터 처리와 인터넷 전자상거래와 관련한 하이엔드 OLTP 업무에 DBMS 기술이 적용됐다. 90년대 중반부터는 ERP와 CRM 등 솔루션 레벨의 소프트웨어가 DBMS의 주요 응용분야가 되고 있다. 이제부터 네 가지 주요 DBMS를 등장과 발전과정을 중심으로 알아보자.


파일시스템

계층형 DBMS (Hierarchical Database: HDB)

네트워크형 DBMS (Network Database: NDB)

관계형 DBMS (Relational Database: RDB)

객체형 (Object-Oriented Database: OODB)

객체관계형 (Object-Relational Database: ORDB)

NoSQL DB

NewSQL DB








'설계 > RDBMS' 카테고리의 다른 글

페이지 알고리즘  (0) 2018.11.04
DataBase 아키텍처(오라클)  (0) 2018.11.04
DataBase가 생겨나게 된 배경  (0) 2018.11.03
RDBMS 후보군 검토 중 이해안가는 부분 - ing  (0) 2018.11.03
mysql 연결 오류  (0) 2018.10.02