달력

4

« 2024/4 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
2007. 10. 22. 12:27

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 방식
  -> 복사한 소스에서 버그가 발견되거나, 기능을 추가해야 한다면,
     모든 소스를 일일이 찾아서 수정,
     복사한 소스의 위치와 횟수를 기억해야 한다.
  -> 유지보수가 매우 곤란해진다.
 - 함수 재사용
  -> 코드의 양을 줄일 수 있다.
  -> 공유되고 있는 소스에 버그가 있다면 한 곳에서 고치면 된다.
 - 클래스 상속과 재정의를 통한 재사용
  -> 객체의 상호 작용 중심의 사고로 개발자의 사고방식을 전환
  -> 상속과 인터페이스 구현
  -> 다형성
- 디자인 패턴, 프레임 워크
  -> 잘못된 클래스의 정의 시 문제 발생
    : 디자인 패턴과 프레임워크 적용
  -> 디자인 패턴
    : 개발자들이 오랫동안 고민해서 얻은 설계 노하우를 쉽게 자신의 것으로 재사용 할 수 있다.
    : 하나의 상황에 초점을 맞춘 것.


## 웹

Java
  -> 정적 + 동적
     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가 생성되어 서비스
    : 자원을 효율적으로 나누어 사용하면서 서비스를 제공
  -> 서블릿의 생성과 초기화는 최초에 단 한번만 이루어진다.
  -> 모든 사용자 요청을 처리하면, 서블릿 컨테이너는 해당 서블릿을 소멸

                        요청1       요청2       요청3       요청4
    ================================================================
    서블릿 컨테이너 -- 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 문제
    사용자 1        사용자 2
    ===============================
    count++
    -------------------------------
                    count++
    -------------------------------
                    println(count)
    -------------------------------
    println(count)
    synchronized(this) {
      count++;
      out.println(count);
    }

멀티 쓰레드
  - Virtual CPU
  - Code
  - Class Variables
  위 3가지를 공유함

  하나의 process가 생성이 된 후에 Thread가 여러개 생성이 되면
  process가 사용하는 CPU를 각 Thread가 공유하게 된다(Virtual CPU)

  class variables는 process 범위에서 생성 & 유지되는 변수이고, 각 thread에서 공유한다.
  doGet(), doPost() 등은 각 thread 에서 각자 실행되는 부분이다.

 
:
Posted by 뽀기