전체 글
-
Hikari CP 설정 알아보기📖 개발 공부 2024. 11. 24. 21:07
최근 회사에서 DB 관련한 이슈가 꽤 발생했었다."Unable to acquire JDBC Connection 에러 발생""연결된 connection 수가 예상보다 2배 많은 상황""slow query가 잡혀서 error가 튀는 상황"…위 이슈들을 대응하면서, HikariCP의 동작 원리와 설정값들을 충분히 이해하고 있어야만 이슈 파악에 도움이 될 것이라는 생각이 들었다. 그래서 이번 기회에 HikariCP에 대해 정리해려고 한다!Connection Pool커넥션 풀(Connection Pool)은 데이터베이스와의 연결을 미리 생성해 두고, 필요할 때마다 이를 재사용하는 방식으로 성능을 최적화하는 기술이다. 커넥션을 매번 새로 생성하는 것은 시간이 많이 걸리고 리소스를 낭비할 수 있다. 커넥션 풀은 애플..
-
Spring 트랜잭션 롤백 관리: rollback-only 이슈 분석과 해결📖 개발 공부 2024. 11. 10. 14:39
"Transaction silently rolled back because it has been marked as rollback-only"요 에러는 어떤 상황에 발생할까?문제 상황회사에서 주기적으로 돌고 있는 배치잡에서 Transaction silently rolled back because it has been marked as rollback-only이런 로그가 발생하면서, 데이터 처리가 누락된 현상들을 종종 발견했다. 확인해보니 데이터 변경 로직이 포함된 유스케이스 메서드에 @Transactional 어노테이션이 적용되어 있으며, 이 메서드에서 @Transactional 이 적용된 FindHelper 클래스의 메서드를 호출하고 있다. 이 FindHelper 메서드에서 특정 조건에 부합하지 않으면,..
-
테스트 코드 개선하기: Kotest 모킹 초기화 및 구조 개선📖 개발 공부/kotlin 2024. 10. 27. 16:37
이번 개선의 목표는 테스트 코드의 가시성과 효율성을 높이는 데 있다.여러 케이스에서 원하는 동작을 정확히 호출하고 의도한 타입의 응답을 반환하는지 확인했지만, 기존 코드에서는 불필요한 모킹이 많아 가독성이 떨어졌다. 이에 개선한 사항과 과정에서 새롭게 알게 된 내용을 정리해보려고 한다.AS-IS기존 코드에서는 다음 세 가지 케이스를 나누어 테스트를 진행했다.LLM 최소 조건을 충족하고 LLM 응답이 성공하는 경우LLM을 호출하며, 결과로 ContentResultByLLM을 반환해야 한다.LLM 최소 조건을 충족하지만 LLM 응답이 실패하는 경우LLM 호출 후 실패 시, ContentResultByRuleBased를 반환해아 한다.LLM 최소 조건을 충족하지 않는 경우LLM을 호출하지 않고, Content..
-
Kotlin의 Value Class로 성능 최적화하기 (Codes like a class, works like an int.)📖 개발 공부/kotlin 2024. 10. 7. 22:21
코틀린, 저는 이렇게 쓰고 있습니다 | 카카오페이 기술 블로그코틀린으로 서비스를 개발하며 직접 경험한 코틀린의 매력을 소개합니다.tech.kakaopay.com위 글을 통해 value class를 처음 접하게 되었다. 더 깊이 이해하고 정리하기 위해 이번 글에서 value class에 대해 자세히 다뤄보려고 한다.Value Class란?Kotlin의 value class는 코틀린에서 값을 나타내기 위한 wrapper 클래스이다. 이는 primitive 타입의 값을 객체와 같이 다룰 수 있게 해주면서도, wrapper 클래스의 오버헤드 문제를 해결할 수 있다. 기존의 클래스와 Value Class의 차이점기존에 Kotlin에서는 데이터 처리를 위해 Data Class를 주로 사용했다. Data Class는..
-
The SAGA Pattern📖 개발 공부 2024. 9. 29. 17:26
토스 SLASH24 컨퍼런스에 가서 보상 트랜잭션으로 분산 환경에서도 안전하게 환전하기 라는 세션을 듣고, SAGA 패턴을 처음 접했다.연사자분이 정말 흥미롭고 이해하기 쉽게 설명을 잘해주셔서 어떤 개념인지 확 알게 되었고, 보상 트랜잭션 실행 중에 실패하는 케이스들을 어떻게 핸들링하는지 등등 정말 유익하게 들었다!! 이 세션을 이후로 SAGA 패턴에 대해 더 자세히 공부하기 위해 글을 읽고 정리해보려고 한다~! Microservices Patterns: The Saga PatternMicroservices Pattern Series — Part 04: Some insights into ACID Transactions, 2PC Pattern and finally the Saga Pattern in de..
-
Toss | 서버 증설 없이 처리하는 대규모 트래픽📖 개발 공부 2024. 7. 27. 18:11
토스 테크블로그를 읽고 쓰는 글입니다. 서버 증설 없이 처리하는 대규모 트래픽늘어나는 트래픽을 잘 처리하기 위해 서버 개발자는 어떤 고민을 해야 할까요? “라이브 쇼핑 보기” 서비스에 대규모 트래픽이 들어오면서 겪은 문제와 해결책을 공유드려요.toss.tech 급격하게 성장하는 서비스가 겪는 문제라이브 쇼핑 보기 서비스는 피크 시간대 동시 접속자 수는 분당 수십만 명, 포인트 지급 요청 API 요청은 초당 수십만 건이 오는 서비스로 성장했다.급격히 늘어난 트래픽은 성장하는 서비스 서버에 치명적일 수 있다. 서버가 트래픽을 유연하게 처리하지 못하면 유저에게 안 좋은 경험을 제공하고, 최악의 상황에서는 이탈할 수도 있기 때문이다. 트래픽이 급격히 늘어나면 쓰레드가 밀리는 것부터 시작해서 데이터베이스와 캐..
-
system-design-101. CAP 이론 (CAP theorem)📖 개발 공부 2024. 7. 14. 01:40
CAP theorem CAP theorem에 따르면 분산 시스템은 일관성, 가용성, 파티션 허용성이라는 세 가지 원하는 속성 중 두 가지만 제공할 수 있다.Consistency: consistency means all clients see the same data at the same time no matter which node they connect to.데이터를 저장하는 장비가 1대 든 100대든 모든 장비에서 동일한 데이터가 저장되어 있어야 한다는 것이다. ACID 원리에서 의미하는 것과 같다. 모든 노드가 같은 시간에 같은 데이터를 보게 된다. 즉, 읽기 작업이 항상 가장 최신의 쓰기 작업을 반영하며, 이는 모든 노드에 일관적으로 적용된다.Availability: availability mea..
-
system-design-101. How to improve API performance?📖 개발 공부 2024. 6. 22. 11:50
API 성능을 향상시키기 위한 5가지 전략! PaginationThis is a common optimization when the size of the result is large. The results are streaming back to the client to improve the service responsiveness.결과 사이즈가 클 때 일반적인 최적화 방법. 서비스 응답성을 높이기 위해 결과를 클라이언트에 스트리밍 방식으로 전달.Asynchronous LoggingSynchronous logging deals with the disk for every call and can slow down the system. Asynchronous logging sends logs to a lock-..