교육 (Today I Learned)/SeSAC

SeSAC 30일차 / Connection Pool

Bay Im 2023. 8. 28. 22:53
SeSAC 30일차(2023-08-28)
Connection Pool


JDBC

  • JDBC 프로그래밍 단계
    • JDBC 드라이버 로드
      • System.setProperty()
      • Class.forName()
    • 데이터베이스 연결
      • Java.sql.Connection
    • Statement 생성
      • Java.sql.Statement
      • Java.sql.PreparedStatement
    • SQL 문 전송
      • Java.sql.Statement
        • executeQuery()
        • executeUpdate()
    • 결과 받기
      • Java.sql.ResultSet
    • 연결 해제
      • Java.sql.Connection
        • Close()

 

Connection Pool

  • 커넥션 풀(Connection Pool)
    • 웹 컨테이너가 실행되면서 DB와 미리 연결해놓은 일정량의 Connection 객체를 미리 만들어서 pool에 저장했다가, 클라이언트 요청이 오면 connection을 빌려주고 처리가 끝나면 실행된 상태로 다시 connection을 반납받아 pool에 저장하는 방식을 말한다.
  • 커넥션 풀 기능
    • Connection 관리
      • 연결을 생성, 유지, 해제하는 작업을 관리한다. 연결을 재사용함으로써 연결 생성 비용을 줄일 수 있다.
    • Connection 유지 및 재사용
      • 애플리케이션이 DB 작업을 완료하면 연결을 닫지 않고 pool에 반환, 그 후 다른 요청에서 해당 연결을 재사용 할 수 있다.
    • Connection 유효성 검사
    • 연결 설정 관리
      • 연결에 대한 구성 정보(url, id, pw)를 관리
    • 연결 수 조절
      • 동시에 사용 가능한 연결의 수를 제어하여 부하 방지
  • 커넥션 풀 사용
    • 커넥션 풀 클래스를 생성하고 해당 커넥션 풀에서 커넥션을 꺼내와 사용
    • getInstance()로 계정 커넥션
    ConnectionPool pool = ConnectionPool.getInstance("oracle.jdbc.driver.OracleDriver", SYSTEM, hr, 3, 5);
    // url, id, password, 초기 커넥션수, 최대 커넥션수
    
    • getConnection() 메서드로 커넥션 풀에서 커넥션 꺼내오기
    Connection conn = pool.getConnection();
    
    • releaseConnection() 메서드로 커넥션 반환하기
    if (conn != null) {
    	pool.releaseConnection(conn);
    }
    
    • closeAll() 메서드로 커넥션 풀 종료
    pool.closeAll();
    

 

Web

  • Web client
    • HTML
    • CSS
    • Java Script

 

실습

  • Project: TestJDBCWebProject
  • JSP file: index.jsp, action.jsp

 

오늘의 실습 코드

https://github.com/yubin-im/SeSAC/tree/d2b18eebada8619575f18a145065784922e00cb9/20230828

 

 

 

자습

싱글턴 패턴

  • 싱글턴 패턴(Singleton Pattern)
    • 클래스 인스턴스를 하나만 만들고, 그 인스턴스로의 전역 접근을 제공
    • 싱글턴 패턴 적용 시 클래스에서 하나뿐인 인스턴스를 관리하도록 만들기
    • 다른 어떤 클래스에서 자신의 인스턴스를 추가로 만들지 못하게 해야함. (인스턴스 필요시 클래스를 거치도록)
  • Singleton 클래스 다이어그램
    • uniqueInstance 클래스
      • 싱글턴의 하나 뿐인 인스턴스 저장
    • getInstance()
      • 인스턴스 생성
  • getInstance()
    • 동기화하면 멀티스레딩과 관련된 문제 해결
    public class Singleton {
    	private static Singleton uniqueInstance;
    
    	// 기타 인스턴스 변수
    
    	public static synchronized Singleton getInstance() {
    		if (uniqueInstance == null) {
    			uniqueInstance = new Singleton();
    		}
    	return uniqueInstance;
    	}
    
    	// 기타 메소드
    }
    
    • 효율적으로 멀티스레딩 문제 해결
      • getInstance()의 속도가 그리 중요하지 않다면 그냥 두기
      • 인스턴스가 필요할 때는 생성하지 말고 처음부터 만들기
    public class Singleton {
    	private static Singleton uniqueInstance = new Singleton();
    
    	private Singleton() {}
    
    	public static Singleton getInstance() {
    		return uniqueInstance;
    	}
    }
    
    • DCL(Double Checked Locking)을 써서 getInstance()에서 동기화되는 부분 줄이기
      • DCL 사용시 인스턴스가 생성되어 있는지 확인한 다음 생성되어 있지 않았을 때만 동기화할 수 있다.
      • 처음에만 동기화하고 나중에는 동기화하지 않아도 된다.
    public class Singleton {
    	private volatile static Singleton uniqueInstance;
    
    	private Singleton() {}
    
    	public static Singleton getInstance() {
    		if (uniqueInstance == null) {
    			synchronized (Singleton.class) {
    				if (uniqueInstance == null) {
    					uniqueInstance = new Singleton();
    				}
    			}
    		}
    		return uniqueSingleton;
    	}
    }
    
  • synchronized
    • synchronized 키워드를 추가하면 한 스레드가 메소드 사용을 끝내기 전까지 다른 스레드는 기다려야 한다.
  • enum
    • 위의 방법도 있지만 앞으로 싱글턴이 필요할 때 enum을 사용하면 된다.
public enum Singleton {
	UNIQUE_INSTANCE;
	// 기타 필요한 필드
}
public class SingletonClient {
	public static void main(String[] args) {
		Singleton singleton = Singleton.UNIQUE_INSTANCE;
		// 여기서 싱글턴 사용
	}
}

 

HTML

  • 요소
    • 제목, 본문, 이미지 등 HTML 페이지에 위치
  • 태그
    • 요소를 만들 때 사용하는 기호
      • ex) <h1>Hello World</h1>
      • 시작 태그: <h1>
      • 끝 태그: </h1>
  • 속성
    • 태그에 추가 정보를 부여
      • ex) <h1 title=”header”>Hello World</h1>
      • 속성 이름: title
      • 속성 값: header
  • 주석
    • <!— 주석 —>
  • !DOCTYPE html 태그
    • 모든 HTML5 문서는 반드시 <!DOCTYPE html> 태그를 문서의 첫 행에 표
  • html 태그
    • 모든 HTML 페이지의 기본 요소
    • 모든 HTML 태그는 html 태그의 내부에 작성
  • body 태그
    • 사용자에게 실제로 보이는 부분
  • head 태그
    • body 태그에 스타일 시트와 자바스크립트 제공
  • title 태그
    • 웹 브라우저에 표시하는 제목 지정

 

728x90

'교육 (Today I Learned) > SeSAC' 카테고리의 다른 글

SeSAC 32일차 / HTML, JSP 실습  (0) 2023.08.31
SeSAC 31일차 / HTML  (1) 2023.08.29
SeSAC 29일차 / JDBC  (0) 2023.08.26
SeSAC 28일차 / JDBC  (0) 2023.08.25
SeSAC 27일차 / 정렬 알고리즘, 탐색  (0) 2023.08.25