웹 개발
웹 앱의 트랜잭션이 깨질 때 확인 순서
데이터베이스 트랜잭션이 예상과 다르게 작동하거나 실패할 때, 체계적으로 원인을 찾는 방법입니다.
트랜잭션 문제는 화면 하나만 보고 판단하면 절대 원인을 찾을 수 없다. 로그와 응답을 함께 봐야 한다.
핵심은 문제 해결 전체 흐름에서 원인을 좁히는 것이다. 재현 조건, 로그, 응답처럼 눈으로 확인할 수 있는 값들을 먼저 모아야 한다.
문제 상황을 정확히 파악하기
트랜잭션 문제의 흐름을 먼저 끊어서 본다. 특히 로그가 명확하지 않으면 다른 부분을 고쳐도 결과가 바뀌지 않을 수 있다.
- 데이터가 저장되지 않았는가?
- 부분적으로만 저장되었는가?
- 예상과 다른 순서로 저장되었는가?
이 중 어디에 해당하는지 파악해야 다음 단계로 진행할 수 있다.
확인 범위 정하기
트랜잭션 문제는 로컬과 운영 환경에서 다르게 나타나기 쉽다. 환경 차이까지 같이 적어두면 원인 추적이 쉬워진다.
설정 확인하기
트랜잭션 격리 수준, 타임아웃 설정, 자동 커밋 여부 등을 확인한다. 정상 상태를 먼저 정해둬야 한다.
로그에서 볼 부분
데이터베이스 로그에서 트랜잭션 시작, 롤백, 커밋의 순서를 본다. 예상과 다른 순서로 실행되었다면 문제를 찾을 수 있다.
npm run build
프로덕션 빌드로 실제 환경을 최대한 가깝게 재현한다.
작게 바꿔볼 것
트랜잭션 로직 중 한 부분씩만 수정해본다. 여러 부분을 동시에 바꾸면 어떤 것이 원인인지 구분할 수 없다.
사용자 영향 확인
트랜잭션 실패가 실제로 사용자에게 영향을 주는지 확인한다. 데이터가 불완전하게 저장되었다면 사용자 경험이 깨진다.
실패했을 때 다음 후보
한 가지 원인을 배제하면 자동으로 다음 원인을 확인할 수 있도록 체계를 만든다.
- 트랜잭션 격리 수준
- 동시성 제어
- 네트워크 타이밍
- 데이터베이스 상태
체크리스트
- 원래 증상이 같은 조건에서 다시 나는지 확인한다
- 데이터베이스 로그에서 트랜잭션 순서를 본다
- npm run build로 프로덕션 환경을 시뮬레이션한다
- 한 가지씩만 수정한다
- 로그와 응답에서 바뀐 부분을 기록한다
다음에 남길 기록:
- 어떤 조건에서 문제가 발생했는가?
- 어떤 데이터가 저장되었고 어떤 데이터가 저장되지 않았는가?
- 수정 후 같은 조건에서 다시 확인했는가?
작은 확인을 남겨두면 다음 문제를 훨씬 짧게 처리할 수 있다. 관련 기록을 짧게라도 남겨두면 다음 확인이 훨씬 빨라진다.