웹 서버, 웹 애플리케이션 서버
웹
WWW(World Wide Web) : 하이퍼 텍스트를 기반으로 하여 여러 컴퓨터에 분산된 정보를 쉽게 찾아볼 수 있게 지원하는 정보 서비스
웹 문서
웹에서 클라이언트가 서버에 정보를 요청하면 응답하는 컨텐츠
- 정적 웹문서
- 이미 만들어져 저장되어 있는 문서
- ex) HTML, CSS, GIF, JPG, PDF, PPT 등
- 동적 웹문서
- 들어온 요청에 맞게 동적으로 데이터베이스, 서버 내 로직 등을 활용해 만들어진 컨텐츠
- 클라이언트가 서버에 웹 문서를 요청하면 웹 문서에 동적인 요소를 포함하는 방식
- 클라이언트가 서버에 웹 문서를 요청하면 서버가 다른 어플리케이션을 통해 웹 문서를 재생성하여 제공하는 방식
- ex) 서블릿, JSP 등
- 들어온 요청에 맞게 동적으로 데이터베이스, 서버 내 로직 등을 활용해 만들어진 컨텐츠
웹 애플리케이션
웹에서 수행되는 어플리케이션. 수행되는 위치에 따라 웹 서버에서 수행되는 기술(Server Side)와 브라우저와 같은 웹 클라이언트에서 수행되는 기술(Client Side)로 나뉜다.
- Client Side : 클라이언트에서 요청한 웹 애플리케이션이 클라이언트에 전송된 다음에 클라이언트 자원을 이용하고 클라이언트에 의해 수행
- Server Side : 웹 애플리케이션이 서버에서 일차 수행되면서 서버 자원을 활용하고, 그 결과를 클라이언트에 전송
웹 서비스
네트워크상에 분산된 자원들을 이기종 간에 서로 연동하여 자원을 공유하기 위한 추상적인 서비스 형태
RESTful 웹서비스
- ROA(Resource Oriented Architecture) 개념을 실현하기 위한 리소스 중심의 표현, 전달, 접근 방식의 기술.
- REST(Representational State Transfer) 기반의 웹 서비스로서, HTTP의 기본 기능만으로 원격 정보에 접근 가능.
- REST : HTTP URI + HTTP Method
- HTTP URI를 통해 제어할 자원(Resource)을 명시하고, HTTP Method(GET, POST, PUT, DELETE)를 통해 해당 자원을 제어하는 명령을 내리는 방식의 아키텍쳐
- REST : HTTP URI + HTTP Method
- 서버와 클라이언트로만 분리되어 있다.
- 클라이언트에서 XML, JSON, 텍스트, 이미지 등 원하는 형식으로 표현 가능
- 이러한 표현 형식은 HTTP의 accept 헤더 값이나 URI 파라미터로 지정
웹 서버와 웹 애플리케이션 서버
웹 서버
- 개념
- 웹 클라이언트(브라우저)로부터의 HTTP 요청을 받아 정적 컨텐츠를 제공하는 서버
- HTTP 서버라고도 불린다.
- Ex. Apache Server, Nginx, ...
- 역할
- 클라이언트로부터 요청을 받는다.
- 처리된 서비스 결과를 클라이언트로 응답한다.
- 구체적 기능
- 클라이언트가 요청한 정적 웹 문서를 WAS를 거치지 않고 바로 전달하는 기능
- 동적인 컨텐츠 제공을 위한 요청을 웹 애플리케이션 서버(WAS)에 수행시키고 그 결과를 응답
- 요청 파일이 없거나 문제가 발생하면 정해진 코드값으로 응답
- 클라이언트로부터의 요청에 대한 기본 사용자 인증을 처리
웹 애플리케이션 서버(WAS)
- 개념
- 웹 서버에서 동적 컨텐츠 생성 요청을 받고, 이를 웹 컨테이너로 보내 로직(알고리즘, DB 연결 등)을 수행하고 그 결과를 다시 웹 서버로 보내 최종적으로 클라이언트에게 응답하는 프로그램
- 데이터베이스 접속 기능, 여러 개의 트랜잭션 관리 등 수행
- Web server + Web container
- 특징
- 클라이언트로부터 요청 받는 일과 화면에 표현하는 프레젠테이션 로직까지만 웹 서버에서 담당
- 비즈니스 로직은 웹 컨테이너가 담당
Web Server, WAS를 함께 사용하는 이유
자원 이용의 효율성 및 보안 강화, 배포 및 유지보수의 편의성을 위해 Web Server, WAS를 각기 사용한다.
- 기능을 분리하여 서버 부하를 방지한다.
- WAS는 DB 조회, 다양한 로직을 수행하기에 바쁘기 때문에 정적 컨텐츠 요청까지 WAS에서 수행하게 되면 부하가 커지게 되고, 동적 컨텐츠 처리가 지연됨에 따라 수행속도가 느려진다. 또한 WAS 장애 시 오류 화면 노출도 불가능하다. 따라서 단순한 정적 컨텐츠는 Web Server에서 빠르게 클라이언트한테 제공하는 것이 좋다.
- 물리적으로 분리하여 보안을 강화시킨다.
- SSL 대한 암복호화 처리에 Web Server를 사용
- 효율적인 리소스 관리
- 여러 대의 WAS를 연결해 로드 밸런싱 용도로 사용할 수 있다.
- 대용량 웹 어플리케이션의 경우, Web Server와 WAS를 분리하여 오류가 발생한 WAS를 사용하지 않고, 다른 WAS를 사용하게 만듦으로써 무중단 운영을 가능하게 한다.
- 여러 언어의 웹 어플리케이션 서비스가 가능하다.
- 하나의 서버에서 PHP Application, Java Application를 함께 사용하는 등과 같이 여러 웹 어플리케이션의 활용이 가능해진다.
컨테이너
- 웹 서버로부터 전달 받은 동적 컨텐츠를 비즈니스 로직을 통해 구현하고 응답하는 서블릿, JSP와 같은 웹 컴포넌트를 저장하는 저장소 역할, 메모리 로딩, 객체 생성 및 초기화 등 서블릿의 생명주기를 관리하고 JSP를 서블릿으로 변환하는 기능을 수행하는 프로그램
서블릿 컨테이너(=서블릿 엔진)
- 서블릿을 관리/수행하는 프로그램
- 서블릿 표준 API에서 제공하는 추상 클래스, 인터페이스를 구현한 클래스를 제공하여 기본적인 동작 방식과 API 호환성 지원
서블릿 컨테이너 역할
- 웹서버와의 통신 지원
- 서블릿 컨테이너는 서블릿과 웹서버가 손쉽게 통신할 수 있게 해줍니다. 일반적으로 우리는 소켓을 만들고 listen, accept 등을 해야하지만 서블릿 컨테이너는 이러한 기능을 API로 제공하여 복잡한 과정을 생략할 수 있게 해줍니다. 그래서 개발자가 서블릿에 구현해야 할 비지니스 로직에 대해서만 초점을 두게끔 도와줍니다.
- 서블릿 생명주기(Life Cycle) 관리
- 서블릿 컨테이너는 서블릿의 탄생과 죽음을 관리합니다. 서블릿 클래스를 로딩하여 인스턴스화하고, 초기화 메소드를 호출하고, 요청이 들어오면 적절한 서블릿 메소드를 호출합니다. 또한 서블릿이 생명을 다 한 순간에는 적절하게 Garbage Collection(가비지 컬렉션)을 진행하여 편의를 제공합니다.
- 멀티쓰레드 지원 및 관리
- 서블릿 컨테이너는 요청이 올 때 마다 쓰레드풀에서 새로운 자바 쓰레드를 하나 배정하는데, HTTP 서비스 메소드를 실행하고 나면, 쓰레드는 자동으로 쓰레드풀로 돌됩니다. 원래는 쓰레드를 관리해야 하지만 서버가 다중 쓰레드를 생성 및 운영해주니 쓰레드의 안정성에 대해서 걱정하지 않아도 됩니다.
- 선언적인 보안 관리
- 서블릿 컨테이너를 사용하면 개발자는 보안에 관련된 내용을 서블릿 또는 자바 클래스에 구현해 놓지 않아도 됩니다. 일반적으로 보안관리는 XML 배포 서술자에 다가 기록하므로, 보안에 대해 수정할 일이 생겨도 자바 소스 코드를 수정하여 다시 컴파일 하지 않아도 보안관리가 가능합니다.
서블릿 수행을 위해 필요한 환경
- 자바 수행 환경
- 웹서버
- 서블릿 컨테이너
Reference
- 인프런 김영한 강의 - 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 1.웹 애플리케이션 이해 - 1.웹 서버, 웹 애플리케이션 서버
'Web_Backend > 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 카테고리의 다른 글
3.동시요청 - 멀티 쓰레드 (0) | 2024.06.29 |
---|---|
2. 서블릿 (0) | 2024.06.29 |