아무거나

[JSP] 커넥션 풀 본문

Java & Kotlin/JSP & Servlet

[JSP] 커넥션 풀

전봉근 2019. 12. 21. 21:44
반응형

[JSP] 커넥션 풀

 

1. DAO, DTO

   - DAO(Data Access Object) : 데이터 베이스에 접속해서 추가,삭제, 수정 등의 작업을 하는 클래스이다. ( application <-> WAS <-(dao)-> DB )

                               일반적인 JSP 혹은 Servlet 페이지내에 위의 로직을 함께 기술할 수 도 있지만, 유지보수 및 코드의 모듈화를 위해 별도의

           DAO클래스를 만들어 사용한다.

 

   - DTO(Data Transfer Object) : DAO클래스를 이용하여 데이터 베이스에서 데이터를 관리할 때 데이터를 일반적인 변수에 할당하여 작업 할수도 있지만,

                                 해당 데이터의 클래스를 만들어 사용 ( 난잡해있는 여러 데이터들을 하나로 묶어서 클래스로 만들어 사용 -> 데이터를 변환 )

 

         * 웹 브라우저 <-> 서버(Servlet,jsp <-> DTO <-> DAO) <-> DataBase

 

2. PreparedStatement 객체

   - SQL문 실행을 위해 Statement객체를 이용 하였다. Statement객체의 경우 중복코드가 많아지는 단점이 있다.

     이러한 단점을 보완하기 위하여 PreparedStatement객체에 대해서 살펴보자.

     [Ex]

Class.forName(driver);
connection = DriverManager.getConnection(url, uid, upw);
int n;
String query = "insert into memberforpre (id, pw, name, phone) values (?, ?, ?, ?)";
PreparedStatement = connection.prepareStatement(query);

prepareStatement.setString(1, "abc");
prepareStatement.setString(2, "12334");
prepareStatement.setString(3, "홍길동");
prepareStatement.setString(4, "010-0000-0000");
n = prepareStatement.executeUpdate();

prepareStatement.setString(1, "def");
prepareStatement.setString(2, "0324243");
prepareStatement.setString(3, "홍길동2");
prepareStatement.setString(4, "010-0330-0000");
n = prepareStatement.executeUpdate();
..... 

// 이런식으로 기존에 직접 작성해서 휴먼에러가 나는 부분을 재활용하여 에러를 방지할 수 있다.

 

3. 커넥션 풀(DBCP)

   - 클라이언트에서 다수의 요청이 발생할 경우 데이터베이스에 부하가 발생하게된다.

     이러한 문제를 해결 하기 위해서 커넥션 풀(DataBase Connection Pool)기법을 이용한다.

 

     웹브라우저 ->

     웹브라우저 ->

     웹브라우저 ->  서버(DBCP)  ->  DataBase   // DBCP서버를 갖고있는 데이터커넥션 서버에서 풀을 만들어놓은곳에서 통신을한다.

     웹브라우저 ->

     ....       ..

 

     ex) Tomcat컨테이너가 데이터베이스 인증을 하도록 context.xml 파일을 열어 아래의 코드를 추가한다.

 

     [context.xml]

     ........

    // oracle 기준 코드 추가
    <Resource
        auth="Container"
        driverClassName="oracle.jdbc.driver.OracleDriver"
        url="jdbc:oracle:thin:@localhost:1521:xe"
        username="test"
        password="testpw"
        name="jdbc/Oracle11g"
        type="javax.sql.DataSource"
        maxActive="50"
        maxWait="1000"
    />
</Context>

 

// auth="Container" : 컨테이너에서 작업을 하겠다고 선언.

// maxActive="50" : 50번째까지 만든다. 51번째는 새로 만들어줘야함.

// maxWait="1000" : 위의 51번쨰일경우에 1000이상 기다리면 db excepiton에 걸린다. 

 

 

참고: https://www.inflearn.com/course/%EC%8B%A4%EC%A0%84-jsp-%EA%B0%95%EC%A2%8C/dashboard

반응형

'Java & Kotlin > JSP & Servlet' 카테고리의 다른 글

[JSP] EL(Expression Language)  (0) 2019.12.21
[JSP] 파일 업로드  (0) 2019.12.21
[JSP] 빈(Bean)  (0) 2019.12.21
[JSP] 예외 페이지  (0) 2019.12.21
[JSP] 세션  (0) 2019.12.21
Comments