데이터베이스 아키텍처 - 역사
12 Dec 2020 | DB StandAlone Client/Server 3-tier WebIndex
- 데이터베이스의 아키텍처
- 역사와 개요
- 가용성과 확장성의 확보
- 다중화
- Clustering - DB 서버의 다중화
- Replication - DB 서버와 데이터의 다중화
- Shared Nothing - 성능을 추구하기 위한 다중화
진행중인 스터디에서 Web 서비스 아키텍처에 대해 공부하게 되었다. 그러던 중 아키텍처의 역사가 궁금해 책 ‘데이터베이스 첫걸음’을 통해 데이터베이스 구축시 고려해야 할 기본적인 아키텍처 패턴들을 역사와 함께 정리해보았다.
데이터베이스의 아키텍처
역사
데이터베이스의 아키텍처 역사는 3단계로 나눠 볼 수 있다.
- Stand-alone(~1980년대)
- Client-Server(1990년대~2000년)
- Web 3계층(2000년 ~ 현재)
Stand-alone
데이터베이스만으로 시스템이 성립하는 가장 간단한 아키텍처이다. 직역하면 ‘혼자’라는 의미인데 문자 그대로 데이터베이스가 동작하는 머신(여기서는 ‘데이터베이스 서버’ 또는 ‘DB 서버’로 부른다)이 LAN이나 인터넷 등의 네트워크에 접속하지 않고 ‘독립되어’ 동작하는 구성이다.
이 구성에서는 데이터베이스의 미들웨어(DBMS)와 애플리케이션의 소프트웨어는 같은 DB 서버에서 동작한다. 매우 놀랍게도 데이터베이스를 사용하고 싶은 사용자는 DB 서버가 설치된 장소까지 직접 가서 사용해야 하며, 네트워크 접속이 되지 않아서 물리적으로 떨어진 장소에서 접근하는 것이 불가능하다. 또한 복수의 사용자가 동시에 작업할 수도 없다. 지금으로서는 상상도 못하겠다. 너무 불편해보인다.
Client / Server
시스템 초창기 모든 머신은 Stand-alone이었다. 드디어 데이터베이스를 네트워크!에 연결하기 시작했다. 이제는 복수의 사용자가 물리적으로 떨어진 장소에서 데이터베이스에 접속할 수 있게 되었다. 이렇게 데이터베이스 서버 1대에 두 명 이상의 사용자 단말이 접속하는 구성을 ‘클라이언트/서버’ 구성이라 한다. 이 구성은 2개 Layer로 구성되기 때문에 2계층 구성이라 부르기도 한다. DB 에서는 DBMS가 동작하고 Client에서는 비즈니스 로직이 동작하는 분업체제이다.
Client / Server 구성은 클라이언트 PC와 네트워크 기술의 발전으로 1990년대에 수많은 비즈니스 시스템에 채용되었다. 이 구성은 주로 기업이나 조직 내 닫힌 네트워크(LAN)에서 이용되었다. 하지만 데이터베이스가 매우 중요한 정보를 축적하고 있는 서버이기에 보안상의 이유로 외부 네트워크를 거쳐 데이터베이스 서버에 접속하는 일은 없었다. 현재 아키텍처의 주류는 아니지만, 조직 내에서 제한된 용도의 시스템으로 이용되고 있다.
서버와 클라이언트의 구별
역할(기능)에 따라 머신을 구별하기 위해 붙여진 이름이다. ‘클라이언트’란 엔드 사용자가 직접 조작해서 수행하고 싶은 처리 명령을 내보내는 머신이다. 주로 데스크탑, 노트북, 스마트폰, 태블릿을 예로 들 수 있다. ‘서버’는 클라이언트로부터 받은 명령을 실행하여 비즈니스 로직을 실행하기 위한 머신으로, 용도에 따라 ‘웹 서버, 애플리케이션 서버, DB 서버’등의 이름을 붙인다.
단점
- 인터넷에서 직접 데이터베이스에 접속하는 것에 대한 보안 위험
- 불특정 다수가 사용하는 클라이언트에서의 애플리케이션 관리비용 증가
관리비용 문제란 Client / Server 시대에서는 개인이 이용하는 PC에 애플리케이션을 설치해 동작하도록 했다. 이런 애플리케이션을 네이티브(Native) 애플리케이션이라 부른다. 현재 우리가 사용하고 있는 스마트 폰에서 수많은 앱들이 네이티브 앱으로 설치되어 있음을 생각하면 더 와닿을 것이다. 그러나 인터넷을 통해 전 세계 불특정 다수의 사용자가 이용하는 애플리케이션은 각종 환경에 대응해 애플리케이션을 작성해야 하고, 각각에 대한 버전관리나 버그 수정 버전을 배포하는데 비용이 들게 된다.
때문에 비즈니스 로직을 실행하는 애플리케이션을 서버에서 관리해 비용을 절감하자 라는 요구가 나왔고 이에 대응하기 위해 제시된 것이 ‘Web 3계층’ 구조이다. 그 결과 사용자 쪽에서는 애플리케이션 갱신을 신경쓰지 않아도 되는 세상이 오게 되었다.
Web 3계층 (3-Tier 아키텍처)
- 웹 서버
- 애플리케이션 서버
- DB 서버
Client / Server 구성의 Client와 Database 사이에 ‘웹서버’와 ‘애플리케이션 서버’가 추가되었다고 생각하면 쉽다.
웹 계층은 Client로 부터 요청(HTTP 요청)을 직접 받아서 뒷단의 App서버에 넘기고 그 결과를 Client에 반환한다. 웹 서버로 nginx, 아파치(Apache), IIS(Internet Information Services) 등이 있다.
애플리케이션 계층은 비즈니스 로직이 동작하는 계층으로 웹서버로 부터 온 요청을 처리하고, 필요한 데이터를 DB 서버에서 추출하고 이를 가공한 결과를 웹 서버로 반환한다. 톰캣, 웹로직, 웹스피어 등이 있다.
사용자로 부터 직접 접속 요청을 받는 역할을 웹 서버 계층에 한정시킴으로서, 애플리케이션 계층과 데이터베이스 계층의 보안을 높일 수 있다. 동시에 비즈니스 로직을 서버쪽에서 관리하게 되므로 애플리케이션 관리 비용도 낮추게 되었다.