솜이의 데브로그

4장 ) 데이터베이스와 아키텍처 구성(1) 본문

CS/Database

4장 ) 데이터베이스와 아키텍처 구성(1)

somsoming 2021. 10. 7. 17:19

Reference : 데이터베이스 첫걸음

 

다중화에 대해 생각해 보자

  • 데이터베이스는 견고하게 유지되는 것이 요구된다.
  • DB서버 2대가 있다면 1대가 고장나더라도 나머지 1대가 동작하면 서비스의 정지를 막을 수 있는데, 이를 '다중화'라 한다.

 

 

아키텍처란

  • 시스템을 만들기 위한 물리 레벨의 조합
  • 어떤 기능을 가진 서버를 준비하고 어떠한 저장소나 네트워크 기기와 조합해서 시스템 전체를 만들 것인가
  • 즉, 하드웨어와 미들웨어의 구성.
  • 아키텍처를 보면 그 시스템이 어떤 용도로 사용되고 무엇을 목적으로 하고 있는지 추측 할 수 있다.
  • 시스템에 요구되는 조건을 충족하기 위해 어떤 아키텍처가 적당한지 시스템 개발의 초반에 시행.

 

 

데이터베이스의 아키텍처

 

역사와 개요

 

아키텍처의 역사는 구체적으로 다음 3단계로 나누어서 파악 할 수 있다.

  1. Stand-alone (~1980년대)
  2. 클라이언트/서버 (1990년대~2000년)
  3. Web 3계층 (2000년~현재)

 

 

Stand-alone

  • 데이터베이스가 동작하는 머신(데이터베이스 서버)이 LAN이나 인터넷 등의 네트워크에 접속하지 않고 '독립되어' 동작하는 구성.
  • 데이터베이스의 미들웨어(DBMS)와 애플리케이션의 소프트웨어는 같은 DB 서버에서 동작한다.
  • 따라서 데이터베이스를 사용하고 싶은 사용자는 DB서버가 설치된 장소까지 물리적으로 접근하여 사용해야함.

 

Stand-alone의 단점

  • 물리적으로 떨어진 장소에서 접근할 수 없다.
  • 복수 사용자가 동시에 작업할 수 없다. (동시에 서버를 이용할 수 있는 사람은 1명)
  • 가용성이 낮다. 서버가 1대이므로 이 서버에 장애가 발생하면 서비스가 정지한다.
  • 확장성이 부족하다. 성능이 나쁠 때 개선 수단이 부족하다.

 

Stand-alone의 장점

  • 구축이 매우 간단해 소규모 작업이나 테스트를 빨리 할 수 있다.
  • 보안이 매우 높다. 네트워크를 매개로 침입할 위험이 없기 때문.
  • 데이터 유출 위험이 낮다. (위와 같은 이유)

 

 

클라이언트/서버

  • 데이터베이스를 네트워크에 연결해 복수 사용자가 물리적으로 떨어진 장소에서 접속 가능.
  • 데이터베이스 서버 1대에 복수 사용자의 단말이 접속하는 구성. C/S 또는 클라서버로 부르기도 함.
  • 시스템이 클라이언트와 서버의 2개 레이어로 구성되므로 '2게층 구성'이라고 부르는 경우도 있음.
  • DB서버에서는 DBMS가 동작, 클라이언트에서는 업무 애플리케이션이 동작.
    • '클라이언트'란 엔드 사용자가 직접 조작해서 수행하고 싶은 처리 명령을 내보내는 머신.
    • '서버'란 클라이언트로부터 받은 명령을 실행하여 업무 처리를 실행하기 위한 머신.
  • 주로 기업이나 조직 내에 닫힌 네트워크(LAN)에서 이용되었다. 외부로부터의 접속을 막기 위해.

 

클라이언트/서버 구성의 단점

  • 인터넷에서 직접 데이터베이스에 접속하는 것에 대한 보안 위험
  • 불특정 다수의 사용자가 사용하는 클라이언트에서의 애플리케이션 관리 비용이 많이 드는 점.
    • 애플리케이션은 각종 환경에 대으앻 애플리케이션을 작성해야 하고 각각에 대해 버전 관리나 버그 수정 버전을 배포하는데 비현실적인 비용이 필요함.

 

 

Web 3계층

  • 웹 서버 계층 + 애플리케이션 계층 + 데이터베이스 계층 의 조합
  • 웹 서버는 클라이언트로부터 접속 요청(HTTP 요청)을 직접 받아서 그 처리를 뒷단의 애플리케이션 계층에 넘기고 그 결과를 클라이언트에 반환.
  • 애플리케이션 계층은 비즈니스 로직을 구현한 애플리케이션이 동작하는 층. 웹 서버로부터 연계된 요청을 처리, DB서버에 접속해 데이터를 추출하고 이를 가공한 결과를 웹 서버로 반환.
  • 사용자로부터 직접적인 접속 요청을 받는 역할을 웹 서버 계층에 한정하여 애플리케이션 계층과 데이터베이스 계층의 보안을 높인다.

 

 

가용성과 확장성의 확보

Stand-alone구성의 단점 중 가용성이 낮고 확장성이 부족한 문제의 해결책에 대해 생각해보자.

 

가용성을 높이는 2가지 전략

  • 심장전략 : 시스템을 구성하는 각 컴포넌트의 신뢰성을 높여 장애 발생률을 낮게 억제해서 가용성을 높인다. 소수 정예 노선.
  • 신장전략 : '사물은 언젠가 망가진다'란 체념을 전제로 여분을 준비해둔다. 이를 철저히 대비하는 것을 '물량작전'이라 부른다. (컴포넌트를 병렬화)

 

★클러스터

  • 동일한 기능의 컴포넌트를 병렬화하는 것을 '클러스터링'이라고 한다.
  • 동일한 기능의 컴포넌트를 복수 개 준비해 한 개의 기능을 실현한다.
  • 클러스터 구성으로 시스템의 가동률을 높이는 것을 '여유도(Redundancy)를 확보한다' 또는 '다중화'라고 한다.
    • 다중화 : 내구성이 더 높고 견고하다

 

 

단일 장애점

  • 다중화되어 있지 않아서 시스템 전체 서비스의 계속성에 영향을 주는 컴포넌트.
  • 단일 장애점의 신뢰성이 시스템 전체의 가용성을 결정한다.
  • 단일 장애점을 없애기 위해 대부분 이중화(가장 비용이 많이 듬)는 해두지만, 그 이상 어느 정도 돈을 들여 다중화할지는 예산 제약과 바라는 신뢰성 수준에 따라서 결정해야한다.

 

 

신뢰성과 가용성

  • 신뢰성 : 하드웨어나 소프트웨어가 고장나는 빈도나 고장 기간을 나타내는 개념
  • 가용성 : 사용자 입장에서 볼 때 시스템을 어느 정도 사용할 수 있는지
  • 따라서 신뢰성이 낮은 하드웨어나 소프트웨어를 사용하고 있더라도 다중화(클러스터링)한다면 시스템 전체의 가용성을 높일 수 있다.