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.Statement
- 결과 받기
- Java.sql.ResultSet
- 연결 해제
- Java.sql.Connection
- Close()
- Java.sql.Connection
- JDBC 드라이버 로드
Connection Pool
- 커넥션 풀(Connection Pool)
- 웹 컨테이너가 실행되면서 DB와 미리 연결해놓은 일정량의 Connection 객체를 미리 만들어서 pool에 저장했다가, 클라이언트 요청이 오면 connection을 빌려주고 처리가 끝나면 실행된 상태로 다시 connection을 반납받아 pool에 저장하는 방식을 말한다.
- 커넥션 풀 기능
- Connection 관리
- 연결을 생성, 유지, 해제하는 작업을 관리한다. 연결을 재사용함으로써 연결 생성 비용을 줄일 수 있다.
- Connection 유지 및 재사용
- 애플리케이션이 DB 작업을 완료하면 연결을 닫지 않고 pool에 반환, 그 후 다른 요청에서 해당 연결을 재사용 할 수 있다.
- Connection 유효성 검사
- 연결 설정 관리
- 연결에 대한 구성 정보(url, id, pw)를 관리
- 연결 수 조절
- 동시에 사용 가능한 연결의 수를 제어하여 부하 방지
- Connection 관리
- 커넥션 풀 사용
- 커넥션 풀 클래스를 생성하고 해당 커넥션 풀에서 커넥션을 꺼내와 사용
- 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()
- 인스턴스 생성
- uniqueInstance 클래스
- 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 |