본문 바로가기

World Wide Web/Dynamic Web Page

웹 시스템의 삼층 구성 | 웹 서버, 어플리케이션 서버, 데이터베이스 서버

서버는 웹서버, 어플리케이션 서버, DB 서버가 존재한다

일반적으로 서버라 하면 하나의 종류만 생각한다. 사실은 우리가 사용하는 웹어플리케이션은 삼중 시스템으로 구현되어 있다. 웹 어플리케이션을 만들기 위해선 웹 서버, 어플리케이션 서버, 데이터 베이스 서버가 필요하다.

 

1) 웹 서버 : HTTP 요청와 응답을 처리, 정적인 페이지

2) 어플리케이션 서버 : 동적인 페이지를 처리, 데이터베이스를 다루는 라이브러리 탑재

3) 데이터베이스 서버 : 고유의 포트 존재, SQL로 조작

 

우리같은 개인 개발자가 간단히 개발할 때는 하나의 컴퓨터(노드)에 웹 서버, 어플리케이션 서버, 데이터 베이스 서버를 모두 설치한다. 예를 들어, Python으로 웹 개발을 할 때, 하나의 컴퓨터에서 Http요청, Python 로직, PostgreSQL을 설치한다.

 

허나 이러한 삼중 시스템은 하나의 컴퓨터(노드)에 있을 수도 있고 아닐 수도 있다. 웹 서버를 하나의 컴퓨터에 담고, 어플리케이션과 데이터베이스 서버는 별도의 컴퓨터에 담을 수 있다. 다양한 조합이 존재하는 것이다.

 

Django Architecture

Python에서 흔히 사용하는 프레임워크인 Djago를 보면 이를 명확히 알 수 있다. HTTP Server, Application Server, DB Server가 별도로 존재한다. 각각의 서버는 어떻게 보면 별도로 분리된 것이기 때문에 이들끼리 연결(통신)해주기 위해선 또 그들만의 통신규약(프로토콜)이 필요하다. Django의 경우에는 HTTP 서버와 어플리케이션 서버 간의 통신을 담당해주는 부분이 WSGI이다. 일반적으로는 하나의 개발용 컴퓨터에서 작업하기 때문에 WSGI를 신경쓸 필요가 없다.

 

웹 서버와 어플리케이션 서버 사이에도 프로토콜과 별도의 포트가 필요하듯이, 어플리케이션 서버와 데이터 베이스 서버를 연결함에 있어서도 프로토콜과 포트가 필요하다. 헌데 기존의 응용 프로토콜과 달리 데이터베이스는 통일된 프로토콜이 없으며, 마찬가지로 DBMS 마다 별도의 포트를 사용하고 있다.

 

각 시스템을 구성하는 프로토콜 및 포트

웹 서버로 NGinX, 어플리케이션 서버로 Django, 데이터베이스 서버로 SQLite를 사용한 경우이다. 이 경우에는 하나의 컴퓨터(노드) 안에 이러한 삼중 시스템을 구축하였다. 그래서 IP는 LocalHost로 동일하기 때문에 포트만 각각 설정해주면 된다. 

 

일반적으로 HTTP가 API로서 클라이언트와 서버를 연결해주는 인터페이스라면, SQL도 API라 할 수 있다. SQL을 통해 어플리케이션 서버와 데이터 베이스 서버가 서로 연결되기 때문이다.

 

헌데 SQL의 쿼리문을 Python에서 편하게 작성해주기 위해서 별도의 라이브러리가 사용된다.