21.03.01 [PreparedStatement, ConnectionPool, JNDI, DataSource]

박종찬·2021년 3월 1일
0

TIL

목록 보기
87/89

PreparedStatement

앞의 Statement 인터페이스는 SQL문을 실행하기 위해 DB와 연동할 때마다 SQL문을 다시 컴파일해야하므로 속도가 느리다는 단점이 있다

PreparedStatement 인터페이스는 SQL문을 미리 컴파일되어 있기에 속도가 훨씬 빠르다

ConnectionPool

앞에서 DB 연동 과정은 클라이언트에서 요청할 때 마다 DB를 연결하기 위해 Connection 객체를 얻은 뒤, 작업하는 방식이기에 시간이 많이 소요된다

이런 시간 소요를 줄이기 위해 웹 서비스가 실행되기 전 미리 데이터베이스와 연결시켜 유지하는 기술을 ConnectionPool이라 부른다

JNDI(Java Naming and Directory Interface)

필요한 자원을 키/값으로 저장한 후 필요할 때 키를 이용해 값을 얻는 자바 API다

톰캣 컨테이너의 경우 ConnectionPool 객체를 생성하면 이 객체에 대한 JNDI 키를 미리 설정해 놓는다

ConnectionPool에 대한 설정을 하기 위해서 톰캣 서버 설정 파일, context.xml에 Resource를 입력한다

DataSource

ConnectionPool에는 다수의 Connection 객체가 생성되어있다. 이를 직접 다루기에는 힘들기에 DataSource라는 개념을 도입하여 사용한다

  • JNDI를 통해 ConnectionPool의 Connection 객체를 관리하는 객체를 말한다
  • DataSource 객체를 통해 필요한 Connection 객체를 가져오거나 반납 등의 작업을 한다

DataSource 이용 절차

  1. JNDI에 접근하기 위해 기본 경로를 지정한다
    • lookup()은 리소스를 찾은 뒤 그 리소스를 사용할 수 있도록 객체로 변환해주는 메소드다
    • 파라미터의 "java:/comp/env"는 톰캣에서 리소스를 관리하는 가상의 디렉터리다
  2. context.xml에 설정한 name 값(jdbc/oracle)을 받아온다
    • lookup() 의 리턴값은 객체이기에 context.xml에서 설정한 원래 리소스 타입(DataSource)으로 변환해준다
  3. DataSource 객체로부터 ConnectionPool에 준비된 Connection 객체를 빌려온다
  4. ConnectionPool에 반납한다

참고

profile
반가워요! 사람을 도우는 웹 개발자로 성장하기! :)

0개의 댓글