개요Transaction Propagation을 REQUIRES_NEW로 사용하여 처리하는 시스템에서 TPS가 높아지면 실패율이 증가하는 현상이 있었고, 원인 분석을 통해 DeadLock 문제를 발견하여 해결하였습니다. 이 글에서는 DeadLock이 발생했던 이유와 해결 방법 그리고 개선 효과에 대해 정리하여 공유합니다. DeadLock 발생을 확인할 수 있는 증상들Connection Pool의 상태 변화Connection Pool의 상태 변화를 모니터링하여 이상 징후를 감지할 수 있었습니다. 수십 초나 되는 시간 동안 Connection Pool의 상태가 변함없이 똑같은 상황이고, HikariPool의 Connection is not available 에러도 볼 수 있습니다. 정상적인 상황에서는 작업이..
김창준님의 함께 자라기를 읽었다.한번도 고민해본적 없는 내용들이 많아 읽고나서 생각해보게 되는 책이었다.아래는 책의 내용을 재해석하여 나열한 것이다. 경력과 생산성은 비례하지 않는다. 저년차에는 상관관계가 있지만, 이후에는 경력과 생산성의 관련성이 적다.이대로 경력만 쌓으면 생산성이 좋아질 것이라고 생각하거나, 지금은 신입이니 생산성이 낮은게 당연하다고 생각하지는 않았는 지 다시 한번 고민해보게 되었다. A는 원래 업무를 수행하는 것이고, B는 A를 개선하는 작업이고, C는 B를 개선하는 작업이다. 잠재적으로 영향이 큰 작업은 C이다.팀원들도 똑같이 겪을 수 있는 어렵거나 애매한 부분이 있다면, 이를 찾아서 개선하거나 도식화를 하여 쉽게 이해할 수 있도록 개선을 하는 B 작업을 해야겠다고 생각했고, 주기..
커넥션 풀 (Connection Pool)커넥션을 여는 과정은 느리기 때문에 요청이 들어올 때마다 커넥션을 열게되면 성능이 떨어지게 된다. 따라서 미리 여러 개의 DB 커넥션을 열어두고 요청이 들어오면 커넥션 풀에서 커넥션을 하나 가져와서 사용한 뒤 반납을 하는 방식으로 성능을 최적화할 수 있다. 커넥션 풀 사이즈와 응답 시간의 상관 관계커넥션이 많으면 동시에 커넥션을 열어 처리할 수 있으니 처리율이 증가한다고 생각할 수도 있다. 실제로는 어떤지 테스트를 통해 확인해보자추가로 HikariCP의 minimumIdle와 maximumPoolSize를 똑같이하여 고정 크기로 사용하는 것을 권장한다.트래픽이 급증할 때는 커넥션을 새로 열어 커넥션 풀의 크기를 maximumPoolSize로 만드는 과정도 오버헤..
gradle이 무엇일까?빌드 도구에는 gradle이나 maven 방식이 있다는 건 어렴풋이 알았지만, 오래동안 gradle을 사용했음에도 새로운 프로젝트를 만들 때면 습관적으로 build.gradle 파일을 복사해서 사용해왔다. 하지만 gradle에 대해 너무 이해없이 사용하는 것 같아서 gradle의 핵심 개념을 공식 문서를 통해 알아보고자 한다.참고 자료 : https://docs.gradle.org/current/userguide/gradle_basics.html#gradle Core ConceptsGradle automates building, testing, and deployment of software from information in build scripts.docs.gradle.org ..
구조도 Error발생해서는 안되는 비정상적인 상황프로그램 코드 수준에서 해결할 수 없는 매우 심각한 시스템 오류를 의미하며, 개발자가 try-catch로 잡으려고 시도해서는 안되는 문제이다. Exception프로그램에 의해서 수습될 수 있는 오류 CheckedException컴파일 시점에 예외에 대한 처리를 강제한다.RuntimeException을 제외한 Exception과 Exception의 하위 클래스는 Checked Exception이다. Unchecked Exception예외에 대한 처리를 강제하지 않는다.RuntimeException이 이에 속한다. Rollback?많은 곳에서 흔히 Checked Exception은 rollback을 하지 않고, Unchecked Exception은 rollba..
BeanFactory - 가장 기본적인 IoC 컨테이너ApplicationContext - BeanFactory에 여러 기능을 추가한 하위 인터페이스 Configuration Metadata1. 애너테이션 기반 설정@Service, @Autowitred 같은 애너테이션이 설정 메타데이터 역할을 한다. 2. 자바 기반 설정@Configuration, @Bean 같은 어노테이션을 사용하여 Bean을 정의한다. Bean 재정의1. @Component를 이용하여 Bean 등록2. @Configuration 클래스 내부에서 @Bean으로 똑같은 Bean 등록이 경우에서 Configuration 설정이 우선적으로 적용된다. 생성자 기반 DI, 세터 기반 DI필수 종속성에는 생성자를 사용하고 선택적 종속성에는 세터 ..
버퍼 캐시란MySQL, Oracle 등 많은 RDBMS는 디스크에서 가져온 데이터를 메모리에 할당된 버퍼캐시에 저장한다.디스크에서 데이터를 읽는 작업은 고비용의 작업이기 때문에 캐싱해놓은 데이터를 읽음으로써 비용을 줄일 수 있다. RDBMS의 버퍼 캐시 히트율이 100%라면 Redis를 대체할 수 있을까?캐시 히트율이란 데이터를 캐시에서 찾을 때 그 데이터가 있는 비율을 뜻한다.캐시 히트율 100%는 내가 찾는 모든 데이터가 캐시된 상태이다.메모리를 사용하는 RDBMS의 버퍼 캐시에서 캐시 히트율이 100%라면 Redis를 대체할 수 있을 지에 대해 고민해보게 되었다. 1. 캐시 데이터 제어Redis는 어떤 캐시를 등록하거나 삭제하는 등 캐시를 직접 제어할 수 있다.TTL 등을 지정하여 한번 캐시된 데이..
2024년 회고알고리즘백준 316문제 해결삼성 SW검정 Pro 등급 취득강의스프링 입문편 스프링 기본편 스프링 MVC 1편 책모던 자바 인 액션 컴퓨터 네트워킹: 하향식 접근 친절한 SQL튜닝기술 블로그 올해에는 1월부터 12월까지 SSAFY를 다니며 많은 시간을 SSAFY의 커리큘럼을 따라 진행했다.24년을 돌아보며 잘했던 점과 부족했던 점을 토대로 25년의 목표를 세우면 좋겠다고 생각했다. [ 독서 ]스트림 형태의 코드를 보고, 적어도 해당 형태의 코드를 읽을 수는 있어야 할 것 같아서 모던 자바 인 액션 책을 구매하여 읽었다. 하지만 이를 실제 코드에 적용하지는 못했던 점이 아쉽다. 또한 책을 끝까지 읽지 못한 부분도 아쉬웠다. 매일 책을 조금씩이라도 읽는 방향으로 책을 한권씩 떼야겠다고 생각했다...
- Total
- Today
- Yesterday
- tea time
- 벨만-포드
- 골목길
- 중위 표기식 후위 표기식으로 변환
- 벨만포드
- 골목길C++
- 소셜네트워킹어플리케이션
- 7511
- 11657
- 1738
- 백준
- 어린왕자 C++
- 6539
- 후위 표기식
- 스택
- 1918
- 타임머신
- 6018
- 1004
- C++
- 상범빌딩
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |