분류 전체보기
-
개발환경의 파티션은 어떤 consumer가 점유했을까?프로젝트/kafka 2025. 6. 30. 01:10
개요만약 kafka의 파티션이 3개이고, consumer가 1개라면 어떤 consumer가 파티션을 점유할까요? 만약 kafka의 파티션이 3개이고, consumer가 2개(로컬환경, 개발환경)라면 어떤 consumer가 파티션을 점유할까요? 추가로 concurrency 옵션은 어떤 관계가 있을까요? 위 질문에 답을 알아가는 과정을 통하여 예측가능한 테스트 환경을 만들 수 있습니다. Kafka Topic과 Partition Kafka는 이벤트의 관심사에 따라 각각 topic에 메시지를 적재합니다. foo라는 topic이 구성되어 있고 3개의 파티션으로 구성되어 있습니다. 이 파티션에는 kafka consumer가 붙어서 메시지를 처리합니다. 위 구조 덕분에 consumer의 처리량을 늘리고 싶다면 파티션..
-
NoSuchFieldError 원인 - gradle dependencies 문제 파악하기카테고리 없음 2025. 6. 8. 13:18
개요라이브러리 버전 업그레이드를 진행하던 중 NoSuchFieldError 예외가 발생했습니다. 이 글에서는 NoSuchFieldError가 어떤 상황에서 발생하는지, 실제 발생 사례를 바탕으로 원인 분석 및 해결 과정을 정리해보았습니다. ✅ NoSuchFieldError란?NoSuchFieldError는 Java 애플리케이션 실행 중 특정 클래스에서 존재하지 않는 필드에 접근할 때 발생하는 런타임 에러입니다. 컴파일 시점에는 정상적으로 컴파일되었지만, 런타임 시점에 클래스 간 버전이 맞지 않아 필드가 존재하지 않는 경우 주로 발생합니다.예를 들어, 어떤 라이브러리의 enum 클래스에 필드가 추가되었지만, 실제 실행 시에는 해당 필드가 없는 구버전의 enum이 로드될 경우 이 에러가 발생할 수 있습니다..
-
Kotlin coroutine graceful shutdown in spring bootSpring Framework 2025. 4. 6. 13:31
graceful shutdowngraceful shutdown은 애플리케이션이 종료될 때, 현재 진행 중인 작업을 완료한 후 종료하는 것을 말합니다. couroutine과 graceful shutdown@Componentclass CoroutineGracefulShutdown() : ApplicationRunner { override fun run(args: ApplicationArguments) { runBlocking { launch(Dispatchers.IO) { logger.info { "start" } sleep(30000) // 30초 기다림 logger.info..
-
humongous object javaJava/자바를 더 깊게 2025. 3. 15. 19:43
humongous object 란?humongous는 거대한 이라는 사전적 의미를 가지고 있습니다.humongous object는 이 글에서는 앞으로 거대한 객체로 칭하겠습니다. 하지만 거대하다는 것을 추상적인 의미를 가집니다.누군가는 1KB 정도의 객체를 거대하다고 생각할 수 있고, 누군가는 1MB 정도가 거대하다고 생각할 수 있습니다. JVM 세상에서 거대한 객체로 인식되는 것은 GC와 연관 있기 때문에 GC에 대해서도 알아보겠습니다. JVM GC - G1GCJDK 11부터는 default GC가 G1GC입니다.G1GC의 경우 Heap이 동일한 크기의 여러 지역으로 분할되어 있는 것이 특징입니다.각 지역은 Eden, Survior, Tenured로 분류되며 새로운 객체가 생성되면 Eden으로 할당됩니..
-
Long Transaction을 감지하고 대응하는 방법JPA 2025. 2. 25. 01:04
개요Long Transaction으로 인해 DB에 부하가 발생하여 같은 DB를 활용하는 모든 서버들에 영향이 가는 상황이 발생하여 왜 그런 일이 일어나는지, 어떻게 하면 예방할 수 있을지 공부하며 기록해보고자 합니다. Long Transaction이란?Long Transaction은 트랜잭션이 열리고 긴 시간 동안 commit, rollback이 수행되지 않고 있는 데이터베이스 트랜잭션을 말합니다. 데이터베이스에서 트랜잭션은 하나의 논리적인 작업 단위를 의미하며, 데이터의 일관성(Consistency)과 무결성(Integrity) 을 보장하는 중요한 역할을 합니다. 긴 시간이라는 것은 상대적이긴 개념입니다. 만약 평균 트랜잭션이 100ms 이내에 처리된다면, 1초만 넘어가도 상대적으로 Long Tran..
-
토스뱅크에서의 1년 회고회고 2025. 2. 19. 20:21
개요2024년 1월 22일에 입사를 하고 어느덧 1년이 지나갔습니다. 미래의 나와 토스뱅크에 대해 궁금한 분들을 위해 1년의 여정을 기록으로 남겨보려고 합니다. 입사 이유 금융 도메인이 저에게도, 많은 사람들에게도 불편한 영역이었습니다. 이 불편함을 해결하는 게 기여하고 싶었습니다. 포용과 혁신을 추구하는 토스뱅크에서 함께 일한다면 더 큰 시너지를 낼 수 있을 거라 생각했습니다. 또한 빠르게 성장하는 회사에 합류하여 도전적인 미션들을 해결하면서 회사와 같이 개인적으로도 성장하는 것을 기대하였습니다. 업무와 역할 입사 후 합류하게 된 팀은 기업여신 팀이었습니다. 기업여신팀은 개인사업자분들에게 대출을 제공하는 도메인이었으며 시장 상황에 따라 폐업이 발생할 수 있는 개인사업자분들에게 대출을 제공하는 것은 리..
-
k8s에서 간헐적으로 Connection이 Reset된 이유CS/네트워크 2025. 2. 9. 20:22
개요k8s환경에서 간헐적으로 rst 패킷이 발생하는 경우가 존재했습니다. 특이한 점으로 모든 서버에서 일어나지 않았고 특정 서버에서만 발생했습니다. 해당 서버는 다른 서버에 비해 HTTP Request Body에 큰 데이터를 담아 보내는 특징이 있었고 비슷한 버그 사례가 kubernetes 공식문서에 존재하는 것을 사내 SRE 분께서 찾아주셨습니다. 해당 아티클을 기반으로 문제가 해결되었고 네트워크와 k8s 환경을 이해해보기 위해 당시 상황과 아티클을 나만의 글로 다시 정리해보고자 합니다. 아티클 정리kube-proxy Subtleties: Debugging an Intermittent Connection Reset 주제의 글이며 2019년 글으로 6년 전의 글입니다. 직역해 보면 Kube-proxy의..
-
Hibernate Slow Query 감지하기JPA 2025. 1. 29. 11:33
개요Hibernate의 slow query를 감지하는 기능을 활성화하는 방법에 대해 알아보겠습니다. 더 나아가서 hibernate query에 부가정보를 남겨서 slow query 발생 시 추적에 용이하게 활용할 수 있는 방법에 대해 알아보겠습니다. Slow Query란?Slow Query는 데이터베이스에서 실행되는 쿼리 중 실행 속도가 느린 쿼리를 의미합니다. 일반적으로 데이터베이스 쿼리가 데이터를 가져오거나 업데이트하는 과정에서 시간이 오래 걸리면 데이터베이스의 성능저하로 인해 여러 문제가 발생할 수 있습니다. 그러면 얼마나 느려야 slow query로 판단할 수 있을까요? Hibernate Slow Queryorg.hibernate.SQL_SLOW = INFO : Hibernate 5.4.5 이상 ..