[Network/Http]04. DBCP

DBCP(DB Connection Pool)


http://gangzzang.tistory.com/entry/%ED%86%B0%EC%BA%A3Tomcat-%EC%BB%A4%EB%84%A5%EC%85%98%ED%92%80DBCP-%EC%84%A4%EC%A0%95


http://holiclove.tistory.com/entry/%ED%86%B0%EC%BC%93-DB-connection-%EA%B4%80%EB%A0%A8-Serverxmlwebxml-%EC%84%A4%EC%A0%95

'Network > Http' 카테고리의 다른 글

[Network/Http]04. DBCP  (0) 2016.08.01
[Network/Http]03. Servlet, HTTP Protocol  (0) 2016.07.04
[Network/Http]02. Web, Tomcat  (0) 2016.06.22
[Network/Http]01. CS관계와 자원위치.  (0) 2016.06.22

[Network/Http]03. Servlet, HTTP Protocol


- Servlet 생명주기(JDBC, C/S는 JavaEE)

   * Client(Browser)는 Server(WAS)에게 정보를 요청한다.   


   * 요청받은 WAS는 그에 대한 Thread가 생성된다.

     (=>Client 요청한 수 만큼이나 Thread가 생성되고 그 요청이 끝나면 Thread는 죽는다.)


   * WAS가 생성한 Thread에는 Servlet Bean이 Instance로 생성되어 있다.

     이 Bean에는 init()라는 Method로 생성자의 역할을 하며,

     요청에 대한 처리를 service()라는 Method로 처리하여 Client에게 HTML로 Reponse한다.

     (이 Instance는 매번 요청할때마다 init로 초기화 하지 않고 보관해두었다가 service만 호출되어 재사용된다.)


   * Intance의 해당 내용이 변경되어 Compile하면 기존에 있던 service가 destory에 의해 죽고 재생성된다.

     (Tomcat 환경파일에 reloadable을 true로 변경했을 때)


- HTTP Protocol

   - 정의 : 인터넷상에서 데이터를 주고 받기 위한 C/S 모델을 따르는 규약

   - 작동 방식 : 클라이언트에서 요청(request)를 보내면 서버는 요청을 처리해서 응답(response)한다.

                 Client : URI를 이용해서 서버에 접속하고, 데이터를 요청할 수 있다.

                 Server : Client의 요청을 받아서, 요청을 해석하고 응답을 한다.

   - 요청 방식

     Server에게 전달하는 정보를 Message에 담아 보내는것에 대하여 대표적으로 2가지로 분류된다.

     Message는 Head와 Body로 구성되어 있다.(Head에는 Client가 요청한 정보가 보여진다)

     

     * GET : Default(?)에 의한 방식. URL뒤에 CSV와 더불어 관련 정보를 전송한다.

             Message Header에는 GET이라는 방식과 요청한 URL의 모든 글자가 보이며

             한글과 같은 문자들 경우 16진수로 암호화 된다.

             static contents(HTML, CSS) : Request must be limited. Header is fixed size.


     * POST : Client의 Data를 보내는데 사용되는 방식이다.

              Message Header에는 POST이라는 방식이 보이고

              Body에는 요청한 URI의 모든 글자가 보이며 한글과 같은 문자들 경우 16진수로 암호화 된다.

              크기가 제한된 용량의 파일들이나 가시적 보안을 위해 사용된다.

              Dynamic contents(JSP, ASP, PHP) : Request doesn't need to be limited. Header is not fixed size.

 

     (HTTPS : POST가 보안에 한계가 있으므로 사용되는 HTTP 규약. Client측에서 자체적으로 암호화하여,

              Server에게 전달하고 전달받은 Server가 규약에 맞게 복호화 작업하여 진행한다.)


 - Tier Application (Tire는 Layer라 부르기도 한다.)

   * 3 - Tier Application

     Client - Server - DataBase의 구조

     => Thin Client(Browser. depends heavily on another computer (its server) to fulfill its computational roles.), 

        Fat Server(WAS)


   * 2 - Tier Application

     Client - DataBase

     => Fat Client(provides rich functionality independent of the central server)



 - Servlet의 위계도

참고 자료

   java.servlet

   <<interface>>

   Servlet -> Servlet의 Specification정의.

   + destroy() : void

   + init(ServletConfig) : void -> ServletException

   + service(ServletRequest, ServletResponse) : void -> ServletException, IOException



   <<abstract>>

   GenericServlet implements Servlet -> Protocol과 무관한 정의

   + init() : void -> Overrided

   + service(ServletRequest, ServletResponse) : abstract, void

   + destroy() : void -> Overrided


   

   java.servlet.http

   <<abstract>>

   HttpServlet extends GenericServlet

   # doGet(HttpServletRequest, HttpServletResponse) : void -> must override

   # doPost(HttpServletRequest, HttpServletResponse) : void -> must override

   # service(HttpServletRequest, HttpServletResponse) : void -> overrided

   + service(ServletRequest, ServletResponse) : void -> overrided


   


   UserDefindedClass HttpServlet

   init, destroy 불필요


   WAS가 요청받은 Message를 처리하여 보내는 Bean.

   상위에는 GenericServlet이 있고 init와 destroy가 있다. service는 abstract로 되어있고 HttpServlet에서 Override되어 있다.

   HttpServlet에 있는 service는 두 가지로 Overload되어 있다.

   호출하지 않아도 되나, void service(ServletRequest req, ServletResponse res)로 override하도록 한다.



 - ServletRequest 위계도

    interface임에도 불구하고 method를 사용 할 수 있는 이유

     => Servlet Container에서 HttpServletRequest, Response의 Argument에 해당되는 

          HttpServlet Instance를 생성하여 전달.

     => Servlet Container creates HttpServlet Request object and pass it

          as an argument to the servlet's service methods(doGet, doPost, etc)



    javax.servlet

    <<interface>>

    ServletRequest

    + getParameter(String name) : String -> name에 해당되는 값을 Return

    + getParameterNames() : Enumeration<Generic> -> Client에서 받아온 모든 Parameter저장. 정보에 대한 언어 설정.

    + getParameterValues(String name) : String[] -> name에 해당되는 모든 값을 Return

    ( => getParameter는 Client의 모든 정보를 Encapsulation)

    + setCharacterEncoding(String env) : void -> Client에서 받아온 정보에 대한 언어 설정.

    

    (

     Enumeration interface no implements, extends

     + hasMoreElements() : boolean

     + nextElement() : <Generic>

    )

     



    javax.servlet.http


    <<interface>> (확장용)

    HttpServletRequest extends ServletRequest

    (Client가 요청한 모든 정보들이 포함시켜 Server에게 보낸다. 이 정보들은 Encapsulation Hiding되어 있으므로 Getter를 사용하도록 한다.)

    + getQueryString() : String => 요청한 URL의 URI를 보여준다.



 - ServletResponse 위계도(차후 재수정)


    javax.servlet


    <<interface>>

    ServletResponse

    + getWriter() : PrintWriter -> Client에게 보낼 Writer를 Return.

    + setContentType() : void -> Client에게 보낼 Resource의 종류와 언어 설정 CSV는 Semicolon.

    (response.setContentType("text/html;charset=EUC-KR");)




    javax.servlet.http

    HttpServletResponse

    + 

 

 - Relative URI

    Client에서 Server에게 Request할 때, 해당 URI위치가 상대적으로 표기하는 것.

    해당 프로젝트를 옮길 때, URL의 변경으로 인하여 404 Error의 방지를 위함.

    IP에 독립적이다.


    Ex 1 : Root : edu

          Mapping : /PostData

          Package : default

          /edu/PostData => /edu/PostData

   edu/PostData => /edu/edu/PostData 

 /PostData => /PostData

 PostData => /edu/PostData


    Ex 2 : Root : edu

           Mapping : (/edu)/post

           Package : jw02.post


           post => /edu/jw02/post


  /edu/post => /edu/post

           ../post   => /edu/post

           ./../post => /edu/post


           /edu/jw02/post => /edu/jw02/post

           ./post => /edu/jw02/post


  ./jw02/post => /edu/jw02/jw02/post


 - EIS(Enterprise Information System)

    통합에 의한 기업 업무의 기능을 제공하는 정보 체계의 종류.

    크게 복잡한 기업이나 조직을 지원하는 능력과 그만한 큰 데이터를 다룸으로 서비스의 높은 품질을 제공.


 - Back End System

    공급처리, 재고, 주문을 관리하는 시스템처럼 회사를 운영하는데 사용되는 협업시스템.

    백오피스를 지원. 사용자들의 요구나 다른 시스템을 처리하는데 운영.


 - Eclipse Structure(Dynamic Web Project)

    Project - Java Resource - src - JavaPackage

                            - Library - Tomcat, SE, WebApp(Other Bean)


            - Web Content   - Folder

                            - WEB-INF - lib - .jar

                                      - web.xml



 - Web Appliction의 유지관리

    성질이 다른 Bean들을 분리하여 관리를 용이하게 하는 것. (Modularation)

    Clinet, JDBC를 관리하는 Bean들과 Servlet을 담당하는 Bean들을 JavaPackag별로 구분하고

    통합적으로 처리하는 Bean을 만들어둔다.(Modularity, Dependency)


    * JDBC의 유지관리

      - DAO(Data Access Object. DB에 접근하여 가져오는 정보를 모듈로 만든 Bean. 

         조건에 따라 Statement, PreparedStatement를 적절히 사용.)

      - VO(Value Object. 해당 객체의 가치있는 정보를 갖고있는 Bean)


vo 가치있는 정보

'Network > Http' 카테고리의 다른 글

[Network/Http]04. DBCP  (0) 2016.08.01
[Network/Http]03. Servlet, HTTP Protocol  (0) 2016.07.04
[Network/Http]02. Web, Tomcat  (0) 2016.06.22
[Network/Http]01. CS관계와 자원위치.  (0) 2016.06.22

[Network/Http]02. Web, Tomcat

Web Browser

   HTTP 프로토콜로 요청하는 Client용 Application.

   Server에서 Response받은 Html이란 자원을 Parsing하여 UI로 Display하는 Applicaition


- Web Server

   HTTP 프로토콜로 요청받은 Server용 Application.

   Client로부터 요청받은 Resource(Text, Movie, Photo 등)를 관리하여 

   Client에게 전송하는 Application.


   =>Web이 부흥하는 이유 : Web Server, Web Browser가 구비되어 있으므로 따로

       Application을 개발할 필요가 없다.(비용하락)

       Server에서 관리할 Resource(HTML)의 개발 생산성을 높힌다.


   * Servlet

     Web을 지원하는 Java Bean.

     IO Package를 이용하여 Client Browser가 인식하도록 

     HTML로 변경해주는 것을 표준화 하였다.

     Servlet이란 Bean을 지원하는 Driver는 Tomcat_Home/lib/Servlet.jar에 있으며

     ClassPath로 설정해둔다.


   * JSP

     Servlet을 확장한 Java Bean.


   * Servlet Container

     Servlet과 그것을 실행시키는 App을 합한것.


   * WAS(Web Application Server)

     Web Server + Servlet JSP Container가 합한것.


   * Tomcat

     다른 WAS의 경우 JRE와 병합하여 작동하나 Tomcat은 JRE 연결하여 작동한다.

     때문에 가벼운 특징이 있다.

     => Tomcat을 설치하는 이유는 Servlet, JSP의 기술을 실행하는 공개 소스로서

          각 Tomcat버전마다 각각의 Servlet과 JSP의 버전에 사용이 가능하기 때문.

        

   * 다형성

     Tomcat Download에 따르면 버전을 선택하는 테이블이 있다.

     현재 Servlet과 JSP의 버전중 현재 많이 사용되는 버전은 각 2.5와 2.1있고

     앞으로 많이 쓰일 버전은 3.0과 2.2가 있다. 이에 상응하는 Tomcat은

     7.0버전대가 있다.

     Servlet과 JSP의 Spec을 알면 

     그에 따른 모든 Server Tool에 대하여 다양한 사용이 가능하다.


   * 포트 충돌

     Oracle과 Tomcat을 같이 사용하다보면 서로간에 포트에서 충돌이 날 경우가 있다.

     Tomcat의 포트 변경은 나중에 찾아보도록 하고

     Oracle서버의 포트를 변경하기 위해선 아래의 절차에 따르도록 한다.


     Window 환경.

     cmd 실행 -> sqlplus 입력 -> system계정 접속(아이디 : system, 비밀번호 : system)

     -> EXEC DBMS_XDB.SETHTTPPORT(5000);

     이로서 Oracle 서버의 포트는 5000으로 변경이 되었다.

     이를 확인하기 위해 http://localhost:5000/apex에 접속이 된다면 적용이 된 것이다.


   * Tomcat 설치

     설치 마법사나 운영체제에 무관하게 그리고 터미널 사용법에 미숙해도

     설치가 가능하다.(개인적으로 OS X 사용중)


     Tomcat Download에 접속해서(7.0 버전을 사용하기로 했다.)

     Binary Distributions -> Core에 zip을 다운받고 원하는 경로에 압축을 해제한다.

     (개인적으로 /Users/yangseung-gil/Documents 에 지정함.

       지금부터 /Users/yangseung-gil/Documents/apache-tomcat-7.0.67를

       [Tomcat_Home]이라 부르겠다.)

     그렇게 되면 설치는 끝난다.  


- Web Application의 구조

   (Web Application을 다른 명칭으로

    Servlet Directory, Web Application, Servlet Context라 부른다.

    지금부터 Web Application을 WA라 부르겠다.)

    


   * Root/ ~.jsp, ~.html : WA에서 Client Browser로 전송할 Reource. 


   * /WEB-INF/web.xml : Web Application의 환경 파일(Deployment Descriptor). 

                                       Servlet과 WA을 구성하는 다른 Component를 서술한다.

                                       Package로 분류된 Java File들을 등록하여 

                                       URL 경로 이동에 원활하게 해주는 기능이 있다.


                                       [Tomcat_Home]/conf에 있는 web.xml에서 

                                       Overriding하고 있다.

                                       이 web.xml은 Tomcat의 환경파일이며 

                                       독립적 구조를 가지고있다.


   * /WEB-INF/classes : WA에서 사용하는 모든 Java File(.java, .class ,관련 자원)이 

                                     들어있다. 

                                     Package로 관리하고 있다.

                                     표준화된 ClassPath의 Root이다.


   * /WEB-INF/lib/ : JDBC와 같은 JavaBean(.jar)을 모아두는 Library. 

                               JavaBean에 독립적인 개발을 위해 JavaBean을 보관한다.


   => 이 모든 파일들을 한번에 압축하여 .war로 압축된다.



   * 아무런 Tool없이 Web Application 생성하는 과정

     Root/WEB-INF/classes 까지의 Directory생성


     WEB-INF Directoy에 WA 환경 파일 생성과 기본 설정.

     web.xml의 기본 구성요소는 아래와 같다.


1
2
3
4
5
6
7
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    metadata-complete="true" version="3.0">
    <!-- ........ -->
</web-app>
cs

뜻은 차후 작성할 것이다.



     Tomcat 환경파일에 등록

     eclipse의 plug-in을 통해 생성된 server 프로젝트에서

     server.xml을 열고, 최하단에 작성한다.


1
<Context path="/edu" docBase="c:/edu" debug="0" reloadable="true" /
cs

각 속성들의 의미를 파악해본다.    

Context : 가상의 Host에서 작동하는 하나의 WA를 말한다.

                각각 작성된 Context에 가지는 경로나 정보등을 설정한다.

docBase : 해당 WA에 대한 Document Base, Context root 혹은 파일 경로명을 말한다.

                 절대경로나 Context가 정의된 상대경로명을 지정할 수도 있다.

path       : Context path 혹은 해당 WA의 경로를 말한다.

                Client가 요청하는 URI의 시작 부분이 path에 지정된 경로와 같으면

                해당 WA의 요청이 처리된다.

                한 Host에서 path는 각자마다 유일해야된다.

                null string(""을 말함)을 입력할 경우 이 Context는 Host에 대한

                default WA으로 정의된 것이다.

                default WA는 다른 Context들과 무관한 모든 요청을 처리할 것이다.

reloadable : WA에 있는 Byte code(.class)의 변경을 감지하여 WA에 변경사항을

                    반영할지 설정하는 역할을 한다. 개발중에는 유용하나 실제 운영중인

                    WA에 대해 true로 설정해두면 개발중에 큰 피해가 올 수 있으며

                    runtime overhead가 발생하므로 false로 해두는 것이 좋다.

debug : 해당 WA에 대하여 debuging Log의 출력 정도를 말한다.

             높을수록 자세히 나온다.



Root Directoy에 jsp, html 복사. 

shut-down후 다시 start-up하여(서버를 재실행한다는 뜻)

     http://IP:Port/edu/~.jsp, http://IP:Port/edu/~.html확인



     Web Application 환경 파일에 servlet등록(아래 내용 의미 파악) 

     (Servlet Element에는 Servlet 이름과 해당 Class를 등록하고

      이를 Mapping Element에서 URL에 보낼 패턴을 설정한다.)

1
2
3
4
5
6
7
8
9
<servlet>
    <servlet-name>FirstServlet</servlet-name>
    <servlet-class>FirstServlet</servlet-class>
</servlet>
 
<servlet-mapping>
    <servlet-name>FirstServlet</servlet-name>
    <url-pattern>/FirstServlet</url-pattern>
</servlet-mapping>
cs

해석 : FirstServlet이란 byte code를 FirstServlet이란 이름으로 명명하여

          FirstServlet라는 url경로를 지정한다.


   * http://IP:Port/edu/에 index 구조 설정

     Tomcat 환경 파일에 아래 내용을 true로 변경

1
2
3
4
<init-param>
    <param-name>listings</param-name>
    <param-value>true</param-value>
</init-param>     
cs



'Network > Http' 카테고리의 다른 글

[Network/Http]04. DBCP  (0) 2016.08.01
[Network/Http]03. Servlet, HTTP Protocol  (0) 2016.07.04
[Network/Http]02. Web, Tomcat  (0) 2016.06.22
[Network/Http]01. CS관계와 자원위치.  (0) 2016.06.22

[Network/Http]01. CS관계와 자원위치.

- CS관계

   CS는 Web에 포함되어 있다.

   Client는 Server에게 요구하고자 하는 것을 Request하면

   이에 반응한 Server는 해당되는 것을 Response한다.

   Request와 Response의 통신 Protocol을 준수해야 통신이 가능하다.


- URL (Uniform Resource Locator: 자원 위치 지정자)

   Client가 원하는 자원을 가진 위치와 종류를 표현하는 규칙.

   CIlent가 URL을 입력하면, Client Browser는

   통신 Protocol이 CS간에 상응하면서

   Server에 있는, 명확하고 유일무이(Unique)한 주소인 IP와

   그 IP내부에 고유적 식별성을 가진 Port(HTTP의 Default Port는 80)를 합하여

   해당 서버에 진입한다.


   Server는 그림, 영상 등의 정보를 가진 html이란 자원을 가지고 있다.

   해당 위치에 진입하여 원하는 자원을 요청할때 URL에 해당 자원주소를 추가하게 된다.


- URI(Uniform Resource Identifier, URI)

   인터넷에 있는 자원을 나타내는 유일한 주소이다. 

   URI의 존재는 인터넷에서 요구되는 기본조건으로서 인터넷 프로토콜에 항상 붙어 다닌다.



'Network > Http' 카테고리의 다른 글

[Network/Http]04. DBCP  (0) 2016.08.01
[Network/Http]03. Servlet, HTTP Protocol  (0) 2016.07.04
[Network/Http]02. Web, Tomcat  (0) 2016.06.22
[Network/Http]01. CS관계와 자원위치.  (0) 2016.06.22

+ Recent posts

티스토리 툴바