주니어 Devs가 코드를 작성하고, 시니어 Devs가 삭제한다.
Source: Dev.to
개요
우리는 새로운 기능을 추가하고, 빠르게 배포하며 “일을 끝내는” 것을 자주 미화합니다. 하지만 때때로 가장 생산적인 일은 멈춰서 코드베이스를 살펴보고 인정하는 것입니다: “이건 엉망이야.”
지난 몇 달 동안 저는 DotShare라는 VS Code 확장 프로그램을 만들었습니다. 이 확장은 개발자들이 코드 스니펫을 소셜 미디어에 공유하도록 도와줍니다. 사용자는 이를 매우 좋아하지만, 내부적으로는 악몽과도 같았습니다.
이 이야기는 2000줄이 넘는 거대한 단일 파일을 깨끗한 아키텍처로 24시간 만에 리팩터링한 과정입니다.
🎥 변신 (30초 시청)
말은 쉽습니다. 여기 2,000줄의 스파게티 코드를 삭제하는 실제 영상이 있습니다. 순수한 만족감.
🍝 문제: “단일 클래스” 함정
저는 고전적인 함정에 빠졌습니다. 시작은 하나의 파일, DotShareProvider.ts였습니다.
처음엔 약 200줄 정도였고, “관리 가능하다”고 생각했습니다.
그 후 LinkedIn 지원, Telegram, AI 캡션 생성 등을 추가했죠…
어느새 2000줄짜리 괴물을 마주하고 있었습니다.
로직이 UI와 긴밀히 결합돼 있었습니다.
인증 토큰이 UI 렌더링과 같은 클래스에서 처리되었습니다.
디버깅은 스크롤… 스크롤… 스크롤을 반복하는 일이었습니다.
🧹 해결책: 클린 아키텍처
“패치”를 멈추고 “엔지니어링”을 시작하기로 했습니다. 핵심 아키텍처를 처음부터 다시 작성하는 데 24시간을 투자했습니다.
1. 모놀리스를 분리하기
단일 파일 접근 방식을 버리고 **단일 책임 원칙(SRP)**에 기반한 모듈 구조를 채택했습니다.
서비스 – 순수 비즈니스 로직
HistoryServiceAnalyticsService
핸들러 – UI와 서비스 사이의 다리
PostHandlerConfigHandler
UI – 순수하게 렌더링 전용
DotShareProvider
결과
모든 일을 한 파일이 아니라, 이제 프로젝트는 각각 하나의 일을 잘 수행하는 9개의 집중된 파일로 구성됩니다.
🛡️ 보안 업그레이드
가장 중요한 부분은 인증 토큰을 안전하게 보호하는 것이었습니다. 이전에는 globalState(평문 JSON) 에 저장했었습니다. 이를 VS Code의 SecretStorage API 로 모두 이전했습니다.
// Old Way (Insecure)
this.context.globalState.update('linkedinToken', token);
// New Way (Enterprise Security)
await this.context.secrets.store('linkedinToken', token);