
JSP - JAVA SERVER PAGE-
Keyword (이해가 당연히 안 갈 테니, 그냥 아 이런 것 이구나 생각만하고 우선 지나치셔도 무방함)
JSP
- HTML을 중심으로 자바와 같이 연동하여 사용하는 웹 언어이다.
- HTML코드 안에 JAVA코드를 작성할 수 있는 언어이다.
Server
- 사용자의 요청에 맞는 서비스를 제공해 주는 것
- 요청(request) : 클라이언트 → Server
- 응답(respond) : Server → 클라이언트
WEB(웹)
- 페이지 요청과 응답이 일어나는 장소
- 인터넷에 연결된 컴퓨터들을 통해 사람들이 정보를 공유할 수 있는 정보공간.
WEB Server(http) - 아파치
- 사용자의 요청이 정적 데이터인지 동적 데이터인지 판단한다.
- 정적 데이터일 경우 이미 준비된 HTML 문서를 그대로 응답해 주며,
- 동적 데이터라면 웹 컨테이너에 처리 요청을 보낸다.
WEB Container(서블릿 컨테이너)
- 동적 데이터일 경우 JSP, 서블릿으로 연산 및 제어 그리고 DB에 접근해서
- 정제된 데이터(정적 데이터)가 완성되면 이를 응답해 준다.
Servlet(서블릿)
- JAVA 코드 안에 HTML 코드를 작성 할 수 있는 JAVA 프로그램이다.
- Thread에 의해 서블릿에 있는 service( ) 메소드가 호출된다.
- 전송 방식 요청에 맞게 doGet( ) 또는 doPost( )등의 메소드를 호출한다.
WAS(Web Application Server) - 톰캣
- 동적 데이터를 처리할 서블릿을 메모리에 할당하며, web.xml을 참조하여 알맞은 서블릿에 대한 Thread를 생성한다.
- 서블릿 요청과 서블릿 응답 객체 생성 후 서블릿에 전달하면, 연상 종료 후 메모리에서 해제시킨다.
JSP를 배우기 전 반드시 서버라는 것을 먼저 알아야 한다.
service + er이 붙어서 server가 된 것이다.
서버는 클라이언트(우리, 고객) 서비스를 제공해 준다.
서비스는 추상 적이지만
1. 로그인 서비스
2. 검색 서비스
3. 결제 서비스 라 하면 이해가 쉬울 것이다.
우리가 흔히 회원가입버튼을 누르게 되면 서버가 있기에 회원가입 서비스를 제공받을 수 있는 것이다.
그러면 DataBase도 서버 일까? YES
서버에 대해서 자세히 알아보자.
클라이언트는 서비스를 제공받아야 하는 사람이다. (회원가입을 하는 우리 = 클라이언트 = 고객)
클라이언트는 서버에 요청을 보낸다. "나 회원가입 할 거야"
그 서버의 이름은 웹서버이다.
클라이언트 > (request) > 웹 서버
클라이언트는 서비스를 요청할 때 "뉴스 보여줘"가 아니라 더 자세한
"오늘 나온 뉴스" 등으로 충분한 응답할 수 있는 정보를 줘야 한다.
클라이언트는 서버에게 URL를 통해서 요청하게 된다
그러면 웹서버의 역할은 무엇일까?
사용자가 요청한 게 정적데이터인지 동적데이터인지를 구분해 준다.
정적데이터란 미리 준비해 놓을 수 있는 데이터 (회사소개, 공지사항)
회사소개페이지를 요청할 때는 정적데이터이므로 웹 서버는 바로 응답(respond)을 할 수 있다.
웹 서버는 정적 데이터를 응답해 주는데 특화되어 있다.
웹서버는 URL을 통해서 분석한다. 그것이 정적이면 알아서 자기가 응답을 해준다.
그러면 웹서버는 동적데이터를 처리할 수 있을까? NO
만약 클라이언트가 마이페이지를 요청했다고 가정해 보자
어떤 회원인지 모르니 회원번호를 통해 db조회를 해야 하고 여러 가지 연산이 필요하다.
결국 웹서버는 동적 처리를 못한다. 그래서 뒤에 있는 웹 컨테이너를 부르게 된다.
웹 컨테이너는 동적 데이터를 처리하는 친구이다. 웹컨테이너는 연산이 가능하다.
그래서 이 안에서는 연산이 가능한 javaFile이 있다. 우리는 그 파일을 서블릿(servlet)이라고 부르기로 했다.
서블릿은 어떤 요청이 들어오면 그에 맞는 연산을 해준다.
이 글은 jsp를 궁금한 사람들이 읽게 될 것인데 jsp는 아직 한 번도 나오지 않았다.
jsp가 세상밖에 나오기 전까지는 이렇게 서블릿으로 개발을 하였다.
어떤 단점이 있길래 jsp로 대체가 됐을까?
서블릿은 연산이 끝나면 그 결과를 html에 담아서 주어야 한다, 그러니깐 서블릿을 다시 말해 자바라는 파일에서 html을작성하게 된다. 가독성이 엄청 안 좋다.(매우 안 좋음)
그래서 나온 게 jsp이다 이는 반대이다. html안에서 java를 쓸 수 있다.
<%%> 태그만 열어서 java를 작성해 주면 된다. (servlet에 비하면 편함)
근데 여기서 웃긴 건 사실 jsp가 compile이 되면 서블릿이 된다는 것이다.
무슨 말이냐면 jsp는 html에서 자바를 사용할 수 있다, 근데 자바라는 친구는 번역이라는 과정이 필요해 사람의 언어를 컴퓨터로 (컴파일) 컴파일 언어의 특징은 번역파일이 나온다.
자바를 컴파일하면 class가 나오고 jsp를 컴파이라면 servlet 파일이 나온다.
왜? 연산이 필요하니깐, 자바프로그램이니깐 결국 jsp 서블릿에 포함된다고 봐도 된다.
결론 웹컨테이너 안에는 두 가지가 있다. servlet, jsp
여기까지가 요청 응답의 기본 구조이다.(request - respond)
신기하다 웹서버는 어떻게 디렉트로 웹컨테이너에게 요청을 할 수 있을까?
사실 말이 안 되는 얘기다. 둘이 동작하기에 연결해 주는 환경이 없다.
서버는 반드시 환경이 필요하다.
그래서 웹서버와 웹 컨네이너를 관리해 주는 환경을 우리는 WAS라고 한다.
웹 애플리케이션 서비스 우리가 다운로드한 톰캣이 이 WAS이다.
톰캣은 아파치 회사이다 아파치가 웹 서버이다.
윈도 맥은 톰캣만 다운로드하면 되는데, 이전에
리눅스 서버에서는 아파치 따로 톰캣 따로 둘이 연결도 해줘야 했었다.
요즘에는 톰캣을 설치만 해도 아파치까지 있어서 많이 발전이 되긴 한 것 같다.
그러면 다신 본론으로 웹서버는 연산이 필요한 동적 데이터를 처리하기 위해 WAS에게 "웹 컨테이너 좀 불러줘"라고 하게 된다.
웹 컨테이너에서 연산이 끝나면 WAS에게 전달해
WAS는 다시 웹서버에게 준다 서로 디렉트로 통신하는 것은 틀린 말이다.
위 글이 이해가 안 간다면 아해 그림을 보면서 다시 정독하면 모든 사람이 이해할 수 있을 거라 생각한다.
