hypersistence-utils 오픈소스에 내 PR이 merge되었다.

hypersistenc-utils는 Vlad Mihalcea 가 관리하는 JPA(hibernate)을 사용하면서 겪는 불편함을 해소하기 위한 유틸리티 오픈소스이다. hibernate 6.x대와 7.x 대 모두 지원하고 있다. 그리고 hypersistence-optimizer도 운영중인데, hibernate을 사용할 때 여러 성능 이슈를 감지해주는 도구이다. 간단하게는 EAGER 로딩 전략을 감지해주기도 한다. Vlad Mihalcea는 자바 챔피언이자, hibernate 고수인데 이 분이 발간한 high-performance-java-persistence 라는 책이 있다. 구글에 서치 해보면 많은사람들이 이 책을 좋게 평가하고 있고, hibernate에 깊은 이해를 경험할 수 있다고 한다. 이번에 향로님이 인프런에 Vlad Mihalcea의 강의도 한국어 더빙판으로 제공하게 협업을 진행하셔서 최근 공부중인 테스트 코드와 TDD을 어느정도 마무리하면 high-performance-java-persistence책과 함께 수강해볼 예정이다. 기회가 된다면, 다음 스터디에서 진행해볼 듯 싶다.
오픈소스에 기여하게 된 이유
우선 내가 기여한 이슈를 간략히 설명하자면, @Tisd 은 @Id기반 컬럼에만 매핑되는 어노테이션이었다. (Tsid는 아래에서 설명하겠다) PrimaryKey외에 일반 컬럼에서도 @Tsid 을 적용하고 싶었고, 이에 대한 이슈가 이미 올라와있었다. 몇가지 확인을 한 뒤, ValueGenerationType 을 통해 구현하였다.
Tsid 란?
Time-Sorted Unique Identifiers 의 약자로 ULID와 Snowflake의 개념이 섞인 id생성 전략이다.
총 64비트를 사용하여 첫 42비트는 timestamp 값을, 하위 10비트는 node를 그리고 마지막 12비트는 counter값으로 사용하여 22비트의 random 비트를 사용하여 고유한 값을 제공한다. 물론 64비트를 사용하는 만큼 ULID보다는 충돌 가능성이 높다. 1ms 내에서 약 420만개(2^22)의 유일성을 보장한다. 자세한 설명과 사용법은 여기를 참고하거나, 구글 서치하면 많은 자료를 얻을 수 있다.
SnowFlake Id 나 Tsid 이 방식 모두 시간 역행에 대한 취약점?이 존재한다. 즉, 과거의 시간으로 id을 생성하게 되면 충돌이 발생하게 된다.
00-01-01 01 01 01
25-01-01T01:01:01.111111
오픈소스에 기여하며
'김동훈' 카테고리의 다른 글
| 돌연변이 테스팅 (0) | 2025.09.15 |
|---|---|
| [Line corp] Kotlin-jdsl commit 쪼개기-1 (0) | 2025.08.31 |
| [Effective Software Testing] chapter_2 (2) | 2025.08.30 |
| Springboot NamingStartegy (2) | 2025.06.25 |
| 3기 활동ㅋㅋ (2) | 2025.06.11 |