Spring 공부하기에 앞서, Web 공부도 필요하길래
정리한 기본 개념 (?)을 작성해보려고 한다
새로 접하는 분야다 보니 용어 적인 게 많이 헷갈린다
중점을 두고 공부한건 Web Server와 WAS (Web Application Server)라서
나머지는 간략하게 정의만 정리했다
1. Web Browser

사용자 (클라이언트)가 요청한 웹 서버의 결과를 화면에 출력하는 애플리케이션
HTTP 사용자 에이전트의 대표적인 예시
ex) Google Chrome, FireFox 등
2. Web Application

웹 앱이라고 부름
인터넷을 통해서 Web Browser에서 이용할 수 있는 응용 소프트웨어로
동적인 기능을 가진 웹
기기에 설치해야 하는 어플의 기능을 웹이 대신해줌
사용자가 능동적으로 웹 앱의 서비스를 이용하도록 함
ex) 네이버 지도, 카카오 맵 등등
🌏 Web Application vs WebSite
많이 헷갈릴 수 있는 개념이다
Web Application은 웹 브라우저 + 웹 기술로 사용자와 대화하는 대화식으로, 인터넷을 이용할 수 있도록 하는 프로그램이고,
Web Site는 웹 페이지의 모음으로, 과거에는 정해진 콘텐츠를 화면에 보여주는 형태였다.
근데 이제 경계가 무너지면서, 웹 사이트에도 대화형 방식과 다수의 애플리케이션이 포함돼서 둘을 구분하는 게 의미가 없어져가는 추세다
3. Web Server
웹 서버의 개념은 소프트웨어와 하드웨어적으로 나눠 설명할 수 있다
소프트웨어 개념
웹 브라우저와 같은 클라이언트로부터 HTTP 요청을 받아,
html, jpeg, css 같은 정적인 콘텐츠를 제공하는 컴퓨터 프로그램
하드웨어 개념
Web 서버가 설치되어 있는 컴퓨터
즉, HTTP 프로토콜을 기반으로 하여
클라이언트 (웹 브라우저 또는 웹 크롤러)의 요청을 서비스로 하는 서버이고,
Apache Server, Nginx, IIS 등등이 있다
🤔 Apache Server (사용률 1등)

아파치 소프트웨어 재단에서 관리하는 오픈 소스, 크로스 플랫폼 HTTP 웹 서버 소프트웨어
Unix, Linux, MS Window 등에서도 무료로 운용 가능
😉 Nginx (사용률 2등)

가볍고 높은 성능을 목표로 하는 소프트웨어
웹 서버, 리버스 프록시, 메일 프록시 기능을 가짐
😉 IIS (Internet Information Services) (사용률 3등)

MicroSoft Window를 사용하는 서버들을 위한 인터넷 정보 서비스
구 이름은 Internet Information Server
(1) Web Server 기능
기능 1) Static contents 제공
정적인 콘텐츠 제공
WAS (Web Application Server)를 거치지 않고 자원 제공
기능 2) Dynamic contents 제공을 위한 요청 전달
클라이언트의 Request를 WAS로 보내고,
WAS가 처리한 결과를 클라이언트에게 Response로 전달
😂 Static Contents & Dynamic Contents
Static Contents

변하지 않는 콘텐츠. 캐시에 저장해놓고 씀
캐시에 정적 파일의 사본(ex. 이미지)을 저장하고
클라이언트가 동일한 내용을 제공할 때 빠르게 전달해줌
Dynamic Contents

계속 변하는 컨텐츠. HTML 파일로 저장되지 않음
서버 측에서 생성되기 때문에 캐시가 아니라 원본 서버에서 만들어서 줌
서버에서 사용자 로그인/이벤트 대한 정보로 HTML 파일 생성해줌
예시로는 뭐가 있냐
ex 1) 뉴스 웹 사이트: 기사가 계속 업데이트되고 사용자 로그인 상태마다 페이지가 달라짐
ex 2) 페이스북 뉴스 피드: 사용자마다 다르게 보이고 댓글, 게시물 등등 변경됨
4. WAS (Web Application Server)
DB 조회나 다양한 로직 처리를 요구하는
Dynamic Contents를 제공하기 위해 만들어진 Application Server
HTTP 프로토콜을 사용함.
컴퓨터나 디바이스에 애플리케이션을 수행해주는 미들웨어 (소프트웨어 엔진)이다
WAS는 JSP, Servlet 구동 환경을 제공해서 Web Container, Servlet Container라고도 불림
예시: Apache Tomcat, JEUS 등
🚚 Container
JSP, Servlet을 실행시킬 수 있는 소프트웨어
🌍🚛 Web Container
Web Server가 보낸 JSP, PHP 등 파일을 수행한 결과를 다시 Web Server로 보내줌
(1) WAS 역할
💡 WAS = Web Server + Web Container
Web Server 기능들을 구조적으로 분리하여 처리하고자 함
분산 트랜잭션, 보안, 메시징, Thread 처리 등 기능을 처리하는 분산 환경에서 사용
DB 서버와 같이 수행됨
(2) WAS 주요 기능
프로그램 실행 환경과 DB 접속 기능 제공
여러 개의 트랜잭션 (논리적인 작업 단위) 관리 기능
예) Tomcat, JBoss, Jeus, Web Sphere 등
5. Web Server & WAS 구분하는 이유
(1) Web Server가 필요한 이유
[ 클라이언트에서 이미지 파일 (Static contents)를 보내는 과정 ]
1) 클라이언트는 HTML 문서를 받아옴
2) HTML 문서를 받고 필요한 이미지 파일을 다시 서버로 요청해서 이미지 파일 수신
3) Web Server를 통해 Static contents를 Application Server까지 가지 않고 빠르게 보내줄 수 있음
→ Web Server에서는 정적인 콘텐츠만 처리하도록 기능을 분배
→ 서버의 부담을 줄여줌
(2) WAS가 필요한 이유
웹 페이지는 정적 콘텐츠와 동적 콘텐츠가 모두 존재
사용자의 요청에 맞게 적절한 동적 콘텐츠를 만들어서 제공해야함
Web Server만을 이용한다면 사용자가 요청에 대한 결과 값을
모~~두 미리 만들어 놓고 서비스를 해야 함
→ 자원이 부족해짐 ;;;
그럼 어떻게?
WAS를 통해 요청에 맞는 데이터를 DB에서 가져옴
비즈니스 로직에 맞게 그때 그 때 결과를 만들어서 제공함
자원을 효율적으로 사용 가능
(3) WAS가 Web Server 기능까지 다 하면 되는 거 아냐?
서버 부하 방지를 위해 기능 분리 필요
WAS는 DB 조회, 로직 처리하느라 바쁨
단순 정적 콘텐츠는 Web Server에서 빠르게 클라이언트에 제공하는 게 좋음
WAS가 정적 콘텐츠까지 처리하면 부하 너무 커짐
속도 느려짐
→ WAS는 동적 컨텐츠 처리, Web Server는 정적 컨텐츠 처리로 분리
🎈 물리적으로 분리해서 보안 강화할 수 있음
SSL 암복호화 처리에서 Web Server를 사용함
WAS와 Web Server를 분리하면 무중단 운영이 가능
fail over, fail back 처리에 유리
Web Server는 WAS를 Load Balancing을 해줌
접근 허용 IP 관리, 세션 관리 등도 Web Server에서 처리하면 효율적
💡 자원 이용 효율성, 장애 처리, 배포/유지보수 편의성을 위해 분리
💡 Web Server를 앞단에, WAS를 뒷단에 두고
필요한 WAS를 Web Server에 Plug-In 형태로 설정하면 효율적인 분산 처리 가능
6. Web Service 구조
💡 Client → Web Server → WAS → DB

- Client (웹 브라우저)에서 Web Server로 HTTP 요청
- Web Server는 Client 요청을 WAS에 보냄
- WAS는 서블릿을 메모리에 올림
- WAS는 web.xml을 보고 서블릿에 대한 Thread를 생성
- HTTP Request, Response 객체를 생성하여 서블릿(클래쓰?)에 전달
- Web Container에서 실행한 Thread에서 서블릿의 함수 호출 (ex.service() )
- 호출된 함수에서 HTTP 요청에 맞게 처리 메서드(ex. doGet, doPost)를 호출
- 처리 메서드들은 파라미터에 맞게 생성된 동적 페이지를 HTTP Request, Response 객체에 담아 WAS에 전달
- WAS는 Response 객체를 Web Server에 전달할 형태로 바꿔 Web Server에 전달
- WAS에서 자원 정리
🙄 Servlet
Dynamic 웹 페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술
웹 서버 성능을 향상하기 위해 사용되는 자바 클래스 일종
7. 참고
🙄 DBMS (Database Management System)
데이터 집합을 만들고 저장 및 관리할 수 있는 기능을 제공하는 응용 프로그램
ex) MySQL, MariaDB, Oracle 등등
클라이언트에서 DBMS Server에 직접 접속해서
데이터를 받아오면 보안에 취약하고, 클라이언트가 무거워짐
→ 미들웨어 사용하여 해결
🙄 MiddleWare
Client → MiddleWare Server → DBMS Server
(비즈니스) 로직은 미들웨어에서 수행, 데이터 조작은 DBMS에서 수행하도록 함
클라이언트에서는 입력과 출력만 담당하게 됨
8. 참고 링크
https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html
[Web] Web Server와 WAS의 차이와 웹 서비스 구조 - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io
https://www.cloudflare.com/ko-kr/learning/cdn/caching-static-and-dynamic-content/
'BackEnd > Java&Spring' 카테고리의 다른 글
Spring Cron Expression (0) | 2023.01.25 |
---|---|
StringUtils (0) | 2023.01.18 |
Looking For Annotation~ (0) | 2023.01.16 |
Intellij) Junit Test Code 작성 시 "Execution failed for task" 해결 방법 (0) | 2023.01.09 |
Spring Framework를 알아보자 (0) | 2022.04.22 |