웹애플리케이션 시스템의 처리 과정

사용자가 웹 브라우저에서 특정 페이지를 요청했을 때, 서버 단에서는 다음과 같은 5단계의 처리 순서가 진행됩니다.

  1. 요청 : 웹 브라우저가 웹 서버에 특정 페이지를 요청합니다.
  2. 위임 : 웹 서버는 요청을 받고, 만약 동적인 처리가 필요하다면 해당 작업을 웹 애플리케이션 서버(WAS)에 위임합니다.
  3. 수행 : WAS는 비즈니스 로직을 수행하며, 필요 시 데이터베이스와 연동하여 데이터를 조회하거나 처리합니다.
  4. 반환 : WAS는 로직 및 데이터베이스 작업의 처리 결과를 웹 서버에 반환합니다.
  5. 응답 : 웹 서버는 최종 결과를 웹 브라우저에 응답하여 사용자에게 화면을 보여줍니다.

이 처리 흐름에는 웹 브라우저, 웹 서버, 웹 애플리케이션(WAS), 데이터베이스라는 네 가지 주요 구성 요소가 존재하며 각자의 역할을 수행합니다.

웹 서버의 종류와 역할 분담

현대 웹 아키텍처의 핵심은 웹 서버와 웹 애플리케이션 서버(WAS)의 역할을 분리하는 것입니다.

Web Server는 Apache, Nginx와 같은 소프트웨어로, 주된 역할은 이미지, CSS, HTML 파일과 같은 정적 콘텐츠를 처리하는 것입니다. 즉, 변경이 필요 없는 단순한 파일 요청을 빠르고 효율적으로 처리합니다.

WAS (Web Application Server)는 Tomcat, JBoss와 같은 소프트웨어로, 데이터베이스 조회나 복잡한 비즈니스 로직 수행이 필요한 동적 콘텐츠를 생성하는 데 특화되어 있습니다. PHP, JSP, ASP와 같은 서버 사이드 언어를 구동하는 환경을 제공하며, 웹 컨테이너 또는 서블릿 컨테이너라고도 불립니다.

과거에는 CGI(Common Gateway Interface)라는 규약을 통해 동적 콘텐츠를 처리했습니다. 하지만 CGI는 사용자의 요청이 들어올 때마다 새로운 프로세스를 생성하여 실행하기 때문에, 동시 접속자가 많아지면 서버에 큰 부하를 주는 한계가 있었습니다. WAS는 이러한 CGI의 단점을 개선하여 보다 효율적으로 다수의 요청을 처리합니다.

웹 서버와 WAS를 분리하는 이유

웹 서버와 WAS의 역할을 분리하는 것은 자원 이용의 효율성, 장애 극복, 유지보수의 편의성을 높이기 위함입니다.

  1. 기능 분리를 통한 서버 부하 방지 : 정적 콘텐츠는 웹 서버가, 동적 콘텐츠는 WAS가 전담하여 각 서버가 가장 잘하는 일에 집중하게 함으로써 전체 시스템의 성능을 최적화합니다.
  2. 보안 강화 : 웹 서버를 시스템의 가장 앞단에 배치하여 SSL 암복호화 처리 등을 담당하게 하고, 내부적으로 중요한 비즈니스 로직을 수행하는 WAS를 외부로부터 보호하는 구조를 만들 수 있습니다.
  3. 서버 부하 분산 기능 : 여러 대의 WAS를 하나의 웹 서버에 연결하는 로드 밸런싱이 가능합니다. 이를 통해 특정 WAS에 장애가 발생하더라도 다른 WAS로 요청을 넘겨 중단 없는 서비스를 제공할 수 있습니다.

웹 애플리케이션 시스템의 동작

웹 컨테이너(서블릿 컨테이너)는 WAS의 핵심 구성 요소로, HTTP 요청을 받아 서블릿을 실행하고 그 생명주기를 관리하는 역할을 합니다. 서블릿은 웹 페이지를 동적으로 생성하는 자바로 작성된 서버 애플리케이션으로, 톰캣과 같은 컨테이너 환경 위에서 동작합니다.

웹 서버 게이트웨이 인터페이스(WSGI)는 파이썬 기반 웹 환경에서 웹 서버와 웹 애플리케이션 간의 표준화된 인터페이스를 제공하는 규약입니다. CGI와 달리 요청마다 프로세스를 생성하지 않아 더 효율적으로 다수의 요청을 처리할 수 있습니다.

Java 기초 프로그래밍

이러한 서버 측 로직을 구현하는 대표적인 언어 중 하나가 Java입니다. Java는 처음부터 객체지향 언어로 설계되었으며, 가장 큰 특징은 운영체제로부터의 독립성입니다.

이는 자바 가상 머신(JVM, Java Virtual Machine)으로 가능합니다. Java 코드는 특정 운영체제에 종속된 기계어가 아닌, JVM이 이해할 수 있는 바이트코드로 변환됩니다. 이후 각 운영체제에 설치된 JVM이 이 바이트코드를 해당 환경에 맞게 해석하여 실행합니다.

 

Java 개발과 실행을 위해서는 다음 개념을 이해해야 합니다.

JDK (Java Development Kit)는 컴파일러, 디버거 등 Java 프로그램을 '개발'하는 데 필요한 모든 도구를 포함합니다.
JRE (Java Runtime Environment)는 JVM과 핵심 라이브러리를 포함하며, Java 프로그램을 '실행'하는 데 필요한 환경입니다.
JVM (Java Virtual Machine)은 Java 바이트코드를 실제로 실행하는 가상 머신 그 자체입니다.

개발을 위해서는 JDK를 설치하며, JDK 안에는 JRE와 JVM이 모두 포함되어 있는 구조입니다. 이러한 플랫폼 독립성과 안정성, 방대한 생태계 덕분에 Java는 오랫동안 서버 애플리케이션 개발의 주류 언어로 자리 잡아왔습니다.

728x90