내멋스레 사는 이야기
개발 트러블슈팅 완전 정복 | 웹개발·백엔드·데브옵스 실무 에러 해결법. Docker, GitHub Actions, TypeScript, MySQL, Redis 등 실전 경험 기반의 개발 블로그
일요일
Next.js hydration 불일치 에러 완벽 해결 가이드
Next.js SSR 사용 시 hydration 불일치 에러가 자주 발생합니다.
증상: Hydration failed because the initial UI does not match what was rendered on the server.
원인:
1. 서버와 클라이언트 렌더링 로직 차이
2. Date.now()나 Math.random() 같은 비결정적 값 사용
3. window, localStorage 등 브라우저 API를 SSR 단계에서 접근
해결방법:
1. useEffect 내에서만 클라이언트 전용 콘텐츠 렌더링 - isClient 상태로 분기 처리
2. suppressHydrationWarning 속성 사용 - 작은 불일치는 무시 (남용 금지)
3. force-dynamic으로 동적 렌더링 - 정적 생성 대신 매번 렌더링
4. localStorage 접근은 반드시 useEffect 안에서 처리
정리: 원인을 파악하면 대부분 useEffect 패턴으로 해결 가능합니다.
MySQL deadlock 완벽 해결 가이드
MySQL 고동시성 환경에서 deadlock은 흔한 문제입니다.
원인: 두 개 이상의 트랜잭션이 서로의 락을 기다리면서 교착상태 발생.
해결방법:
1. 트랜잭션 순서 통일 - 모든 트랜잭션에서 같은 순서로 테이블 접근
2. 타임아웃 설정 - innodb_lock_wait_timeout 단축
3. 애플리케이션 재시도 - deadlock 발생 시 자동 재시도
4. 격리 레벨 검토 - READ COMMITTED 사용
5. 인덱스 확인 - 전체 스캔 방지
가장 효과적인 방법은 접근 순서 통일과 재시도 로직입니다.
목요일
Kubernetes CrashLoopBackOff 완벽 해결 가이드
Kubernetes 파드가 계속 재시작되는 CrashLoopBackOff 상태는 운영의 주요 문제입니다.
증상: kubectl get pods에서 STATUS가 CrashLoopBackOff로 표시되며, 컨테이너가 시작과 종료를 반복합니다.
원인:
1. 애플리케이션 코드 버그 또는 크래시
2. 환경 변수 누락
3. 필요한 파일 또는 리소스 미존재
4. 헬스체크 실패
5. 메모리/CPU 부족
6. 이미지 문제
해결 방법:
1. 로그 확인
kubectl logs --previous
2. 파드 상세 정보 확인
kubectl describe pod
3. 환경 변수 검증
deployment spec에서 환경 변수 설정 확인
4. 헬스체크 설정 검토
initialDelaySeconds를 충분히 설정 (예: 30초)
5. 리소스 요청/제한 확인
requests와 limits 설정 검토, OOMKilled 확인
6. 이미지 및 진입점 확인
Dockerfile의 CMD가 정확한지 확인
7. 볼륨 마운트 확인
필요한 경로가 정확히 마운트되었는지 확인
디버그 팁: kubectl debug -it --image=busybox로 컨테이너 환경 직접 확인
정리: CrashLoopBackOff는 로그와 describe 명령으로 원인 파악이 가능하며, 대부분 설정 문제입니다.
피드 구독하기:
글 (Atom)