개행 에러 처리하기

신연우·2021년 4월 23일
0

PSG 회고

목록 보기
5/5

발단

PSG 기능을 사용하여 프로젝트 구조를 생성하는 기능을 테스트하고 있었다.

위와 같이 개행을 집어넣은 상태로 PSG make 명령(프로젝트 구조 생성 커맨드)을 실행해보았다.

그랬더니 해당 부분에서 예상치 못하게 warn(경고) 메시지가 출력되는 것이 아닌가?

탐색

_initPlan(filename) {
  const planPath = this._getPlanPath(filename);
  const fileData = fs.readFileSync(planPath, { encoding: "utf-8" });
  
  if (!fileData) {
    throw new Error(`${filename} is empty`);
  }

  for (const data of fileData.split("\r\n")) {
    this._plan.push({
      indention: data.split(' ').length - 1,
      name: data.replace(/ /g, '')
    });
  }
}

위 로직에서 문제가 있던 것을 확인했다. Windows 환경의 개행이 있기 때문에 "\r\n"으로 split을 해서 각 요소를 가져오는 부분으로 설정을 했었다.

다만, split의 경우는 해당 split 대상 문자열과 같은 값은 ''로 배열 요소에 추가가 된다. 그래서 '' 문자가 그대로 들어가지면서 결국 root directory를 새로 만들게 되는 문제가 생겨버린다.

해결

_initPlan(filename) {
  const planPath = this._getPlanPath(filename);
  const fileData = fs.readFileSync(planPath, { encoding: "utf-8" });
  
  if (!fileData) {
    throw new Error(`${filename} is empty`);
  }

  for (const data of fileData.split("\r\n")) {
    if (data) {
      this._plan.push({
        indention: data.split(' ').length - 1,
        name: data.replace(/ /g, '')
      });
    }
  }
}

다음과 같이 if (data) { ... } 방식을 사용해 해결할 수 있었다. ''의 경우는 boolean 값으로 변환하면 false이기 때문에 if 문을 통해 필터링할 수 있다.

결과

개행이 입력된 경우 해당 개행을 무시할 수 있게 되었다. 원래는 맨 마지막에 개행 문자가 추가된 경우 경고 메시지가 출력되지 않도록 하기 위함이었다.

하지만, 결과적으로는 사용자가 구조를 입력할 때 가독성을 위해 개행 문자를 입력해도 경고 메시지가 출력되지 않게 되었기 때문에 사용자의 편의성이 증가될 것으로 예상된다.

profile
남들과 함께하기 위해서는 혼자 나아갈 수 있는 힘이 있어야 한다.

0개의 댓글