스프링 DB 1(김영한 강의) - 섹션 2 : 커넥션 풀과 데이터소스 이해
섹션 목적 : 커넥션 풀과 데이터소스를 이해해보자
1. 커넥션 풀의 등장 배경
(1) DriverManager를 통해 DB 커넥션을 획득하는 과정은 다음과 같다
① DB와 TCP/IP를 통해 연결
② DB에 ID, PASSWORD 등 부가정보 전달
③ 커넥션 획득
(2) 위와 같이 복잡하고 긴 과정을 거침. SQL 실행시간 뿐만 아니라 커넥션을 생성하는 시간도 추가되기 때문에 응답 속도에 영향을 미침
(3) 이러한 문제를 해결하기 위해서 '커넥션 풀' 등장
2. 커넥션 풀 이해
(1) 커넥션 풀이란 DB 커넥션을 여러개 생성해서 Pool에 두고 관리하는 방식임(커넥션 수영장)
(2) 커넥션 풀 안에 있는 커넥션은 TCP/IP로 미리 DB와 연결되어있는 상태이므로, 언제든지 즉시 SQL을 DB로 전달할 수 있음
(3) 그래서, 애플리케이션 로직은 매번 새로운 커넥션을 획득하는 것이 아니라, 커넥션 풀에 있는 커넥션을 가져다가 사용하고 반납함
(4) 커넥션 풀은 대부분 Hikari를 사용
3. DataSource 이해
(1) 커넥션을 획득하는 방법은 살펴본 것처럼, DriverManager을 사용하거나 커넥션 풀을 사용하는 등 여러 방법이 존재함
(2) 그런데, 우리가 개발할 때 DriverManager를 이용해서 커넥션을 획득하다가 커넥션 풀로 변경하게 되면, 기존 코드를 모두 변경해야하는 문제점이 발생함
(3) 따라서, 이러한 문제를 해결하기 위해서 'DB 커넥션을 획득하는 방법을 추상화'한 DataSource가 등장함
(4) 사용방법 : Connection connection = dataSource.getConnection()
(5) DataSource의 등장으로 DriverManager에서 Hikari로 변경할 때, 애플리케이션 코드를 모두 변경할 필요 없이, DataSource의 구현체만 갈아끼우면 됨
4. DataSource 적용
(1) MemberRepositoryV1에서는 DataSource를 주입받는 것으로 변경
(2) MemberRepositoryV1의 getConnection 메서드를 dataSource.getConnection()으로 변경
(3) close 메소드는 JdbcUtils.closeResultSet, closeStatement, closeConnection으로 변경
(4) Test에서는 DataSource의 구현체를 DriverManagerDataSource나 HikariDataSource로 갈아끼움
(5) DriverManagerDataSource는 항상 새로운 커넥션을 생성하는 반면, HikariDataSource는 미리 만들어 놓은 커넥션들을 사용하므로 사용하고 반환되었다면 같은 커넥션을 계속해서 사용함
이펙티브 자바 - 아이템 3 : private 생성자나 열거 타입으로 싱글턴임을 보증하라
1. 싱글턴이란?
: 인스턴스를 오직 하나만 생성할 수 있는 클래스
2. 싱글턴을 만드는 방법
(1) private 생성자, public static final Elvis INSTANCE = new Elvis();
(2) private 생성자, private static final Elvis INSTANCE = new Elvis();, public static Elvis getInstance() { return INSTANCE; }
(3) public enum Elvis3 { INSTANCE; public void leaveTheBuilding() { //... } }
(4) 중요한 포인트 : private 생성자 또는 Enum 타입으로 싱글턴임을 보장하라!
코테준비
1. 프로그래머스 - 모의고사
- 패턴에 맞게 점수를 체크하고, 점수가 최대인 사람을 반환
- for문을 이용한 완전탐색
2. 프로그래머스 - 소수 찾기
- 주어진 종이로 모든 수를 만들어보고, 그 중 소수의 갯수를 찾기
- 재귀를 이용해서 모든 수를 만들어보고, 소수 판별 알고리즘으로 소수를 판별한 후, Set을 이용해서 중복을 없앤 후에 갯수를 반환
3. 프로그래머스 - 카펫
- 모든 카펫의 경우를 해보며 계산
- 간단한 수학문제
이펙티브 자바에서 싱글턴을 만드는 방법을 소개하고 각각의 장단점을 소개했으나, 이해하지 못했다ㅜㅜ
모두 이해하지 못하더라도 핵심을 파악하여 하나씩 이해해보자
'TIL(Today I Learned)' 카테고리의 다른 글
2023.06.28 (0) | 2023.06.29 |
---|---|
2023.06.27 (0) | 2023.06.27 |
2023.06.23 (0) | 2023.06.23 |
2023.06.22 (0) | 2023.06.22 |
2023.06.21 (0) | 2023.06.21 |