WIL - 2025.08 Week 5

|

이번 주는 특별히 큰 진전을 이룬 건 없는 것 같다.
계획했던 CS50 강의는 손도 못 댔고, 타입스크립트 문제 풀이를 한두 개 정도 진행했을 뿐이다.
그나마 『패턴으로 익히고 설계로 완성하는 리액트』 책의 마지막 파트만 남겨두었고, 추가 공부를 위해 책 세 권을 새로 구매한 정도가 이번 주의 성과였다.

그 외에는 메인 개발 작업보다는 각종 에러 처리가 더 기억에 남는다.

회사에서 NestJS로 개발을 진행하면서 class-validator가 Body pipe 단계에서 길이 검증을 제대로 수행하지 못하는 문제를 발견했다.
원래라면 “길이가 올바르지 않다”는 식의 에러 메시지를 띄워야 했는데, 실제로는 DB의 길이 제약 오류가 발생하면서 민감한 DB 정보까지 노출되는 상황이었다. 이는 보안상 큰 문제가 될 수 있기 때문에 원인을 추적했는데, 범인은 TypeScript의 Omit이었다.

Omit은 타입스크립트의 타입 유틸리티일 뿐, 컴파일 시점에서만 작동하여 타입을 변경할 뿐이다.
런타임 시 실제 클래스에서 프로퍼티를 제거하지 않기 때문에 class-validator에서는 해당 필드가 여전히 존재하는 것으로 간주되고, 결국 유효성 검증이 동작하지 않은 것이다. 덕분에 OmitType과 같은 NestJS 전용 유틸리티를 사용해야 한다는 교훈을 얻었다.

또한 일렉트론으로 배포한 앱에서 사용자 CS 문의가 들어왔다. 코드를 살펴보니, 과거에 비공개 레포에서 일렉트론 자동 업데이트 및 배포가 정상적으로 되지 않는 문제가 있어 공개 레포로 전환했던 적이 있었다.
이 과정에서 깃허브 검색에 최대한 노출되지 않게 하려고 레포 이름을 다르게 설정해 두었는데, 그 부분이 원인이 되어 버그가 발생한 듯했다. 이렇게 작은 결정이 예상치 못한 방식으로 스노우볼처럼 굴러올 줄은 전혀 상상하지 못했다.

이번 주는 계획대로 흘러가진 않았지만, 에러와 문제 해결 과정에서 더 큰 배움을 얻었다.
결국 개발은 문제 없는 길을 찾는 게 아니라, 문제를 마주하고 풀어가는 과정임을 다시금 깨달았다.