❏ 서버(Server)
서버(Server)란, 클라이언트(Client)에게 네트워크를 통해 정보 및 서비스를 제공하는 컴퓨터 프로그램 또는 장치를 의미한다.
서버는 클라이언트로부터 요청(Request)를 받아 그에 맞게 처리한 서비스를 제공한다. 이 서비스에 따라 서버의 역할도 다양하게 나뉜다. (메일, 도메인, 웹 등등)
❏ 웹 서버(Web Server) vs. WAS
❍ 정적 페이지 (Static page)
데이터베이스에서 정보를 가져오거나 별도의 서버 처리가 없어도 사용자들에게 보여줄 수 있는 페이지이다. 모든 사용자에게 항상 동일한 페이지를 보여주게 된다.
( HTML, CSS, JS, IMAGE 같은 요소들 )
❍ 동적 페이지 (Dynamic page)
서버가 데이터베이스에서 정보를 가져와 처리하는 것처럼, 어떠한 요청에 의하여 서버가 수행한 그 결과를 담아 보여주는 페이지. 사용자마다 다른 페이지가 보여질 수 있다.
❍ 웹 서버(Web Server)
클라이언트가 요청한 정적인 컨텐츠를 HTTP 프로토콜을 통해서 제공해주는 서버. (정적인 컨텐츠를 제공하는 역할)
클라이언트가 동적인 컨텐츠를 요청할 경우, 웹 서버에서는 처리할 수 없으므로, 컨테이너로 보내주는 역할을 한다.
( EX. Apache, NginX, IIS )
❍ 컨테이너(Container)
동적인 데이터들을 처리하여 정적인 페이지로 생성해주는 소프트웨어 모듈, JSP 파일을 서블릿으로 변환하여 컴파일을 수행하여 웹서버에게 전달한다.
웹 컨테이너 (Web Container) 혹은 서블릿 컨테이너 (Servlet Container)라고 불린다.
- 서블릿(Servlet)이란 동적 웹 페이지에 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술
❍ WAS(Web Application Server)
웹 서버로부터 오는 동적인 요청을 처리하는 서버, 웹 서버와 컨테이너를 합쳐둔 서버
(EX. Tomcat)
- 프로그램 실행 환경과 데이터베이스 접속 기능 제공
- 여러 개의 트랜잭션 관리
- 업무를 처리하는 비즈니스 로직 수행
❍ Web Server vs. WAS
목적에 따라 웹 서버는 정적 컨텐츠, WAS는 동적 컨텐츠를 담당한다.
- 정적인 컨텐츠들은 WAS를 거칠 필요가 없으므로 웹 서버를 통해 빠르게 처리할 수 있다.
- 동적인 컨텐츠들은 데이터베이스와 비즈니스 로직에 집중할 수 있도록 WAS가 담당한다.
이렇게 각자의 목적에 따라 분리하여 사용해주는 것은 다음과 같은 장점이 있다.
- 서버 부하 방지 (기능 분리)
- 보안 강화 (웹 서버를 앞단에 두어, 정보 보안)
- 여러 WAS 연결 (웹 서버에 들어오는 요청을 WAS로 분배)
❏ MVC
컴포넌트 Model, View, Controller의 약자, 프로젝트 구성 요소를 세 가지 역할로 구분한 패턴이다.
- 컴포넌트 : 프로그래밍에 있어 재사용이 가능한 독립적 기능을 수행하는 모듈
사용자가 Controller를 조작하면, Controller는 Model를 통해 data를 가져온다. 그것을 바탕으로 View는 제어하여 사용자에게 전달한다.
❍ Model
애플리케이션의 정보, 데이터를 나타낸다. 데이터베이스, 상수, 초기화값, 변수 등
또한, data의 가공을 책임지는 컴포넌트
- 사용자가 수정하고자 하는 모든 데이터를 가지고 있어야 한다.
- 뷰나 컨트롤러에 대해서 내부 속성값 등을 가지고 있으면 안된다.
- 변경이 일어날 경우, 변경에 대한 처리 방법을 구현해야 한다. (재사용이 가능해야 하며, 다른 인터페이스에서도 변하지 않아야 한다.)
❍ View
input 텍스트, 체크 박스 항목 등과 같은 사용자 인터페이스 요소를 나타낸다.
데이터 및 객체의 입력, 출력, 데이터 기반으로 사용자들이 볼 수 있는 화면을 말한다.
- 모델이 가지고 있는 정보를 따로 저장하면 안된다.
- 모델이나 컨트롤러와 같이 다른 구성요소들을 알지 못해야 한다. (오로지 표시해주는 역할)
- 변경이 일어날 경우, 변경에 대한 처리 방법을 구현해야 한다.
❍ Controller
데이터와 사용자 인터페이스 요소들을 잇는 다리 역할이다. 사용자가 클릭하고 수정하는 등의 '이벤트'를 처리하는 부분이다. 비지니스 로직과 같은 내부적인 일을 처리한다
- 모델이나 뷰에 대해서 알고 있어야 한다.
- 모델이나 뷰의 변경을 모니터링 해야 한다.
이렇게 3가지 구성으로 각자 맡은 역할에 집중하여 효율적이다. 확장성, 유연성이 증가하며 중복 코딩의 문제를 해결할 수 있다.
참조]
https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html
https://m.blog.naver.com/jhc9639/220967034588