웹 애플리케이션(Web Application)의 구조
*작성자는 공부 중인 학생으로 잘못 된 정보가 있을 수 있음을 알려드립니다.
웹 애플리케이션은 크게 클라이언트, 서버, 데이터베이스로 나눌 수 있다.
그리고, 서버는 다시 HTTP 서버와, 애플리케이션 서버로 나뉜다.
클라이언트(Client)
사용자가 직접 상호작용하는 부분이며, 서버에게 요청을 하는 역할을 한다.
HTTP 서버(HTTP Server)
클라이언트에서 HTTP 요청을 받아 정적 콘텐츠(이미지, CSS, JavaScript)를 제공하는 역할을 한다.
ex) Apache HTTP Server, Nginx, 웹투비
💡 정적 데이터 : 클라이언트가 요청 할 때, 서버측에서 데이터를 가공하지 않고 찾아서 바로 응답할 수 있는 데이터
애플리케이션 서버(Application Server, WAS)
복잡한 트랜잭션을 처리하고 데이터베이스와의 상호작용을 담당하며, 동적 데이터를 처리한다.
결과를 HTTP 서버를 통해서 클라이언트에게 전달한다.
ex) Apache Tomcat, Oracle WebLogic, Zeus, Resin
💡 동적 데이터 : 클라이언트가 요청 할 때, 서버측에서 데이터를 가공한 후 응답할 수 있는 데이터
데이터베이스 서버(DB Server)
정보 저장 및 관리를 담당한다. SQL 또는 JSON 형태의 데이터를 사용하여 애플리케이션 서버와 통신한다.
웹 애플리케이션의 통신
각각의 웹 애플리케이션의 구조는 통신을 이용하여 정보를 주고받는다.
- 클라이언트와 HTTP 서버 간의 통신
- 클라이언트는 URL을 통해 웹 페이지를 요청하고, HTTP 프로토콜을 사용해 이 요청을 서버에 전달한다.
- HTTP서버는 정적 리소스(HTML, CSS, JavaScript 파일 등)를 처리하여 클라이언트에 응답한다.
- 이 과정에서 주로 GET 및 POST 요청이 사용되며, 서버는 요청받은 URL에 따라 적절한 리소스를 반환한다.
💡 GET : 데이터가 URL에 노출되어 URL을 통해 전달되는 정보를 누구나 볼 수 있다.
💡 POST : 데이터 요청을 본문에 담아 서버를 전송하여, URL에 노출되지 않는다.
- HTTP 서버와 애플리케이션 서버 간의 통신
- HTTP서버가 동적 콘텐츠나 복잡한 요청을 받았을 때, 애플리케이션 서버로 요청을 전달한다.
- 애플리케이션 서버는 비즈니스 로직을 처리하고, 필요한 데이터를 처리하기 위해 데이터베이스 서버와 상호작용한다.
- 처리 결과는 다시 HTTP 서버를 통해 클라이언트에게 전송된다.
- 애플리케이션 서버와 데이터베이스 서버 간의 통신
- 애플리케이션 서버는 데이터베이스 서버에 SQL 쿼리를 보내 데이터를 요청하거나 수정한다.
- 데이터베이스 서버는 이 쿼리를 처리하고, 요청된 데이터를 애플리케이션 서버에게 반환한다.
- 이 데이터는 최종적으로 애플리케이션 로직에 의해 가공되어 사용자에게 제공된다.
이렇게 말하면 감이 잘 오지 않기 때문에 그림으로 설명하겠다.
Client는 손님, HTTP Server는 웨이터, WAS는 요리사, DB Server는 냉장고라고 생각해 보자.
1. 클라이언트(Client)
손님은 주문서를 작성하고, 이를 웨이터에게 전달하여 음식을 주문한다.
이 때, 웨이터는 HTTP만 알아들을 수 있으므로 HTTP로 주문을 한다.
> 클라이언트는 URL을 통해 웹페이지를 요청하고 HTTP Server에게 HTTP 프로토콜을 사용하여 이 요청을 HTTP Server에게 전달한다.
2. HTTP Server
HTTP로 주문을 받은 웨이터는 음료수와 같이 별다른 조리 없이 줄 수 있는 것은 바로 손님에게 전달한다.
그리고, 파스타와 같은 조리가 필요한 요리는 요리사에게 요청을 한다.
> HTTP Server는 Client에게 정적 리소스를 처리하여 클라이언트에게 전달하고, 동적 콘텐츠는 WAS에게 전달한다.
3. 애플리케이션 서버(WAS)
요리사는 요리에 필요한 재료를 냉장고에서 꺼내 요리를 한 다음, 요리가 완료되면 웨이터에게 전달하고,
웨이터는 이를 받아 손님에게 서빙한다.
> 복잡한 요청을 받은 WAS는 필요한 데이터를 DB Server에게 요청하여 복잡한 요청을 처리하고 이를 HTTP Server에 전송한다. 이를 받은 HTTP Server는 Client에게 전달한다.