단일서버


웹, 앱, 데이터베이스, 캐시 등이 전부 서버 한 대에서 실행된다. 사용자 요청 처리 흐름부터 살펴보자.

  1. 사용자는 도메인 이름을 이용하여 웹사이트에 접속한다. 이 접속을 위해서는 도메인 이름을 도메인 이름 서비스 DNS 에 질의하여 IP주소로 변환하는 과정이 필요로 한다. DNS는 보통 제 3 사업자가 제공하는 유료 서비스를 이용하게 되므로, 우리 시스템의 일부는 아니다.
  2. DNS 조회 결과로 IP 주소가 반환된다.
  3. 해당 IP주소로 HTTP 요청이 전달된다.
  4. 요청을 받은 웹 서버는 HTML 이나 JSON 형태의 응답을 반환한다.

데이터베이스


사용자가 늘면 서버 하나로는 충분하지 않아서 여러 서버를 두어야 한다. 하나는 웹/모바일 트래픽 처리 용도고, 다른 하나는 데이터베이스 용이다. 웹/모바일 트래픽 처리 서버(웹 계층)데이터베이스 서버(데이터 계층)분리하면 그 각각을 독립적으로 확장해 나갈 수 있게 된다.

어떤 데이터베이스를 사용할 것인가?


전통적인 관계형 데이터베이스와 비-관계형 데이터베이스 사이에서 고를 수 있다. 그 차이를 알아보자.

관계형 데이터베이스는 관계형 데이터베이스 관리 시스템 RDBMS라고 부른다. RDBMS 가운데 가장 유명한것으로는 Mysql, 오라클, PostgreSQL등이 있다. 관계형 데이터베이스는 자료를 테이블과 열, 칼럼으로 표현한다. SQL를 사용하면 여러 테이블에 있는 데이터를 그 관계에 따라 조인하여 합칠 수 있다.

비 관계형 데이터 베이스는 NoSQL 이라고 부른다. 대표적인 것으로는 다이나믹DB, mongoDB가 있다. NoSQL은 다시 네부류로 나눌 수 있는데 키-값 저장소, 그래프 저장소, 칼럼 저장소, 문서 저장소가 그것이다. 이런 비-관계형 데이터베이스는 일반적으로 조인 연산은 지원하지 않는다.

대부분의 개발자에게는 관계형 데이터베이스가 최선일 것인데, 40년 이상 시장에서 살아남아 잘 사용되어 온 시스템이라서다. 하지만 여러분이 구축하려는 시스템에 적합하지 않은 경우에는 비 관계형도 살펴봐야한다. 아래와 같은 경우에는 비 관계형이 바람직 할 수 있다.