드림코딩 Node.js 강의 자동화 스크립트 과제 셀프 평가 및 정리용 포스트
솔루션 코드 보지 않고 끝까지 혼자 힘으로 해내기
: 공부하는데 당연한 부분이고, 이렇게 해야 더 많이 배워가니까!
공식 문서 최대한 활용하기
: 이전에는 스택오버플로우 글들을 먼저 봤었는데, 공식문서를 잘 읽어 보면 의외로 답을 쉽게 찾을 수 있고 결과적으로 더 적은 시간 안에 문제를 해결할 수 있다는 걸 배웠다.
요구 사항 분명하게 파악하기
: 코드를 짜기 전에 요구 사항이 무엇이고 어떻게 풀어가야 하는지 충분히 생각하는 시간을 가져야 더 깨끗한 코드가 나온다.
타임 박싱 (최대 2시간 넘지 않기)
: 혼자 공부하다 보니 어떤 문제가 생기면 그게 해결될 때까지 붙잡고 있었는데, 시간 관리 측면에서 비효율적이고 실무할 때 자칫 안 좋은 습관으로 굳어질 것 같아 타임박싱을 습관화하기로 했다.
수정된 사진은 'IMG_Exxxx'와 같이 원본 사진 파일명'IMG_xxxx'의 숫자 앞에 E가 붙는데, 수정된 버전만 남기고 원본은 duplicated 폴더로 옮겨야 했다.
처음에는 코드를 최대한 간결하게 짜려고 파일명이 'IMG_E'로 시작하면 replace
를 활용해서 E를 삭제한 파일명을 인자로 넘겨, 해당 파일을 폴더로 옮겼다.
이렇게 하면 폴더 내에 실제로 그 파일이 있는지 확인하는 절차가 생략되었기 때문에 두번 실행하면 에러가 발생한다. 만약 사용자가 원본 사진을 삭제했다면, 이 경우에도 에러가 발생할 것이다.
💡 사용자 입장에서, 발생할 수 있는 여러 경우의 수를 항상 생각하자
if (!file.startsWith('IMG_') || file.startsWith('IMG_E')) {
return;
}
const edited = `IMG_E${file.split('_')[1]}`;
const duplicated = fileList.find((i) => i.includes(edited));
if (duplicated) {
const fileName = `IMG_${duplicated.split('E')[1]}`;
moveFiles(fileName, 'duplicated');
}
}
처리할 필요 없는 파일들은 빨리 리턴하고, 원본 파일 중 find
와 includes
를 이용해 수정된 버전이 있는 파일을 찾는 방법을 선택했다.
비동기화
엄청난 실수 😭
테스트 폴더는 파일 개수도 몇 개 안 되고, 크기도 크지 않으니 문제가 안 됐지만 파일을 읽고 옮기는 데 비동기 처리를 안 한건 큰 실수다. Promise 잊지 말기!
에러 처리
같은 폴더에 대해 스크립트를 여러번 실행했을 때 폴더가 이미 만들어졌으면 더 이상 실행되지 않도록 에러 처리하는 것은 해두었는데, 사용자가 command line에서 폴더명을 잘못 입력했을 경우에는 미처 대비하지 못 했다.
적절한 에러 처리에 대해 늘 고민하자.
경로 설정
요구 사항에 분명히 Pictures 폴더 내에 타겟 폴더가 있어야 한다고 했는데, 프로젝트 내부에 타겟 폴더를 놓고 해당 경로를 resolve
로 읽어왔다. 요구 사항이 만족됐는지 끝까지 점검하자.
다른 부분들은 목표한 대로 달성했다.
단, 요구 사항에 맞게 경로설정하는 부분에서 실수했다. 경로가 다르면 아얘 스크립트 실행 자체가 안 되므로 별 2개 뺐다.