Chap 2. DataBase 개념, 종류 그리고 서버

Date:     Updated:

카테고리:

태그:

데이터베이스 개념

데이터란 컴퓨터 안에 기록되어 있는 숫자를 의미한다. 이러한 데이터의 집합을 데이터베이스라고 한다. 일반적으로 컴퓨터(전산)안에 기록된 정리된 형태의 데이터들의 모임이라 생각하면 된다.

데이터베이스 내의 데이터는 보존되어야 하기 때문에 비휘발성 저장장치(하드디스크, SSD 등)에 저장한다.

시스템 내의 데이터 베이스

데이터베이스는 일반적으로 큰 데이터센터의 서버에서 운용했다. 하지만 기술이 발전함에 따라 PC 혹은 휴대용 기기에도 내장된다. 작은 저장장치 안에서 DB가 있는 경우도 있고 매우 큰 저장장치 그리고 클라우드와 같은 웹 서버에도 DB가 존재한다. 데이터 베이스는 일반적으로 큰 서버에서 운용하는 것으로 웹시스템, POS기기 등 소통한다. 데이터베이스의 활용도는 무궁무진하다.

DB와 DBMS

DB는 데이터베이스의 줄임말, DBMS는 DB를 효율적으로 관리하는 소프트웨어 ‘데이터베이스 관리 시스템(DataBase Management System)’의 약자이다.

DBMS가 필요한 이유.

  • 생산성

시스템 개발 과정에서 생산성 향상을 도모한다. 시스템에서 데이터 검색, 추가, 삭제, 갱신과 같은 처리가 이루어진다. 이런 기능을 DBMS가 제공한다. 즉 개발 초기 시스템 데이터 제어기능을 만들 필요가 없이 DBMS 소프트웨어를 쓰면 되는 것이다. 당연히 효율적이다.

  • 기능성

DBMS는 데이터베이스를 다루는 많은 기능이 있다. 복수 유저의 요청에 대응하기, 대용량의 데이터를 저장하고 고속으로 검새하는 기능 등을 제공한다. 더불어 DB 관리 기능을 유저가 확장할 수도 있어 유연하게 시스템을 개발할 수 있다.

  • 신뢰성

대규모 데이터베이스는 많은 요청에 대응할 수 있도록 만들어져 있다. 이를 위해 하드웨어를 여러 대로 구성하여 신뢰성과 성능을 향상시킨다. (하드웨어를 여러 대로 구성하는건 ,, 안전성을 위한 것 같다. 하나가 날라가도 더미 혹은 예비 파일을 서로 그물망처럼 유지하기 위해서!)

많은 DBMS가 DB의 데이터를 다른 저장장치로 export하거나 input하여 신뢰성을 높인다.

SQL은 데이터베이스를 조작하는 언어이다.

SQL은 IBM이 개발한 SEQUEL이라는 관계형 데이터베이스 조작용 언어를 기반으로 만들어졌다. 현재 ISO 등에 의해 표준화되어 표준 언어가 되었다! 즉, DB 검색, 생성, 삭제, 갱신을 하기 위한 명령언어라고 생각하면 된다.

⭐SQL명령의 종류

  • DML (Data Manipulation Language)

DB에 새롭게 데이터를 선택, 추가, 삭제 그리고 갱신하는 등, 데이터를 조작할 때 사용한다. SQL의 가장 기본이 되는 명령어이다. SELECT, INSERT, UPDATE, DELETE가 이에 해당하는 구문이다. DML 구문이 사용되는 대상은 테이블의 행이다. 따라서 테이블이 반드시 정의되어 있어야 사용가능하다.

트랜잭션이 발생하는 SQL도 DML에 속한다. (테이블의 데이터를 변경할 때 실제 테이블에 완전히 적용하지 않고 임시로 적용시키는 것.)

트랜잭션이란 “쪼갤 수 없는 업무 처리의 최소 단위”를 말한다.

  • DDL (Data Definition Language)

DB는 ‘데이터 베이스 객체(object)’라는 데이터 그릇을 이용하여 데이터를 관리한다. 객체는 DB, 테이블, 뷰, 인덱스 등이라 생각하면 된다. DDL은 이러한 객체를 생성, 삭제, 변경하는 정의어이다. CREATE, DROP, ALTER 구문이 이것이다.

DDL은 트랜잭션을 발생하지 않는다. 즉, ROLLBACK이나 COMMIT을 사용하조 못하고 **실행 즉시 MySQL에 적용된다.

  • DCL (Data Control Language)

데이터 제어하는 명령어이다. 트랜잭션을 제어하는 명령, 데이터 접근 권한을 제어하는 명령어가 포함되어있다. 즉, 누가 데이터베이스를 관리할 수 있는지 설정해두는 명령어이다. GRANT, REVOKE, COMMIT, ROLLBACK 구문이 이것이다.

데이터 베이스의 종류

DBMS에는 여러 종류가 있다. DB의 사용용도, 제어하는 프로그래밍 환경 등 조건에 맞는 다양한 DBMS가 고안되었기 때문이다. DB중에도 SQL로 데이터를 다루는 DB를 관계형 데이터베이스(RDB : Relational Database)라고 한다. 요즘 DB는 거의 관계형 데이터베이스를 채택하였다.

DB 종류

DBMS는 데이터 저장 방법에 따라 몇 가지로 분류할 수 있다.

  • 계층형 DB

폴더와 파일 등의 계층 구조로 데이터를 저장하는 방식이다. 하드디스크나 DVD 파일 시스템이 계층형 DB이다. 간단하게 PC에 폴더 안에 폴더, 파일을 저장하는걸 계층이라 생각하면 된다. 요즘은 잘 안쓰인다. (짐작건데 효율이 많이 떨어지고 안정성이 떨어짐, 상위 폴더가 삭제되면 다같이 사요나라니까. 그리고 서로 연계하기가 힘들고)

  • 관계형 DB

‘관계 대수’라는 것에 착안한 DB이다. 관계 대수란, 행과 열을 가지는 테이블 형식의 저장형태의 DB이다. (정확히 같은건 아님) 테이블 형식이란 2차원 데이터를 말한다. 엑셀 시트처럼. 관계형 DB는 이러한 표를 잔뜩 저장하고 각 표에 이름을 붙여 관리한다. DB안의 데이터는 SQL 명령어로 조작 가능하다. 각 테이블별로 관계를 맺고 서로 영향을 주고 받기 때문에 관계형 DB라고 한다.

  • 객체지향 DB

짧게 요약하자면 ,, 자바나 C++처럼 객체를 중심으로 객체 그대로 DB에 데이터 형식으로 쾅하고 저장하는 것을 말한다.

  • XML DB

XML이란 자료 형식을 가르키는 용어로, 태그를 이용해 마크업 문서를 작성할 수 있게 정의한 것이다. HTML과 흡사하다. 태그는 $데이터$와 같은 형식으로 표현하다. 이러한 방식으로 데이터를 저장하는 DB이다. XML DB는 SQL 명령을 사용할 수 없다. XQuery라는 전용 명령어를 사용한다.

  • 키-밸류 스토어(KVS)

키와 값(밸류)라는 단순한 형태의 데이터를 저장하는 DB이다. 간단하게 ,, Python 딕셔너리처럼 일련의 값-밸류의 조합이 저장된 DB이다. 열 지향 데이터 베이스이다.

SQL을 활용하는 DB는 관계형 데이터베이스이다. RDBMS는 오래됐지만 여전히 주류를 이룰만큼 완성도가 높다고 생각한다.

RDBMS 사용 시스템

RDBMS는 다양한 시스템에서 사용된다. 메인 프레임은 대부분 RDBMS를 사용한다. 요즘은 소형 워크스테이션으로 대체되기도 함. 그럼에도 RDBMS를 큰 범용 저장장치에 두고 웹 시스템, 클라이언트/서버 구조로 사용한다. 인터넷을 통해 크고 작은 시스템(ex 예약시스템, 게임 시스템 등)과 DB를 연결하며 사용한다. 또는 저장장치 소형화 혹은 소프트웨어 발전으로 대부분의 장치에 RDBMS를 내장하여 사용한다.

DB 제품

RDBMS는 관계형 DB를 관리하는 소프트웨어를 통칭하는 것이다. RDBMS형 소프트웨어의 이름은 각기다르다. 밑에 유명한 RDBMS 제품을 알아보자.

  • Oracle

오라클에서 개발한 RDBMS로 역사가 깊고 많은 시스템에서 사용한다. 거즉 표준이라 생각해도 된다.

  • DB2

IBM이 개발한 RDBMS이다. 오라클과 같이 오래된 역사를 갖고 있지만 IBM 컴퓨터에서만 구동이 가능했었기 때문에 시장 점유율이 낮았고 인지도가 떨어졌다.

  • SQL Server

마이크로소프트가 개발한 RDBMS로 윈도우 플랫폼에서만 동작한다. 비교적 새로운 제품으로 윈도우가 서버 분야로 영역을 넓히면서 SQL Server를 사용하는 시스템이 많이 늘었다.

  • PostgreSQL

오픈소스 커뮤니티가 개발한 RDBMS이다. 무료 소프트웨어로 자유롭게 사용할 수 있고 실험적인 기능이 포함되어 있따.

  • MySQL

MySQL은 PostgreSQL처럼 오픈소스 커뮤니티에서 태어난 RDBMS이다. 초기에 경량 데이터베이스라는 점을 강조하며 최소한의 기능만 갖추었다. 현재는 기능이 확장되면서 다른 RDBMS만큼 많은 기능을 갖고 있다.

  • SQLite

오픈소스 커뮤에서 만들었고 임베디드 시스템에 사용되는 작은 RDBMS이다.

DB 서버

많은 RDBMS가 클라이언트/서버 모델을 채택했다. 특히 웹 시스템과 연동하는 RDBMS는 접속자 수가 수백 명에 달하는 전용 데이터베이스 서버를 운용하기에 네트워크로 연결된 서버에 대한 이해가 필요하다.

클라이언트/서버 모델

클라이언트(시스템 사용자)가 SQL 명령으로 서버(안의 DB) 접속 및 데이터를 요청하면 서버는 그 결과를 반환하는 것이 클라이언트/서버 모델이다. 일반적 RDBMS는 네트워크에 하나의 서버를 두고 독점 사용한다. 물론 우리처럼 공부를 하는 입장에서 서버를 하나 만들어 이를 독점하는건 어렵지 돈이 많이 드니까. 따라서 임의로 PC가 클라이언트와 서버 역할을 다 수행하게 운용을 한다.

웹 시스템은 브라우저(크롬같은)와 웹 서버로 구성된다. 브라우저가 사용자가 지정한 URL과 연결된 웹 서버에 요청을 보낸다. 아마 요청은 대부분 ‘해당 페이지를 접속하고 싶다’이다. 이러한 종류의 요청을 웹 용어로 ‘리퀘스트’라고 한다. 요청을 받은 웹 서버는 그에 맞는 처리를 합니다. HTML로 된 데이터를 클라이언트에게 반환하고 해당 데이터는 네트워크를 통해 전송된다. 이를 웹 용어로 ‘리스폰스’ 응답이라고 한다. 응답을 받으면 브라우저는 데이터를 통해 페이지를 열것이다.

RDBMS의 클라이언트/서버

RDBMS도 웹 시스템과 마찬가지로 모델 시스템이 구성되지만 단순 요청 및 응답을 되풀이하진 않는다.

DB 사용자 인증을 해서 DB에 접근하여 SQL을 이용하여 소통한다. 서버와 네트워크가 가동되면 클라이언트가 SQL 명령을 보내고 서버는 이에 대해 응답한다.

웹 애플리케이션 구조로

웹 애플리케이션은 웹 서버와 DB 서버의 조합으로 구축된다. 웹 사이트가 정적인 HTML만으로 구성된다면 웹 서버 만으로도 시스템을 구현할 수 있지만 애플리케이션을 만들 구조라면 즉, 동적으로 HTML을 활용하려면 서버에 DB와 제어용 프로그램이 필요하다. 웹 서버에는 CGI라 불리는 동적 콘텐츠 확장 방식이 있다. 이를 통해 웹 서버 간을 연동, 통신하여 처리한다.

이를 해결하는 프로그래밍 언어로 펄(perl)이나 PHP, 루비(Ruby) 등 스크립트 언어가 사용된다. 윈도우는 ASP, NET을 많이 사용하고 자바와 Servlet과 같은 조합도 사용한다. (사실 이게 무슨 말인지 잘 모른다 ㅎ)

동적 웹 시스템과 CGI

클라이언트 브라우저는 모니터에 HTML 문서를 통해 출력한다. 그리고 원하는 처리를 위해 HTML 문서를 서버에 요청하면 CGI로 프로그램을 실행하여 HTML을 생성하고 이를 반환하여 제공한다. 따라서 실제로 데이터베이스에 접속하는 것은 PHP나 루비 등의 스크립트 언어로 만든 CGI 프로그램이다. 즉, CGI 프로그램이 새로운 클라이언트가 되어 DB에 필요한 sql 명령을 전달하고 전환받은 데이터를 다시 브라우저에게 보내는 형식이다. (45p)

자, 다시 정리하자면, 동적 웹 시스템과 소통을 하는 과정. 브라우저에서 원하는 값을 요청하면 웹 서버 안에는 CGI 프로그램에서 처리를 시작한다. CGI는 또다른 서버에 있는 DB에 접속하여 SQL 명령어를 통해 데이터(HTML)를 받는다. 이를 동적으로 데이터를 생성하는 것이라 보면 된다. 받은 동적 HTML을 다시 브라우저에게 보낸다.

이와 같이 웹 서버와 DB 서버가 다른 저장 장치에 두면 처리가 분산되어 시스템 전체 성능이 향상된다. 때문에 대규모 시스템은 웹 서버, DB 서버를 여러 대로 구성하여 운영한다.

MySQL 서버와 mysql 클라이언트

위에서 말한 것 같이 원래 서버와 클라이언트는 분리되어 있다. 하지만 MySQL을 공부하는 환경은 한정적이기 때문에 패키지 다운을 통해 서버와 클라이언트 모두 PC에서 진행된다. 명령 실행 방법은 다양하다. 커맨드인 mysql 클라이언트를 사용하거나 Workbench를 사용하기도 한다.

클라이언트/서버 모델은 시스템의 하드웨어 구성을 유연하게 변경할 수 있도록 하기 때문에 서버 능력에 따라 추가 혹은 분산하여 성능을 높일 수 있다.


본 게시물은 ‘SQL 첫걸음 - 한빛미디어’책과 이수안컴퓨터연구소 MySQL 데이터베이서 한번에 끝내기 영상을 참조하여 정리한 글입니다.

SQL 카테고리 내 다른 글 보러가기

댓글 남기기