2016년 5월 8일 일요일

Head First Servlets & JSP(1) 기초개념 - 컨테이너

 웹 클라이언트와 웹 서버가 어떻게 서로 커뮤니케이션하는가
 웹서버는 어떤 일을 하나요? 웹 서버는 클라이언트로부터 요청을 받아, 요청한 것을 넘겨주는일
 클라이언트는 무엇을 하나? 사용자가 서버에 요청을 보낼 수 잇는 기능 제공. 요청 보내고 난 다음, 서버가 보내온 요청의 결과를 화면에 출력
HTML코드를 읽어서(파싱) 화면에 보임
 (클라이언트)와 (서버)는 HTML과 HTTP를 어떻게 다룰지 압니다
HTML
(클라이언트) 요청 수신후; 서버는 브라우저에게 컨텐츠 타입이 무엇인지 알려줌.
(브라우저)는 이 내용에 기초하여 어떻게 화면에 출력할지 준비
 HTML이라는 명령어로; 브라우저가 화면에 컨텐츠를 출력할지에 대한 명령문(instruction)


 컨테이너가 주는 혜택
 서블릿 실행하고 관리
 1. 통신(커뮤니케이션)지원
 서블릿과 웹 서버가 서로 통신할 수 있는 손쉬운 방법 제공. 
개발자가 서버와 대화하기 위해 ServerSocket을 만들고, 특정 포트에 리스닝 하고, 연결요청이 들어오면 스트림 생성 // 할필요 없음
컨테이너는 어떻게 웹 서버와 통신해야하는지 잘 알 고 있으며, 이런 통신기능을 API로 제공함 
 2. 생명주기(라이프사이클)관리
컨테이너는 서블릿의 탄생과 죽음을 관리
 컨테이너는 서블릿 클래스를 로딩하여 인스턴스화하고, 초기화 메소드를 호출하고, 요청이 들어오면 적절한 서블릿 메소드를 호출하고, 서블릿이 생명을 다하면 GC진행
// 서블릿 자원을 효율적으로 관리해줌
3. 멀티스레딩 지원
//다중요청에 대한 스레드 생성 및 운영에 대해서 처리해줌(스레드안전성보장)
컨테이너는 요청마다 스레드 만듬
클라이언트 요청에 따라 적절한 HTTP서비스 메소드를 실행하면, 스레딩 작업끝남(스레드 죽음) 
4.선언적인 보안관리
보안관련된 내용을 서블릿 또는 자바 클래스 코드안에 하드코딩 할 필요없고
XML 배포서술자(Deploy Descriptor)에 기록하면됨.
-->보안 수정사항시 javacode수정하고 다시 컴파일하지 않아도 보안관리 가능 
 5. JSP지원
JSP코드를 실제 자바코드로 변환 
  • 개발자가 비지니스 로직에 충실하게 해주며, 스레딩이나 보완 네트워크 통신에 관련된 문제를 컨테이너에 위임.
  • 서블릿은 서비스 클라이언트;클라이언트 요청 수신 및 응답; 컨테이너는 서블릿을 관리해주고 생성, 소멸하는 사후까지 관리가 컨테이너 

 1. 서블릿과 JSP는 어디에쓰는 물건인고?
웹 애플리케이션은 이제 막 달아오른 시장. 
2. 웹 애플리케이션 아키텍쳐
서블릿은 도움이 필요합니다. 요청이 들어오면, 누군가 서블릿을 초기화해서, 요청을 처리할 새로운 스레드를 만들어야 합니다. 그러면 그 누군가는 서블릿의 doPost()또는 doGet()메서드를 호출.
여기에 또 하나, 이 두 메소드의 매개변수로 들어가는 HTTPRequest 와  HTTPResponse객체를 누군가가 생성해서 서블릿으로 넘겨주어야 겠지요. 또한 누군가는 서블릿이 생성, 소멸하는 시점에서 리소스 관리도 해야합니다. 그 누군가가 누구냐 하는 것인데, 바로 컨테이너입니다.

3. 초간단 미니 MVC 튜토리얼 
 4.서블릿이 되어보자
서블릿은 평생을 서비스 클라이언트로 삶니다.
서블릿이 하는 일은 클라이언트로부터 요청을 받아 이에 응답하는 일입니다.
요청은 "환영페이지 보여주세요(GET)"에서부터 "결제해주세요"라는 것까지 다양. Request객체에는 사용자의 중요한 데이터들이 들어있기 때문에, 서블릿은 어떻게 이 정보를 읽어오고, 사용할 것인지 알아야 합니다. Response객체는 브라우저가 화면에 정보를 출력하거나, 바이트 정보를 내려받는것과 같은 정보 전송역할을 하기에, 서블릿은 데이터를 어떻게 전송하는가도 미리 알고 있어야 합니다.
 5. 웹애플리케이션이 되어보자
 6. 대화 상태 유지하기
웹 서버에는 메모리가 없습니다.
웹 서버는 응답을 보낸 다음에는 당신이 누구였는지 조차 잊어버립니다. 다음 번에 다시 요청을 해도, 그가 이전의 당신이었다는 것을 모르죠. 
 7. JSP가 되어보자
JSP, 서블릿이 되다.
개발자가 서블릿을 만들지는 않았지만, 컨테이너는 알아서 JSP를 서블릿 소스코드로 변환한 다음, 컴파일하여 완전한 서블릿 클래스로 탈바꿈시킵니다. 
 8. 스크립트가 없는 페이지
 9. 막강한 커스텀 태그
 10. JSTL만으로 만족스럽지 않을때
11. 웹 애플리케이션을 배포해보자
이제 개발한 웹 애플리케이션을 배포할 때가 되었군요.  
 12. 비밀스럽게, 안전하게
지금 당신의 웹 애플리케이션이 위험에 처해 있다. 
 13. 막강 필터
필터는 요청을 중간에서 가로 챕니다.
요청(Request)을 중간에서 가로챌 수 있다는 것은 응답(Response)도 함께 가로챈다는 것을 의미합니다. 이 방식의 장점은 무엇보다도 서블릿이 눈치채지 못한다는 것이죠. 즉 클라이언트의 요청과 컨테이너가 서블릿의 service()메소도를 호출하는 중간에 끼어 들기 때문에 무슨 일이 있었는지 모른다는 말이죠. 그런데 뭐하려고 이러냐고요? 
 14. 엔터프라이즈 디자인 패턴
누군가는 이 문제를 겪었습니다.
자바로 웹 애플리케이션 개발이 처음이라면, 운이 좋군요. 이제 J2EE 셔츠를 입고, 이 길을 걸어간 수 많은 개발자들이 흘린 땀과 지혜의 총화를 만나게 될 것입니다.
reference : Head First Servlet & JSP

댓글 없음:

댓글 쓰기