Sio's Programming

커넥션풀 (DAO, DTO, PreparredStatement, 커넥션 풀(DBCP) 본문

Programming/DB

커넥션풀 (DAO, DTO, PreparredStatement, 커넥션 풀(DBCP)

SSio 2018. 5. 9. 23:51

DAO , DTO



DAO : Data Access Object


DTO : Data Transfer Object


                              DAD(DB로 접근해서 로직을 수행하는 역할)

클라이언트   ------->   WAS  ----->  DB 

 DTO(데이터를 하나로 묶어서 JSP나 Servlet으로 전달한다)



DAO



데이터 베이스에 접속해서 데이터 추가,삭제,수정 등의 작업을 하는 클래스

일반적인 JSP혹은 Servlet 페이지내에 위의 로직을 함께 기술할 수도 있지만, 유지보수 및 코드의 모듈화를 위해 별도의 DAO클래스를 만들어 사용 합니다.



DTO



DAO클래스를 이용하여 데이터 베이스에서 데이터를 관리할 때 데이터를 일반적인 변수에 할당하여 작업 할수도 있지만, 

해당 데이터의 클래스를 만들어 사용 합니다.




웹브라우저   - >     서버    ->  데이터베이스

                   servlet -> DAO ->

                         <-  DTO  



PreparedStatement 객체 살펴보기



SQL문 실행을 위해 Statement객체를 이용 하였습니다. Statement 객체의 경우 중복코드가 많아지는 단점이 있습니다.

이러한 단점을 보완한 PreparedStatement객체에 대해 살펴 봅니다



Class.forName(drive);

connection = DriverManager.getConnection(url, uid, upw);

int n;

String query = "insert into memberforpre (id, pw, name, phone) values (?,?,?,?)";

preparedStatement = connection.prepareStatement(query);


preparedStatement.setString(1, "abc");                    //values의 첫번쨰 물음표에 값을 넣는다.

preparedStatement.setString(2, "123");

preparedStatement.setString(3, "홍길동");

preparedStatement.setString(4, "010-1234-5678");

n = preparedStatement.executeUpdate();



preparedStatement.setString(1, "abc");                    //values의 첫번쨰 물음표에 값을 넣는다.

preparedStatement.setString(2, "123");

preparedStatement.setString(3, "홍길동");

preparedStatement.setString(4, "010-1234-5678");

n = preparedStatement.executeUpdate();




커넥션 풀(DBCP)



클라이언트에서 다수의 요청이 발생할 경우 데이터베이스에 부하가 발생하게 됩니다.

이러한 문제를 해결 하기 위해서 커넥션 풀 기법을 이용 합니다.



c - > was - > DB 

             -> 커넥션 풀을 미리 만들어 놓고 클라이언트가 요청할때마다 사용하게끔 한다 . 부하가 안걸리게 하기 위함




tomcat 컨테이너가 데이터베이스 인증을 하도록 context.xml 파일을 열어 아래의 코드를 추가 합니다.


<Resource

auth="Container"

driverClassName = "oracle.jdbc.driver.OracleDriver"

url = "jdbc:oracle:thin:@localhost:1521:xe"

username = "scott"

password = "tiger"

name = "jdbc/Oracle11g

type="javax.sql.DataSource"

maxActive = "50"    // 커넥션풀 갯수를 지정

maxWait = "1000" 


/>

</Context>


서버에서 풀을 만들어줘야 하기때문에 톰캣에서 설정함