Web Server

컴퓨터나 스마트폰을 이용하여 특정 웹 사이트나 앱에 접속하려 할 때, 사용자는 대부분의 경우 그 과정 속에서 어떤 일이 벌어지는지 직접적으로 인지하지 못합니다. 그러나 이러한 과정의 뒷면에는 서버라는 컴퓨터 장치가 중단없이 동작하고 있습니다. 이 서버는 사용자의 요청을 받아들이고, 그에 맞는 정보를 반환하는 역할을 담당하며, 이는 인터넷을 통한 정보의 교류가 이루어지게 됩니다. 웹 서비스의 기본 구조와 구성 알아보기

서버는 일종의 중계기 역할을 합니다. 사용자가 웹페이지를 요청하면, 서버는 해당 정보를 찾아 사용자에게 전송합니다. 이 때 웹 서버라는 특정 유형의 서버가 이 작업을 수행하게 됩니다. 웹 서버는 컴퓨터에 저장된 특정 파일이나 폴더에 접근할 수 있도록 하여, 사용자가 원하는 정보를 얻을 수 있게 돕습니다.

개요

웹 서버는 웹 사이트의 핵심 구성 요소로서, 웹 브라우저와 같은 클라이언트로부터 HTTP 요청을 받아들이고 HTML 문서, CSS, JavaScript, 이미지등의 웹 페이지 구성 요소를 전송하는 역할을 수행하는 컴퓨터 프로그램 또는 그 프로그램을 실행하는 컴퓨터 시스템을 통칭합니다. 웹 서버는 인터넷의 기반 기술로서 웹 브라우저와 상호 작용하여 웹 페이지를 사용자에게 제공하는 데 필수적인 역할을 합니다.

VMware 에 ubuntu 20.04 LTS server 전체 설치 과정

웹 서버의 역할

웹 서버는 클라이언트의 HTTP 요청을 받아 자원을 찾거나 생성하여 제공하는 시스템입니다. 웹 페이지 요청 처리, 파일 제공, 프로토콜 처리 등의 기능을 통해 웹 애플리케이션의 동작을 지원합니다.

  • HTTP 요청 수신: HTTP 요청 수신은 웹 서버의 가장 기본적인 기능 중 하나입니다. 클라이언트가 웹 서버에게 HTTP 요청을 전송하면, 웹 서버는 해당 요청을 수신하고 요청 메시지를 해석합니다. 이때 요청 메시지에는 클라이언트가 요청한 자원(웹 페이지, 이미지, 동영상 등) 및 해당 요청에 대한 추가 정보가 포함됩니다.
  • 파일 제공: 파일 제공은 웹 서버가 클라이언트에게 요청된 자원을 제공하는 과정을 의미합니다. 웹 서버는 클라이언트가 요청한 자원을 서버 내의 파일 시스템에서 찾아내어 응답으로 반환합니다. 이때 정적 파일(HTML, CSS, JavaScript], 이미지 등)은 파일 시스템에서 직접 제공되고, 동적 콘텐츠는 필요한 경우 서버 측 스크립트를 통해 생성되어 제공됩니다.
  • 프로토콜 처리: 프로토콜 처리는 웹 서버가 클라이언트와의 통신에 사용되는 프로토콜을 관리하고 처리하는 과정을 말합니다. 주로 HTTP 프로토콜을 사용하여 클라이언트와 통신하며, 웹 서버는 HTTP 요청을 해석하고 해당 요청에 대한 적절한 응답을 생성합니다. 또한 HTTPS와 같은 보안 프로토콜을 지원하여 안전한 통신을 보장합니다.
  • 동적 콘텐츠 생성: 동적 콘텐츠 생성은 웹 서버가 필요에 따라 동적으로 콘텐츠를 생성하고 제공하는 과정을 의미합니다. 이를 위해 웹 서버는 CGI(Common Gateway Interface), 서버 측 스크립팅 언어(PHP, Python, Ruby 등), 그리고 웹 애플리케이션 서버와의 통합을 지원합니다. 이러한 동적 콘텐츠는 클라이언트의 요청에 따라 실시간으로 생성되어 제공되므로, 웹 서버의 다양한 기능을 활용할 수 있습니다. 백엔드(Backend) 더 알아보기(링크 업데이트 예정)
  • 세션 관리: 세션 관리는 웹 서버가 클라이언트와의 세션을 관리하고 유지하는 과정을 말합니다. 세션은 일정 시간 동안 유지되는 클라이언트와 서버 간의 상태 정보를 의미합니다. 웹 서버는 클라이언트가 요청을 보낼 때마다 해당 세션을 식별하고, 세션 정보를 유지하여 사용자 인증, 세션 추적 등의 기능을 구현할 수 있습니다.

웹 서버의 구성 요소

웹 서버는 클라이언트 연결 수신과 요청된 자원 제공을 담당하는 시스템입니다. 이는 리스너, 프로세스, 모듈, 로그 등의 구성 요소로 이루어져 클라이언트와의 통신을 원활하게 하며 다양한 기능을 제공합니다.

  • 리스너(listener): 리스너는 웹 서버가 클라이언트로부터의 연결을 수신하고, 해당 연결을 관리하는 역할을 합니다. 일반적으로 TCP/IP 기반의 포트를 통해 클라이언트 요청을 수신하고, 해당 요청을 처리할 프로세스나 쓰레드로 전달합니다. 리스너는 다수의 클라이언트 요청을 동시에 처리하기 위해 다중 연결을 관리하고, 요청을 분산하는데 사용됩니다.
  • 프로세스(process) 또는 쓰레드(thread): 프로세스 또는 쓰레드는 클라이언트 요청을 처리하기 위해 생성되는 실행 단위입니다. 각각의 프로세스 또는 쓰레드는 독립적으로 클라이언트 요청을 처리하며, 동시에 여러 요청을 처리할 수 있습니다. 이는 웹 서버의 성능을 향상시키는 데 중요한 역할을 합니다. 일반적으로 쓰레드 기반의 다중 스레딩 모델이나 프로세스 기반의 다중 프로세싱 모델이 사용됩니다.
  • 모듈(module) 또는 핸들러(handler): 모듈 또는 핸들러는 요청을 처리하기 위한 특정 기능을 제공하는 소프트웨어 구성 요소입니다. 예를 들어, 정적 파일을 제공하기 위한 모듈, 동적 콘텐츠를 처리하기 위한 모듈, 보안 기능을 제공하는 모듈 등이 있습니다. 모듈은 웹 서버의 기능을 확장하고, 요청에 따라 적절한 처리를 수행합니다. 이를 통해 웹 서버는 다양한 기능을 제공하고 확장성을 갖출 수 있습니다.
  • 로그(log): 로그는 웹 서버의 활동을 기록하는 데 사용되는 파일 또는 데이터베이스(링크 업데이트 예정)입니다. 이를 통해 웹 서버의 동작을 추적하고 분석할 수 있습니다. 로그에는 클라이언트 요청 정보, 응답 상태 코드, 접근 시간, 요청된 자원 등의 정보가 포함됩니다. 이 정보를 통해 웹 서버의 성능을 모니터링하고 문제를 해결할 수 있습니다.
오라클 Oracle 클라우드 무료 티어 우분투 Ubuntu 서버 생성하기

웹 서버의 작동 방식

웹 서버는 클라이언트의 HTTP 요청을 받아들이고, 요청된 리소스를 찾아 HTTP 응답을 생성하여 클라이언트에게 전송합니다. 클라이언트는 받은 응답을 사용하여 웹 페이지를 렌더링하고 사용자에게 제공합니다.

  • 클라이언트의 HTTP 요청 수신: 웹 서버는 클라이언트가 보낸 HTTP 요청을 받아들입니다. 이 요청은 주로 웹 브라우저를 통해 전송되며, URL을 통해 특정 리소스에 대한 요청을 포함합니다. 또한, 요청은 HTTP 메서드(GET, POST, PUT, DELETE 등)를 포함하고 있습니다.
  • 요청 처리 및 리소스 탐색: 받은 요청을 처리하기 위해 웹 서버는 해당 요청에 맞는 웹 페이지 구성 요소를 찾습니다. 이는 파일 시스템이나 데이터베이스와 같은 백엔드 시스템에 의해 수행됩니다. 웹 서버는 요청된 리소스를 찾거나 생성하기 위해 동적인 컨텐츠를 생성하는 서버 사이드 스크립트를 실행할 수도 있습니다.
  • HTTP 응답 생성: 요청된 리소스를 찾았다면, 웹 서버는 HTTP 응답을 생성합니다. 이 응답은 클라이언트에게 전달될 상태 코드, 헤더 및 본문(body)으로 구성됩니다. 상태 코드는 요청의 성공 또는 실패를 나타내며, 헤더에는 응답의 메타데이터가 포함되어 있습니다.
  • 응답 전송: 생성된 HTTP 응답은 TCP/IP 프로토콜을 통해 클라이언트에게 전송됩니다. 이 과정에서 데이터는 패킷으로 나눠져 전송되고, 클라이언트는 이를 수신하여 응답을 처리합니다.

웹 서버의 종류

웹 서버는 다양한 종류가 있으며, 대표적인 웹 서버 프로그램으로는 Apache, Nginx, IIS, Lighttpd 등이 있습니다. 각 웹 서버 프로그램은 고유한 특징과 장단점을 가지고 있으며, 사용 목적과 환경에 따라 적합한 웹 서버 프로그램을 선택해야 합니다.

  • Apache: Apache는 가장 오래되고 많이 사용되는 웹 서버 프로그램 중 하나입니다. 오픈 소스이며, 다양한 플랫폼에서 사용할 수 있습니다. Apache는 모듈화된 구조를 가지고 있어서 다양한 기능을 제공하며, 대용량 트래픽에도 효과적으로 대응할 수 있습니다.
  • Nginx: Nginx는 빠른 속도와 높은 성능으로 유명한 웹 서버 프로그램입니다. Apache보다 가벼운 리소스를 사용하며, 이벤트 기반 아키텍처를 통해 동시 접속 처리에 효율적입니다. 또한, Reverse Proxy나 Load Balancer로도 활용이 가능합니다. Nginx 더 알아보기(링크 업데이트 예정)
  • IIS (Internet Information Services): IIS는 Microsoft에서 제공하는 웹 서버 프로그램으로, Windows 운영 체제와 긴밀하게 통합되어 있습니다. ASP.NET 등의 Microsoft 기술과의 호환성이 뛰어나며, Windows Server 환경에서 웹 호스팅에 많이 사용됩니다.
  • Lighttpd: Lighttpd는 매우 가볍고 빠른 웹 서버 프로그램으로, 특히 저사양 서버 환경에 적합합니다. Apache나 Nginx보다 리소스 사용량이 적으며, 정적 파일 서빙에 최적화되어 있습니다.
  • Caddy: Caddy는 현대적인 기능과 간편한 설정을 제공하는 웹 서버이며, HTTPS를 자동으로 설정하는 등의 기능을 내장하고 있어 사용자 친화적입니다. Ubuntu에서 Caddy 사용하기
  • Tomcat: Tomcat은 Java 언어로 작성된 웹 애플리케이션을 실행할 수 있는 웹 서버이자 서블릿 컨테이너입니다. JSP와 Servlet을 지원하며, Java 환경에서 웹 서비스를 구현할 때 가장 널리 사용됩니다.
  • 이외에도 Jetty, Cherokee, Resin 등 다양한 웹 서버 소프트웨어들이 있으며, 각각의 소프트웨어는 고유의 특징과 장단점을 가지고 있습니다.
VMware 에 ubuntu 20.04 LTS server 전체 설치 과정

관련 글

댓글로 남기기 어려운 내용은 Contact Form 에서 개별적으로 문의 할 수 있습니다. 해당 글과 연관 된 내용은 Copy를 이용해 현재 페이지의 주소를 복사 후 문의 폼에 입력시 보다 정확한 답을 얻을 수 있습니다.

Leave a Comment