JSP & Servlet 교육 Day 1st. 그거/Seminar2007. 10. 22. 12:27
장소 : 썬 교육센터
날짜 : 10.22 ~ 10.26
시간 : 09:30 ~ 17:30
내용 : Web Component Developement with Servlet and JSP Technologies
# Day 1
기본 환경 설정 및 설정 환경 테스트
프로그램 설치 및 설정 >
JDK 1.5.0_12 설치
PATH 설정
CLASSPATH 설정
Tomcat 5.5 설치
Eclipse 3.2 설치
Eclipse Project 만들기
Eclipse + Tomcat 연동 (plug-in 복사 : http://www.eclipsetotale.com/tomcatPlugin.html)
Eclipse + Oracle 연동 (eclipse->window->show view->Data Explorer)
주의 >
Kill Apache Server Process
Oracle HttpService 중지(속성->수동 으로 변경)
Tomcat bin (start server)
테스트 >
HTML 페이지
JSP 페이지
Servlet 페이지
Introduction Web Application Technologies
## MVC 패턴
모델
-> 비즈니스 데이터와 그 데이터를 다루는 연산의 집합
-> 자바 객체와 데이터베이스 간의 매핑을 통해 자바 객체에 접근하듯이 데이터베이스에 접근할 수 있도록 하는 프레임워크 필요.
: ejbStore(), ejbLoad()
-> 모델의 구현
: 어떤 방식으로 접근할 것인가
: 어느 정도 규모의 애플리케이션인가?
: 개발자들의 기술 수준이 어느 정도인가?
뷰
-> 디자이너의 역할이 더 큰 영역
-> 비지니스 로직과 프레젠테이션 로직의 분리
-> JSP
컨트롤러
-> 흐름을 관리하는 역할
-> 모델과 뷰 간의 조정 역할
MVC 모델 1, 모델 2
=> 사용자의 요청을 받아 흐름을 제어하는 일을 누가 하는가?
모델 1 : JSP
모델 2 : Servlet
## 프레임워크
-> Java에서의 의미
: 소프트웨어의 특정 문제 영역을 해결하기 위한 뼈대를 이루는 클래스와 인터페이스의 집합
-> 프레임워크는 내가 만든 프로그램을 끼워 넣는 것이고, 유틸리티는 필요한 프로그램을 갖다 쓰는 것이다.
-> 프레임워크는 extends, 유틸리티는 import
-> 디자인 패턴의 집합이다.
-> 어떻게 하면 이전에 만들어 놓은 코드를 다시 사용할 수 있을까?
: 얼마나 재사용성이 높은 프로그램을 만드는가?
: 재사용에 적합한 구조로 잘 설계 되었는가?
## 수준별 재사용 방식
- Copy & Paste 방식
-> 복사한 소스에서 버그가 발견되거나, 기능을 추가해야 한다면,
모든 소스를 일일이 찾아서 수정,
복사한 소스의 위치와 횟수를 기억해야 한다.
-> 유지보수가 매우 곤란해진다.
- 함수 재사용
-> 코드의 양을 줄일 수 있다.
-> 공유되고 있는 소스에 버그가 있다면 한 곳에서 고치면 된다.
- 클래스 상속과 재정의를 통한 재사용
-> 객체의 상호 작용 중심의 사고로 개발자의 사고방식을 전환
-> 상속과 인터페이스 구현
-> 다형성
- 디자인 패턴, 프레임 워크
-> 잘못된 클래스의 정의 시 문제 발생
: 디자인 패턴과 프레임워크 적용
-> 디자인 패턴
: 개발자들이 오랫동안 고민해서 얻은 설계 노하우를 쉽게 자신의 것으로 재사용 할 수 있다.
: 하나의 상황에 초점을 맞춘 것.
## 웹
-> 정적 + 동적
HTML + <% %>
Servlet
JavaBeans
EJB
.NET
-> 정적(ASP.NET) + 동적(C#.NET, VB.NET)
Java Web Application
-> HTML (정적)에 프로그램 기술을 접목시킴
-> CGI (Common Gateway Interface) 기술
: 사용자의 요청에 매번 새로운 프로세스가 생성
: 어느 정도의 한계를 벗어난 동시 접속자가 발생하면 서버 전체가 다운되는 경우가 많다.
: 다른 프로세스와의 정보 공유가 쉽지 않다.
-> 1997년 서블릿의 소개
서블릿
-> 서버 측 프로그램
-> 서블릿 라이프 사이클(Life Cycle)
: init(), service(), destroy()
-> 하나의 JVM 안에서 Multi Thread로 동작
: 서블릿이 한번 적재되면 동시 접속자가 몇 명이든 하나의 프로세스 안에서
접속자 당 하나의 Thread가 생성되어 서비스
: 자원을 효율적으로 나누어 사용하면서 서비스를 제공
-> 서블릿의 생성과 초기화는 최초에 단 한번만 이루어진다.
-> 모든 사용자 요청을 처리하면, 서블릿 컨테이너는 해당 서블릿을 소멸
================================================================
서블릿 컨테이너 -- init()
요청/응답 -- service()
요청/응답 -------------- service()
요청/응답 -------------------------- service()
요청/응답 -------------------------------------- service()
요청/응답 -------------------------------------- destroy()
-> init() method
: 서블릿이 처음 적재될 때 호출된다.
실제로 서비스가 이루어지기 전에 호출 => 초기화 작업 가능
: init(ServletConfig config)
init(config) method에서 super.init(config)가 호출되어야 함
: init()
getServletConfig() method를 이용하여 ServletConfig 가져올 수 있음
-> service() method
: 사용자의 요청이 있을 때마다 호출
: 서블릿 컨테이너는 GenericServlet에 정의된 service() 만 호출
HttpServlet 에서는 service() method가 호출되면 요청 정보를 분석해서
HTTP 명령에 따라 doGet() 또는 doPost() method를 호출하도록 재정의하고 있다.
-> destroy() method
: 서블릿 컨테이너가 서블릿을 소멸시키기 직전에 호출
자원 반납하는 역할 구현
-> ServletRequest
: 사용자의 IP 주소나 호스트 명, 사용하는 프로토콜, 포트 번호,
요청 파라미터 등 요청에 관련된 많은 정보를 제공
: String getParameter(String name);
String[] getParameterValues(String name);
위 method를 이용하여 프로그램에 전송된 요청 파라미터를 확인할 수 있다.
- ServletResponse
: response.setCharacterEncoding(String enc)
파라미터의 값이 한글일 경우, 한글 설정(euc-kr)
: java.io.PrintWriter getWriter()
Html 과 같은 텍스트 형식일 경우, getWriter()를 통해 PrintWriter를 생성하여 출력할 수 있다.
: ServletOutputStream getOutputStream()
바이너리(이미지, PDF 등등) 파일일 경우, getOutputStream()을 통해 SerlvetOutputStream을 이용할 수 있다.
서블릿에서 멀티 쓰레드에 대한 고려
: concurrency, synchronization 문제
===============================
count++
-------------------------------
count++
-------------------------------
println(count)
-------------------------------
println(count)
count++;
out.println(count);
}
멀티 쓰레드
- Virtual CPU
- Code
- Class Variables
위 3가지를 공유함
하나의 process가 생성이 된 후에 Thread가 여러개 생성이 되면
process가 사용하는 CPU를 각 Thread가 공유하게 된다(Virtual CPU)
class variables는 process 범위에서 생성 & 유지되는 변수이고, 각 thread에서 공유한다.
doGet(), doPost() 등은 각 thread 에서 각자 실행되는 부분이다.
'그거 > Seminar' 카테고리의 다른 글
JSP & Servlet 교육 Day 3rd. (0) | 2007.10.24 |
---|---|
JSP & Servlet 교육 Day 2nd. (0) | 2007.10.23 |
[세미나] 웹2.0 시대의 키워드 'RIA'의 뉴 패러다임 세미나 (0) | 2007.10.16 |
[세미나] BEA Developers Day (0) | 2007.10.16 |
[세미나] JCO 오픈소스 컨퍼런스 (0) | 2007.10.09 |