Skip to content

Commit

Permalink
Merge pull request #10 from SSUMC-6th/ming/#9
Browse files Browse the repository at this point in the history
[ming] Chapter03_Web Server & Web Application Server(WAS), Reverse Proxy
  • Loading branch information
qzzloz authored May 2, 2024
2 parents 9770ecd + 2bee11a commit 860d75a
Showing 1 changed file with 49 additions and 0 deletions.
49 changes: 49 additions & 0 deletions docs/chapter3/Ch03Keyword.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Chapter 3. Web Server & Web Application Server(WAS), Reverse Proxy
3주차 워크북 - 웹서버, WAS, 리버스 프록시

<br>

# Web Server
클라이언트가 url로 웹 페이지를 요청하면 웹 서버는 http 요청을 받아들이고 html 문서, 이미지 등의 정적 데이터를 사용자에게 전달한다.

대표적인 웹 서버로 Apache, Nginx 등이 있다.

웹 서버의 역할은 크게 두 가지가 있다.
1. 단순히 저장된 웹 리소스(**정적 콘텐츠**)를 클라이언트에게 전달하고, 전달받아 처리한다.
2. **사용자로부터 동적인 요청이 들어왔을 때는 웹 서버에서 처리하기 어렵기 때문에 WAS에게 요청한다.**

브라우저와 웹 서버의 작동 방식
1. 브라우저는 URL로 서버의 IP주소를 찾는다.
2. 브라우저는 찾은 서버의 IP주소로 HTTP 요청을 전송한다.
3. 웹 서버는 데이터베이스 서버와 통신하여 관련 데이터를 찾는다.
4. 웹 서버는 HTTP 응답으로 HTML 페이지, 이미지, 비디오 또는 파일과 같은 **정적 콘텐츠**를 브라우저에 반환한다.
5. 그러면 브라우저가 정보를 표시한다.
<br>
<br>

# Web Application Server (WAS)
웹 서버와 동일하게 HTTP 기반으로 동작한다. 또한 웹 서버에서 동작하는 거의 모든 기능은 WAS에서도 처리할 수 있다. 추가적으로 비즈니스 로직을 처리할 수 있기 때문에 사용자에게 동적인 콘텐츠를 제공할 수 있다는 특징이 있다.
- 비즈니스 로직(서버사이드 코드): 단순히 리소스를 보여주는 게 아니라 사용자가 데이터를 입력하고 그걸 받아서 처리하는 코드를 의미한다.
- 사용자가 로그인을 시도할 때, 아이디와 비밀번호를 입력하여 인증을 처리하는 과정에서 데이터베이스의 사용자 정보를 조회하고 아이디, 비밀번호가 일치하는지 확인하는 과정
- 쇼핑 웹사이트에서 제품을 구매하는 로직이 있을 때, 주문을 생성하고 결제를 처리한 뒤 장바구니에서 해당 제품을 삭제하는 작업 -> 데이터베이스에 주문정보 저장, 결제 시스템과 통신하는 경우

이처럼 사용자의 요청에 따라 동적인 콘텐츠를 생성하거나 데이터를 처리하는 경우에는 정적인 콘텐츠를 전달하는 웹 서버가 아니라 WAS를 사용한다.

WAS의 대표적인 예로 Tomcat이 있다.

[ref: 웹 서버와 WAS의 차이](https://aws.amazon.com/ko/compare/the-difference-between-web-server-and-application-server/)
<br>
<br>

# Reverse Proxy
리버스 프록시는 클라이언트와 웹 서버 사이에서 요청을 대신 전달하고 전달받는 기능을 수행한다.

리버스 프록시의 역할을 다음과 같다.
1. 로드 밸런싱

서버를 여러 대 사용하는 경우, 또는 동시에 많은 사용자가 웹서비스에 접속하는 경우 서버에 부하가 집중되어 성능이 저하되거나 서비스가 중단될 수 있다. 리버스 프록시는 서버와 클라이언트 사이에서 이들 간 요청을 분산하여 부하를 분산한다.
2. 캐싱

자주 사용하는 정적 파일, 최근에 불러왔던 정적 파일 등을 캐시에 저장해둔다. 클라이언트의 요청에 대한 응답이 리버스 프록시의 캐시에 저장되어 있다면 굳이 웹서버에게 클라이어트의 요청을 보내고 데이터를 응답받는 과정없이 리버스 프록시 서버에서 바로 캐시에 저장해놨던 데이터를 꺼내서 클라이언트에게 제공한다. 이를 통해 서버의 부하를 줄이고 응답 시간을 단축한다.
<br>
<br>

0 comments on commit 860d75a

Please sign in to comment.