Servlet 비즈니스 로직 처리
- SQL문을 사용해 데이터베이스 접근
- DAO, VO 클래스 사용
과정
- 브라우저가 서블릿에 요청
- DAO 객체 생성 후 메서드 호출
- 메서드에서 DB 연결 후 SQL 실행
- 조회된 회원 정보 VO 속성에 설정 후 저장해 서블릿에 반환
- 저장된 정보 HTML 태그 문자열로 만든 후 브라우저로 전송
Statement와 PreparedStatement 객체 차이
쿼리문 수행 시
1. 쿼리 문 분석
2. 컴파일
3. 실행
세 가지 단계를 거치게 되는데 Statement는 쿼리 수행마다 이 단계를 전부 거치게 되고 PreparedStatement는 처음 한 번만 거친 후 캐시에 담아 재사용한다.
차이점
- 캐시 사용 유무
- 쿼리 인자 부여 가능(PreparedStatement만 가능)
- 컴파일 횟수 차이(PreparedStatement는 한 번만)
참고
PreparedStatement 사용 시 성능상 캐싱되어야 할 쿼리가 그렇지 않은 쿼리 때문에 캐싱이 안 되는 상황이 발생할 수도 있다.
커넥션 풀
웹 애플리케이션과 데이터베이스 연결을 유지하는 기술
톰캣 컨테이너에서 동작과정
- 톰캣 컨테이너 실행 후 응용 프로그램 실행
- ConnectionPool 객체 생성
- ConnectionPool 객체와 DBMS 연결
- ConnectionPool 제공 메소드 호출해 연동
커넥션 풀 구현
ConnetionPool 객체 구현을 위해 javax.sql.DataSource 클래스를 사용
톰캣이 만들어 놓은 ConnectionPool 객체 접근을 위해 JNDI 이용
JNDI(Java Naming and Directory Interface)
필요 자원 key/value 쌍으로 저장 후 키를 이용해 값을 얻는 방법
사용 예
- 웹 브라우저에서 name/value쌍으로 전송 후 getParameter(name) 으로 값을 가져올 때
- 해시맵, 해시테이블
- 브라우저에서 도메인 네임으로 DNS 서버에 요청할 경우 도메인 네임에 대한 IP 주소 가져올 때
구성 패키지
javax.naming
javax.naming.directory
javax.naming.ldap
javax.naming.event
javax.naming.spi
javax.naming.context 인터페이스를 구현한 객체를 통해 name 값을 설정 후 context.xml에 설정된 DataSource에 접근한다.