-->
품생품사(品生品死)

소프트웨어 품질에 살고 품질에 죽는 그런 평범한 일상 블로그

TESTING/PROGREMING

[데이터베이스 정보] 기본 개념에 대해서 상세하게 알아보기

품생품사(品生品死) 2020. 12. 9. 07:00
반응형

데이터베이스 이론 - 기본 개념

(1) DBMS라는 프로그램을 사용해야하고,

(2) DBMS는 결국 SQL이라고 하는 언어로 조작해야 한다고 했습니다.

 

이 SQL이 무엇인지 좀더 자세히 알아보겠습니다.

 

1. SQL의 역사

1970년대 초, IBM이라고 하는 컴퓨터 회사는 System/R이라는 DBMS와, 이것을 사용하기 위해 필요한 언어인 SEQUEL을 만들었습니다. SEQUEL은 Structured English Query Language의 줄임말입니다. SEQUEL은 '씨퀄'이라고 발음되었습니다.

 

그런데 SEQUEL은 그 단어가 이미 다른 곳에서 사용되고 있다는 문제(상표권 문제) 때문에 그 이름이 SQL(Structured Query Language)로 변경되었습니다. 이런 역사 때문에 아직도 SQL을 보고 ‘씨퀄’이라고 발음하는 분들도 있습니다. 그것보다는 ‘에스큐엘’이라고 정확하게 발음하는 것이 좋습니다.

 

SQL은 그 뒤로 IBM, 오라클이라고 하는 회사 등에 의해 제각각 발전하기 시작했습니다. 그러다가 1987년, 국제 표준화 기구(ISO)에서 SQL에 관한 국제 표준(ISO 9075:1987)이 제정되었습니다.

 

ISO 9075:1987

Information processing systems Database language SQL

www.iso.org

그 뒤로 해당 표준은 기존 내용이 개정되고, 새로운 내용들이 추가됨으로써 발전해갔고, 2020년 6월 기준으로 현재는 2019년 개정안이 최신입니다.

 

정리하면 현재 SQL은 공인된 국제 표준이 있습니다. 하지만 우리가 실제로 사용하는 SQL은 이 국제 표준에 완벽히 부합하지는 않습니다. 이게 무슨 말일까요? 그것은 바로 Oracle, Microsoft SQL Server, MySQL 등의 DBMS에서 지원되는 SQL이 표준을 완벽히 준수하지는 않는다는 뜻입니다.

 

각 DBMS의 SQL들은 SQL 국제 표준을 일부 준수하기는 하지만, 그 준수 정도가 각각 다릅니다.

 

예를 들어, 각 DBMS들은

(1) 표준에 있는 기능을 지원하지 않거나

(2) 표준에 있는 기능이더라도 다른 표현법을 사용하거나

(3) 표준에는 없는 기능을 지원하는 등의 방식으로 표준을 조금씩 어기고 있고, 그 모습도 DBMS마다 다릅니다.

 

사람의 언어에 비유하자면, SQL 국제 표준이라는 '표준어'가 존재한다면 실제로 각 DBMS가 지원하는 SQL은 '사투리'처럼 조금씩 차이가 있는 것입니다.

 

왜 이런 현상이 발생하는 것일까요?

 

그 이유는 다양하지만 일단 많은 DBMS 회사들이 '성능 향상'과 '더 다양한 기능 제공'을 위해서, 차라리 표준을 일부 벗어나는 것을 택하는 경우가 많기 때문입니다. 그리고 DBMS에 관한 모든 사안에 대해서 표준에 기재되어 있는 것도 아니기 때문에, 그런 부분들에 있어서 DBMS마다 차이가 발생하기도 합니다.

 

그래서 SQL을 배울 때는 본인이 사용할 DBMS의 SQL을 바로 공부하는 것이 가장 정확하고 빠른 길입니다.

하지만 너무 실망하지 마십시오. SQL마다 조금씩 차이가 있더라도 서로 비슷한 부분이 훨씬 더 많기 때문에, 일단 한 DBMS의 SQL만 제대로 배워두면, 다른 DBMS의 SQL을 배우는 것은 어렵지 않습니다.

 

혹시라도 SQL 문을 썼는데 원하는 결과가 나오지 않더라도, 해당 DBMS에서 같은 기능을 구현하는 다른 표현법을 검색하면 되기 때문입니다. 중요한 건 SQL을 쓸 때 필요한 개념과 원리를 이해하는 것입니다.

 

자, 다음으로는 우리가 사용할 DBMS인 MySQL에 대해서 간단히 살펴보겠습니다.

 

2. MySQL이란?

MySQL이라는 DBMS에 대해 알아보겠습니다.

 

MySQL은 현재 페이스북, 유튜브 등을 비롯한 유명한 서비스에서도 활발히 사용되고 있는 DBMS입니다. 

MySQL은 가장 처음 MySQL AB라고 하는 스웨덴 회사에서 개발되었습니다. 그 뒤로 MySQL AB는 2008년, Sun Microsystems라는 회사에 인수되었습니다.

 

Sun Microsystems는 지금 IT 분야에서 아주 중요한 프로그래밍 언어인 자바(Java)를 개발한 회사입니다. 그리고 유닉스 계열의 솔라리스(Solaris)라고 하는 운영 체제를 만들기도 한 회사입니다.

 

2010년에 Sun Microsystems는 Oracle이라는 회사에 인수되었고, 이에 따라 자연스럽게 MySQL 또한 Oracle의 소유가 되었습니다. 

 

그럼 Oracle은 어떤 회사일까요? IT 분야에서 일하는 사람이라면 이 회사의 이름을 한번쯤은 들어봤을 겁니다. Oracle은 회사명과 같은, 오라클이라는 DBMS를 서비스하고 있는 회사로, 오라클은 현재 기업용 데이터베이스 시장에서 압도적인 영향력을 발휘하고 있는 DBMS입니다.

 

Oracle은 저작권을 매우 중요시하고, 기술을 상업화해서 이윤을 창출하는 능력으로도 유명한 회사입니다. Oracle은 구글이 자사의 자바 API를 무단으로 베껴서 안드로이드를 만들었고 이것은 '저작권 위반'이라고 주장하며 소송을 제기하기도 했습니다.

 

사실 Sun Microsystems가 Oracle에 인수될 때, 많은 사람들이 Oracle이 자사의 DBMS인 오라클의 영향력을 더 넓히기 위해 MySQL을 시장에서 퇴출시키지 않을까하는 걱정을 하기도 했습니다. 그래서 MySQL을 만들었던 초기 개발자들은 회사에서 나와 MariaDB라고 하는 오픈소스 프로젝트를 시작하기도 했죠. 이 MariaDB 또한 오늘날 인기가 많은 DBMS 중 하나입니다.

 

다행히도 MySQL은 아직 오픈 소스 소프트웨어로 누구나 자유롭게 사용할 수 있습니다. 그리고 그 소스코드를 살펴볼 수도 있습니다.

 

MySQL

Oracle Corporation. MySQL has 20 repositories available. Follow their code on GitHub.

github.com

그런데 MySQL의 특이한 점은 Oracle의 상업용 라이센스로도 제공된다는 점입니다.

 

보통의 경우에는 MySQL을 오픈 소스 소프트웨어로 생각하고 별다른 제한 없이 사용해도 되지만, 만약 오라클에서 제공하는 MySQL에 관한 추가 서비스, 상시 기술 지원 등을 원한다면 상업용 라이센스를 사야합니다.

 

이 뿐만 아니라

  • 만약 MySQL의 소스 코드를 가져다가 일부를 수정하고 
  • 자신의 제품의 일부로 만들어서 재배포하는 상황에서
  • 그 소스코드를 공개하지 않으려는 기업이 있다면 

이 경우에도 상업용 라이센스가 필요합니다. 관련 내용이 궁금하신 분은 아래 링크를 참조하시기 바랍니다.

 

MySQL :: Commercial License for OEMs, ISVs and VARs

Commercial License for OEMs, ISVs and VARs Updated July, 2010 MySQL Commercial License for OEMs, ISVs and VARs Oracle provides its MySQL database server and MySQL Client Libraries under a dual license model designed to meet the development and distribution

www.mysql.com

Oracle은 자사의 기존 DBMS인 오라클과 기업 인수를 통해 얻게 된 MySQL을 둘다 잘 서비스하고 있습니다. 알려진 바에 따르면, 오라클과 MySQL 둘다 기술적으로 장단점이 다르고, 어떤 면에서는 상호보완적인 관계의 DBMS이기 때문에 Oracle에서 둘다 잘 관리해나갈 것으로 보인다는 이야기가 많습니다. 

 

실제로 두 DBMS의 시장에서의 쓰임새를 보면 약간의 차이가 있습니다. 은행, 거래소 등과 같이 데이터 처리의 정확성, 운영의 안정성 등이 엄격하게 요구되는 분야에서는 오라클이 주로 사용되고 있고, 우리가 흔히 쓰는 앱, 웹 사이트 같은 서비스를 만들 때는 MySQL을 쓰는 경우가 많습니다. 이는 아무래도 오라클이 애초에 신뢰도가 중요한 비즈니스 분야에 적합하게 설계되어 있고, 해당 영역에서의 역사도 길기 때문입니다. 대신 MySQL은 무료로 사용할 수 있고 좀더 가볍다는 점이 장점이죠. 

 

MySQL은 여러 DBMS 중에서도 특히 일반 사용자가 사용하기 편하다는 평가를 받습니다. 그리고 간단히 사용해볼 때 요구하는 컴퓨터 성능도 작은 편이라 부담이 덜합니다. 게다가 IT 세계에서는 LAMP(Linux + Apache + MySQL + PHP/Perl/Python)라고 하는 개발 플랫폼의 조합이 이미 관용어가 됐을 정도로, 많은 개발자들이 보편적으로 쓰는 DBMS이기도 합니다.

 

이런 이유때문에 사용할 DBMS로 MySQL을 선정했습니다. 위에서 말한 것처럼 이 MySQL에서 쓰이는 SQL과 그것을 사용하기 위해 필요한 개념들을 잘 익혀두면, 나중에 다른 DBMS에서 쓰일 SQL도 쉽게 배울 수 있습니다. 

 

3. DBMS와 서버-클라이언트 구조

자, 이제 DBMS가 뭔지, SQL이 뭔지 감이 오시나요?

이전 노트에서 말한대로 우리는 MySQL이라는 DBMS를 사용하겠습니다. 

 

그런데 그 전에 알아야할 한 가지 사실이 있습니다.

우리는 데이터베이스를 관리할 때 DBMS가 필요하다는 사실을 배웠습니다. 아래 화면 기억나시죠? 

 

This is db_0001
DB 서버-클라이언트 구조

그런데 DBMS에는 주요 구성 요소인 두 종류의 프로그램이 있습니다. DBMS 내부를 좀더 자세히 들여다보겠습니다.

 

This is db_0002
(이미지 속 DB는 데이터베이스(Database)의 줄임말입니다)

 

위 그림에서 왼쪽에 client라고 쓰인 부분 보이죠? 그리고 오른쪽에는 server라고 쓰인 부분이 보입니다. client와 server의 의미는 다음과 같습니다.

 

(1) client(클라이언트 프로그램) : 사용자가 server에 접속해서 원하는 데이터베이스 관련 작업을 할 수 있도록, SQL을 입력할 수 있는 화면 등을 제공하는 프로그램

(2) server(서버 프로그램) : client로부터 SQL 문 등을 전달받아 데이터베이스 관련 작업을 직접 처리하는 프로그램

(DBMS라고 할 때, 좁은 의미로 이 server 부분만을 가리키는 경우도 있습니다)

위 그림에는 여러 client들이 server에 접속하는 모습이 보입니다.

 

대부분의 DBMS가 이런 식으로 client를 통해 server에 접속하는 구조로 되어 있습니다.

 

그리고 자세히 보면 server 안에 DB(데이터베이스)가 포함돼있죠? 이전 영상에서 말했듯이 사실 데이터베이스는 DBMS와 분리된 것이 아니라, 이렇게 server가 직접 저장하고 관리하는 데이터의 집합인 겁니다. 

 

이 그림에 나타난 DBMS의 전체적인 구조를 알고 있어야, 이후에 DBMS를 설치할 때, DBMS를 사용할 때 불필요한 혼란을 줄일 수 있습니다.

 

결국 DBMS를 사용한다는 것은, 실행되고 있는 server에 client를 이용해서 접속한 후, 원하는 명령을 내린다는 뜻입니다. 

 

우리가 사용할 DBMS인 MySQL의 서버 - 클라이언트 구조를 간단히 설명해보겠습니다.

MySQL에서 서버 프로그램의 이름은 ‘mysqld’입니다. 이 프로그램이 실행되고 있을 때 사용자가 클라이언트 프로그램을 사용해서 접속하면 되는 겁니다.

 

MySQL의 클라이언트 프로그램 이름은 ‘mysql’입니다. 서버 프로그램과 이름이 비슷합니다.

mysql은 보통 CLI 환경에서 사용합니다.

 

This is db_0003
CLI 환경

위 이미지는 CLI 환경에서 mysql(client)을 사용해서 server에 접속한 후, 데이터베이스 관련 작업을 하는 모습입니다.

그런데 mysql을 이렇게 CLI 환경에서 사용하는 것은 아무래도 좀 불편하기도 하고, 개발자가 될 사람이 아니면 굳이 몰라도 되는 부분입니다. 

 

CLI 환경이 아니라 GUI 환경에서 mysql을 사용하는 것도 가능합니다. mysql을 GUI 환경에서 사용할 수 있도록 해주는 프로그램을 사용하면 됩니다. 그런 프로그램에는 여러가지가 있습니다. 그 중에서도 Oracle이 공식적으로 제공하는 MySQL Workbench라는 좋은 프로그램이 있습니다. 아래 이미지를 참고하시기 바랍니다.

 

This is db_0004
MySQL Workbench

위 이미지는 MySQL Workbench를 사용해서 server에 접속한 후, 원하는 데이터베이스 관련 작업을 하는 모습입니다.

사용하려는 것도 바로 이 MySQL Workbench입니다. 방금 전에 말했듯이, MySQL Workbench를 사용하면 CLI 환경이 아닌 GUI 환경에서 server에 접속해서 데이터베이스 관련 작업을 할 수 있습니다.

 

 

Related References

 

코딩이 처음이라면, 코드잇

월 3만원대로 Python, JavaScript, HTML/CSS, Java 등 1,600개 이상 프로그래밍 강의를 무제한 수강하세요

www.codeit.kr:443

This is db_000
DB 프로그래밍

요약 : sparta coding club, 스파르타 코딩, 코드잇, 노마드 코더, 프로그래밍, 직장인 코딩, 내일 배움 카드 코딩, 밀크티 코딩, 초등 코딩, 아이스크림 코딩, 코딩 소프트웨어, 데이터베이스, SQL, MySQL, DBMS

728x90
반응형