개발자 이민재입니다.

POSTS

2024년 6월 회고

9min read

글로벌 서비스

    6월은 익숙하지 않은 Next.js를 다루는 데 대부분의 시간을 보냈습니다. 새로 런칭할 글로벌 서비스는 기존에 Next.js 기반으로 구축되어 있었고, 이 프로젝트를 바탕으로 기능을 붙여야 했습니다. 비즈니스 사정 상 급하게 외주를 맡겨 디자인과 퍼블리싱만 간단히 마무리했던 서비스였습니다.     여기에 로그인과 회원가입부터 비즈니스 로직을 글로벌에 맞게 최소한으로 구현하는 것까지 한 달이 걸렸습니다. 구현해야 하는 페이지 수에 비해 시간이 많이 소요됐습니다.     개발 병목은 아래와 같은 것들이었습니다.

  1. Next.js에 익숙하지 않아 트러블슈팅에 걸린 시간

Next.js 오류 대처하는 것만 해도 블로그에 쓸 글이 아주 많이 남아 있을 정도입니다. 쿠키 세팅과 관련된 문제, styled-component와 같이 사용하면서 생겼던 문제, 에러 핸들링 문제 등.. 대부분 서버사이드 렌더링을 제대로 이해하지 못한 것에서 발생한 문제였습니다. 꾸준히 공식문서를 읽고 시행착오로 경험치를 쌓는 것 밖에는 답이 없었습니다. 물론 아직도 헷갈리는 부분이 많아서, 좀 더 깊이있게 공부를 해야할 것 같습니다.

  1. 경험 자체의 부족

돌아보면 프론트엔드 개발 자체에 경험이 부족한 것이 가장 컸습니다. css는 매번 까먹고, 단순 리스트만 작성할 줄 알았지 funnel 형식으로 유저의 플로우에 따라 페이지를 만드는 것도 처음이었습니다. 이 때문에 상태관리를 어떻게 구현하고 라우팅은 어떻게 처리해야 할지 머릿속이 복잡하기도 했습니다. 특히 플로우를 만드는건 제대로 작동은 했지만 더 나은 방법이 있을 것 같아 계속 고민했습니다. 재사용하기 좋은 컴포넌트를 만드는 기술도 아직 부족해서, 일단 중복으로 만들고 나중에 리팩토링하는 방식으로 진행했습니다. 프론트엔드에서도 테스트 코드를 작성하는 습관을 갖춰서, 테스트로 좋은 설계를 만드는 순환을 경험해야 할 것 같습니다.

통합테스트 코드 작성

    Next.js와 씨름하는 와중에, 개발팀 전체적으로는 테스트 코드 작성 컨벤션을 갖추는 것에 시간을 투자했습니다. 단위테스트는 간단한 함수들과 클래스들을 통해 예시들이 충분히 많은 상황이었는데, 통합테스트는 컨벤션이 없어 문제였습니다.     좀 더 정확히 말하면, 통합테스트 대상인 서비스 레이어에 의존성들을 모두 모의객체로 대체하는 바람에 생긴 문제였습니다. 기존 서비스 레이어를 테스트할 때 데이터베이스 계층을 모두 스텁과 목 객체로 채워넣어 테스트하고 있었습니다. 이런 레이어에서 적극적으로 모의객체를 활용해서 단위테스트할 것이냐, 통합테스트로 진행할 것이냐는 계파로 나뉠 정도로 워낙 유명한 논쟁입니다.     실제로 맞닥뜨려보니, 적절한 컨벤션 없이 모의객체를 활용하면 많은 개발자들이 지적하던 문제들이 발생했습니다. 지금 생각해보면, 다른걸 떠나서 모킹 자체가 코드 설계의 문제를 숨기는 것이 가장 큰 문제였습니다. 이런 문제로 리팩터링 내성이 약한 테스트 코드가 되기도 했고, 또 다른 문제로 의존성만 주입하다가 의미없는 테스트가 될 때도 있었습니다.     일단 모의객체의 사용은 최대한 줄이기로 했고(이벤트 계층에 한해서만 사용하기로 했습니다), 통합 테스트에서는 테스트 전용 데이터베이스를 사용하도록 변경했습니다. 이로 인해 서비스 레이어의 테스트는 거의 통합테스트가 되었고, 덕분에 단위테스트로 처리해야 하는 계층을 분리하는 작업이 명확해졌습니다.

Notion과 Obsidian

    개인 메모 용도로 노션을 활용하고 있는데, 여러 한계들이 느껴져서 옵시디언으로 갈아탈 시도를 했습니다. 노션에서 vim 키맵을 제공하지 않고 있고, 저는 키보드로 해피해킹을 사용하다보니 커서 이동하는 등의 작업이 불편했습니다. 또 노션은 웹기반이어서, 텍스트를 편집하거나 검색하면 지연이 발생하는데 이게 텍스트가 없어질까봐 불안하기도 하고, 느릴 때 답답하기도 했습니다. 그래서 vim 키맵 제공 + 로컬 파일 기반으로 동작하는 옵시디언에 도전했습니다.     플러그인이 워낙 많다보니, 옵시디언에 적응하는 과정은 곧 없는 기능을 제공하는 플러그인을 계속 붙이는 과정이었습니다. 붙이다보니 노션 메모들도 다 마이그레이션 하고, UI도 노션과 흡사하게 바꾸는 데 성공하긴 했는데... 가장 큰 단점이 있었습니다. WYSIWYG 방식이 아니라는 것이었습니다. 마크다운 기반 편집이다보니 reading view와 edit view가 다른데, 이게 너무 불편했습니다. edit view에서 vim 키맵으로 문서를 편집하다가, 문서를 볼 때는 reading view로 전환해서 봐야 텍스트를 제대로 읽을 수 있었습니다. live preview라고 최대한 WYSIWYG에 가깝게 만드려는 시도가 진행중입니다만, 커서 올리면 결국 마크다운 문법이 드러나는 애매한 UI가 더 사용성이 안 좋았습니다. 몇 번 메모를 시도했지만 결국 익숙해지지 않아 실패..     처음 계획은 개인 메모 앱으로 Obsidian을, 협업 메모는 Notion을 사용하는 것이었는데 산산조각났습니다. 이래저래 좋은 UI가 가지는 힘이 얼마나 강력한지 느낀 계기였습니다.

7월에 할 일

    7월 말에 정보처리기사 실기 시험이 있어 당분간은 이 시험에 집중을 해야합니다. 내용이 비슷하니 뭐 많이 차이나겠나 싶었는데, 직접 문제를 풀어보니 확연히 달랐습니다. 거의 객관식이 주관식으로 바뀐 것 뿐인데, 아예 다른 시험처럼 느껴집니다. 잘 준비해서 바로 합격해야겠습니다.