728x90

DB 커넥션 풀

  • 웹 어플리케이션 서버가 시작될 때 데이터베이스와 일정 수의 커넥션을 미리 생성
  • 웹 어플리케이션의 요청에 따라 생성된 커넥션 객체를 전달
  • 일정 수 이상의 커넥션이 사용되면 새로운 커넥션을 만든다
  • 사용하지 않는 커넥션은 자동으로 종료하고 최소한의 기본 커넥션만을 유지
  • 커넥션 풀 구현 유형

    • 직접 : javax.sql.DataSource 인터페이스 구현 또는 아에 새로운 형식으로 구현
    • 아파지 자카르타 DBCP API를 이용한 구현

      • 톰캣 5.5 이상에 기본으로 포함
    • 애플리케이션 서버에서 제공하는 커넥션 풀 사용

      • javax.sql.DataSource 인터페이스를 따르는 커넥션 풀을 제공함
      • JNDI 네이밍 서비스를 이용해 사용
    • 프레임워크 제공 : 스트러츠와 같은 프레임워크에서 제공하는 커넥션 풀 사용
  • 톰캣에서 DataSource 설정

    • server.xml 설정 : <context> 태그 안에 <resource> 태그로 설정

      1. <Resource name="jdbc/oracle" auth="Container" type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@127.0.0.1:1521" username="jspbook" password="1234" maxActive="5" maxIdle="3" maxWait="-1" />
    • web.xml 에 JNDI 연결을 위한 설정 추가

      1. <resource-ref>
        <res-ref-name>jdbc/oracle</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
        </resource-ref>
  • 커넥션 풀 사용

    • JNDI 서비스를 통해 DataSource 객체 참조

      1. Context initContext = new InitialContext();
        Context envContext = (Context)initContext.lookup("java:/comp/env");
        DataSource ds = (DataSource)envContext.lookup("jdbc/oracle");
        conn = ds.getConnection();

트랜잭션

  • 데이터베이스에서 일련의 작업을 하나로 묶어서 처리하는 것 - 데이터의 무결성 보장을 위해
  • commit : 데이터베이스에 트랜잭션이 완료되었음을 알리는 명령
  • rollback : 트랜잭션을 취소하는 명령
  • JDBC 는 한 문장을 수행할 때마다 자동으로 commit 되도록 설정되어 있음

    1. conn.setAutoCommit(false); //auto commit mode 해제
    2. conn.commit();
    3. conn.rollback();
  • 일괄 갱신 : JDBC 2.0 에서 추가

    1. // for Statement object
    2. stmt.addBatch("insert into...");
      stmt.addBatch("update table2 set ..");
      int [] cnt = stmt.executeBatch();
    3. // for PreparedStatement object
    4. pstmt.setString(1, "string");
      ...
      pstmt.addBatch();
      ..
      int [] cnt = pstmt.executeBatch();

출처 : http://stseira.springnote.com/pages/1324082

728x90

+ Recent posts