[TIL/DB] 트랜잭션부터 Lock까지: 데이터 동시성을 제어하는 방법
·
TIL/DB
Lock! Lock! Lock! Lock 이란 무엇인가!정리하기 전 가볍게 먼저 아래와 같이 정리해보았다.전체 구조Lock├─ DB가 실제로 거는 락의 성격│ ├─ Shared Lock│ └─ Exclusive Lock│├─ 락을 얻는 SQL/방법│ └─ SELECT ... FOR UPDATE│└─ 동시성 제어 전략 ├─ Pessimistic Lock └─ Optimistic Lock 1. Lock이 왜 필요한가?→ 동시성 문제 해결2. Shared / Exclusive Lock→ 읽기와 쓰기 충돌 제어3. SELECT FOR UPDATE→ 조회하면서 수정용 Lock 확보4. 비관적 락 / 낙관적 락→ 먼저 잠글지, 충돌을 나중에 감지할지5. Deadlock→ 서로 상대방 Lock을 기..
[Error] DB에는 데이터가 있는데 API에는 없다면: 같은 DB URL 뒤의 다른 서버를 추적한 이야기
·
Trouble Shooting(Error)
운영 환경에서 꽤 당황스럽고 다시는 겪고싶지 않은 이슈를 만났다. DB 콘솔에서 직접 쿼리를 실행하면 데이터가 정상적으로 조회되는데, 같은 조건으로 API를 호출하면 해당 데이터가 응답에 포함되지 않는 문제였다. 예외 처리 때문에 API가 실패하지 않아 500 에러가 발생하는 것도 아니고, 응답 자체는 빈 값으로 정상적으로 내려왔다.다만 특정 테이블에서 가져와야 하는 일부 값만 비어 있었다. 처음에는 당연히 애플리케이션 코드나 SQL 문제라고 생각했다.문제 상황운영 API에서 외부 시스템의 검사 데이터를 조회하는 기능이 있었다.API는 대략 이런 흐름으로 동작한다.사용자 식별자를 기준으로 외부 DB 조회여러 테이블에서 검사 데이터를 수집필요한 형태로 데이터를 조립해서 응답그중 특정 검사 테이블의 데이터가..
[TIL/Spring] Spring Boot 멀티 DataSource + 벤더별 SQL 테스트 전략 (H2 MODE 분리 설계)
·
TIL/Spring
1. 상황프로젝트 구조는 다음과 같았습니다.Primary DB (JPA)A DB (JdbcTemplate 기반)B DB (JdbcTemplate 기반)타입에 따라 A/B DB가 달라짐벤더도 달라질 수 있음 (MSSQL, PostgreSQL, MySQL 등)그리고 리포지토리는 아래와 같이 분기되고 있었다.@ConditionalOnProperty(name = "a.db", havingValue = "test") public class TestCrmRepositoryImpl implements CrmRepository {} 2. 문제 상황1. H2에서 같은 테이블 이름으로 생성시 충돌 발생타입이 늘어나면서 같은 테이블 이름을 사용하는 테스트가 늘어났다.ex) USERH2는 기본적으로 PUBLIC 스키마, 동일..
[Diary] 2026.01.15
·
Diary
보호되어 있는 글입니다.
[Diary] 2025년 회고
·
Diary
2025년 6월에 상반기 결산을 작성했었다.https://yelin1217.tistory.com/501 [Diary] 2025년 조금은 이른 상반기 결산나이를 한 살 두 살 먹어갈수록 시간이 참 빠르게 흘러간다.벌써 2025년 6월이 시작되었다.2025년 상반기 동안 많은 일이 있었고 대체적으로 나쁜 일이 가득하다.다 쓸 수는 없겠지만 몇 개 추슬러yelin1217.tistory.com 새해가 밝았으니 2025년을 돌아보는 회고록을 작성해보려고 한다. 기억을 되살리고 감정을 꺼내고 1년을 글로 녹여서 쓰는 것이 정말 쉽지 않은 거 같다.부족하고 서툴고 투박하지만 1년을 돌아보는 시간이 필요하다고 생각하며 작성해보고자 한다.1년이 정말 빛의 속도로 지나가는 거 같다.인생이 참 다사다난하다고 느끼지만 202..
[TIL] Slack 장애 알림에서 WebClient를 버린 이유 - 운영에서 살아남는 비동기 설계의 최종 선택!
·
TIL
https://yelin1217.tistory.com/562 [TIL] Spring Boot + Slack Webhook 기반 서버 오류 실시간 알림 시스템 구축 및 외부 API 연동 시 발생 가능운영 환경에서는 언제든 예상치 못한 에러가 발생한다.문제는 이 에러를 얼마나 빨리 감지하느냐가 장애 확산의 핵심이다. 이번 글에서는 Spring Boot에서 서버 예외 발생시 Slack Webhook으로 실시간yelin1217.tistory.com 이전 글에서는 Spring Boot 환경에서 Slack Webhook을 이용해 서버 에러를 실시간으로 감지하고, 외부 API 연동이 가진 위험을 WebClient + 논블로킹 I/O + 전용 스레드풀로 완화하는 구조를 작성했었다. 기술적으로는 충분히 합리적인 선택이라..