BI

자주하는 증감률 계산 실수

초롱불 2025. 3. 14. 08:55

개요

대시보드나 보고서를 유지보수 하다보면 이전 개발자들이 잘 못 짠 로직에 대하여 수정 요청이 올때가 많다. 일반적인 조건에서 괜찮게 보이다가 특정 조건에서는 문제가 생기는 로직이 그런 문제를 만든다. 이번에 들어온 증감률 계산 실수를 기록하여 가능한 실수를 줄일 수 있었으면 해서 이 글을 쓴다.

본문

증감률은 보고서에서 많이 쓰는 비율이다. 예산 대비 증감률이라고 한다면 (실적 - 예산) / 예산 * 100 이라는 형식으로 이루어진다. 보고서를 요청하는 측에서 이러한 형태의 로직을 알려줄 것이다. 현업팀 입장에서는 예외 상황에 대하여 디테일한 로직을 알려줄 의무가 없기에 로직을 짜는 IT 팀에서 각 예외 상황에 대한 고려를 할 필요가 있다.

가장 대표적인 예외 상황은 0으로 나누기이다. 이건 너무 유명하고 자주 발생해서 어지간한 개발자들도 예외처리는 하는 편이다. 주로 사용되는 방법은 예산이 0일 경우 0을 반환하도록 조건문을 주는 것이다.

IF (예산 == 0) 
 0 ELSE
(실적 - 예산) / 예산

 

이번에 나에게 생긴 문제는 예산이 음수인 상황이었다. 예산이 음수이면 위의 공식에서 증감 값과 방향이 역전 되는 상황이 생긴다. 예를 들어 실적이 1000이고 예산이 -200이라고 해보자. 증감 값은 (실적 - 예산) 이므로 1200이고 이는 논리적 직관적으로 맞는 값이다. 하지만 증감률은 (실적 - 예산) / 예산 * 100 으로 1200/-200 * 100이 되는데 -600%가 나오게 된다. 증감 수치가 양수인데 증감률은 음수가 되는 것은 리포트를 조회하는 입장에서 전혀 직관적으로 이해될 수 있는 수치가 아니다. 따라서 잘못된 값이 나오는 것으로 이해가 되고 수정 요청이 발생하였다.

수정 방법은 간단하다. 분모의 예산 값을 절대값으로 표기하는 것이다. 증감률을 통하여 사용자가 보고싶어하는 것은 실적과 예산의 차이가 예산의 수치에서 어느정도의 비율을 차지하느냐를 조회하고 싶어하는 것이고 음수냐 양수냐로 증가되었는지 감소되었는지 방향을 알고 싶어하는 것이다. 따라서 분모의 수치는 음, 양의 방향성을 지닐 필요가 없고 음 양의 방향성을 지닐 필요가 없을 때 일반적인 리포트 조회자는 양의 수치를 기본값으로 판단하기에 양의 수치(절대값)으로 표기하면 된다. 말로 설명하니 길어지지만 수식으로 하면 이렇다.

IF (예산 == 0) 
 0 ELSE
(실적 - 예산) / |예산|

이렇게 함으로써 리포트 상에서 증감률의 값의 방향성이 역전되는 현상을 막을 수 있다.

결론

유지보수를 하다보면 개발자들이 많은 실수를 한다는 걸 느끼게 된다. 사람이 하는 일이니까 그렇다고도 할 수 있지만 쉽게 정당화 될 수 있는 일도 아니라고 생각한다. 만들어진 프로그램은 개발자의 작품이고 책임이다. 가능한한 실수를 줄이기 위해서 노력해야하고 실수가 발견된다면 부끄러워할 필요가 있다고 느낀다. 이게 내가 개발한 프로그램이라고 떳떳하게 말할 수 있어야 한다고 생각한다. 그 누구도 실수 없는 완벽한 프로그램을 개발할 수는 없고 따라서 유지보수라는 일이 있는 것이기에 이전에 개발한 개발자를 탓할 생각은 없지만 나는 내 직업에 자부심을 가지고 실수를 줄여나갈 수 있는 사람이 되고 싶다. 이런 기록들이 나중에 내게 큰 힘이 될 수 있으리라 믿는다.