임원 승진과 개발의 갈림길에서

임원 승진과 개발의 갈림길에서

1억 원의 무게 알람이 울린다. 6시 30분. 일어나지 않는다. 침대에서 천장을 본다. 어제 회의 메모가 자꾸만 떠오른다. HR 담당자가 던진 한마디. "박 이사, 임원 승진 검토 대상입니다. 축하합니다." 축하한다는 게 아니라 선고처럼 들렸다. 1억 2천만 원. 연봉표를 본 건 며칠 전이다. 임원 수준 연봉 레인지. 손가락으로 꾹 눌렀던 숫자다. 그냥 숫자다.돈이 필요하긴 하다. 아들 대학 등록금, 아내가 언급한 부모님 간병 비용, 이 집 대출금. 계산을 하면 손가락이 모자란다. 1억 원대면 뭐라도 숨 쉴 수 있다. 그런데. 그런데 왜 이렇게 싫지. 컴퓨터는 나를 아직도 필요로 할까 회사 온다. 9시 정각. 메일 함을 본다. 62개. 밤샘 정산이다. 슬랙을 본다. 알림이 33개. "박 파트장님 코드리뷰 좀요?" 2년 전이면 20분이면 끝냈을 코드다. 지금은 30분이 걸린다. 신입이 쓴 코드는 맞는데, 뭔가 최신 패턴이 아닌 것 같은데, 확신이 없다. 검색을 한다. 답을 찾는다. 댓글을 단다. "좋습니다. 진행하세요." 이게 내가 할 수 있는 전부인가. 개발 팀장 되고서는 진짜 코드를 못 짰다. 그 전에는 매일 손가락이 움직였다. 새벽 1시, 2시까지 IDE에 박혀서 로직을 짰다. 버그를 찾았다. 리팩토링 했다. 그게 재미였다. 요즘은 뭐하나. 회의 5개. 11시부터 17시까지 끊이지 않는 화상 회의. 팀 상황 보고, 프로젝트 진행 상황, 리스크 관리, 상위 부서 회의, 인사 평가 회의. 코드는 6시 이후에 만진다. 저녁 6시다. 근데 그때 되면 이미 피곤하다. 6시간 회의를 하고 나면 뇌가 상한다. IDE를 켜도 손가락이 안 움직인다. "아, 이 버그 이렇게 고치면 되겠네." 그 생각까지만 한다. 그리고 피곤하니까 내일 하지 뭐 하고 닫는다. 내일은 또 회의다.그러다가 30대 후배 개발자를 본다. 하하하고 웃는다. 재미있는 기술 얘기하면서 눈이 반짝인다. 최신 JavaScript 프레임워크 얘기한다. AI로 코드 어시스턴트 쓴다고 한다. 그놈들은 뭔가 굴렀다. 진짜 개발하는 거다. 내가 임원이 되면 더 멀어질 거다. 정말 임원이 되면. 선택은 아무도 안 했는데 내 것이 됐다 커피를 마신다. 이미 3잔째다. 옆 자리 40대 임원 들을 본다. 김 이사, 이 이사. 저들 다 개발자에서 올라온 놈들이다. "김 이사, 코딩 요즘도 하세요?" "뭐, 가끔 스트레스 받을 때. 근데 시간이..." 그게 다다. 다들 "시간이..." 하고 끝낸다. 저들이 실제 개발하는 건 한 달에 며칠. 그나마도 메인 프로젝트가 아니라 취미처럼 개인 프로젝트다. 회사 시간에는 100% 관리다. 예산, 리스크, 인사, 정치. 정치. 그래. 그 단어가 싫다. 임원이 되면 팀장처럼 "저한테 결정권 없어요" 할 수 없다. 결정을 내려야 한다. 기술 선택, 팀 구성, 인사 평가, 보너스 책정. 그리고 그 결정을 위에 정당화해야 한다. 옆 팀과의 정치도 생긴다. 요즘 후배들 보면 칼 퇴근한다. 18시면 뚝 끝낸다. 노트북 덮고 간다. 그들 보면 한편으로는 부럽다. 다른 한편으로는 '저 정도 실력으로 뭘...'이라는 생각이 스친다. 근데 바로 생각을 지운다. 그런 거 하면 꼰대가 되니까. 대신 속으로만 생각한다. '저들도 내 나이 되면 알겠지.' 그리고 자책한다. '그래, 너는 저 친구들 앞으로 나간 거고, 그래서 대가를 치르는 거겠지.' 임원 위치는 원하지 않았는데 왔다. 성과를 내니까. 팀 성과가 좋으니까. 후배들을 잘 관리했으니까. 그 모든 게 복이 돼서 나를 이곳까지 몰았다.아들의 질문이 자꾸 떠오른다 집에 가는 버스에서 핸드폰을 본다. 아들이 카톡을 했다. "아빠 집 와. 코딩 좀 배워줘." 중1이다. 학교 동아리에서 Python을 배운다고 했다. 아빠를 찾았다. 집에 가서 노트북을 켠다. 아들이 화면을 본다. "와, 이게 뭐에요?" "Java죠. 아빠가 20년을 이 언어로 먹고 살았어." "요즘은 이걸 안 쓰나요?" "쓰지. 하지만..." 말을 흐린다. 요즘은 Python도 있고, JavaScript도 있고, Go도 있고, Rust도 있다. Java는 '구식'이 아니지만 '새롭지는' 않다. 아들이 물어본다. "아빠는 지금도 코딩을 해요?" "그럼. 매일." 거짓이다. 거짓이 아니기도 하다. 코드리뷰는 한다. 하지만 그건 코딩이 아니다. 아들은 그 차이를 모른다. 그건 좋다. 아직은. 내가 임원이 되면, 아들이 대학 때쯤 되면, 진짜로 코딩을 못 한다고 해도 된다. "아빠는 관리를 해" 하면서. 5년, 10년 지나면 기술이 얼마나 바뀔까. 그땐 정말 못 할 거다. 프로그래밍 언어도, 패러다임도, 생각하는 방식도 다를 거다. 그리고 나는? 그냥 '예전에 개발자였어'라고 했던 사람이 될 거다. 이사라는 직함의 무게 HR과의 면담이 있었다. 정식 승진 제안. "축하합니다. 경의를 표합니다." 뭔가 장례식 인사처럼 들렸다. 조건은 명확했다. 임원이 되면 개발 팀에서는 나온다. 전략팀이나 사업팀으로 간다. 관리직의 관리 경력을 쌓아야 한다고 했다. "개발은?" "여유가 생기면 하실 수 있죠. 하지만 경영진은 경영에 집중해야 합니다." 경영에 집중. 정확한 표현이다. 그게 일이니까. 코드는 취미가 되고, 경영이 직업이 되는 거다. 반대로 남을 수도 있다. 파트장 자리에 남는 거다. 이미 반 임원처럼 일하고 있으니까, 정식으로 파트장 심화 과정을 듣는 거다. 기술 리더십이라고 부르는. 근데 그것도 결국 관리다. 코딩 시간은 더 줄어든다. 10% 코딩, 90% 관리. 둘 다 싫다. 남는 것도 싫다. 임원이 되는 것도 싫다. 이상한 심정이다. 둘 다 싫은데, 둘 중 뭘 해야 한다고 해. 회의실에 앉아 있다. 아무 말도 안 한다. 녹음 버튼은 꺼져 있다. 비공식 면담이라고 했다. HR 담당자가 본다. 대기 중인 표정. 나는 그냥 본다. 창밖을. "시간을 드리겠습니다. 2주 정도 생각해 보세요." 2주. 14일. 14일 안에 내 직업정체성을 다시 정의해야 한다. 밤 11시, 혼자 있을 때 집에 와도 자지를 못 한다. 아내는 잤고, 아이들도 잤다. 혼자 거실 소파에 앉아 있다. 노트북을 켠다. 20년 전 코드를 본다. GitHub에 저장되어 있던 초대 레포지토리. Java로 쓴 게시판이다. MVC 패턴도 없고, 보안도 엉망이고, 함수명도 엉망이다. 그런데 재미있었다. 진짜 재미있었다. 밤새 버그를 찾고, 스택오버플로우를 뒤지고, 친구한테 문제를 물어보고, 새벽에 드디어 작동할 때의 그 쾌감. 30대 때는? 복잡한 로직을 다루면서도 즐거웠다. 성능 최적화에서 0.3초를 단축하는 데 하루를 썼다. 그게 일이 아니라 게임 같았다. 요즘은? 임원이 돼도 게임은 끝난다. 개발자 자리에 남아도 게임은 끝나가고 있다. 나이 때문일까. 아니면 그냥 시간이 없어서일까. 시간이 있으면 다시 즐거울까. 그럼 시간을 만들어야 하나. 이직을 해야 하나. 45세에 다른 회사로? 나를 받을 회사가 있을까. 45세 아저씨. 기술은 좀 지났고. 체력도 떨어지고. 게다가 결혼하고 애 둘 있고. 급여는 최소 9000만 원 이상을 받아야 하고. 그런 게 어딜 가나. 그래. 그래서 임원인가. 임원은 나이를 먹을수록 값이 올라간다. 45세 임원은 매장이다. 20년 경력, 뭘 좀 안다는 확신 있는 얼굴, 신뢰감. 임원 시장에선 그게 상품이다. 개발자 시장에선 뭔가. 옛날 실력으로 사는 사람? 미안하지만 요즘 기술은 아래 세대가 더 잘 한다. 그래서 올라오는 건가. 올라와야 사는 건가. 한숨을 쉰다. 너무 크게 나와서 재수가 없다. 대학 동기한테 들은 말 대학 동기와 술을 마셨다. 2주 전이다. 그놈도 임원이다. 다른 회사 임원. "박 형, 이사 합격 확정 들었어." "어어, 내가?" "응. 말 안 했어?" 나는 몰랐다. HR과의 면담이 확정이 아니라 제안이라고만 알았다. 근데 이미 그놈은 알고 있었다. "축하한다." "고마워." "후회 안 돼?" "뭐?" "개발을 못 하니까." 그놈은 웃었다. "아 형, 이제 와서. 개발은 이미 10년 전에 못 했지. 개발은 젊은 놈들 거야." "그럼 뭐가 남아?" "남는 게... 뭔지 알아? 돈이지. 권력도 있고." 나는 그 말에 뭐라고 대답을 못 했다. "형이 개발자 자존심 이따위다. 나 10년 전에 버렸어. 임원 돼서 깨달았어. 자존심도 죽고, 기술도 죽고, 남는 건 회사 내에서 먹이사슬 올라간 거고, 밖에선 그냥 또 다른 아저씨 경영진일 뿐이더라고. 그런데 돈은 진짜 많아." "후회는?" "밤에 자다가 가끔 깬다. 꿈꿨었거든. 개발자가 되고 싶었어. 그런데 잊어. 보너스 생각하면 깬다." 술잔을 기울였다. 그리고 나는 그날 밤 집에 와서 계속 생각했다. 그놈이 맞나. 아니면 내가 맞나. 결국 선택의 시간 2주가 거의 다 왔다. 명일 모레면 HR에 답을 줘야 한다. "승진하겠습니다" 또는 "남겠습니다" 둘 다 후회할 거라는 건 안다. 임원이 되면 개발로 돌아올 수 없다. 5년 임원을 하면 기술은 너무 뒤처져서, 다시 돌아와도 주니어급이 돼야 한다. 자존심은 벗겨진다. 남으면 어떻게 되나. 파트장 자리는 이미 포화된 자리다. 위로 올라갈 유리한 위치는 아니다. 후배들이 점점 올라오고, 나는 20년 경력 파트장으로 계속 있다. 기술이 나아진다고 해서 뭐 좋아질 건 없다. 밥값만 한다. 결국. 결국 뭘 택해도 끝이다. 개발자로서의 끝, 또는 인생으로서의 끝. 아니다. 그게 아니라... 개발자로서의 끝, 또는 임원으로서의 시작. 그 중 뭘 택할 건가. 아들 대학 등록금 생각하면 임원. 밤 11시에 IDE 켰을 때 느껴지는 그 쾌감 생각하면 개발자. 결국 어느 쪽이든 뭔가 죽인다. 생각해 보니 이미 결정은 된 거 같다. 한 달 전에. 임원 제안이 나올 때쯤. 아니, 정확히는 파트장이 된 순간. 그때부터 이미 개발자 박시니어는 점점 사라지고 있었다. 이제 이 사라짐을 인정하고 싶을 뿐이다. 아니면 그 사라짐에 저항할 뿐이다. 둘 다 같은 거 아닐까.내일 아침, 답을 정할 거다. 아직은 뭐라고 할지 모른다.

후배 코드 리뷰, '이게 뭐지?' 하는 순간들

후배 코드 리뷰, '이게 뭐지?' 하는 순간들

후배 코드 리뷰, '이게 뭐지?' 하는 순간들 출근했다. 10시 30분. 회의 3개 캔슬했다. 코드 리뷰 하는 날이니까. 후배 준호가 PR 올렸다. 제목은 "Next.js 마이그레이션 - ISR 최적화". 나는 Java 개발자다. Spring 안에서 20년을 살았다. 그게 자랑스러웠다. 한때는. 지금은 이 PR 앞에서 마우스만 움직인다. 화면 켰을 때의 그 느낌 export async function getStaticProps(context) { const { revalidate } = context.params; const data = await fetchUserData(revalidate); return { props: { data }, revalidate: parseInt(revalidate) || 3600, }; }뭐다? ISR? Incremental Static Regeneration? 스프링에서는 요청 올 때 마다 컨트롤러 탄다. 그게 맞다고 생각했다. 20년간. 근데 이건 빌드 타임에 정적으로 생성하고 주기적으로 리제너레이트 한다고? 부분적으로? 콤마 몇 개 더 치고 '음, 좋은 시도'라고 댓글 달 수도 있다. 근데 난 팀장이다. 파트장이다. 이게 맞는 구조인지 왜 이렇게 했는지 물어봐야 한다. 그런데 물어보면 내가 모르는 게 탄로난다. 좋다. 조금 더 읽어보자.과신은 어제의 나 작년만 해도 나는 싹싹했다. 후배들 코드 봐도 '아, 이건 이렇게 하면 더 좋지', '동시성 이슈 여기 있네', 이 정도면 지적했다. 경험에서 나오는 당당함. 그게 리더십이라고 생각했다. 근데 지금은 다르다. 준호의 코드를 보고 있으면 다섯 가지가 동시에 일어난다. 첫째, '오, 이건 좋네'라는 생각. 둘째, '근데 이게 맞나?'라는 의심. 셋째, '혼자 공부하기엔 시간이 없는데?'라는 패배감. 넷째, '물어봐도 되나?'라는 초초함. 다섯째, '내가 리드할 수 있나?'라는 불안감. 다섯 가지가 한 번에 온다. 커피 한 모금 마신다. 세 번째 커피다. 아직 11시 30분. 리뷰를 달아야 한다. 뭔가 말을 해야 한다. 팀장이 조용히만 있으면 그게 더 이상하다. 그래서 일반적인 조언을 단다. "성능 고려했으니 좋네", "테스트 코드는?", "에러 핸들링 여기 확인해봐". 이건 모든 코드에 통하는 말이다. 경험의 본질인 척 하면서 실은 피하는 것 같은 느낌. 싫다. 모르는 게 쌓일 때 슬랙에 핑. 수진이다. 러스트로 뭔가 새로 만들고 있다고. 성능이 좋다고. 러스트는 뭐야? 뭐 하는 언어야? 동료들은 이미 다 안다. 20대 개발자들은 당연히 안다. 심지어 인턴도 안다. 나만 모른다. 모르는데 일이 자꾸 몰려온다. "박시니어, 이 러스트 코드 한번 봐주실래요? 성능 체크." 봐줄까? 못 봐줄까? 봐줄 수도 없으니 못 봐주지. 근데 말을 해야 한다. "일단 올려봐. 주말에 한번 봐볼게." 거짓말이다. 주말엔 아들 수학 봐주고, 딸 학원 픽업하고, 아내 병원 동반 가고. 주말에 새로운 언어 배울 시간은 없다. 근데 그렇게라도 말해야 팀장 자리를 지킬 수 있다. 이게 뭐하는 짓인가. 책임과 무지의 타협점 회의실. 4시간 스프린트 계획 회의. 아, 내일 기술 스택 결정 회의도 있다. 마이크로프론트엔드 도입 검토. 누가 주도할 거냐고? 당연히 나다. 파트장이니까. 근데 난 마이크로프론트엔드 논문 안 읽었다. 사례 연구도 안 했다. 유튜브 영상 하나 봤나? 그것도 작년 영상이다. 명일 회의에 가서 뭐 할 거냐고? 다들 한 바퀴 말하게 듣고, 좋은 질문 하는 척 몇 개 던지고, "좋은 의견들 많네요. 이건 좀 더 깊게 검토하고 주 목요일에 최종 결정"이라고 말할 것 같다. 이게 리더십이 아니라는 건 안다. 근데 이 정도면 일은 돌아간다. 팀이 움직인다. 후배들은 '아, 파트장이 고민 중이시네' 정도로 생각한다. 내가 무엇을 모르는지는 누도 모른다. 왜냐면 나도 내가 뭘 모르는지 모르니까.정직하고 싶은데 리더는 못 할까 어제 준호한테 따로 말했다. 커피 마시면서. "준호, ISR 구현 좋네. 근데 왜 이 방식으로 했어? 다른 옵션도 생각했어?" 준호가 웃었다. "파트장님도 궁금하신 거죠? 저도 처음엔 몰랐거든요. 회사에서 한 프로젝트 봤는데, 우리 상황하고 비슷해서." 그럼 돼. 정직했다. 난 몰랐고, 준호는 알았다. 그게 끝이다. 그래서 더 물었다. "그럼 성능 개선은 얼마나 됐어?" "로딩이 40% 빨라졌어요." "숫자 좋네. 모니터링은?" "대시보드 연결했습니다." 이래. 이 정도면 충분하다. 내가 이 기술을 완벽하게 몰라도, 준호는 알고 있고, 결과는 나왔고, 리스크는 모니터링하고 있다. 이게 리더십 아닐까. 모든 걸 아는 리더가 아니라, 모르는 걸 인정하고 팀을 믿는 리더. 근데 이게 얼마나 오래갈까. 5년? 10년? 기술은 계속 변한다. 매 6개월마다 뭔가 새로 나온다. 모르는 게 자꾸만 쌓인다. 언젠가는 이 불안감이 팀에 들릴 거다. "파트장님, 이건 어때요?" 물을 때, 내 대답이 자꾸 일반적일 거다. 구체적이지 않을 거다. 경험에서 나오는 자신감이 없을 거다. 그럼 내가 뭐냐. 그냥 세션 잡는 관리자냐. 싫다. 뒤처진다는 건 틀렸다는 게 아니고 금요일. 야근 했다. 준호 코드 다시 봤다. 이번엔 프리젠테이션 영상 보고. 유튜브에서 ISR 강의 찾아서 봤다. 30분짜리 영상인데, 처음 10분만 봤다. 졸렸다. 그런데 조금 느껴졌다. ISR이 뭔지. 왜 필요한지. 준호가 왜 이렇게 했는지. 모든 걸 이해하진 못했다. 상세한 메커니즘은 여전히 모호하다. 근데 충분히 이해했다. 월요일 회의 때 질문할 수 있을 정도로는. 좋은 질문을요. 정직한 질문을. 아, 그리고 깨달았다. 20년 경력이 무색한 게 아니라, 개발 방식이 달라진 거다. 내가 배운 건 서버 중심. 요청-응답. 상태 관리. 이건 클라이언트 중심. 정적 생성. 캐시 전략. 완전 다른 세상이다. 근데 컴퓨터 공학의 본질은 같다. 효율성, 확장성, 안정성. 그것만 봐도 된다. 도구는 바뀌어도 사고 방식은 통한다. 이 정도면, 리더일 수 있을 것 같다. 그런데 이게 계속 될까. 매번 이렇게 주말에 공부해야 하나. 야근하고 영상 봐야 하나. 음. 일단은 그런 것 같다. 이 세상에서 살아가려면. 근데 한 가지 확실한 건, 내가 모른다고 팀이 멈추진 않는다는 거다. 준호는 준호대로 커간다. 수진이는 러스트로 뭔가 만든다. 후배들은 후배들 속도대로 간다. 나는 내 속도대로 따라가면 된다. 모를 때도 있지만, 가끔 알 때도 있으니까.모르는 게 있으면, 아는 척하지 말고 배우자. 그게 리더다.