모르지 않다는 것은 아는것과 다르다.

Jdbc 9

HikariCP 코드 분석하기 4편 (Connection 점유, Connection 반납)

개요 이번 편에서는 커넥션을 점유하고 반납하는 과정을 알아보자. 먼저, 개념을 설명한 뒤, 예시를 들어 디버깅을 해보기로 하자. 커넥션 점유(개념) connection.getConnection() -> HikariDataSource.getConnection() -> HikariPool.getConnection() -> ConcurrentBag.borrow() 1편에서 설명한 것처럼 커넥션을 점유하는 과정은 borrow() 메소드를 통해서 이루어지며, 크게 3가지 과정으로 구성된다. 먼저 threadList를 검사해서 해당 Thread가 커넥션 풀에 방문한 이력이 있는지 검사하고 이력이 있다면 SharedList 까지 보지 않고 빠르게 커넥션을 반환해 준다. (마치 캐시처럼) 물론 해당 커넥션이 NOT_I..

Jdbc 2023.01.22

HikariCP 코드 분석하기 3편(HikariCP 커넥션 풀 초기화 과정 디버깅)

HikariDataSource초기화 먼저 아래와 같은 옵션으로 DataSource를 빈으로 등록했다. 생성자에 HikariConfig를 인자로 넘긴다. maximumPoolSize: 3 maxLifetime: 10분 HikariConfig를 인자로 넘겼기 때문에 fastPathPool도 같이 초기화 하는것을 확인할 수 있다. 이제 HikariPool을 초기화하는 과정을 알아보자. HikriPool 초기화 2편에서와 마찬가지고 아래의 과정으로 나눠보았다. HikariPool을 초기화하는 과정을 아래와 같은 단계로 나눠보았다. DataSource 생성 connectionBag 생성 houseKeepingExecutorService 생성 커넥션 연결 확인 커넥션 유지 커넥션 추가 DataSource 생성..

Jdbc 2023.01.21

HikariCP 코드 분석하기 2편 (HikariCP 커넥션 풀 초기화 과정)

HikariCP 에서 제공하는 클래스 API Layer HikariDataSource: target DataSource를 나타낸다. HikariConfig: DataSource를 만드는 configuration으로 사용된다. 보통 HikariDataSource나 HikariConfig의 설정값만 바꿔가며 Connection Pool을 관리하지만, 정확한 동작과정을 파악하기 위해서는 아래의 Pool Layer까지 분석할 필요가 있다. Pool Layer HikariPool: 기본 풀링 동작을 제공한다. 여기서 풀링 동작이란 설정한 Connection 수를 유지시키며, Connection만료 시간이 지나면 Connection을 Close시키는 것을 말한다. PoolEntry: Connection의 Wrapp..

Jdbc 2023.01.21

HikariCP 코드 분석하기 1편 (HikariCP란?)

개요 지금까지 Hikari DataSource를 사용하면서, HikariCP에서 제공하는 maximumPoolSize, connectionTimeout, maxLifetime, idleTimeout 과 같은 설정값 정도만 알고 있었지 내부적으로 HikariCP가 어떤식으로 Connection Pool을 관리하는지 알지 못했다. 또한, 언젠가 Connection Pool에서 장애가 발생할 수 있을 것을 대비해서 이번 기회에 HikariCP 코드를 분석해 보려고 한다. Connection Pool이란? 커넥션 풀이란 데이터베이스와 연결된 커넥션을 미리 만들어 놓은 Pool을 의미한다. 만약 커넥션 풀이 없다면? 위와 같이 WAS 내부에 DB 드라이버와 DB가 직접 통신하며 Connection을 가져 와야 된..

Jdbc 2023.01.21

JOOQ (Java Object Oriented Querying)

JOOQ 란? 테이블 스키마로부터 자바 코드를 만들어주는 라이브러리 이다. 시스템의 설계가 자바 코드(엔티티)가 아닌, DB 에서 시작될 때 유용하다. 당연히 ORM framework 가 아니다. ORM 은 오히려 반대로 Java class 를 DB 스키마로 매핑하기 때문이다. "jOOQ is not a replacement for JPA" SQL이 잘 어울리는 곳엔, Jooq가 잘 맞는다. 반면, Object Persistence 가 잘 어울리는 곳엔, JPA 가 잘 맞는다. JOOQ 의 장점 Jooq 방식으로 사용한다면, 엔티티를 작성할 필요가 없다. 대신 JPA 와 반대로 스키마는 정의 되어 있어야 된다. 로그가 보기 좋다. -> 결과 로그가 한눈에 보기 좋다. query 로그 안에 binding ..

Jdbc 2022.03.24

Spring JDBC

Spring JDBC 란? JDBC Template은 Spring JDBC 접근 방법 중 하나로, 내부적으로 Plain JDBC API를 사용하지만 위와 같은 문제점들을 제거한 형태의 Spring에서 제공하는 class이다. 스프링에서 DB를 사용하기 위한 오리지날 디펜던시라고 할 수 있디. MyBatis 처럼 XML을 이용해 의존성을 주입한 후, 사용하는 방식이다. 순수 JDBC를 사용할 때, PrepareStatement, CreateStatement, ResultSet 등 자주 사용하는 객체와 코드들을 클래스화 하여 스프링 애플리케이션에서 보다 더 편하게 DB에 접근할 수 있는 인터페이스를 제공한다. 순수 Jdbc와 동일한 환경설정을 하면 된다. 스프링 JdbcTemplate과 MyBatis 같은 ..

Jdbc 2022.02.27

JPA vs MyBatis

SQL Mapper vs ORM Persistence Framework 는 SQL Mapper 와 ORM 으로 나눌 수 있다. SQL Mapper RDBMS 쿼리문의 실행 결과를 자바 코드에 매핑하는 프레임워크이다. SQL Mapper 메소드를 SQL 실행결과와 매핑한다. Object와 SQL의 필드를 매핑하여 데이터를 객체화한다. SQL문을 이용하여 RDB에 접근, 데이터를 오브젝트(객체)화 시켜준다. 개발자가 작성한 SQL문으로 해당되는 ROW를 읽어 온 후 결과 값을 오브젝트화 시켜 사용가능하게 만들어준다. RDB에 따라 SQL 문법이 다르기 때문에 특정 RDB에 종속적이다. 대표적인 기술로 Mybatis 가 있다. ORM ORM 은 Object와 DB테이블을 매핑하여 데이터를 객체화하는 기술이다...

Jdbc 2022.02.27

JDBC

JDBC (Java Database Connectivity) 란? JDBC는 DB에 접근할 수 있도록 Java에서 제공하는 API이다. 모든 Java의 Data Access 기술의 근간 즉, 모든 Persistence Framework는 내부적으로 JDBC API를 이용한다. 자바는 DBMS(Oracle, MySQL, MongoDB 등)의 종류에 상관 없이 하나의 JDBC API를 이용해서 데이터베이스 작업을 처리합니다. JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다. JDBC는 DB에 접근해서 CRUD를 쉽고 효율적이게 할 수 있게 하고, 고성능에서의 세련된 메소드를 제공하며 쉽게 프로그래밍 할 수 있게 도와줍니다. JDBC 의 역할은 아래와 같이 정리할 수 있다. Java ..

Jdbc 2022.02.27

Hikari

DBCP DataBase Connection Pool 의 약자이다. DataSource는 Connection pool을 관리하고 연동할 수 있게 하는 표준 인터페이스다. 다시말해서 DBCP는 DB Connection 객체를 미리 만들어 Connection Pool에 보관하고 필요할 때마다 DB에 연결된 Connection을 꺼내 사용하는 것을 의미합니다. Connection pool 를 만들지 않는다면? -> 매번 Connection 객체를 만들어야 할 것이다. -> 큰 비용낭비가 발생한다. 미리 만들어진 Connection을 재사용하여 CPU의 부담과 Connection을 생성하는데 필요한 시간을 줄일 수 있다. DBCP 의 기본 옵션은 아래와 같다. maxActice : 유휴 상태와 사용중인 커넥션을..

Jdbc 2022.02.27