본문 바로가기
2022/회고

1109 문서를 잘 읽자

by Tate_Modern 2022. 11. 9.

문서를 절대 이렇게 읽으면 안됩니다. ㅠㅠ

ETL서비스는 SaaS 솔루션으로 Data Warehouse에 있는 방대한 데이터들 중 사용자가 원하는 데이터를 선택, 추출하는 기능을 제공하는 기능을 개발 및 운영하고 있습니다.

데이터 이관 같은 경우에는 배치기능을 이용해 Data Warehouse에 있는 데이터를 S3 AthenaTable로 이관하는 기능을 제공합니다.

 

이관 시 각 배치마다 얼마나 많은 데이터가 이관되었는지 데이터 양을 제공해주었는데,

데이터 사이즈까지 알려주면 좋겠다는 피드백이 있어 서버로부터 받은 파일 사이즈 데이터를 파싱 하는 기능을 추가했습니다.

파싱 하는 함수는 따로 함수로 작성하지 않고 npm에 bytes라는 파싱 모듈을 사용해서 붙였습니다.

 

import bytes from "bytes"

bytes(1024);
// output: '1KB'

bytes('1KB');
// output: 1024

 

간단한 모듈 사용법과 간단한 기능이라 npm 모듈 문서를 대충 읽어버렸습니다...;;

요청사항을 반영하기 위해 util 함수로 만들어 화면에 데이터 값이 잘 나오는지 확인한 후 배포를 했죠.

(물론 잘되는 케이스로만 테스트를 진행했습니다.ㅠ)

배포 후 운영에서 확인해보니 추가한 모듈의 함수가 리턴 값으로 null 값을 주고 있어 오류가 발생하고 있었습니다.

 

다음과 같은 실수를 했다.

1. 공식문서에는 bytes 모듈은 인자로 명확하지 않은 값을 받을 경우 null값을 반환해준다는 내용이 기재되어
   있었는데 확인을 제대로 하지 않고 반영 하였습니다.

2. 다른 함수들은 몰라도 유틸함수는 테스트 케이스를 작성한 후 함수를 작성하고 테스트를 진행했어야 했는데 누락했습니다.

 

..기능이 쉽다고 생각하여 위의 사항들을 간과해버렸습니다.

 

문제를 해결하기 위해 다음과 같은 조치를 했습니다.

1. 테스트 케이스를 작성하기

import {bytesTranslator} from "./util.js"

describe("bytesTranslator", () => {
  it("숫자를 인자로 받을 경우 연산한 결과가 문자열('1KB')로 출력된다.", () => {
    expect(bytesTranslator(1024)).toEqual("1KB");
  });
  it("문자열을 인자로 받을 경우 연산한 결과가 숫자(1024)로 출력된다.", () => {
    expect(bytesTranslator("1KB")).toEqual(1024);
  });
  it("0을 인자로 받을 경우 연산한 결과가 문자열('0B')로 출력된다.", () => {
    expect(bytesTranslator(0)).toEqual("0B");
  });

  it("falsy한 값이 들어갈 경우 N/A가 출력된다.", () => {
    [undefined, null].forEach(param =>
      expect(bytesTranslator(param)).toEqual("N/A")
    );
  });
});

2. util함수의 반환값을 판단하는 컨디션을 추가해 null 값이 출력되는 경우 'N/A'를 출력하도록 로직 수정

//util.js
import bytes from "bytes";

export const bytesTranslator = param => {
  return bytes(param) === null ? "N/A" : bytes(param);
};

export { bytesTranslator }

 

이와 같은 문제를 다시는 발생시키지 않기 위해서 다음과 같은 조치를 합니다.

1. 함수 생성 시 반드시 테스트 케이스를 먼저 작성한 후 적용하고 테스트 해보자.

2. 같은 실수를 반복하지 않기 위해 실수를 기록해보자.

 

추가로 간단한 기능은 모듈을 사용하지 않고 함수로 만들어 사용하는 것이 낫다는 생각이 방금 들었습니다.

(벌써 ..기록의 장점이 : ) )

굳이 사용하지 않는 옵션을 갖고 있는 모듈보단 내가 필요한 기능만 모듈의 소스코드를 보고 가져와 풀어서 사용 해야겠습니다. :)

 

'2022 > 회고' 카테고리의 다른 글

1112 잡담  (0) 2022.11.12

댓글