본문 바로가기

개발회고

재현되지 않는 문제 유추

장애 보고를 받으면, 제일 먼저 테스트 서버에서 문제를 재현한다. 보통 여기서 재현되지 않으면, 개발자들은 더 깊이 들여다 볼 생각을 하지 않는다. 다른 해야 할 일이 많기 때문일까? 포기가 너무 빠르다는 느낌도 받는다.

 

그렇지만, 지금까지 재현되지 않는 문제를 몇 가지 꼽아 보면, 이런 유형이 발생했을 때 큰 도움을 받을 수 있을 것이다.

 

첫째, DB의 에러로 인한 트랜잭션 오류

지금은 해소했던 것인데, Oracle Package에 전역 변수를 사용하니, 새롭게 컴파일 할 경우 꼭 1회씩 패키지 버려짐 현상이 발생했다. 이로 인해 해당 Package가 실행되지 않아 메시지가 발송 안되는 것은 어쩔 수 없었다지만, 이것이 전체 트랜잭션에 영향을 주었던지, 해당 주문 취소가 모두 롤백됐다. 문제는 이 사이에 있던 PG사로 보내던 주문 취소 정보만 정상 작동하여, 고객이 느끼기에 주문취소는 안되 보이지만, 주문은 이미 취소된, 데이터 무결성이 깨지는 현상이 발생한 것이다. 자주 일어나지는 않으나 원인은 결국 Package를 재컴파일 하면서 발생했던 간헐적, 재현 불가능한 문제였던 점이다. 이번에 들어왔던 외주 개발자가 이점을 모르고 사용했던 게 문제였다. 이후 다른 개발자가 들어와서 시작하더래도 이 부분을 꼭 주지시켜서, 패키지 버림을 예방해야겠다는 생각을 했다.

 

둘째, DB의 실행 SP가 버전이 다름.

대개 개발 시에는 _TFU, _TFN 과 같은 꼬리태그를 사용하여 프로젝트에서 사용되고 신규로 추가되거나 수정된 코드를 구분한다. 오픈이후 일정기간이 지나면 이를 모두 정상으로 돌려줘야 하는데, 일부는 아직도 옛 코드를 바라본다. 이 코드는 최신화가 안되어 있어 문제의 소지가 있을 수 있는데도 말이다. 이런 게 최근에 발생했다. 예방하자면, 소스코드 일치이지 싶다.

'개발회고' 카테고리의 다른 글

문서화에 대해 아무도 알려주지 않는 것들  (0) 2019.12.01
상품 속성 변경에 따른 사고  (0) 2019.11.16
왕따, 외로움?  (0) 2019.11.16
최악의 상황  (0) 2019.11.13
실패에서 배우기  (0) 2019.11.13