얼마 전에 코드 리뷰를 하다가 몇 달 전 제가 짠 catch (e: Exception) 아래 // TODO: 나중에 처리 를 발견했어요. 근데 그 "나중" 은 끝내 오지 않았습니다. 실패를 감싸기만 하고 눈감아온 흔적이더라고요. 이건 실패를 없앤 이야기가 아니라, 실패를 눈에 보이게 만든 이야기입니다. 예외로 던질지 값으로 돌려줄지 매번 멈칫하던 자리를, 3주 동안 코틀린 Result 에러 처리와 sealed 타입으로 다시 짜본 회고예요. try-catch가 겹겹이 쌓여 실패 흐름을 놓친 순간문제의 함수는 반환 타입이 String 이었어요. 근데 실제로는 네트워크 실패, 파싱 실패, 검증 실패 세 갈래로 던지고 있었습니다. 시그니처만 봐선 이게 실패할 수 있는 함수인지조차 알 수가 없더라고요. 그러니까 ..