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을 사용하는 절차
- WAS(톰캣)가 시작할 때 server.xml과 context.xml에 설정한 대로 커넥션 풀 생성
- JSP 코드에서 JNDI 서버(WAS가 제공)로부터 데이터소스 객체를 획득
- 데이터소스로부터 커넥션 객체를 획득
- DB 작업을 수행
- 모든 작업이 끝나면 커넥션 객체를 풀로 반환
- 두 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 라이센스를 따릅니다.