바뀌지 않는 페이지.
- 웹 서버는 파일경로 이름을 받고, 경로와 일치하는 File Contents를 반환한다.
- image, html, css, javascript 파일과 같이 컴퓨터에 저장된 파일들
인자에 따라 바뀌는 페이지.
- 인자의 내용에 맞게 동적인 Contents를 반환한다.
- 웹 서버에 의해 실행되는 프로그램을 통해 만들어진 결과물이다.
Servlet : was 위에서 돌아가는 자바 프로그램
타입을 지정해준뒤 컴파일 하는언어 C,C++,Java
예를들어 int, String, char, double 이런식으로 자바는 타입을 지정해준다. 그러니 정적언어이다.
타입에러로 인한 문제를 컴파일타임에 해결할 수 있기 때문에 "안정성"이 높다.
또한 컴파일시에 미리 타입을 지정해두기 때문에 실행속도가 빠르다.
타입을 런타임시 자료형이 결정된다.
예를들어 var = 1,'홍길동' 이런식으로 한번에 !
소스코드 작성시 타입에대한 제한이 없기 때문에 유연성이 높다.
JSP는 html 문서가 아니다. 자바이다.
자바에 관련된 구문이나, 속성들을 컴파일한뒤 동적으로 바꾼뒤 html로 변환시켜준다.
하드웨어, 소프트웨어로 구분된다.
- 하드웨어 : Web 서버가 설치되어 있는 컴퓨터
- 소프트웨어 : 웹 브라우저 클라이언트로부터 Http요청을 받아 정적인 컨텐츠(Http, css 등) 을 제공하는 컴퓨터 프로그램
Http 프로토콜을 기반으로, 클라이언트의 요청을 서비스하는 기능을 담당한다.
--> 정적 컨텐츠 제공
WAS를 거치지 않고 바로 자원을 제공한다.
--> 동적 컨텐츠 제공을 위한 요청 전달
클라이언트 요청을 WAS에 보내고, WAS에서 처리한 결과를 클라이언트에게 전달한다.
웹 서버 종류 : Apache, Nginx 등
Web Application Server의 약자
- 아파치 소프트웨어 재단에서 개발한 DB조회 및 다양한 로직처리 요구시 동적인 컨텐츠를 제공하기 위해 만들어진 애플리케이션 서버이다.
- Http를 통해 애플리케이션을 수행해주는 미들웨어
- WAS는 웹 컨테이너, 서블릿 컨테이너 라고도한다.
컨테이너 : JSP, Servlet을 실행시킬 수 있는 소프트웨어이며 즉 WAS는 JSP, Servlet 구동환경을 제공한다.
WAS = 웹 서버 + 웹 컨테이너
웹 서버의 기능들을 구조적으로 분리하여 처리하는 역할
보안, 스레드 처리, 분산 트랜잭션 등 분산환경에서 사용된다. (주로 DB서버와 함께 사용된다.)
WAS 종류 : tomcat, jboss 등
웹 서버에서는 정적 컨텐츠만 처리하도록 기능분배를 하여 서버 부담을 줄이는 것이다.
클라이언트가 이미지파일(정적 컨텐츠)를 보낼 때
웹 문서(html문서)가 클라이언트로 보내질 때
이미지파일과 같은 정적파일은 함께 보내지지 않는다.
먼저 html 문서를 받고, 이에 필요한 이미지 파일들을 다시 서버로 요청해서 받아오는 것이다.
웹 서버를 통해서 정적인 파일을 애플리케이션 서버까지 가지 않고 앞단에 빠르게 보낼 수 있다.
WAS를 통해 요청에 맞는 데이터를 DB에서 가져와 비즈니스 로직에 맞게 결과를 만들고, 제공하면서 자원을 효율적으로 사용할 수 있다.
동적인 컨텐츠를 제공해야 할 때
웹 서버만으로는 사용자가 원하는 요청에 대한 결과값을 모두 미리 만들어놓고 서비스하기에는 자원이 절대적으로 부족하다.
따라서 WAS를 통해 요청이 들어올 때마다 DB와 비즈니스로직을 통해 결과물을 만들어서 제공한다.
WAS는 DB 조회, 다양한 로직을 처리하는 데 집중해야 한다.
따라서 단순한 정적 컨텐츠는 웹 서버에게 맡기며 기능을 분리시켜 서버 부하를 방지하는 것이다.
만약 WAS가 정적 컨텐츠 요청까지 처리하면,
부하가 커지고 동적 컨텐츠 처리가 지연되면서 수행 속도가 느려진다.
→ 페이지 노출 시간 늘어나는 문제 발생!
또한, 여러대의 WAS를 연결지어 사용이 가능하다.
웹 서버를 앞단에 두고 WAS에 오류가 발생한다면
사용자가 이용하지 못하게 막은 뒤 재시작하여 해결가능하다. (사용자 오류 불편인지 하지않고 이용 가능)
웹 서버를 WAS앞에 두고, 필요한 WAS들을 웹 서버에 플러그인 형태로 설정하면 효율적인 분산처리가 가능하다.
HttpServletRequest 객체
클라이언트의 요청에 해당되는 정보를 HttpServletRequest가 전부 담고있다.
IP주소, 포트번호 프로토콜 종류나 버전, 질의에 해당하는 문자열또한 담고있다.
httpServletResponse
요청에 응답하기위한 정보를 httpServletResponse 가 전부 담고있다
-> 생명주기가 요청이 일어났을때 리퀘스트가 정보를 길게 유지하는것
컨트롤러로 요청이 왔다. 정보를 유지한상태로 뷰까지 전달해주는 것 -> 포워드방식
-> 요청을 했을때 서버측에서 강제적으로 재요청하는 것 생명주기가 짧다.
JSP -> JAVA -> CLASS -> HTML
bin -> tomcat 실행에 관련된 실행파일
conf -> 서버 전체에 해당되는 설정파일 (sever.xml)
logs -> 예외 발생사항 등의 로그저장
lib -> 서버에서 사용되는 (톰캣 구동에 필요) 클래스 라이브러리
temp -> 임시 저장용 폴더
webapps -> 최종 배포 파일 위치
work -> 서블릿파일로 만들어져있는 캐시 정보들을 저장한다.
web project -> 웹 프로젝트 루트 폴더
WEP-INF -> 웹 어플리케이션 설정 및 참조 클래스 파일, 동적 view
META-INF -> 설정 정보 폴더 (jdbc 설정 등)