Showing Posts From

신호

번아웃의 신호: 커밋 메시지가 의미를 잃었다

번아웃의 신호: 커밋 메시지가 의미를 잃었다

예전엔 잘 썼다 입사 첫날 커밋 메시지다. feat: 로그인 API 구현 - JWT 토큰 기반 인증 시스템 - refresh token 자동 갱신 로직 추가 - 에러 핸들링 미들웨어 적용자랑스러웠다. 컨벤션도 지켰다. feat, fix, refactor 다 구분했다. 나중에 내가 봐도, 다른 사람이 봐도 알 수 있게. 프로였다. 3개월 전 커밋이다. update뭘 update 했는지 나도 모른다. 지금 git diff 쳐봐도 파일이 12개다. 프론트도 있고 백엔드도 있고 DB 스키마도 바뀌었다. 한 커밋에 다 때려 넣었다. 어제 커밋이다. asdf진짜 asdf다. 손가락이 자동으로 친 거다. 새벽 3시였다. 장애 고치고 배포하는데 메시지 생각할 여유가 없었다. 그냥 push 하면 됐다. 커밋 로그가 내 정신 상태를 기록하고 있다.3개월 차까지는 괜찮았다 입사하고 첫 프로젝트. 사용자 인증 시스템 만들었다. 혼자지만 괜찮았다. 시간도 충분했다. 커밋 하나에 30분씩 걸렸다. 코드 정리하고, 테스트 돌리고, 메시지 쓰고. 브랜치도 제대로 땄다. feature/user-authentication, fix/login-validation. 깔끔했다. 대표님이 좋아하셨다. "개발 프로세스가 체계적이네요." 뿌듯했다. 그때는 업무가 하나였다. 사용자 시스템. 집중할 수 있었다. 오전에 기획 보고, 오후에 개발하고, 저녁에 배포했다. 퇴근은 7시. 주말엔 클린 코드 책 읽었다. 커밋 메시지 작성법도 공부했다. "좋은 커밋 메시지는 미래의 나를 위한 선물이다." 맞는 말이었다. 리팩토링할 때 예전 커밋 보면 무슨 의도였는지 바로 알 수 있었다. 이게 진짜 개발이지, 생각했다. 6개월 차부터 달라졌다. 업무가 쌓이면서 프로젝트가 3개 됐다. 메인 서비스, 어드민 페이지, 외부 API 연동. 다 나 혼자. 기획자가 추가됐다. 좋은 거 아닌가 했다. 아니었다. 요청사항이 3배가 됐다. "이거 급한데요", "내일까지 가능할까요", "간단한 건데". 간단한 거 없었다. 프론트 고치면 백엔드도 고쳐야 했다. API 바꾸면 DB도 바꿔야 했다. 한 기능에 5개 파일 건드렸다. 커밋 하나에 여러 작업이 섞였다. 원래는 안 그래야 한다는 거 안다. 한 커밋엔 하나의 논리적 변경만. 원칙은 알았다. 시간이 없었다. 아침에 시작한 작업을 저녁에 커밋했다. 중간에 긴급 버그 3개 고쳤다. 다 한 커밋에 들어갔다. fix: 로그인 버그 수정 및 대시보드 레이아웃 개선 및 API 응답 속도 개선이게 무슨 커밋이냐. 3개를 한 줄에 썼다. 나도 알았다. 틀렸다는 거. 근데 브랜치 3개 만들고 커밋 나눌 시간이 없었다. 대표님이 "오늘 배포 가능하죠?" 하셨다. 가능했다. 커밋 메시지 대충 쓰면.새벽 2시의 커밋들 장애는 항상 새벽에 터진다. 법칙이다. 슬랙 알림. 오전 2시 17분. 결제 API 500 에러. 일어났다. 노트북 켰다. 로그 확인했다. DB 커넥션 풀 다 찼다. 재시작했다. 임시 조치였다. 근본 원인 찾았다. 커넥션 릴리즈 안 하는 코드 있었다. 고쳤다. 테스트는 못 했다. 새벽 3시였다. 배포했다. 커밋 메시지. fix그냥 fix. 뭘 고쳤는지 안 썼다. 졸렸다. 다시 자고 싶었다. push 하고 침대 갔다. 아침에 일어나서 봤다. 어제 내가 뭘 고쳤더라. 커밋 메시지 봤다. fix. 도움 안 됐다. diff 열어서 코드 봤다. 아, DB 커넥션. 기억났다. "미래의 나를 위한 선물" 어쩌고 했던 책 생각났다. 미안하다, 미래의 나. 새벽 3시의 나는 선물 포장할 여유가 없었다. 이런 커밋이 쌓였다. fix bug update code temp fix quick fix 급한 거 수정 ㅁㄴㅇㄹ마지막 건 자판 잘못 친 거다. 한글 모드였다. 다시 치기 귀찮았다. 그냥 푸시했다. asdf의 등장 처음 asdf 친 날 기억난다. 정확히 기억난다. 3주 전 목요일. 그날 대표님이 "내일 투자 미팅인데 데모 보여줘야 해요"라고 하셨다. 오후 4시에. 데모는 없었다. 만들어야 했다. 프론트 새로 짰다. 기존 거 쓸 수 없었다. 디자인도 없었다. 내가 대충 했다. 백엔드는 기존 API 썼는데 응답 형식이 달랐다. 어댑터 레이어 만들었다. 밤 11시. 70% 됐다. 계속했다. 새벽 1시. 90% 됐다. 거의 다 됐다. 새벽 2시. 작동했다. 배포해야 했다. Docker 빌드. 5분 걸렸다. 기다렸다. AWS 업로드. 3분 더. 기다렸다. 배포 스크립트 돌렸다. 에러. 환경변수 빠졌다. 추가했다. 다시 배포. 성공. 테스트했다. 작동했다. 끝났다. 새벽 2시 40분. 커밋 안 했다는 거 깨달았다. 로컬에 변경사항 수백 개. 스테이징도 안 했다. git add . 쳤다. 다 올라갔다. 커밋 메시지 쳐야 했다. 머리가 안 돌아갔다. 뭐라고 써야 하지. "투자 미팅용 데모 페이지 구현"? 길었다. "데모 구현"? 뭔가 부족했다. 생각이 안 났다. 손가락이 자동으로 asdf 쳤다. 엔터. 푸시. 끝. 침대 갔다. 다음 날 일어나서 커밋 로그 봤다. asdf. 웃겼다. 웃긴데 웃기지 않았다. 내가 이렇게까지 됐구나. 그 뒤로 asdf가 2번 더 나왔다.내 정신 상태의 기록 커밋 히스토리가 그래프다. 내 멘탈 그래프. 입사 초기. 완벽한 메시지들. 올라가는 그래프. 의욕 넘쳤다. 잘하고 싶었다. 프로처럼 일하고 싶었다. 3개월 차. 메시지 길이 줄어들기 시작. 그래프 평평해짐. 바쁘다는 핑계 댔다. 아직 괜찮았다. 6개월 차. "fix bug", "update" 같은 것들. 그래프 내려가기 시작. 시간 없다고 했다. 진짜로 없었다. 지금. "asdf", "ㅁㄴㅇㄹ". 그래프 바닥. 커밋 메시지 신경 쓸 여유가 없다. 코드가 돌아가면 됐다. 기록 같은 건 사치였다. 예전엔 커밋 로그 보는 게 자랑스러웠다. 내 작업의 흔적. 깔끔한 히스토리. 나중에 누가 봐도 이해할 수 있는 기록. 지금은 보기 싫다. 내 추락이 다 기록돼 있다. 1년 전 커밋이랑 지금 커밋 비교하면 웃긴다. 웃긴데 슬프다. 신입이 들어오면 이거 보겠지. "이 사람 왜 이렇게 커밋 메시지를 대충 써요?" 할 거다. 변명할 수 없다. "바빠서요"라고 할까. 맞는 말이다. 근데 변명처럼 들린다. 실제로 변명이긴 하다. 채용 공고에 쓸 수 없는 것들 우리 회사 채용 공고 봤다. 내가 썼다. 대표님이 "개발자니까 개발자가 제일 잘 알지"라고 하셨다. 우대사항: - 클린 코드 작성 능력 - Git 활용 능력 - 코드 리뷰 경험웃긴다. 우리 회사 와서 할 수 있는 게 하나도 없다. 클린 코드? 여기선 작동하는 코드가 최고다. 리팩토링할 시간 없다. 기술 부채? 나중 문제다. 지금 장애 안 나면 됐다. Git 활용? git add . 하고 git commit -m "asdf" 하고 git push. 이게 다다. 브랜치? main 하나. PR? 나 혼자인데 누구한테 리뷰 받나. 코드 리뷰? 혼자 일하는데 리뷰가 있나. 내 코드를 내가 리뷰한다. "이거 맞나?" 물어본다. 대답 없다. 그냥 머지한다. 지원자가 와서 "커밋 컨벤션 어떻게 되나요?" 물으면 뭐라고 하지. "없습니다. 각자 알아서 씁니다." 근데 각자가 나 혼자다. "제가 아무렇게나 씁니다"가 정확하다. "코드 리뷰 프로세스는요?" 물으면. "없습니다." "그럼 QA는요?" "제가 합니다." "테스트 코드는요?" "...시간 나면 씁니다." 안 쓴다는 뜻이다. 채용 공고는 거짓말이다. 우리가 원하는 사람이 아니라 우리가 되고 싶은 사람을 쓴다. 현실은 다르다. 실제 채용 공고에 써야 하는 것들. 필수사항: - 혼자 일하는 거 익숙하신 분 - 커밋 메시지 신경 안 쓰시는 분 - 새벽 3시 배포 가능하신 분 - asdf 이해하시는 분이건 못 쓴다. 아무도 안 온다. 리팩토링하고 싶다 가끔 시간 날 때 옛날 커밋 본다. 6개월 전 거. 제대로 썼던 것들. refactor: 사용자 인증 로직 모듈화 - 인증 미들웨어를 별도 파일로 분리 - JWT 검증 로직 재사용 가능하도록 함수화 - 에러 메시지 일관성 있게 수정이렇게 쓰고 싶다. 지금도. 못 쓴다. 리팩토링하고 싶다. 코드도, 커밋 히스토리도. 다 지우고 처음부터 다시 쓰고 싶다. 제대로 된 구조로. 제대로 된 메시지로. 시간 없다. 신규 기능 개발해야 한다. 버그 고쳐야 한다. 장애 대응해야 한다. 리팩토링은 우선순위 꼴찌다. 대표님한테 말씀드렸다. "기술 부채 정리 시간 좀 주세요." "얼마나 걸려요?" "2주요." "2주 동안 신규 개발 멈춰요?" "...네." "그럼 안 되죠." 끝이다. 논의 끝. 기술 부채는 계속 쌓인다. 커밋 메시지는 계속 대충 쓴다. 악순환이다. 때때로 꿈꾼다. 출근해서 오늘은 리팩토링만 한다. 코드 정리한다. 테스트 작성한다. 커밋 메시지 제대로 쓴다. 브랜치 전략 세운다. 현실은 다르다. 출근하면 슬랙 메시지 30개. "이거 급한데요" 5개. 장애 알림 2개. 리팩토링 시간 없다. 점심시간에 클린 코드 책 펼친다. 2페이지 읽는다. 슬랙 울린다. 책 덮는다. 동기들은 달랐다 대학 동기 모임 갔다. 한 달 전. 다들 개발자 됐다. 친구 A. 네이버. "우리는 코드 리뷰 필수야. PR 올리면 2명 이상 승인받아야 머지돼. 커밋 메시지도 컨벤션 있어서 지키지 않으면 CI에서 막혀." 부러웠다. 시스템이 있다는 게. 친구 B. 카카오. "우리 팀은 페어 프로그래밍해. 한 명이 코딩하면 옆에서 리뷰하면서. 커밋도 같이 작성해." 좋겠다. 혼자 안 해도 되는 게. 친구 C. 쿠팡. "테크 리드가 코드 품질 엄청 보더라. 한 번은 커밋 메시지가 불명확하다고 다시 쓰라고 했어. 짜증 났는데 나중에 보니까 도움 되더라." 내가 말했다. "난 혼자 개발해서 그런 거 없어." 다들 놀랐다. "혼자? 진짜 혼자?" "응. 프론트부터 백엔드, 인프라까지 다." 감탄했다. "대박. 풀스택이네. 배울 게 많겠다." 웃었다. 배우는 게 아니다. 어쩔 수 없이 하는 거다. 집 가는 길에 생각했다. 저 친구들은 성장하고 있다. 리뷰받고, 피드백받고, 제대로 된 프로세스 배우고. 나는? 기술 스택은 넓어졌다. 깊이는 없다. 다 대충 한다. 제대로 하는 게 없다. 커밋 메시지처럼. 새로 온 인턴에게 지난주에 인턴 왔다. 대학생. 방학 동안 경험 쌓으러. 첫날 코드 리뷰 부탁했다. "커밋 로그 좀 볼게요." 봤다. 표정 굳었다. "이게... 다 하신 거예요?" "응." "커밋 메시지가..." 말 끝까지 안 했다. 안 해도 안다. 엉망이다. "바빠서 그래. 원래는 이러면 안 돼." 변명했다. 인턴이 물었다. "그럼 컨벤션 어떻게 되나요? 저도 맞춰서 쓸게요." 대답 못 했다. 컨벤션 없다. "음... 그냥 알아볼 수 있게만 써." 이게 무슨 가이드냐. 인턴 첫 커밋 봤다. feat: 관리자 대시보드 차트 컴포넌트 추가 - Chart.js 라이브러리 적용 - 월별 사용자 증가 추이 시각화 - 반응형 레이아웃 적용완벽했다. 부끄러웠다. 내 최근 커밋. asdf인턴이 나한테 배우러 왔다. 내가 가르쳐줄 게 없다. 나쁜 습관만 가르쳐주게 생겼다. "선배님, 커밋 메시지 왜 중요한가요?" 물었다. "나중에 보면... 뭘 했는지 알 수 있지." 말하면서도 설득력 없었다. 내 커밋 보면 모른다. 나도 모른다. 인턴이 2주 동안 제대로 된 커밋 썼다. 나도 따라 쓰려고 했다. 3일 갔다. 급한 일 생겼다. 다시 "fix", "update". 인턴 마지막 날. "많이 배웠어요." 뭘 배웠을까. 혼자 일하는 법? 커밋 메시지 대충 쓰는 법? 나쁜 것만 배웠을 것 같다. 이직 준비하면서 이직하려고 한다. 결심했다. 이대로는 안 된다. 이력서 썼다. GitHub 링크 넣어야 한다. 고민했다. 커밋 로그 보이는 게. 부끄럽다. Private 레포로 바꿀까 생각했다. 근데 그럼 포트폴리오가 없다. 어쩔 수 없다. 공개한다. 면접 준비했다. 예상 질문 적었다. "Git 워크플로우 어떻게 하시나요?"답: 혼자 main 브랜치에 푸시합니다."커밋 컨벤션은요?"답: 없습니다. asdf 같은 것도 있습니다."코드 리뷰는 어떻게 하시나요?"답: 혼자 일해서 안 합니다.전부 감점이다. 옛날 프로젝트 파기 시작했다. 사이드 프로젝트. 제대로 할 거다. 커밋 메시지 하나하나 신경 써서. 시작했다. React 프로젝트. 첫 커밋. chore: 프로젝트 초기 설정 - CRA로 React 프로젝트 생성 - ESLint, Prettier 설정 - 절대 경로 import 설정기분 좋았다. 이거다. 이렇게 쓰는 거다. 예전 감각 돌아왔다. 2주 했다. 커밋 10개. 다 제대로 썼다. 뿌듯했다. 면접 때 보여줄 수 있겠다. 근데 본업 커밋은 여전히 "fix", "asdf". 분리된 느낌이었다. 사이드는 완벽, 본업은 난장판. 이게 정상인가. 아니다. 알고 있다. 버릴 수 없는 이유 퇴사 고민한다. 맨날 한다. 근데 못 한다. 이유는 간단하다. 나 없으면 여기 돌아가지 않는다. 대표님 의존도 100%. 코드 아는 사람 없다. 서버 구조 아는 사람 없다. DB 스키마 아는 사람 없다. 다 내 머릿속에만 있다. 문서화? 해야 한다는 거 안다. 시간 없다. 개발하기도 바쁘다. 동료가 없다는 게 이런 거다. 대체 불가능해진다. 자랑이 아니다. 올가미다. 퇴사 상상한다. 인수인계 어떻게 하지. 2주로 되나. 한 달 줘도 모자랄 것 같다. 코드 설명해야 한다. 근데 커밋 로그 보면 이해 안 된다. 코드 봐도 이해 안 된다. 주석 없다. 내 머릿속에만 있다. "이 부분은 왜 이렇게 했어요?" 물으면 답해야 한다. "급해서요." 이게 답이다. 전부 그렇다. 책임감 때문에 못 나간다. 여기 나가면 서비스 터진다. 100% 터진다. 새로 온 사람이 파악하는 동안 장애 몇 번 날 거다. 그게 내 책임은 아니다. 알고 있다. 혼자 개발하게 만든 회사 책임이다. 근데 죄책감 든다. 이상하게. 언젠가는 정리할 거다 꿈꾼다. 언젠가 시간 나면. 커밋 히스토리 다시 쓰기. git rebase 로. 메시지 전부 수정. "asdf" 없애기. 의미 있는 메시지로 바꾸기. 브랜치 전략 세우기. feature, develop, main. 제대로 된 워크플로우. PR 만들고 머지하기. 혼자지만. 문서 작성하기. README 제대로. 아키텍처 설명. 왜 이렇게 만들었는지. 다음 사람이 보면 이해할 수 있게. 테스트 코드 작성하기. 유닛 테스트. 통합 테스트. 커버리지 80% 이상. 리팩토링할 때 안심하고 할 수 있게. 리팩토링하기. 기술 부채 청산. 스파게티 코드 정리. 모듈화. 클린 아키텍처. 자랑스러운 코드베이스. 언젠가. 시간 나면. 할 거다. 근데 언제? 모른다. 지금은 아니다. 내일도 아니다. 다음 주도 아니다. 신규 기능 개발해야 한다. 버그 고쳐야 한다. 언젠가는 영원히 오지 않는다. 안다. 근데 위안 삼는다. 언젠가는, 하면서. 커밋 로그는 계속 쌓인다. 의미 없는 메시지들로. 내 추락의 기록이. 신호였다 커밋 메시지는 신호였다. 처음 "update"라고만 쓴 날. 신호였다. 바쁘다는 핑계. 진짜 문제는 시간이 아니었다. 여유가 없었던 거다. 정신적 여유. 처음 "fix"라고만 쓴 날. 신호였다. 뭘 고쳤는지 안 썼다. 귀찮아서가 아니다. 생각할 힘이 없