Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 백엔드기초
- 네트워크
- 백엔드개발자
- spring event
- CS
- db
- 인증
- JPA
- java
- SnowFalke
- 인프라
- 웹개발
- AbstractAggregateRoot
- 백엔드
- 데이터베이스
- 클린코드
- 백엔드개발
- Spring Boot
- 웹성능최적화
- redis
- http
- 보안
- 프론트엔드
- DEVIEW2023
- Spring
- devops
- interceptor
- 세션
- 성능최적화
- 캐시
Archives
- Today
- Total
이것저것 개발기록
교착 상태(Deadlock)의 발생 조건과 해결 방법 본문
"서버가 멈춘 것 같은데 에러 로그도 없어요..."
프로세스들이 서로의 자원이 해제되기만을 무한정 기다리는 상태, 데드락(Deadlock)에 대해 파헤쳐 봅니다.
1. 데드락 발생의 4가지 필수 조건
다음 4가지 조건이 모두 충족될 때 데드락이 발생합니다. 하나라도 깨뜨리면 예방할 수 있죠.
- 1. 상호 배제 (Mutual Exclusion): 한 번에 한 프로세스만 자원을 사용할 수 있음.
- 2. 점유와 대기 (Hold and Wait): 자원을 가진 상태에서 다른 자원을 기다림.
- 3. 비선점 (No Preemption): 다른 프로세스의 자원을 강제로 뺏을 수 없음.
- 4. 환형 대기 (Circular Wait): 대기 관계가 원형을 이룸.
2. 어떻게 해결하나요?
실제 운영체제는 데드락을 예방(Prevention)하거나 회피(Avoidance)하기보다는, 발생했을 때 탐지(Detection)하고 복구(Recovery)하는 방식을 주로 사용합니다.
💡 실무 노트
실무 백엔드 개발에서는 DB 트랜잭션 간의 데드락을 자주 마주하게 됩니다. 두 트랜잭션이 서로 다른 테이블의 락(Lock)을 잡으려고 할 때 발생하죠.
팁: 가장 쉬운 해결책은 **자원에 접근하는 순서를 통일**하는 것입니다. 모든 로직에서 A 테이블을 수정한 뒤 B 테이블을 수정하도록 순서만 맞춰도 환형 대기(Circular Wait) 조건을 깨뜨려 데드락을 방지할 수 있습니다.
'IT 이야기' 카테고리의 다른 글
| "서버가 빨라지는 마법" 상황별 캐시(Cache) 전략 총정리 (0) | 2026.01.02 |
|---|---|
| Auth 2.0과 소셜 로그인, 어떻게 동작할까? (0) | 2026.01.01 |
| 웹 캐시(Cache)와 CDN, 사용자 경험을 높이는 기술 (0) | 2025.12.31 |
| 정렬 알고리즘 3종 세트 핵심 정리 (0) | 2025.12.31 |
| TDD(테스트 주도 개발)가 왜 필요한가요? (0) | 2025.12.30 |