문제 상황머천트 정보를 LinkPrice API에서 받아 DB에 업데이트하는 스케줄러가 있었다. 업데이트 시 replaceToEntity() 메서드를 사용했다.// MerchantDTO.javapublic Merchant replaceToEntity() { this.siteName = this.siteName.replaceAll("\'", "\''").replaceAll("\"", "\\\"") + "' "; this.checkComment = this.checkComment.replaceAll("\'", "\''").replaceAll("\"", "\\\"") + "' "; this.adviceComment = this.adviceComment.replaceAll("\'", ..
1편에서 도입한 비관적 잠금, 제대로 알고 쓰기들어가며1편에서 Race Condition과 TOCTOU 문제를 해결하기 위해 비관적 잠금(Pessimistic Lock) 을 도입했습니다.@Lock(LockModeType.PESSIMISTIC_WRITE)@Query("SELECT m FROM Member m WHERE m.ckey = :ckey")Optional findByIdWithLock(@Param("ckey") String ckey);비관적 잠금은 강력하지만, 잘못 쓰면 새로운 문제를 만듭니다. 이 글에서는 비관적 잠금의 작동 원리부터 Deadlock 발생 원인과 예방, 그리고 언제 다른 방법으로 전환해야 하는지를 다룹니다.1. 비관적 잠금 vs 낙관적 잠금두 방식의 핵심 철학은 다릅니다. 비관적 ..
들어가며AI 경영진단보고서 배치를 개발하면서 처리 결과 통계를 뽑아야 하는 요건이 생겼습니다.요건은 이랬습니다."배치가 끝나면 상태 코드별로 몇 건 처리됐는지, 그리고 각 상태별 합계도 같이 보여줘."처음엔 단순하게 생각했습니다. GROUP BY 하면 되는 거 아닌가? 그런데 개별 건수와 소계를 동시에 뽑으려니 문제가 생겼습니다.문제 상황필요한 결과는 이런 형태였습니다.cd_status │ cd_air_proc │ cnt-----------│--------------│------DG02 │ DONE │ 2118DG02 │ ERROR │ 200DG02 │ PROCESSING │ 150DG02 │ (소계) │ 2468 ..
개요이벤트 설정 조회 쿼리의 실행 비용이 너무 높아 성능 개선 작업을 진행했습니다.인덱스를 추가할 수 없는 제약 조건 하에서, 순수하게 쿼리 구조 개선만으로 Cost 4,470,180 → 1,459 수준까지 줄인 과정을 공유합니다.테이블 구조 (가명 처리)실제 역할가명이벤트 설정 테이블event_config_t기업 테이블company_t고객 정보 테이블customer_info_t이벤트 참여 테이블event_join_t요청 이력 테이블request_t인증 이력 테이블cert_history_t배경이 쿼리의 핵심 요구사항은 다음과 같습니다.모든 이벤트 × 모든 기업 조합을 조회해야 함 (CROSS JOIN 불가피)customer_info_t의 loc_join 컬럼에는 단일 값(예: 'A')이 저장됨event_..
- Total
- Today
- Yesterday
- 스케줄러
- ncp
- SpringBoot
- 데이터적합성
- 네이버 클라우드
- OpenFeign
- SQL
- mybatis
- 에러
- Java
- docker
- LocalDate
- Linux
- Spring JPA
- MySQL
- spring batch
- dockerfile
- Cache
- springcloud
- 이슈해결
- Quartz
- 동시성제어
- 트랜잭션
- 알고리즘
- hazelcast
- 도커
- Lock
- 컨테이너
- spring
- JPA
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
