JSP_basic. Connection Pool과 DAO의 Singleton pattern처리

dwanGim·2022년 4월 12일
0

JSP_basic

목록 보기
9/15

Connection Pool

Connection Pool, 연결 풀은

데이터베이스 메모리 내에 있는 데이터베이스 커넥션들로 구성된 하나의 캐시입니다.

데이터베이스 연결 풀은 데이터에 대한 요청이 발생하면

재사용되는 것으로, 데이터베이스의 수행 능력을 향상시키기 위해 사용합니다.

연결 풀에서 하나의 연결이 생성되어 풀에 배치되면 새로운 연결이 만들어지지 않도록 재사용하지만

만약 모든 연결이 사용 중이라면 새로운 연결을 풀에 추가해줍니다.

연결 풀을 통해 사용자는 데이터베이스 연결 시간을 줄일 수 있습니다.

context.xml 폴더를 수정

connection pool을 설정하기 위해 context.xml을 수정해보겠습니다.

    <Resource
    	auth="Container"
    	driverClassName = "com.mysql.cj.jdbc.Driver"
    	url = "jdbc:mysql://localhost:3306/ict03"
    	username = "root"
    	password = "????"
    	name = "jdbc/mysql"
    	type = "javax.sql.DataSource"
    	maxActive = "300"
    	maxWait = "1000"    
    />


해당 코드들을 추가했습니다. 이제 connection pool이 설정되었으니

만들어두었더 jsp파일들의 sql연결구문들을 하나씩 수정해줍니다.

여기서 maxActive는 최대 연결 수를 뜻하며

maxWait는 밀리초 단위로 서버 최대 대기 시간을 뜻합니다.

위의 코드에서는 maxWait가 1000

maxActive가 300이기 때문에

1초의 로딩이 있으면 새로운 연결을 만들고

새로운 연결은 최대 300개까지만 생성된다는 것을 뜻합니다.

Singleton pattern

사용자의 요청을 서버가 수행할 때마다 UserDAO dao = new UserDAO(); 처럼

같은 메서드를 계속 실행하다보면

힙에는 계속해서 UserDAO()가 쌓이게 되고

가비지 시스템이 지워준다고 해도 접속자 수가 쌓이면 서버가 다운될 수도 있는

위험을 가지고 있습니다.

싱글턴 패턴은 생성자가 여러 차례 여러 사용자에게 호출되더라도

객체 하나만 생성해서 모든 값을 처리해줍니다.

private DataSource ds;


	private UserDAO() {
		try {
			Context ct = new InitialContext();
			ds = (DataSource)ct.lookup("java:comp/env/jdbc/mysql");
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	

	
	public static UserDAO getInstance() {
		if(dao == null) {
			dao = new UserDAO();
		}
		return dao;
	}

그리고 DAO 내부에 맴버변수로 자기 자신(현 파일의 클래스명은 UserDAO 이므로 UserDAO 타입)변수 하나 생성해줍니다.

싱클턴은 요청 시마다 DAO를 매번 새로 생성하지 않습니다.

사용자 요청 때는 이미 생성된 DAO의 주소값만을 공유해서

DAO 생성에 필요한 시간을 절약합니다.

생성자는 private으로 처리해 외부에서 생성명령을 내릴 수 없게 처리하고 상속도 받을 수 없도록 만듭니다.

또 static 키워드를 이용해서 단 한 번만 생성하고, 그 이후로는

주소를 공유하는 getInstance() 메서드를 생성합니다.

일단은 여기까지 입니다.

profile
배울 게 참 많네요.

0개의 댓글