2022년 11월 2일 수요일

요즘 하는 일 COE (Correction of Error)

이번 스프린트에서 내가 맡은 일: COE action item.  

아마존에는 COE (Correction of Error)라는 프로세스가 있다. 이 페이지에 자세히 나온다. https://wa.aws.amazon.com/wat.concept.coe.en.html

뭔가 고객에게 지대한 영향을 미치는 문제 (이슈)가 발생했을때, 이것을 일단 해결한 후 COE라는 과정을 수행해야 한다. 페이지에 보니까 이슈를 문서화하고 해결하여 품질을 개선하는 과정이라고 나온다. COE는 템플릿이 있어서 그거에 맞게 모든 사항을 다 적시해야 한다. 뭐랄까, 언제, 왜, 어떻게, 그리고 정량화된 자료가 또 있어야 한다. 몇 개의 디바이스가 영향을 받았는지, 몇 개의 ASIN의 attributes이 잘못되었는지 등등.  

가장 중요한 것은 원인 (Root Cause) 규명 (identify)일텐데, 원인 규명 후, 이러한 일이 재발하지 않도록, 또는 재발하더라도 더 빠르게 우리가 알아채서 영향 범위를 줄이려면 뭘 해야 할지, 액션 아이템을 만들어야 한다. 주로 메트릭스, 알람 이런거 재조정하거나 추가하여 더 빠르게 알아챌 수 있게 하고, 버그에 의한  것이라면 버그 고치는 것은 당연히 액션 아이템이 되겠다.

이번 스프린트에서 내가 하고 있는 일은, 약 한달전 우리팀에 Sev2 이슈가 있었고, 그로 인한 COE를 작성했었고, 그 결과 몇 가지 action items이 만들어졌는데 그 중 하나다.  


그 이슈로 인해 좀 많은 일이 발생했는데, 원인은 어이없게도 이 한줄의 코드 때문이었다.


전체를 좀 자세히 보여주기는 뭣해서 이 한줄을 가져왔는데, activeWeblabOverride() 라는 애는 private function 이다. 이렇게 생겼다.

private String activeWeblabOverride(String a, String b, String c)

그러니까, activeWeblabOverride()이 NULL을 리턴한 경우가 발생했고, 그 결과 NPE (NullPointerException)가 발생했다. 

이런 코드 체인지는 코드 리뷰 중에 걸러졌어야 하나 그러지 못하였다. 두 개의 스트링을 equals로 비교시, 하나의 string이 constant 라면 (이 예에서는 "T1") constant를 반드시 먼저 써줘야 한다. 그래야 activeWeblabOverride()이 NULL을 리턴하더라도 T1과 다르니 false를 리턴한다. 


이 한줄의 코드로 어마 어마한 자원 낭비가 발생했고, 많은 문제가 발생했다. 





잔디 3주차

 잔디 심기. 3주차에 접어들었음. 사진. 아래가 1일차 사진. 다음이 3주차.