99클럽 13일차 TIL: Hikari CP
2024. 4. 16. 19:20ㆍ개발 공부
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클럽 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 |