Showing Posts From

Pr

PR 리뷰 요청이 계속 들어오는 금요일 오후의 진실

PR 리뷰 요청이 계속 들어오는 금요일 오후의 진실

PR 리뷰 요청이 계속 들어오는 금요일 오후의 진실 금요일 2시 슬랙 알림 소리가 울렸다. 뭔가 불길하다. "김개발님, PR 올렸습니다! 봐주세요~" 시계를 본다. 금요일 오후 2시 17분. 배포는 5시까지다. PR 링크를 클릭했다. 변경된 파일 23개. 추가 라인 +847, 삭제 라인 -124. 한숨이 나왔다. 이게 뭔데 금요일 2시에 올리는 건데.제목을 읽는다. "feat: 사용자 권한 체크 로직 개선". 개선이라는 단어가 들어가면 십중팔구 리팩토링이다. 그리고 리팩토링은 십중팔구 기존 로직을 다 뜯어고친 것이다. 커밋 히스토리를 본다. 커밋 하나. "권한 체크 수정". 설명이 전혀 없다. "이거 왜 바꾼 거예요?" 답장이 왔다. "기존 코드가 복잡해서요." 복잡하다는 건 네가 이해 못 했다는 얘기구나. 첫 번째 리뷰 코드를 읽기 시작했다. public boolean hasPermission(User user, Resource resource) { return user.getRoles().stream() .filter(role -> role.isActive()) .anyMatch(role -> resource.getAllowedRoles().contains(role)); }기존 코드다. 그렇게 복잡하지 않다. public boolean hasPermission(User user, Resource resource) { if (user == null) return false; if (resource == null) return false; List<Role> userRoles = user.getRoles(); if (userRoles == null || userRoles.isEmpty()) return false; List<Role> allowedRoles = resource.getAllowedRoles(); if (allowedRoles == null || allowedRoles.isEmpty()) return false; for (Role userRole : userRoles) { if (!userRole.isActive()) continue; if (allowedRoles.contains(userRole)) return true; } return false; }바뀐 코드다. 3배로 길어졌다. null 체크를 추가했다고 한다. 방어 코드래. 문제는 user랑 resource가 이미 @NonNull 어노테이션이 붙어 있다는 거다. "user랑 resource는 null일 수 없는데요." "혹시 모르잖아요." 혹시 모르면 에러가 터져야 정상이다. null을 숨기면 나중에 더 이상한 데서 터진다.코멘트를 달기 시작했다. "1. null 체크 불필요 (이미 @NonNull)" "2. Stream API 제거한 이유?" "3. 테스트 케이스 추가 필요" 그리고 핵심 질문. "4. 기존 로직이랑 뭐가 달라진 건가요?" 사실 아무것도 안 달라졌다. 그냥 코드 스타일만 바꿨다. 두 번째 PR 리뷰를 마치고 자리에서 일어섰다. 커피가 필요하다. 자리로 돌아오는데 슬랙이 또 울렸다. "개발님, PR 올렸어요!" 또다른 후배다. 시계를 본다. 3시 12분. 링크를 클릭했다. 변경 파일 7개. +342, -89. 제목이 "fix: 버그 수정"이다. 어떤 버그인지 안 써놨다. 커밋 메시지를 본다. "버그 수정", "오류 해결", "코드 정리". 도대체 뭘 고친 건지 알 수가 없다. PR 설명란을 본다. 비어있다. "어떤 버그 수정한 거예요?" "아 네트워크 에러요." 어떤 네트워크 에러인데. "어떤 상황에서 발생하는 에러죠?" "음... 가끔요." 가끔이 제일 무섭다. 금요일의 법칙 금요일 오후에는 법칙이 있다.큰 PR은 금요일 2시 이후에 온다. 설명은 없고 "급해요"만 있다. 테스트는 "로컬에서 돌려봤어요"가 전부다. "월요일에 보면 안 될까요?"는 통하지 않는다.왜냐고? "월요일에 배포해야 해서요." 그걸 지금 말하나.세 번째 알림이 왔다. "개발님 이것도 봐주세요 ㅠㅠ" 변경 파일 31개. 시계를 본다. 4시 03분. 배포까지 한 시간. 커피를 한 모금 마셨다. 식었다. 리뷰 전쟁 세 개의 PR을 번갈아 본다. 첫 번째 PR. 후배가 수정을 올렸다. null 체크는 지웠는데 테스트는 안 올렸다. "테스트요?" "아 깜빡했어요. 지금 올릴게요!" 두 번째 PR. 코드를 읽어봤는데 버그 수정이 아니라 기능 변경이다. "이거 기획 확인은 했어요?" "...해야 하나요?" 당연하지. 세 번째 PR. 코드는 괜찮은데 마이그레이션 스크립트가 없다. "DB 스키마 바꿨는데 마이그레이션은요?" "아 그거요. 제가 직접 실행하려고요." 금요일 저녁에 수동으로 SQL 돌린다고? "롤백 계획은?" "...?" 없구나. 4시 47분 배포까지 13분 남았다. 첫 번째 PR은 테스트 추가해서 approve 했다. 두 번째 PR은 기획 확인하고 월요일에 다시 올리래. 세 번째 PR은 마이그레이션 스크립트 만들고 있다. 슬랙에서 CTO가 물었다. "오늘 배포 건들 뭐죠?" 목록을 보낸다. "셋 다 급한가요?" 하나도 안 급하다. 그런데 후배들은 급하다고 한다. "첫 번째 것만 하죠." 후배한테 말한다. "나머지 두 개는 월요일에." "네... 죄송해요." 죄송하면 다음 주에도 금요일 2시에 올릴 거 아니야. 배포가 시작됐다. 5시 03분. 배포 후 배포는 무사히 끝났다. 로그를 확인한다. 에러 없다. 모니터링 대시보드를 본다. 정상이다. 후배한테 메시지를 보낸다. "배포 완료. 다음엔 미리 올려요." "네! 감사합니다!" 감사는 무슨. 내 금요일 저녁을 돌려달라고. 자리에서 일어났다. 6시 15분. 다른 팀원들은 벌써 퇴근했다. 사무실이 조용하다. 모니터를 끈다. 가방을 챙긴다. 엘리베이터를 기다리는데 핸드폰이 울렸다. 슬랙 알림. "개발님, 내일 출근하시나요? 급한 게 생겼어요..." 토요일에는 안 한다. 알림을 끈다. 월요일이 되면 월요일 아침에 출근한다. 후배가 물어본다. "저번 주 금요일 PR 어땠어요?" "금요일 오후엔 올리지 마." "아 네... 근데 이번 주도 금요일에 배포인데요." 그럼 목요일에 올려. "목요일은 회의가 많아서요." 그럼 수요일에. "수요일은 개발하기 바빠서요." 그럼 화요일에. "화요일은... 생각을 정리하는 날이라서요." 결국 금요일 오후에 올린다는 얘기구나. 커피를 마신다. 아아. 차갑다. 다음 금요일도 똑같을 거다. 후배들은 금요일 2시에 PR을 올릴 거고. 나는 그걸 리뷰할 거고. 배포는 6시 넘어서 끝날 거고. 주말은 짧아질 거다. 그게 시니어 개발자의 금요일이다.다음 금요일에도 슬랙 알림은 2시에 울릴 거다. 그리고 나는 또 리뷰할 거다. 뭐.

PR 리뷰하다가 나는 언제 내 일을 하나요?

PR 리뷰하다가 나는 언제 내 일을 하나요?

PR 리뷰하다가 나는 언제 내 일을 하나요? 오늘도 오전 10시가 되기 전에 슬랙에 네 개의 PR 링크가 쌓였다. "개발님, 이거 좀 봐주실래요?" 심장이 철렁한다. 매번 이 문구를 볼 때마다 나는 내가 뭘 하고 있었는지 잊는다. 아, 그래. 나도 해야 할 일이 있었지. 릴리즈 전에 끝내야 할 API 최적화 작업. 어제도 못 했고, 그 앞날도 못 했고, 재작년 같은 계절에도 못 했던 그것. 테크 리드지만 직책은 없는 이상한 위치 사실 지금 이 상황이 되기까지는 논리가 명확했다. 7년을 이 회사에서 일했으니까, 후배들 PR은 내가 봐야지. 아키텍처 결정? 내가 한다. 신입 온보딩? 내가 한다. 레거시 코드 리팩토링 방향? 당연히 내가 한다. 어느 순간부터 나는 세미 테크 리드가 되어 있었다. 세미가 아니라 완전 테크 리드인데 직책은 없다. 연봉은 6500만원. 동기들은 이미 7000을 넘었다. 관리자가 면개 때 "개발 실력도 좋고 후배들도 잘 챙기시니까 기여도가 크신 거 같아요"라고 했을 때 나는 웃음이 나올 뻔했다. 기여도가 크다고? 기여는 자신의 일을 하는 건데, 나는 지난 3개월간 내 일을 얼마나 끝냈는가.아침 9시부터 체크인까지 5시간의 PR 리뷰 오늘 타임라인을 그려보자.09:30 - 첫 번째 커피 + 첫 번째 PR 리뷰 시작 09:45 - DB 쿼리 부분에서 N+1 이슈 발견, 코멘트 작성 10:15 - 두 번째 PR 도착, 인증 로직 검토 10:50 - 후배 A가 "개발님, 제 코멘트 봤어요?" 11:20 - 세 번째 커피 + 세 번째 PR (Redis 캐시 레이어) 12:30 - 점심 시간, 하지만 마음은 불안함 14:00 - 돌아와서 네 번째 PR 15:30 - "어? 벌써 이 시간?" (내 일은 여전히 0% 진행)12시간 근무 중 진짜 내 업무에 손을 댄 시간은 1시간 미만이다. 그 1시간도 불완전한 포커스다. 체크인 5분 전에 마지막 PR 코멘트를 남기는 나를 보면, 나는 이 회사의 미식축구 쿼터백처럼 느껴진다. 모든 플레이를 지휘하지만, 정작 터치다운은 못 하는 그런 역할. 기획자는 여전히 "간단하겠죠?" 어제 회의에서 기획자가 했던 말. "이거 캐시 레이어 한 번 쉬우신데 이주말까지 가능할까요?" 내가 그 시간에 뭘 할지는 이미 예정되어 있다. 토요일 오후 2시부터 6시까지 PR 리뷰. 왜냐하면 월요일 배포가 잡혀있으니까. 그리고 그 PR들은 당연히 내가 봐야 한다. 나는 "네, 되겠습니다"라고 했다. 뭐, 또 못할 건가. 못해본 게 어디 있나.슬랙 알림이 가져온 심리적 불안정 가장 힘든 건 타이밍이다. 내가 드디어 우리 서비스의 응답 속도 분석에 집중하려던 순간, 슬랙 알림음이 울린다. 후배A: @개발님 이거 어떻게 생각하세요? 후배B: 개발님 한 번 봐주시겠어요? 기획: 개발님 이거 기술적으로 문제 없나요?심장이 철렁한다. 그리고 나는 우리 서비스 응답 속도 문제를 다시 미룬다. 퇴근 후에도 슬랙을 켜지 못한다. 알림이 울릴까봐. 주말 오전 11시에 일어나려고 해도, 핸드폰을 보는 순간 미해결 PR들이 시야에 들어온다. "월요일에는 반드시 돌려야지"라는 의무감과 함께. 내가 원했던 건 이게 아니었다. 단지 좋은 개발자가 되고 싶었을 뿐이다. 그런데 좋은 개발자라는 평가가 내게 준 건 더 많은 시간 투자, 더 많은 책임감, 그리고 정작 성장할 기회의 박탈이었다.그래도 월요일 아침은 온다 내일은 또 어떤 PR들이 기다리고 있을까. 지금 생각해보니 내가 정말 해야 할 일 - 우리 시스템의 구조적 개선, 신입들을 진정한 시니어로 만드는 것, 내가 없어도 팀이 돌아가게 하는 것 - 이런 건 PR 리뷰 때문에 자꾸자꾸 뒤로 밀린다. 아이러니하게도, 내가 더 열심히 리뷰할수록 후배들이 성장할 기회도 줄어든다. 좋은 코드에 대해 "왜?"라고 물어보고 토론할 시간이 줄어들거든. 이번 주는 다르게 해보려고 한다. 월요일 아침에 내 일을 먼저 진행하고, PR들은... 음, 역시 못할 것 같다. 아, 그거요.테크 리드는 개발자인데, 개발하는 시간이 가장 적다는 게 아이러니다.