본문 바로가기
괴발개발/DB

DataBass connection pool 커넥션 풀 (DBCP)

by 맛길만걷자 2024. 6. 27.
728x90
반응형

DB 과부화 방지.

 

DataBass Connection Pool(DBCP) 
     - 미리 DB와 연결되어 있는 CONNECTION을 일정 개수 만들어 두고
       클라이언트 요청 시 만들어 둔 Connection을 빌려주고
       요청  처리 완료 시 다시 반환 받는 기법


       - 장점 :
       1) 미리 Connection을 만들어두기 때문에 요청 시 속도가 빠름
 (전에는 그때 끄떄 만들어서 오래걸림)
 
  2) Connection 개수에 제한을 두어 DB에 과도하게 요청되는 경우를 방지    

  Servers -> config파일 -> context.xml 에 넣을것. 

필요에한걸 resource에 넣는다.

  
     <!-- DBCP 세팅 -->   
    <Resource 
      name="jdbc/oracle" 
      auth="Container"
      type="javax.sql.DataSource" 
      driverClassName="oracle.jdbc.OracleDriver"
      url="jdbc:oracle:thin:@localhost:1521:xe"<-오라클주소.
      username="db 유저이름" 
      password="db 유저패스워드" 
      maxTotal="50"      
      maxIdle="10"
      maxWaitMillis="-1"
    />
    <!-- 설명
       name : JNDI 이름 Context의 lookup()을 사용하여 자원을 찾을때 사용한다. java:comp/env 디렉터리에서 찾을 수 있다.
       auth : 자원 관리 주체 지정(Application 또는 Container)
       type : Resource의 타입 지정
       driverClassName : JDBC 드라이버 클래스 이름.
       maxTotal : DataSource 에서 유지할 수 있는 최대 커넥션 수    
       maxIdle : 사용되지 않고 풀에 저장될 수 있는 최대 커넥션의 개수. 음수일 경우 제한이 없음
       maxWaitMillis : 커넥션 반납을 기다리는 시간(-1은 반환될 때 까지 기다림)
     --> 

 

jdbcTemplate.java에 Connection getConnection()을 변경.

 

// DB 연결 정보를 담고있는 Connection 객체 반환 메소드
    public static Connection getConnection() {

        try {

            // JNDI(Java Naming and Directory Interface API)
            // - 디렉토리에 접근하는 Java API
            // - 애플리케이션(프로그램, 웹앱)은 JNDI를 이용해서 파일 또는 서버 Resource를 찾을 수 있음
           
           
            Context initContext = new InitialContext();
           
            // servers -> context.xml 파일 찾기
            Context envContext = (Context)initContext.lookup("java:/comp/env");
           
            // DBCP 세팅의 <Resource> 태그를 찾아 DataSource 형식의 객체로 얻어오기
            // DataSource : Connection Pool을 구현하는 객체(Connection 얻어오기 가능)
            DataSource ds = (DataSource)envContext.lookup("jdbc/oracle");
           
            conn = ds.getConnection();
            conn.setAutoCommit(false);
           
           
           

        }catch(Exception e) {
            e.printStackTrace();
        }

        return conn;

    }

 

 

728x90
반응형

'괴발개발 > DB' 카테고리의 다른 글

db보호를 위한 암호화 필터(로그인,회원가입, 비밀번호 변경, 회원탈퇴)  (0) 2024.07.02
ORDER BY  (0) 2024.06.01
NULL 연산자  (0) 2024.06.01
IN 연산자, 연결연산자(||)  (0) 2024.05.29
SQL 연산자 우선순위  (0) 2024.05.28