Showing Posts From

옛날에

옛날에 짠 코드 다시 보면서 '이때가 좋았지' 하는 감정

옛날에 짠 코드 다시 보면서 '이때가 좋았지' 하는 감정

토요일 오후의 발견 회사 레포지토리를 뒤지다가 10년 전 코드를 발견했다. 프로젝트명: CRM v2.0 마지막 커밋: 2014년 3월 15일 커밋 메시지: "결제 모듈 리팩토링 완료. 테스트 통과." 파일을 열었다. 스크롤을 내렸다. "아, 이거..."깨끗했다. 정말 깨끗했다. 메서드 하나가 20줄. 주석도 적절히. 변수명도 명확하고. 테스트 커버리지 85%. 지금 내가 짜는 코드는 이렇지 않다. 2014년의 나 당시 나는 35살이었다. 선임 개발자. 팀원 3명. 관리 업무는 거의 없었다. 회의는 주 2회. 나머지는 다 코딩. 그때는 시간이 있었다. 아침 10시에 출근해서 저녁 7시까지. 점심 1시간 빼고 전부 코딩. 회의 끝나면 바로 IDE 켰다. 슬랙 알림은 10개도 안 왔다. 코드 리뷰는 내가 받는 입장이었다. 부장님이 꼼꼼하게 봤다. "여기 왜 이렇게 했어?" 물으면 설명했다. 고칠 건 고쳤다. 지금은 내가 리뷰하는 입장이다. 하루에 PR 5개. 제대로 보려면 2시간. 하지만 회의 때문에 10분씩 쪼개서 본다. "LGTM" 달고 승인. 미안하다.그때는 리팩토링할 시간이 있었다. "이 부분 좀 이상한데?" 싶으면 바로 고쳤다. 3시간 걸려도 괜찮았다. 완벽하게 만들 수 있었다. 지금은 "일단 돌아가게" 하고 넘어간다. 리팩토링은 다음 스프린트에. 하지만 다음 스프린트에는 새 기능이 들어온다. 리팩토링은 또 미뤄진다. 기술 부채가 쌓인다. 코드를 읽으면서 오래된 코드를 한 줄씩 읽었다. public class PaymentService { private final PaymentGateway gateway; private final TransactionRepository repository; public PaymentResult process(PaymentRequest request) { validateRequest(request); Transaction transaction = createTransaction(request); PaymentResponse response = gateway.charge(transaction); return saveAndReturn(transaction, response); } }단순했다. 명확했다. 한눈에 들어왔다. 요즘 코드는 이렇지 않다. 어노테이션 10개. 추상화 레이어 3개. "확장성을 위해서" 라고 했는데 결국 안 쓴다. 그때는 필요한 것만 만들었다. YAGNI. You Aren't Gonna Need It. 그 원칙을 지켰다. 지금 필요한 기능만. 나중에 필요하면 그때 추가. 지금은 "나중에 이거 필요할 수도..." 하면서 미리 만든다. 기획자가 "혹시 이것도..." 하면 "네" 한다. 시간 없다고 하면 "파트장님이 안 된대요" 소리 듣는다. 그래서 코드가 복잡해진다.테스트 코드도 있었다. @Test public void 결제_성공_테스트() { // given PaymentRequest request = createValidRequest(); // when PaymentResult result = service.process(request); // then assertThat(result.isSuccess()).isTrue(); }Given-When-Then. 깔끔했다. 요즘은 테스트 코드 짤 시간이 없다. "일정이 빡빡해서요." 후배들한테 "테스트 좀 써" 하면서 나도 안 쓴다. 이중잣대다. 알고 있다. 그때가 좋았던 이유 커밋 로그를 더 봤다. 2014년 3월 한 달간 커밋 60개. 거의 매일. 주말에도 몇 번. 지금은? 한 달에 10개. 대부분 "회의록 업데이트", "문서 수정". 실제 코드 커밋은 3개. 관리자가 되면서 달라졌다. 파트장 달고 나서 회의가 늘었다. 일정 조율. 리소스 배분. 타 부서 협업. 임원 보고. 코딩은 "남는 시간에" 하는 거다. 하지만 남는 시간은 없다. 오전 10시: 데일리 스탠드업 오전 11시: 주간 계획 회의 오후 1시: 점심 오후 2시: 기획팀 미팅 오후 4시: 임원 보고 준비 오후 5시: 임원 보고 오후 6시: 1on1 (후배 2명) 코딩은 언제? 저녁 8시. 사무실 조용해지면. 하지만 집중력이 예전 같지 않다. 한 시간 하면 피곤하다. 그때는 4시간도 했는데. 코드가 아니라 시간 사실 코드가 문제가 아니었다. 10년 전 코드가 더 좋은 게 아니다. 그때 나한테 시간이 있었던 거다. 생각할 시간. 설계할 시간. 리팩토링할 시간. 테스트 짤 시간. 지금은 그 시간이 없다. "파트장님 잠깐만요." 하루에 10번. "이거 언제까지 되나요?" 하루에 5번. "회의 하나 잡아도 될까요?" 하루에 3번. IDE 켜고 5분 지나면 누가 부른다. 집중은 불가능하다. 깊은 작업(Deep Work)은 옛날 얘기다. 지금은 얕은 작업(Shallow Work)만 가능하다. 10분씩 쪼개서. 그래서 코드 품질이 떨어진다. 시간 부족은 핑계가 아니다. 현실이다. 후배들의 코드 팀 후배들 코드를 봤다. 김 대리 코드: 깔끔하다. 주석도 있다. 테스트도 있다. 이 사원 코드: 최신 기술 잘 쓴다. 코틀린 코루틴까지. 부럽다. 걔네는 시간이 있다. 회의 적다. 관리 업무 없다. 순수하게 개발만. 나도 그랬다. 10년 전에. "대리님, 이 부분 어떻게 생각하세요?" 김 대리가 물었다. 페이먼트 모듈 설계. "음... 이렇게 하면 어때?" 조언했다. 20년 경력의 노하우. 설계 패턴. 예외 처리. "오, 좋네요!" 김 대리가 구현한다. 내가 조언한 대로. 더 잘 만든다. 기쁘기도 하고 씁쓸하기도 하다. 내 지식으로 후배가 좋은 코드를 짠다. 나는 직접 못 짠다. 이게 관리자의 역할인가? 임원이 되면 부장님이 말했다. "박 파트장, 내년에 임원 트랙 타면 어때?" 임원. 연봉 1억 2천. 스톡옵션. 전용 주차. 사무실도 따로. 대신 코딩은 완전히 못 한다. "생각해보겠습니다." 거짓말이다. 이미 답은 정했다. 안 한다. 임원 되면 개발자 아니다. 경영자다. 숫자 보고 사람 관리하고 전략 짜고. 코드는 안녕이다. 그건 싫다. 차라리 지금처럼 반반이 낫다. 관리 50%, 개발 50%. 비록 개발 시간이 부족하지만 아예 없는 것보단 낫다. 10년 전 코드를 보면서 생각했다. "그때로 돌아갈 순 없지." 35살로 돌아가면? 지금의 연봉은 포기. 지금의 직급도 포기. 지금의 영향력도 포기. 대신 코딩 시간은 얻는다. 안 할 거다. 현실적이지 않다. 하지만 가끔 상상한다. 타협점 완벽한 코드는 못 짠다. 인정한다. 하지만 아예 안 짤 순 없다. 최근에 규칙을 정했다.주 2회, 2시간씩 "개발 시간" 캘린더 블락 그 시간엔 회의 안 잡음 (임원 부르면 어쩔 수 없지만) 작은 거라도 직접 구현 (버그 수정, 리팩토링) 한 달에 최소 5개 실제 코드 커밋완벽하진 않다. 10년 전처럼은 못 한다. 그래도 안 하는 것보단 낫다. 어제 작은 기능 하나 구현했다. 로그 포맷 개선. 2시간 걸렸다. PR 올렸다. 후배들이 리뷰했다. "오 깔끔하네요!" "역시 파트장님" 기분이 좋았다. 10년 전만큼은 아니지만, 그래도 좋았다. 레거시와 향수 저녁 9시. 회사 불 껐다. 10년 전 코드 파일을 닫았다. "그때가 좋았지." 사실이다. 그때가 더 좋았다. 하지만 그때로는 못 돌아간다. 지금의 나는 관리도 하고 개발도 하는 사람이다. 둘 다 완벽하게는 못 한다. 타협하면서 산다. 그게 45살 파트장의 현실이다. 집에 가는 길. 핸드폰을 봤다. 김 대리가 PR 올렸다. "결제 모듈 v3.0 - 리팩토링 완료" 코드를 열어봤다. 깔끔했다. 내가 조언한 대로. 아니, 더 잘했다. "Approve" 눌렀다. 댓글 달았다. "Good job. 10년 전 내 코드보다 낫네요." 김 대리가 답했다. "ㅋㅋㅋ 과찬이십니다. 파트장님 코드 보고 배웠습니다." 웃었다. 내 코드는 예전만 못하다. 하지만 내 지식은 후배들에게 간다. 그것도 나쁘지 않다.옛날 코드는 박물관에 두고, 오늘 할 수 있는 거라도 한다.