99클럽 13일차 TIL: Hikari CP

2024. 4. 16. 19:2099클럽/TIL

728x90
반응형

#1. 오늘의 학습 키워드

자바 스프링에서 Hikari 에 대해서

  • 현재 회사에서 기존에 사용하던 MyBatis에 추가로 JPA를 도입하려한다.
    • 두 기술을 동시에 사용하려다보니 고려사항이 많아진다.
    • 그 중 현재 본인이 대응해야하는 것은 멀티 트랜잭션 관련 문제다.
      • 기존 MyBatis로 설정된 transaction Manager 와 JPA로 설정된 transaction Manager 가 다르기에 묶어줘야하거나, 단일 트랜잭션을 묶어서 사용해야한다.
    • 해당 문제를 해결하기 전에 CP와 히카리(Hikari)에 대해 짚고 가기 위해 글을 쓴다.
      • (해결과정은 추후 블로그 글을 올리겠다)

#2. 공부한 내용

  • JDBC
    • Java Database Connectivity
    • 자바에서 DB에 쿼리를 던지거나, 수정 할 수 있도록 돕는 API
  • DB 커넥션 풀
    • Connection Pool, CP
    • DB로 접근할 때마다 웹 앱이 DB에 연결하지 않아도 되게끔, 웹 앱이 실행되었을 때 동시에 연동할 DB의 연결을 미리 세팅해두는 것이 좋다.
      • DB와의 연동은 Connection 객체로 구현
      • 그렇기에 미리 세팅을 하는 것은, 앱 로딩 시점에 Connection 객체 생성한 후, 이 객체를 앱에서 DB와 연결이 필요할 때 가져다 쓴다.
    • 이렇게 웹 앱이 구동 되었을 때 DB와 연결시킨 상태를 유지시키는 기술이 커넥션 풀이다.
    • 커넥션 풀을 구현하는 것은 어렵지 않지만, 사용이 편리한 오픈소스 커넥션 풀이 다양하게 제공되고 있다.
      • Hikari CP
  • Hikari CP
    • JDBC CP 프레임워크
    • 용량이 가볍고, 속도가 빠르다
      • 그렇기에 제일 많이 쓰임
    • 해당 프레임워크가 성능이 좋은 이유는 Connection의 관리 방법 덕분이다.
      • Connection을 ConcurrentBag 이라는 구조체로 관리하며,
      • 연결이 필요할 때 아래와 같은 메서드로 사용가능한 Connection을 빌려준다.
        • HikariPool.getConnection() -> ConcurrentBag.borrow()
      • 이때 연결을 필요로 한 쓰레드의 정보를 저장해두고, 해당 정보를 다음에 같은 쓰레드에서 접근할 때 저장된 정보를 이용해 빠르게 반환을 해준다.
        • 우선 해당 쓰레드가 사용했던 Connection 객체를 반환하려한다.
        • 만약 해당 Connection이 사용중이면, 다른 사용가능한 Connection을 반환
        • 만약 사용가능한 Connection 이 없으면 30초간 기다리다 Timeout Exception 을 throw 한다.

#3. 오늘의 회고

  • .yaml 파일에서 Datasource: 부분에 연결하고자할 DB의 url, 연결할 id, pw 등을 적어놓는 행위는 많이 해보았다.
    • 그리고 이제 어떻게 DB와 자바 코드가 연결이 되는 지 이번 기회에 구체적으로 공부를 하고 있다.
  • 우아한 기술 블로그를 통해 Hikari 프레임워크의 개발자는 조금이라도 DB와의 연결 속도를 빠르게 하기 위해, 단순히 사용가능한 Connection 객체를 반환하는 메서드에도 고심해서 구현했다는 것을 조금이나마 엿볼 수 있다.
    • 그리고 해당 코드를 낱낱이 뜯어보며 많은 분들께 직관적인 설명으로 바꿔주시는 블로그 작성자분도 대단하시다 느꼈다.
    • 역시 훌륭한 개발자는 무엇이든 가볍게 생각하지 않고, 집념 있게 파볼 수 있는 끈기가 있어야 하는 것 같다.
      • 무엇이든 쉽게 보지 말고, 쉽게 포기하지 말자.
728x90
반응형

'99클럽 > TIL' 카테고리의 다른 글

99클럽 15일차 TIL: N+1문제  (0) 2024.04.18
99클럽 14일차 TIL: Transaction  (0) 2024.04.17
99클럽 12일차 TIL: MVC  (0) 2024.04.15
99클럽 11일차 TIL: AOP  (0) 2024.04.14
99클럽 10일차 TIL: POJO 클래스  (2) 2024.04.13