Showing Posts From

요청이

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시에 울릴 거다. 그리고 나는 또 리뷰할 거다. 뭐.