10주차 웹 서버 & 웹 어플리케이션

변현섭·2023년 6월 22일
0

4th UMC Server-Spring Study

목록 보기
30/30

Ⅰ. 핵심 키워드

1. 웹 서버의 개념과 기능

웹 서버는 클라이언트의 요청을 받아들이고, 해당 요청에 대한 처리를 수행하여 클라이언트에게 응답을 반환하는 소프트웨어이다. 웹 서버는 클라이언트-서버 모델에서 서버 측에 위치하며, 웹 애플리케이션을 호스팅하고 웹 리소스를 제공하는 역할을 한다. 웹서버의 주요 기능은 다음과 같다.

① HTTP 요청 처리

  • 클라이언트로부터 HTTP 요청을 받아들이고, 해당 요청을 분석하여 요청된 리소스나 기능에 대한 처리를 수행한다.

② 정적 리소스 제공

  • 웹 서버는 정적 파일(HTML, CSS, JavaScript, 이미지 등)을 저장하고 관리하여 클라이언트에게 제공한다.
  • 클라이언트가 해당 파일에 직접 접근하여 다운로드하거나 웹 페이지에서 로드할 수 있다.

③ 동적 콘텐츠 생성

  • 웹 서버는 동적인 콘텐츠를 생성하는 기능을 제공한다.
  • 예를 들어, 사용자가 입력한 데이터를 처리하거나 데이터베이스와의 상호작용을 통해 동적인 웹 페이지를 생성할 수 있다.

④ 세션 및 상태 관리

  • 웹 서버는 클라이언트와의 상호작용을 통해 세션을 관리하고 상태 정보를 유지한다.
  • 세션은 클라이언트의 연속적인 요청에 대한 상태 정보를 유지하고, 인증 및 권한 부여를 위한 기능을 수행할 수 있다.

⑤ 보안 기능

  • 웹 서버는 클라이언트와의 통신을 보호하기 위한 다양한 보안 기능을 제공한다.
  • SSL/TLS를 사용한 암호화된 통신, 액세스 제어, 인증 및 권한 부여 등의 보안 기능을 구현할 수 있다.

    ※ SSL/TLS
    SSL(Secure Sockets Layer)과 TLS(Transport Layer Security)는 모두 네트워크 통신에서 사용되는 암호화 프로토콜이다. 엄밀히 말하면 TLS는 SSL의 후속버전으로 더 강력한 보안과 호환성을 지니고 있다.

⑥ 로깅 및 모니터링

  • 웹 서버는 요청과 응답에 대한 로그를 기록하고, 서버의 상태를 모니터링하여 성능 및 문제를 파악할 수 있다.

⑦ 확장성

  • 웹 서버는 다수의 클라이언트 요청을 동시에 처리하고, 필요에 따라 확장할 수 있는 기능을 제공한다.
  • 로드 밸런싱, 클러스터링, 캐싱 등의 기술을 사용하여 성능과 가용성을 향상시킬 수 있다.

2. 웹 어플리케이션 서버의 개념과 기능

웹 어플리케이션 서버(Web Application Server)는 웹 서버의 확장된 개념으로, 동적인 웹 어플리케이션을 실행하고 관리하는 소프트웨어이다. 웹 어플리케이션 서버는 웹 서버의 기능뿐만 아니라 추가적인 기능과 서비스를 제공하여 웹 애플리케이션의 실행 환경을 제어하고 관리한다. 웹 어플리케이션 서버의 주요 기능은 다음과 같다.

① 컨테이너 기능

  • 웹 어플리케이션 서버는 웹 애플리케이션을 실행하기 위한 컨테이너 기능을 제공한다.
  • 웹 애플리케이션은 서버에서 실행되는 프로그램 또는 애플리케이션으로, 웹 어플리케이션 서버는 해당 애플리케이션을 실행하고 관리한다.

② 서블릿 컨테이너

  • 웹 어플리케이션 서버는 서블릿 컨테이너를 포함하여 서블릿 기반의 웹 애플리케이션을 실행한다.
  • 서블릿 컨테이너는 서블릿의 라이프사이클 관리, 요청 및 응답 처리, 스레드 관리 등의 기능을 수행한다.

    ※ 서블릿
    서블릿(Servlet)은 자바 웹 애플리케이션에서 동적인 웹 컨텐츠를 생성하고 관리하기 위해 사용되는 자바 클래스이다. 서블릿은 웹 서버에서 동작하며, 클라이언트의 요청을 처리하고 그에 따른 응답을 생성하는 역할을 한다. 서블릿은 웹 어플리케이션 서버에서 실행되며, 일반적으로 HttpServlet 클래스를 상속하여 사용된다.

③ 자원 관리: 웹 어플리케이션 서버는 웹 애플리케이션 실행에 필요한 자원을 관리한다. 이는 데이터베이스 연결, 캐시, 트랜잭션 관리, 메모리 관리 등을 포함한다.

④ 보안 기능: 웹 어플리케이션 서버는 웹 애플리케이션의 보안을 강화하기 위한 다양한 보안 기능을 제공한다. 인증, 권한 부여, 암호화, 보안 설정 등을 통해 웹 애플리케이션의 보안을 유지한다.

⑤ 확장성: 웹 어플리케이션 서버는 수평 및 수직 확장을 지원하여 애플리케이션의 성능과 가용성을 향상시킬 수 있다. 클러스터링, 로드 밸런싱, 세션 관리 등의 기술을 사용하여 확장성을 확보할 수 있다.

⑥ 트랜잭션 관리: 웹 어플리케이션 서버는 데이터베이스나 다른 서비스와의 트랜잭션 관리를 지원한다. 트랜잭션 처리를 통해 데이터 일관성과 안정성을 유지할 수 있다.

⑦ 모니터링과 로깅: 웹 어플리케이션 서버는 애플리케이션의 상태와 동작을 모니터링하고 로그를 기록한다. 이를 통해 애플리케이션의 성능, 에러, 장애 등을 파악하고 분석할 수 있다.

3. 웹 서버와 웹 어플리케이션 서버의 차이점

1) Web Server

html, 이미지 요청등 정적 데이터 요청을 처리하는 속도가 빠르다.

2) WAS

servlet , jsp 등 비즈니스 로직을 수행하는데 적합하다. 물론, WAS가 html,이미지 등의 요청을 처리하지 못한다는 말은 아니다. 다만 처리속도가 WS에 비해 느리다.

이렇게 서로 다른 강점을 합해서 사용하기 위해 WS 와 WAS를 연동하여 서비스를 하는 경우가 대부분이다.

4. Apache Web Server

아파치 웹서버(Apache Web Server)는 리눅스 기반의 무료 오픈소스 웹서버 소프트웨어이다. 아파치 웹서버는 고성능의 HTTP 서버로써, 안정성과 확장성, 호환성이 매우좋아 세계에서 가장 높은 점유율을 가지고 있다. (하지만 최근들어서는 NginX에게 밀리는 추세에 접어들었다.)

리눅스, 유닉스, 윈도우 등 거의 모든 운영체제에서 설치 및 사용이 가능하며, 특히 리눅스 운영체제에서의 APM(Apache+PHP+MySQL)은 웹서버구성의 기본으로 받아들여질 정도이다.

1) Apache WS의 장점

① 오픈소스로 무료이다.

② 다양한 모듈을 제공한다.

③ 강력한 커뮤니티로 인한 방대한 자료가 있다.

④ 확장성이 좋다.

⑤ 보안 수준이 높다.

2) Apache WS의 딘점

① 많은 기능들로 인해 느린 측면이 있다.

② 오버헤드가 발생한다.

※ 오버헤드
어떤 작업이나 프로세스를 수행하기 위해 추가적으로 필요한 비용, 부담, 자원, 시간 등을 의미한다. 일반적으로 오버헤드는 원래 목적에 비해 불필요하거나 부가적인 작업을 수행하는 데 발생하는 비용을 나타낸다. 오버헤드는 효율성과 성능에 영향을 미칠 수 있으므로 최적화를 위해선 오버헤드를 최소화해야 한다.

5. Nginx Web Server

Nginx는 메일 프록시, 리버스 프록시 서버로 무료 오픈 소스로 사용할 수 있는 HTTP 서버이다. 최소한의 리소스로 많은 수의 동시 사용자를 처리할 수 있어 대규모 웹 트래픽 처리 상황이 발생할 때 고효율을 발휘한다.

※ 메일 프록시
메일 프록시(Mail Proxy)는 이메일 트래픽을 중개하고 필터링하는 역할을 수행하는 프록시 서버이다. 일반적으로 메일 서버와 클라이언트 간의 통신을 중개하여 보안, 트래픽 관리, 필터링, 캐싱 등의 기능을 제공한다.

1) Nginx WS의 장점

① 오픈소스로 무료이다.

② Apache에 비해 가볍다.

③ 프록시 기능이 뛰어나다.

2) Nginx WS의 단점

① 커뮤니티의 자료가 부족하다.

② 확장 모듈이 Apahce에 비해 적다.

6. Tomcat Web Application Server

웹 서버와 웹 컨테이너의 결합으로 현재 가장 일반적이고 많이 사용되는 WAS이다. Tomcat에서는 8080포트를 사용한다. WAS는 동적인 데이터를 처리하는 서버이기 때문에 DB연결, 데이터 조작 등과 같은 처리에는 WAS를 활용하는 것이 적합하다.

간혹 톰캣을 아파치 톰캣이라고 부르기도 하는데, 이는 톰캣이 편의를 위해 아파치의 기능을 포함하고 있기 때문이다. 다시 말해 톰캣이 아파치의 기능 일부를 가져와서 제공해주는 형태라는 것이다. 물론, 톰캣이 아파치의 모든 기능을 제공하지는 않다보니 따로 아파치 서버를 설치하고 톰캣과 연결하는 경우도 많다.

7. Jetty Web Application Server

Jetty는 자바로 작성된 경량 웹 서버 및 서블릿 컨테이너이다. Jetty는 빠르고 효율적인 서버 솔루션으로 널리 사용되며, 다양한 용도로 활용될 수 있다. Jetty의 특징은 아래와 같다.

① 경량성

  • Jetty는 작은 크기와 낮은 자원 사용량을 가지고 있어 경량 웹 서버 및 컨테이너로서 적합하다.
  • 이는 Jetty가 메모리 사용량이 적고 시작 시간이 빠르다는 것을 의미한다.

② 고성능

  • Jetty는 비동기 I/O, 멀티스레딩 등의 기술을 활용하여 높은 처리량과 동시 접속 처리를 지원한다.
  • 이를 통해 대량의 요청을 처리하는 데 효율적이며, 스케일링과 부하 분산에 용이하다.

③ 내장형

  • Jetty는 내장 서버로 사용할 수 있는 기능을 제공한다.
  • 즉, 단독 실행 가능한 JAR 파일로 웹 애플리케이션을 실행할 수 있으며, 외부 웹 서버 없이도 독립적으로 실행 가능하다.

④ 유연성

  • Jetty는 다양한 환경과 플랫폼에서 동작할 수 있다.
  • Java SE 및 Java EE 표준을 준수하며, 다양한 운영체제와 Java 버전을 지원한다.

⑤ 확장성

  • Jetty는 풍부한 확장 기능을 제공하여 사용자 정의 서비스나 확장 모듈을 개발할 수 있다.
  • 또한 OSGi(Open Service Gateway Initiative)와의 통합을 통해 모듈화와 동적인 기능 추가를 지원한다.

Jetty는 다양한 프레임워크 및 플랫폼에서 사용되며, 특히 웹 애플리케이션 개발, 마이크로서비스 아키텍처, IoT 등의 분야에서 활발하게 활용된다. 또한 Jetty는 개발자 커뮤니티에서 활발하게 관리되고 업데이트되어 안정성과 보안성을 유지하고 있다.

profile
Java Spring, Android Kotlin, Node.js, ML/DL 개발을 공부하는 인하대학교 정보통신공학과 학생입니다.

0개의 댓글