path.resolve 기능 만들기

checkcccc·2021년 3월 20일
0

API url path를 쉽게 조합 및 구성을 위해
node.js의 path.resolve 기능을 만들어보았다.

path.resolve에는 지원하는 몇몇 패턴들이 존재한다.
그 케이스들을 한번에 생각해서 처리하는게 힘들기도하고,
더군다나 path.resolve 기능을 실제로 사용해본적이 없기때문에
개인적으로는 친화적이지도 않다.

예전 모 블로그에서 이런 경우는 TDD를 이용해서 풀면 쉽게 풀어나갈 수 있다고
했던게 기억이 나서 TDD 기반으로 기능을 작성해보았다.

TDD란 Test-Driven-Development의 약자로 테스트가 개발을 주도한다는 내용이다. RED-GREEN-REFACTOR 이런 사이클을 돌면서 점진적으로 테스트 케이스를 커버해나가는 개발 방법이다.
테스트가 추가될때마다 RED가 되도록 하는게 주요 컨셉인걸로 알고 있어서
해당 순서를 그대로 적용해보았다.

test('"/foo/bar", "./baz" to "/foo/bar/baz"', () => {
	const actual = path.resolve('/foo/bar', './baz');
    expect(actual).toBe('/foo/bar/baz');
})

위 케이스는 https://nodejs.org/api/path.html#path_path_resolve_paths 에 명시된 예제를 기반으로 작성하였다.

이런식으로 하나씩 통과에 실패하는 테스트 케이스를 추가하고 다시 통과시키고를 반복하면서 필요따라 리팩토링도 진행하였다.
복잡한 케이스의 경우는 작은 케이스로 나누도록 하였다.
예를 들면 input이 3개이상 들어가면서 상대 경로 이동 심볼이 포함되어있는 경우는
input이 3개 이상 들어오는 케이스와 상대경로 이동에 대한 케이스로 나눠 작은 부분부터 커버해나갔다. 이렇게 하니 동시에 여러개의 생각을 하지 않아서 문제 풀이 집중에도 좋았다. (사실 내가 처음부터 너무 큰거를 생각한 걸 수도? ㅋㅋ)

// 복합 케이스
test('"wwwroot", "static_files/png/", "../gif/image.gif"');

//============================================================

// 3개 이상의 input 케이스
test('"wwwroot", "static_files/", "gif/image.gif"');
// 상대 경로가 포함된 케이스
test('"/foo/bar", "../baz"');

만일 나처럼 이렇게 복합적인 케이스가 있는 경우라면 이렇게 나눠보도록하는것도 좋은거같다.
단, 처음부터 너무 나누지는 건 추천하고 싶지는 않다.. 처음부터 너무 나누면 그만큼 성취감은 있겠지만 반대로 피로감도 어마어마할 것이다. 필요에 따라서 나누는 것을 추천하고 싶다.

작성하다가 도저히 안되겠다 싶을때는 작성했던 코드를 다 지우고 재작성을 했는데
이때는 이미 기존에 작성된 테스트 코드가 있어서 재작성에 대한 두려움은 없었다.

테스트를 모두 통과시켰을 즈음에는 퇴근 시간을 넘긴 상태였고, 성취감은 있어 좋았다. TDD를 통해 기능을 구현해봤는데, 소스 코드 재작성에 대한 두려움이 없다는건 너무 좋았다. 다만... 문제 해결 구현력이 딸리는 건 진짜 연습 많이 해야겠다고 생각이 든다.... 1시간정도 예상하고 작성을 시작했던건데... 막상 케이스 작성해놓고 멍하니 구현을 고민하는 시간도 많았다...

이런 느낌이면... 결국 코테도 케바케겠지...? ㅋㅋㅋㅋ
내가 보는 코테는 다 쉽기를..

Reference

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN