Money Disappeared? Transitioning Account Balance Verification Batch from Tasklet to Chunk & Partitioning
Hello. I’m Jeong Jeongil, a 2-year backend developer working at a lending and investment platform. While internally verifying data consistency in our operational company service, we experienced account balance and internal Point inconsistencies due to transaction processing time and batch work ineff...
December 24, 2024
External API Performance Improvement: Reducing Response Time from 5100ms to 57ms with Look-aside Cache
Hello. I’m a 2-year backend developer currently working at a lending and investment platform. In this post, I’d like to share my experience of improving external API performance using the Look-aside cache pattern. The problems I faced during this process were not simple. Various issues were intertwi...
December 16, 2024
Escaping Cherry-pick Hell: Junior Developers' PR-based Code Review and Git Flow Introduction Story
Introduction Hello. In this article, I’ll share our experience of introducing Pull Request (PR)-based code reviews and Git Flow in a company where PRs didn’t exist, in a chaotic local development environment. At that time, our team worked by merging and pushing from each person’s local, and all deve...
December 10, 2024
The Gap Between Clean Code and Reality as I Feel It
When developing, you encounter the term “Clean Code”. Principles that code should be easy to read, clearly express intent, and be easy to maintain. When I first learned clean code, I felt many things. I started thinking for the first time that I need to think a lot even when naming one variable. But...
December 3, 2024
[Memoir] Solving HikariCP Deadlock Problem from Mixing JPA and MyBatis
In early 2024, there was an incident where I faced an unexpected problem. (That article) I’ll write a memoir about the situation at that time. HikariCP Deadlock problem occurred in code mixing JPA and MyBatis. It was more bewildering because it was code that had been operating without problems for s...
December 2, 2024
JPA's Design Philosophy and the Gap with SQL: Finding Practical Alternatives
When using JPA, you sometimes encounter moments like “Huh? Why doesn’t this work?” I think anyone who has used JPA has probably experienced the confusion when a feature that was natural in SQL isn’t supported in JPQL. In this article, I want to talk about why the gap between JPA and SQL exists, and ...
November 28, 2024
DB Replication Lag: How to Solve It
When developing in an environment that uses database Replication, there’s a problem you’ll inevitably encounter at some point. It’s the replication lag problem. I also faced this issue at my company, and went through various considerations during the resolution process. In this article, I want to sh...
November 15, 2024
[Troubleshooting] QueryDSL StackOverflowError Investigation
I’m sharing about a Querydsl StackOverflow issue I encountered at work. Problem Occurrence As always, the problem starts with a Slack message. As soon as I received the message, I couldn’t help but react with “huh?” StackOverflow? Was there recursively implemented code in the server? What is StackOv...
March 15, 2024
[Troubleshooting] Failed Graceful Shutdown During Kubernetes Pod Scale In, Journey to Find Lost Async Logic
I’m sharing about a failed Graceful Shutdown issue I encountered at work. Problem Occurrence Usually, I encounter exceptions and problem situations through Slack quite often. Today, I encountered a problem differently than usual. This problem started with a back office user’s inquiry. “I think one p...
February 9, 2024
Journey to Resolving HikariCP Deadlock When Using JPA and MyBatis Together (feat. OSIV)
I’m sharing an issue related to HikariCP Deadlock that I encountered at work. Problem Occurrence As always, the issue starts with a Slack message. Excerpt from Stack trace Caused by: java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30008ms...
January 9, 2024