# 사후 분석 (Post Mortem) : 라인DB 생성시 결함
참고
- https://devocean.sk.com/vlog/seminar/Postmortem.pdf
## 사후 분석 진행 순서
### 1. 결함 식별
- 결함 내용
- **T-Studio에서 라인 디비 생성시 오류가 발생해서 라인DB가 생성안되는 문제. 더 정확히는 데이터베이스 생성은 됐는데 업그레이드하면서 오류가 발생해서 작업 불능.**
- 결함이 발생한 시기와 장소:
- 결함 생성 :
- 2022.12.02 트렁크 커밋. 4.5 브랜치 머지. 4.6 브랜치 머지.
- 결함 배포 :
- 2022.12.09 4.500.000.020 부터 적용되었으나 NG처리
- 2023.01.10 4.500.000.022 버전에서 OK되어 고객사배포
- 결함 발견 :
- 미주 직원 브라이언이 T-Studio에서 라인 디비 생성하는 상황에서 발견
- 결함이 발생한 시스템/모듈/기능:
- 스쿼드 스크립트. 디비 업그레이드 쿼리에서 발생.
- 결함의 유형:
- 라인DB 생성 불능으로 후속 작업 불능.
### 2. 결함 분석
- 결함 발생 원인:
- **라인 디비**에 존재하지 않는 테이블(LM_DeviceNozzle)에 데이터를 추가/변경하는 쿼리 추가됨.
``` sql
IF EXISTS(SELECT * FROM LM_DeviceNozzle WHERE NozzleID = @NOZZLE_ID)
UPDATE LM_DeviceNozzle SET UPDNozzleType = 0, EditableYN = 0, ShowYN = 0 WHERE NozzleID = @NOZZLE_ID
```
- 결함이 발견되지 않았던 이유:
- **라인디비를 생성하는 테스트를 했으면 발견되었을텐데 라인디비 생성 테스트는 하지 않았다.**
- 리뷰는 했는가?
- **코드 리뷰했다. 했는데 못 찾았음. 잘 처리된 부분도 위에 있고 하여 숨어있었다. 지금 다시 해도 아마 못찾았을 꺼다. 쿼리는 코드처럼 리뷰하기가 어렵다.**
- 결함이 야기한 영향:
- 다행히 라인디비를 많이 안써서 고객사에서는 연락없었고, 엔지니어가 알려줘서 큰 피해는 없다.
- 결함 수정에 필요한 자원:
- 3MH. 수정완료
### 3. 결함 수정
- 수정된 코드/패치:
- 수정 완료. 다른 부분도 다 확인 완료.
- 패치 보냈음.
- 수정된 코드/패치의 효과:
- 수정 작업에 사용된 자원:
- 3MH
- 수정 작업의 기간:
- 2시간
### 4. 결함 예방
- 이러한 결함이 다시 발생하지 않도록 하는 방법:
- 라인디비 관련된 테스트 보강 필요
- 쿼리에 UPD를 붙이는 쿼리를 수정/변경시 라인디비 미리 생성 및 추가 생성 검증 꼭 하자.
- 스크립트 리뷰를 코드리뷰처럼 잘 하자.
- 쿼리 작성시 스키마 테이블 존재 여부를 확인하는 조건문을 꼭 넣자.
- 엘엠관련 테이블관련 스크립트와 유피디 관련 스크립트를 분리하자.
- 스크립트 작성하는 업무할때 커밋전에 체크리스트 만들자.
- 결함 예방을 위해 변경된 프로세스/절차:
- 하기 참조
- 추가적인 QA/QC 검증:
- 없음
### 5. 결함 관리
- 결함 추적/관리 도구:
- N/A
- 결함이 발생한 이유와 원인을 분석하여 개선할 점:
- 하기 참조
- 결함을 예방하기 위한 계획:
- 하기 참조
## 5 Whys
- 원인이 간단하여 생략함.
## PokaYoke
- 에러를 만들지 않는 방법
- 템플릿 파일을 만들어서 복사후 수정하도록 한다.
- 에러가 만들어지면 알람을 주는 방법 (지도카, 안돈)
- 스크립트 정적분석 툴을 만들거나 찾아서 도입하자.
- 자동테스트를 매일 돌려서 라인디비 생성하는 테스트를 자동으로 해서 안되면 알람
- 인공지능툴한테 자동으로 확인
## KPTA
### Keep (잘한점)
- OLP에서 이미 원인을 빠르게 알려줬다.
- 회고의 시간을 가지게 되었다.
- 회식임에도 불구하고 집중해서 빨리 고쳤다.
- 스튜디오에서 라인디비 생성시 어느 쿼리 실행할때 문제발생했는지 로그가 있어서 어느 파일 문제인지 빨리 찾을 수 있었다.
### Problem (개선할점)
- 라인디비 테스트 없음
- 쿼리 리뷰시 문제 발견하기 어려움
### Try (시도할것)
0. 라인디비 관련된 테스트 보강 필요
1. 쿼리에 UPD를 붙이는 쿼리를 수정/변경시 라인디비 미리 생성 및 추가 생성 검증 꼭 하자.
2. 스크립트 리뷰를 코드리뷰처럼 잘 하자.
3. 쿼리 작성시 스키마 테이블 존재 여부를 확인하는 조건문을 꼭 넣자.
4. 앞으로는 엘엠관련 테이블관련 스크립트와 유피디 관련 스크립트를 분리하자.
5. 스크립트 작성하는 업무할때 커밋전에 체크리스트 만들자.
6. 템플릿 파일을 만들어서 복사후 수정하도록 한다.
7. 스크립트 정적분석 툴을 만들거나 찾아서 도입하자.
8. 자동테스트를 매일 돌려서 라인디비 생성하는 테스트를 자동으로 해서 안되면 알람
9. 인공지능툴한테 자동으로 확인
### Action (할일) 투표로 결정
**1. 쿼리에 UPD를 붙이는 쿼리를 수정/변경시 라인디비 미리 생성 및 추가 생성 검증 꼭 하자. (3표)
4. 앞으로는 엘엠관련 테이블관련 스크립트와 유피디 관련 스크립트를 분리하자. (3표)
3. 쿼리 작성시 스키마 테이블 존재 여부를 확인하는 조건문을 꼭 넣자. (2표)**
2. 스크립트 리뷰를 코드리뷰처럼 잘 하자. (1표)
5. 스크립트 작성하는 업무할때 커밋전에 체크리스트 만들자. (1표)
6. 템플릿 파일을 만들어서 복사후 수정하도록 한다. (1표)
7. 스크립트 정적분석 툴을 만들거나 찾아서 도입하자. (0표)
8. 자동테스트를 매일 돌려서 라인디비 생성하는 테스트를 자동으로 해서 안되면 알람 (0표)
9. 인공지능툴한테 자동으로 확인 (0표)
## 기타