2024. 1. 30. 04:45ㆍ자바 & Spring
웹 서버와 WAS에 대해 공부하고 블로그에 적어보겠습니다.
유명한 주제이기도 하고, 이 시점에서 관계와 용어 정리를 확실하게 정리하고 싶어 작성합니다.
웹 서버란?
웹 서버란 인터넷을 통해 사용자의 요청에 따라 HTML 문서나 다른 종류의 리소스를 제공하는 서버이다.
웹 서버는 주로 정적 컨텐츠를 제공하는 데 사용되며, 가장 대표적인 예는 Apache, Nginx, Microsoft IIS 등이 있다.
주요 기능
1. 정적 컨텐츠 제공
HTML, CSS, JavaScript, 이미지 파일과 같은 정적 리소스를 클라이언트에게 전송한다.
외부의 접근이 가능하도록 개방하여 지정된 URL로 접속하면 자원을 받아갈 수 있도록 하는 것이 웹서버의 기본적인 역할임.
2. 로드 밸런싱(Load Balancing)
사용자 요청을 여러 서버에 분산하여 처리 능력을 극대화시킨다.
다양한 로드 밸런싱 알고리즘(라운드 로빈, 최소 연결, IP 해시 등)을 통해 요청을 서버에 분산시킨다.
3. Reverse Proxy
사용자에게 서버의 내부 구조를 감추는 역할을 한다. 보안 목적이 크다.
Apache 또는 NginX 같은 웹 서버가 클라이언트를 먼저 맞이하게 되면 서버 내부의 디렉토리 구조라던지, 포트 번호 등을 숨기는 역할을 한다.
4. 캐싱
자주 요청이 오거나 올 만한 리소스들을 저장해놨다가, 클라이언트에게 바로 건네주는 것.
사용자 입장에서는 더 빠른 응답을 받을 수 있음.
Apache는 MPM 방식으로, NignX는 이벤트 기반 처리방식을 가진다는데, 두 처리 방식의 차이점은 뭘까?
웹 애플리케이션 서버(WAS)란?
WAS는 사용자의 요청에 따라 서버 측에서 동적인 컨텐츠를 생성하여 제공하는 역할을 하는 서버이다.
데이터베이스 조회, 로직 처리 등 복잡한 트랜잭션을 처리하며 Java EE, .NET, Node.js 등 다양한 플랫폼에서 운영된다.
동적인 서버 컨텐츠를 수행한다는 것에서 웹 서버와 구분된다. 웹 컨테이너, 서블릿 컨테이너라고도 부른다.
Tomcat: 자바 바이트코드로 캄파일되는 언어들에 쓰이는 WAS이다.
요즘에는 스프링부트에 톰캣이 자동 내장되어 있으며 스프링을 톰캣이 들어있는 jar 파일을 빌드하여, 배포한다.
주요 기능
1. 동적 컨텐츠 처리
- 사용자의 요청에 따라 실시간으로 웹 페이지나 컨텐츠를 생성하여 제공한다.
서버 측 스크립트 언어(PHP, Python, Ruby, Java 등)을 사용하여 클라이언트의 요청에 맞춰 동적으로 HTML, XML, JSON 등의 형식으로 데이터를 생성하여 제공한다. 또한 사용자의 세션 정보, 입력 데이터, 사용자 설정 등에 따라 맞춤형 리소스를 제공한다.
2. 애플리케이션의 핵심적인 기능과 로직을 실행한다.
사용자 세션을 유지하고 어플리케이션 보안을 유지한다. 말 그대로 어플리케이션이 요구하는 기능들을 수행한다.
웹 서버와 WAS의 차이점
주된 차이점은 처리하는 컨텐츠의 유형이다. 웹 서버는 주로 정적 컨텐츠를 처리하지만 WAS는 동적 컨텐츠를 처리한다.
- 웹 서버는 빠른 응답 시간과 효율적인 리소스 관리에 초점을 맞춘다.
- WAS는 복잡한 비즈니스 로직과 데이터베이스 관리에 더 적합하다.
웹 애플리케이션에서 웹 서버와 WAS는 밀접하게 상호 작용함.
서로 자신이 잘하는 부분에 대하여 최선을 다하는 것이다.
사용자의 요청이 웹 서버로 먼저 도착하면 웹 서버는 정적 컨텐츠 요청은 직접 처리하고, 동적 컨텐츠 요청은 WAS로 전달한다.
이렇게 요청을 나누어 처리하여 시스템의 부하를 줄이고, 전반적인 처리 속도와 효율성을 높일 수 있다.
결론
웹 서버와 웹 애플리케이션 서버는 상호 보완적인 관계에 있다.
웹 서버는 정적 컨텐츠를 제공하며 로드 밸런싱, ReverseProxy, 캐싱등을 통해 보완을 강화하고 성능을 강화한다.
WAS는 동적페이지를 생성하여 제공하며 말 비즈니스 로직을 처리한다.
Spring 의 아주 간략한 예시를 보자.
EX. 클라이언트가 GET /items/{itemId} 엔드포인트로 요청을 했다.
요청은 WAS에 의해 HttpServletRequest 객체에 담겨 서버로 전송되고, HttpServletResponse 객체에 데이터를 담아 응답한다.
서버단에서는 이 url에 해당하는 처리를 해줘야 한다.
@GetMapping("/items")
public String items(Model model){
List<Item> items = itemRepository.findAll();
model.addAttribute("items", items);
return "basic/items";
}
정적인 페이지가 아닌, items에 따라 내용이 달라지는 동적 페이지다.
시시각각 변하는 상황에서 웹 페이지는 정해진 파일만을 불러올수는 없다. WAS는 요청에 따라 동적으로 해당 컨텐츠들을 제공한다.
WAS는 DB와 상호작용을 할 수 있고 데이터를 수정, 삭제하는 것도 가능하다.
'자바 & Spring' 카테고리의 다른 글
JPA 정의 (0) | 2022.11.06 |
---|---|
JDBC(Java Database Connectivity) (0) | 2022.11.02 |
빈 생명주기 콜백 (0) | 2022.10.26 |
컴포넌트 스캔, 의존관계 자동 주입 (2) | 2022.09.25 |
싱글톤(singleton) 패턴 (0) | 2022.09.24 |