프로그래밍언어 자바

11.1 데이터베이스 개요

이번 강좌에서는 응용 프로그램에서 데이터를 효과적으로 관리하고 공유하기 위한 데이터베이스의 기본 개념과 대표적인 데이터베이스의 특징을 비교해 보고 용도에 따라 적합한 데이터베이스를 선택하는 방법을 배운다.

이 강의를 통해 데이터베이스의 기본 개념을 이해하고 개발 목적에 적합한 데이터베이스를 선택하고 개발에 적용할 수 있다.



데이터베이스란 ?

데이터베이스는 데이터를 체계적으로 관리할 수 있도록 해주는 소프트웨어로 거의 모든 프로그램은 어떠한 형태로든 데이터베이스를 사용하고 있다고 볼 수 있다. 예를 들면 스마트폰의 주소록이나 메모 응용프로그램의 각종 정보들은 스마트폰에 내장된 SQLite 라는 데이터베이스를 사용하거나 네트워크를 통해 원격 서버의 데이터베이스를 연동해 동작한다.

데이터베이스(Database)

사전적 용어로 데이터베이스는 여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합을 말하며 여러 응용 시스템들의 통합된 정보들을 저장하여 운영할 수 있는 공용 데이터들의 묶음으로 정의 된다. 즉, 데이터베이스는 방대한 데이터를 쉽게 검색하거나 찾을수 있도록 체계적으로 분류하고 정리해 둔 정보의 집합이라고 할 수 있으며 디지털화된 정보만을 의미하는 것은 아니다.

DBMS(DataBase Management System)

현실적으로 데이터베이스는 컴퓨터의 도움 없이는 운영이 어렵기 때문에 DBMS라고 불리우는 소프트웨어 시스템을 사용하게 된다. 널리 알려진 Oracle, MS SQL, IBM DB2, MySQL 등은 모두 DBMS 이다.

DBMS는 그 자체로 거대한 운영체제라고 볼수 있을 정도이며 효과적인 데이터파일 관리와 운영을 위한 구조와 함께 인덱싱, 캐싱, 네트워크 서버, 사용자 및 권한관리, 백업/복원, 클러스터링등 다양한 기능들을 제공하고 있다.

의미적으로 데이터베이스와 데이터베이스 관리 시스템인 DBMS는 다르다고 볼 수 있지만 보통 데이터베이스라고 하면 DBMS를 포함한 개념을 말한다.

일반적으로 이야기 하는 데이터베이스의 특징은 다음과 같다.



데이터베이스 종류

데이터베이스는 데이터를 관리하는 구조의 특징에 따라 몇가지 유형으로 구분된다. 그 중 가장 대표적인것은 관계형데이터베이스 이며 그외에도 계층형, 네트워크형, 객체형, NoSQL 형등이 있다. 현재 대부분의 데이터베이스는 관계형 데이터베이스 이며 최근 들어 NoSQL 형태의 데이터베이스 활용이 늘어가는 추세 이다.

관계형 데이터베이스(Relational Database Management System)

관계형 데이터베이스는 전통적이고 가장 보편적인 형태의 데이터베이스로 데이터 구조를 테이블(Table)이라고 하는 컬럼과 로우 구조로 정의하고 관리하며 SQL(Structured Query Language)을 사용해 데이터를 관리하는 시스템을 말한다. 특히 테이블과 테이블의 관계 지정을 통해 연관성 있는 데이터들을 체계적으로 구조화 할 수 있다.

[그림: RDBMS 테이블 구조 -> 그림 개선 예정]

Oracle, IBM DB2, MS SQL, MySQL 등이 관계형 데이터베이스로 유명하며 관계를 가지는 데이터 구조를 필요로 하는 경우 가장 적합한 데이터베이스이다. 관계형 데이터베이스의 장단점은 다음과 같다.

관계형 데이터베이스는 데이터가 구조화 되어 있고 모든 데이터가 동일한 구조를 따른다고 할때 유리하다. 예를 들어 학생들의 성적을 관리하기 위한 학사정보 시스템의 경우 학생정보, 성적정보, 강좌정보 등으로 구성 되고 성적정보는 학생정보, 강좌정보와 연결되는 구조 이다. 즉, 성적 테이블에는 학생의 학번과 과목코드, 성적등을 가진다고 하면 학생 테이블에는 학생의 이름, 연락처, 학과등의 세부정보를 가지고 강좌 테이블에는 과목명, 담당교수, 학점, 강의시간 등에 대한 정보를 가지게 된다.

이처럼 각각 독립된 정보를 가지고 필요시 관련 정보를 연계하는 구조의 경우 관계형 데이터베이스가 적합하다.

NoSQL 데이터베이스

NoSQL 은 말 그대로 SQL 을 사용하지 않는다는 의미로 SQL을 사용하는 전통적인 RDBMS가 아니라는 의미로 사용되는 데이터베이스를 말한다. 물론 SQL과는 다를수 있지만 데이터 관리를 위해 별도의 쿼리언어나 구조는 여전히 존재 한다.

NoSQL은 RDBMS의 가장 큰 특징인 테이블 형태의 데이터 구조를 사용하지 않기 때문에 형태가 고정되지 않은 비정형 데이터 처리에 유용하다. 대표적으로 MongoDB, Redis, Casandra, Hbase, CouchDB 등이 있다.

[그림: NoSQL 데이터 구조]

데이터 구조는 Map 구조의 Key, Value, JSON 구조의 Document, Big Table 등을 사용하며 NoSQL 데이터베이스들의 특징이 되기도 한다. NoSQL 데이터베이스의 장단점은 다음과 같다.

관계형 데이터베이스와 달리 NoSQL은 모든 데이터가 동일한 구조를 가지고 있지 않은 경우 유리하다. 또한 빠른 처리 속도를 위해 필요한 데이터를 별도 참조하지 않고 모두 포함하는 형태에 적합하다고 볼 수 있다.

예를 들어 앞의 학사정보 시스템을 NoSQL 로 구성한다면 앱에서 필요로 하는 화면의 정보를 모두 담고 있는 문서 구조가 된다. 즉, 학생정보, 과목정보, 성적이 모두 하나의 문서에 포함된 형태이다.

일반적으로 데이터 구조화나 관리 보다는 다양한 구조의 데이터빠른 속도로 처리하는 용도 특히 데이터 발생량이 많고 과거보다는 현재의 데이터가 더 중요한 SNS나 모바일 앱 혹은 데이터 분석을 위해 일회성으로 대용량 데이터를 사용하는 경우 적합 하다.

데이터베이스 동작 방식

데이터베이스는 일반적으로 다음과 같이 세가지 형태의 동작 방식으로 운영할 수 있다.

내장형(파일형)

단순히 데이터 파일만으로 데이터베이스 역할을 수행하며 별도의 프로그램 설치등이 필요 없기 때문에 프로그램에 쉽게 포함시킬 수 있다. 다만 하나의 프로세스만 파일을 사용할 수 있기 때문에 다중 사용이나 작업에 불편함이 있을 수 있고 데이터의 크기나 구조가 복잡할수록 성능이 저하 되는 문제가 있다.

네트워크 서버형

가장 일반적인 형태로 네트워크를 통해 접속 가능한 서버로 동작하는 데이터베이스를 말한다. 네트워크를 통한 접속이 가능하기 때문에 네트워크 보안이나 안정적인 서버 운영을 위한 별도의 관리가 필요하다.

인메모리형

메모리 데이터베이스로 데이터를 메모리에 저장하고 관리하는 방식이다. 매우 빠른 속도를 제공하지만 많은 양의 데이터를 처리하기 위해서는 시스템의 메모리 비용이 증가하게 되고 전원이 꺼지면 데이터도 소멸되는 특징이 있다.

데이터베이스는 대부분의 경우 네트워크 서버형으로 동작하며 개발이나 테스트과정에서 효율을 위해 내장형 데이터베이스를 사용하기도 하며 특수한 목적의 운영을 위해서 경우에 따라 인메모리형 데이터베이스를 사용하기도 한다.



내게 맞는 데이터베이스 선택하기

앞에서 데이터베이스 종류와 운영방식에 따른 분류를 살펴 보았다. 그렇다면 어떤 데이터베이스를 선택하고 사용해야 하는지 알아 보도록 한다.

데이터베이스 비교

먼저 가장 널리 알려진 데이터베이스들의 특징과 장단점을 비교해 보도록 한다.

데이터베이스 종류 특징 권장 적용규모
Oracle RDBMS 가장 유명한 상용 데이터베이스 가격이 비싸고 운영을 위해 전문가 필요 대규모
MySQL RDBMS 가장 유명한 공개 데이터베이스 오라클에 인수 되었으며 무료 사용에 제약 개발, 중소규모
MariaDB RDBMS MySQL을 대체하는 오픈소스 데이터베이스 MySQL의 오라클 인수로 인한 제약 문제 해결 중소 ~ 대규모
H2 RDBMS 경량의 자바 기반 데이터베이스 내장, 네트워크, 인메모리등 다양한 운영이 가능하며 오픈소스 개발, 소규모
MongoDB NoSQL 가장 유명한 NoSQL 데이터베이스 무료에서 상용, 클라우드 서버, 모바일 개발등 다양한 옵션 제공 개발, 중소 ~ 대규모
Firebase NoSQL 구글에서 제공하는 클라우드 데이터베이스 안드로이드, 프론트엔드 개발 및 구글 클라우드 연동에 최적화 개발, 중소 ~ 대규모
[주요 데이터베이스 비교]

데이터베이스 선택

그렇다면 여러 데이터베이스 중 어떤 데이터베이스를 선택하는 것이 가장 좋을까? 여기서는 개인이 웹 혹은 모바일 개발을 공부하기 위한 용도에 적합한 데이터베이스를 선택하는데 도움이 되는 몇가지 선택 유형을 소개하고자 한다.

우선 특별한 경우가 아니면 Oracle, MS SQL, IBM DB2 등 대형 상용 데이터베이스는 배제한다. 대부분의 경우 커뮤니티 버전이나 대학생의 경우 무료로 사용할 수 있어 비용이나 라이센스에 대한 문제는 없을 수 있으나 이들 데이터베이스는 기본적으로 대형 시스템에서 서비스 운영을 위해 만들어진 것으로 학습 단계에서는 다음과 같은 문제가 있다.

따라서 목표하는 학습에 집중하기 위해 최대한 단순하고 관리하기 편한 제품을 선택하길 권장 한다.

자바 및 자바 웹

일반적으로 자바 및 JSP, Servlet 등의 자바 웹 개발을 배우는 과정에서 MySQL을 많이 추천한다. 커뮤니티 버전을 무료로 사용할 수 있으며 설치가 비교적 간단하고 관리 도구도 제공하며 온라인에서 많은 도움을 받을 수 있다. 그러나 설치의 과정이 필요하고 네트워크 서버 방식으로만 운영되어 어느정도 관리의 필요성이 있다.

여기서는 다음과 같은 이유로 H2 데이터베이스를 추천하다.

H2 는 거의 모든 표준 관계형 데이터베이스와 호환 가능하며 JDBC, JPA 등 모든 자바 데이터베이스 관련 기술 학습이 가능하며 특히 스프링 프레임워크 개발이나 학습에도 많이 사용하고 있다.

안드로이드

안드로이드의 경우 SQLite 라고 하는 내장 데이터베이스가 기본적으로 포함되어 있다. 다만 성능이 좋지 않고 로컬 스토리지만 사용하는 관계로 기기 교체시 데이터 손실 위험이 있고 동일한 서비스가 웹, 모바일, 데스크톱등 멀티 플랫폼으로 개발된 경우 데이터 공유가 안되는 문제가 있다.

또한 일반적인 관계형 데이터베이스를 사용할 수도 있으나 이 경우 데이터 제공을 위해 별도의 Rest API 를 구현해야 하고 별도로 서버를 운영해야 하는 문제가 있어 안드로이드 앱 개발 학습에 집중하기 어렵다. 이외에도 모바일 앱의 특성을 고려한 실시간 데이터 동기화나 네트워크 장애에 효과적으로 대응하는 부분에 있어서도 불편한 부분이 많다.

여기서는 다음과 같은 이유로 구글의 Firebase 를 추천한다.

Firebase 는 안드로이드 이외에도 웹 및 자바 개발에 사용할 수 있으나 안드로이드가 아닌 일반 자바 애플리케이션에 사용하는데 제약이 있고 Rest API 방식은 실시간 데이터 동기화를 비롯한 장점들을 활용할 수 없으니 참고바란다.



실습: 데이터베이스 설치

데이터베이스 이해 및 JDBC API를 사용해 자바에서 데이터베이스 연동 프로그램 개발을 배우기 위해 H2 데이터베이스를 설치 합니다.

H2 데이터베이스에 대한 간략한 소개와 설치는 다음 강좌를 참고 합니다.

실습 코드랩