포스트

DBMS

DBMS

API

  • Application Programing Interface
  • 프로그램들이 서로 상호작용하는 것을 도와주는 매개체

connection pool

  • Connection 객체를 미리 생성해 pool에 넣어놓고, 요청이 있을 때 이미 생선된 Connection 객체를 가져다 사용하는 기법
  • 다 쓴 객체는 연결을 해제하는 것이 아닌 pool에 반납하여 필요할 때 재사용
  • WAS가 시작될 때 미리 생성한 커넥션 객체를 사용하므로 웹 애플리케이션 실행 속도가 빨라지고, 클라이언트의 동시 요청이 많아지더라도 좀 더 수월하게 응답

JNDI

  • java Naming and Directory Interface
  • 대부분의 WAS는 커넥션 풀을 비롯한 여러 자원을 JNDI 서비스로 제공
  • 자바 소프트웨어에서 객체나 데이터를 전체 경로를 몰라도 ‘이름’만으로 찾아 쓸 수 있는 디렉터리 서비스
  • 이름과 실제 객체와의 연결은 외부의 설정 파일에서 관리하므로 다른 객체로 교체하거나 세부 설정을 바꿀 때도 소스 코드를 수정하고 다시 컴파일할 필요가 없음

DNS

  • Domain Name System
  • 웹 브라우저에서 도메인을 입력하면 DNS를 통해 웹 서버의 IP주소를 얻어와 해당 주소로 접속

WAS의 JNDI를 통해 connection pool을 사용하는 절차

  1. WAS(톰캣)가 시작할 때 server.xml과 context.xml에 설정한 대로 커넥션 풀 생성
  2. JSP 코드에서 JNDI 서버(WAS가 제공)로부터 데이터소스 객체를 획득
  3. 데이터소스로부터 커넥션 객체를 획득
  4. DB 작업을 수행
  5. 모든 작업이 끝나면 커넥션 객체를 풀로 반환
  • 두 xml파일들은 커넥션 풀의 구체적인 속성을 정의하고 JNDI 서비스에 등록하는 역할

GlobalNamingResources

  • 전역 자원을 등록하는 영역
  • 설정을 담고 있는 xml 파일에서 사용
  • 이 엘리먼트 안에 등록한 자원은 이 서버에서 구동되는 모든 웹 애플리케이션에서 사용 가능

Resource 엘리먼트 속성

  • driverClassName : JDBC 드라이버의 클래스명
  • type : 데이터소스로 사용할 클래스명
  • initialSize : 풀의 최초 초기화 과정에서 미리 만들어놓을 연결의 개수(기본값 0)
  • minIdle : 최소한으로 유지할 연결 개수(기본값 0)
  • maxTotal : 동시에 사용할 수 있는 최대 연결 개수(기본값 8)
  • maxIdle : 풀에 반납할 때 최대로 유지될 수 있는 연결 개수(기본값 8)
  • maxWaitMillis : 새로운 요청이 들어왔을 때 얼마만큼 대기할지를 밀리초 단위로 기술
  • url : DB 연결을 위한 URL
  • name : 생성할 자원(풀)의 이름
  • username : 계정 아이디
  • password : 계정 패스워드

Context 엘리먼트 속성

  • global : 전역 자원 이름
  • name : 자원 이름

JSP

1
context.lookup("자원 이름")

context.xml

1
2
3
4
5
<Context>
<ResourceLink
global="전역 자원 이름"
name="자원 이름"
type=".."/>

server.xml

1
2
3
4
5
6
7
<GlobalNamingResources>
<Resource auth="Container"
        ..
name="전역 자원 이름"
        ..
        />
</GlobalNamingResources>

Statement

  • JDBC에서 쿼리문은 java.sql.Statement 인터페이스로 표현
  • Statement 객체는 Connection 객체를 통해 획득

Statement Interface

  • Statement : 인파라미터가 없는 정적 쿼리를 처리할 때 사용
  • PreparedStatement : 인파라미터가 있는 동적 쿼리를 처리할 때 사용
  • CallableStatement : procedure 나 function 호출 시 사용

IN parameter : 미리 작성해둔 쿼리문에서 일부 값을 나중에 결정할 수 있게 해주는 매개변수(물음표로 표현)

Statement Method

executeUpdate()

  • INSERT, UPDATE, DELETE 쿼리문을 실행할 때 사용
  • 기존 레코드를 변화시키거나 새로운 레코드를 입력하는 쿼리문들
  • 실행 후 영향을 받은 행의 개수가 int형으로 반환

executeQuery()

  • SELECT 쿼리문을 실행할 때 사용
  • SELECT는 기존 레코드를 조회하는 쿼리문
  • 조회한 레코드들의 집합인 ResultSet 객체를 반환

PreparedStatement

  • 먼저 쿼리문의 틀을 준비해둔 후, 필요할 때 인파라미터를 설정해 사용하는 방식으로 동작
  • 인파라미터 설정 시에는 데이터 타입에 맞는 set 메서드 사용
  • void setInt(int index, int value)
  • void setDate(int index, Date value)
  • void setString(int inex, String value)
이 기사는 저작권자의 CC BY-NC 4.0 라이센스를 따릅니다.