프로그래머스 프론트엔드 데브코스에서 진행했던 노션 클로닝 프로젝트에 대한 회고를 적어본다.
프로젝트 수행 과정
지금까지는 틀이 정해져 있는 형태의 과제를 수행했었다면 이번 프로젝트는 본인의 능력껏 하고 싶은 만큼 여러 기능을 추가할 수 있는 열린 과제였다고 생각이 든다. 이러한 생각이 든 이유는 기본 요구사항이 있긴 했지만 노션을 그대로 클로닝하겠다고 생각하면 끝도 없이 추가할 수 있기 때문이었다.
프로젝트 수행 기간은 6월 27일부터 7월 6일까지였고 본인은 시간에 쫓기지 않게 잘 마무리한 거 같다. 물론 완성도가 높다고 할 수 없지만 애초에 100% 만족하는 결과를 낼 수 없고 그렇기에 무리하지 않는 선에서 요구사항을 잘 수행했다.
본인은 기본적으로 욕심이 많이 없기도 하지만 기간 내에 수행해야 하는 일에 대해서는 최소한의 요구사항을 먼저 완료하겠다는 마음가짐을 가지고 임한다. 만약 시간이 남는다면 그때 조금씩 덧붙이는 식으로 진행하는 것이다. 왜냐하면 기간과 요구사항은 일종의 약속이며 그 약속은 지켜야 하는 의무라고 생각하기 때문이다.
머릿속으로 적당한 계획을 짜서 차근차근 몸에 무리가 가지 않게 일을 진행했다. 잠을 줄이거나 기존에 하던 일을 내팽개치지 않고 기존의 삶의 패턴을 최대한 유지하려고 노력했다. 이게 가능했던 이유 중 하나로 프로젝트 기간에 들어야 할 영상 강의가 없어서 해야 할 일이 적었던 것도 한몫했다.
배움과 고민
프로젝트를 통해 배운 점은 코드들의 역할을 최대한 나누고 그들의 책임을 최소한으로 줄여야 한다는 생각을 코드 작성 시에 잊지 않고 가져가야 한다는 점이었다. 그렇게 해야 코드의 가독성이 높아지고 전체적인 코드의 흐름을 쉽게 파악할 수 있게 되어 오랫동안 유지보수할 수 있는 좋은 코드가 완성되는 것이다.
폴더 구조를 설계하면서
domain
, service
, utils
폴더에 어떤 역할을 하는 코드들이 들어가야할지 고민하는 시간을 꽤나 가졌다. 본인의 분류 기준은 아래와 같다. - domain: 현재 앱에서만 사용될 수 있고 ECMAScript 혹은 node.js로 작성한 코드
- service: ECMAScript뿐만아니라 Web API를 사용하여 작성한 코드
- utils: domain과 service에서 분리할 수 있는 코드 혹은 어떤 앱에서나 사용할 수 있는 코드
이번 프로젝트에서는 생성자 함수가 아닌 클래스로 코드를 작성하였는데 그 이유는 타입스크립트에서 생성자 함수를 활용하여 객체를 생성하는 과정이 클래스로 작성하는 것에 비해 무척 불편했기 때문이다. 그래서 클래스로 작성하는 연습 겸 추상화도 시도해 볼 수 있는 좋은 기회라고 생각이 들어 클래스로 구현하게 됐다. 클래스를 사용하면서 느낀 점은 지금의 생성자 함수가 맡은 역할이 애매하다는 점이었다. 과거에는 자바스크립트에 클래스와 화살표 함수가 없던 시절이 있었고 그 시절에도 클래스의 역할이 필요했기에 함수에 그 역할을 부여한 거 같지만 지금에 와서는
function
키워드 없이도 코드를 작성하는 데 큰 무리가 없는 듯하여 위와 같은 의문이 들었던 것 같다. 마무리
이 프로젝트는 계속해서 유지보수할 것이고 타입스크립트로 옮기는 작업도 해보고 싶다. 끝에는 노션과 거의 동일한 모습을 가진 결과물을 내놓고 싶다는 욕심이 있다.