😨 입금된 돈이 사라졌다? 계좌 잔고 정합성 검증 배치, Tasklet에서 Chunk & Partitioning으로의 전환기
안녕하세요. 저는 대출 및 투자 연계 플랫폼에서 백엔드 개발자로 근무 중인 2년 차 개발자 정정일입니다. 운영 중인 회사 서비스에서 내부적으로 데이터 정합성을 검증하던 중, 트랜잭션 처리 시간과 배치 작업의 비효율성으로 은행 계좌 잔고와 서비스 내부 포인트(Point)의 불일치로 인해 정합성 검증 작업이 실패하거나, 잘못된 노티가 발송되는 경우가 있었습니다...
2024년 12월 24일
🚀 외부 API 성능 개선기: Look-aside 캐시로 5100ms ➔ 57ms 단축
안녕하세요. 저는 현재 대출 및 투자 연계 플랫폼에서 백엔드 개발자로 근무 중인 2년 차 개발자입니다. 이번 글에서는 Look-aside 캐시 패턴을 활용하여 외부 API 성능을 개선한 경험을 공유하려고 합니다. 이 과정에서 제가 직면했던 문제들은 단순하지 않았습니다. API 호출의 지연, 중복 호출로 인한 비용 문제, 그리고 사용자 경험의 저하 등 다양한...
2024년 12월 16일
Cherry-pick 지옥에서 탈출하기: 주니어 개발자들의 PR 단위 코드리뷰와 Git Flow 도입기
들어가며 안녕하세요. 이 글에서는 Pull Request(PR) 이 없던 회사의 혼돈의 로컬 개발 환경에서, PR 단위 코드리뷰와 Git Flow를 도입했던 경험을 풀어보려고 합니다. 당시 저희 팀은 각자 로컬에서 Merge하고 Push하는 방식으로 작업했고, 모든 개발이 단일 브랜치(dev)에서 이루어졌기에 Cherry-pick 남발과 그로 인한 conf...
2024년 12월 10일
내가 느낀 클린 코드와 현실의 괴리
개발을 하다 보면 “클린 코드” 라는 단어를 접하게 됩니다. 코드는 읽기 쉽고, 의도를 명확히 드러내며, 유지보수하기 쉬워야 한다는 원칙들이죠. 처음 클린 코드를 배울때 참 많은 것들을 느꼈습니다. 변수하나의 네이밍을 붙이면서도 많은 고민을 해야하구나 하는 생각을 처음으로 하게 됐었거든요. 하지만 실무에 발을 들이고 여러 프로젝트를 경험하다 보니 현실은 생...
2024년 12월 3일
[회고록] JPA와 MyBatis 혼용으로 발생한 HikariCP Deadlock 문제를 해결하며
2024년 초, 예상치 못한 문제와 마주한 사건이 있었습니다. (해당 글) 당시의 상황에 대한 회고록을 작성하려 합니다. JPA와 MyBatis를 혼용한 코드에서 HikariCP Deadlock 문제가 발생했는데요. 몇 달간 문제없이 운영되던 코드였기에 더욱 당황스러웠습니다. 해결 과정에서 JPA, HikariCP, 그리고 영속성 컨텍스트의 동작 원리를 깊...
2024년 12월 2일
JPA의 설계 철학과 SQL의 간극, 그리고 현실적인 대안
JPA를 사용하다 보면 “어라, 이건 왜 안 되지?“라는 순간을 마주하게 됩니다. SQL에서는 당연하게 사용하던 기능이 JPQL에서는 지원되지 않아 당황했던 경험, 아마 JPA를 사용해보신 분이라면 한 번쯤은 있으실 거라 생각합니다. 이 글에서는 JPA와 SQL 사이의 간극이 왜 존재하는지, 그리고 실무에서 이런 한계를 어떻게 극복할 수 있는지 제 경험을 ...
2024년 11월 28일
DB Replication 복제 지연, 어떻게 해결할 것인가
데이터베이스 Replication을 사용하는 환경에서 개발하다 보면, 언젠가 한번쯤은 마주치게 되는 문제가 있습니다. 바로 복제 지연(Replication Lag) 문제입니다. 저 역시 회사에서 이 문제를 직면했고, 해결 과정에서 여러 고민을 했던 경험이 있습니다. 이 글에서는 복제 지연이 왜 발생하는지, 그리고 어떤 해결 방법들이 있는지 제 경험을 바탕으...
2024년 11월 15일
[트러블슈팅] QueryDSL StackOverflowError 탐방기
이번에 회사에서 직면했던 Querydsl StackOverflow에 관한 내용을 공유하고자 글을 남깁니다. 문제 발생 오늘도 어김없이 문제는 Slack 메시지로부터 시작합니다. 메시지를 받자마자 어라? 라는 반응을 할 수밖에 없었습니다. StackOverflow? 서버에 재귀식으로 구현된 코드가 있었던가? StackOverflow란 여러분들 모두 잘 알고 ...
2024년 3월 15일
[트러블슈팅] Kubernetes Pod Scale In 과정에서 실패한 Graceful Shutdown, 소실된 비동기 로직 탐색 여정
이번에 회사에서 직면했던 실패한 Graceful Shotdown에 관한 내용을 공유하고자 글을 남깁니다. 문제 발생 평소에는 예외상황이나 문제상황들을 Slack으로 많이 접하는 편인데요. 오늘은 평소와 다르게 문제를 접하게 됐습니다. 이번 문제는 백오피스 사용자의 문의로부터 시작됩니다. “데이터가 하나가 안맞는 거 같아요…!” 바로 부랴부랴 데이터를 확인해...
2024년 2월 9일
JPA, MyBatis 동시 사용 시 발생할 수 있는 HikariCP Deadlock 해결 여정 (feat. OSIV)
이번에 회사에서 직면했던 HikariCP Deadlock 문제에 대해 공유하고자 글을 남깁니다. 문제 발생 오늘도 어김없이 문제는 Slack 메세지로부터 시작합니다. Stack trace 중 일부 발췌 Caused by: java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not a...
2024년 1월 9일