기획자의 '이거 간단하죠?'는 왜 그렇게 화날까

기획자의 '이거 간단하죠?'는 왜 그렇게 화날까

기획자의 '이거 간단하죠?'는 왜 그렇게 화날까 그 문장이 울리는 순간, 나는 이미 죽어있다 슬랙 메시지 알림음. 오후 4시 47분. 주말까지 정확히 14시간 41분 남은 금요일 오후다. "김개발님, 회의실에서 봅시다 :)" 기획팀 매니저 박기획의 메시지다. 나는 이미 알고 있다. 이 시간, 이 요일, 이 톤의 메시지가 뭘 의미하는지. 지난 7년간 이 회사에서 나는 이 패턴을 수백 번 봤다. 피할 수 없는 그것. 요구사항 폭탄. 회의실에 들어서자마자 박기획은 내 눈을 반짝이며 봤다. 그 표정. 그 표정만으로도 이미 내 코르티솔 수치는 상승 중이다. 아이패드를 집어 들더니 와이어프레임을 보여줬다. "이거 이번 스프린트에 들어가면 좋을 것 같은데요. 다른 건 다 돼 있고, 그냥 프론트에서 보내는 유저 행동 데이터를 받아서... 실시간으로 대시보드에 띄워주고, 각 유저별로 세분화된 분석 리포트를 PDF로 생성하면 되는 거고... 근데 이거 간단하죠?" 그 순간, 나는 내 영혼이 몸을 떠나가는 것을 느꼈다.'간단하다'는 말의 무게 "간단하죠?" 이 말을 들을 때마다 나는 기획자가 실제로 뭘 말하고 있는지 번역기를 켠다: 기획자가 말한 것: "간단하죠?" 기획자가 실제 의도한 것: "이 정도는 당신 같은 프로 개발자에겐 밥 먹는 것처럼 쉽겠네요?" 내가 듣는 것: "넌 이것도 못 하냐?" 내 코드가 들리는 것: "아니 이게 뭐라는 거야 이 미쳐버린 것 같은 요구사항을..." 문제는 이게 단순한 언어의 문제가 아니라는 거다. 그건 관점의 차이. 아니, 관점 이상의 뭔가다. 기획자에게 '실시간 데이터 대시보드 + 유저별 분석 리포트 PDF 생성'은 정말 간단해 보인다. 결과물만 보니까. 버튼을 누르면 깔끔한 UI가 나타나고, 그래프가 그려지고, PDF가 다운로드된다. 보기에는 그렇게 간단하다. 마치 스마트폰에서 카카오톡 앱을 켜는 것처럼. 그런데 나는 안다. 그 "간단해 보이는" 것 뒤에 숨겨진 것들을. 보이지 않는 빙산의 아래, 그곳에 내가 있다 기획자가 보는 것: 대시보드가 나타난다 → 그래프가 그려진다 → PDF가 생성된다. 내가 봐야 하는 것: 우선 현재 데이터 구조를 파악해야 한다. 유저 행동 데이터가 어디에 저장되어 있나? MySQL의 users_behavior 테이블인가? 아니면 로그 서버에서 실시간으로 들어오는 데이터인가? 아니면 여러 곳에서 산재되어 있나? 이미 데이터 웨어하우스 같은 게 있나? 없으면 만들어야 하나? 데이터 일관성은? 현재 수백만 건의 레코드가 있는데, 마이그레이션은 어떻게 할 건가? 다운타임이 생기면 안 되니까 이중 기록을 남겨야 한다. 기존 데이터와 새로운 데이터가 일치하는지 검증하는 로직도 필요하다. 검증 실패 시 롤백 시나리오는? 실시간 처리? "실시간"의 정의가 뭔가? 1초? 500ms? 100ms? 각각 다른 아키텍처가 필요하다. 그냥 쿼리하면 느리니까 캐싱이 필요하다. Redis? 메모리는 충분한가? TTL은 어떻게 설정할 건가? 캐시 무효화는? 스탬피드 문제는? 동시성? 몇 명이 동시에 대시보드를 볼 건가? 100명? 1000명? 1만 명? 데이터베이스 커넥션 풀은? 쿼리 최적화는? 인덱스 전략은? 슬로우 쿼리 로깅은? 세분화된 분석? 어느 정도 세분화인가? 성별, 연령, 지역? 기기 타입? 행동 경로? 시간대별? 각 조합마다 다른 쿼리가 필요하다. 프리컴퓨팅을 할 건가? 아니면 온더플라이로 계산할 건가? PDF 생성? 몇 MB짜리 PDF인가? 수백 페이지면 생성 시간이 몇 분이 될 수도 있다. 그럼 비동기 작업으로 처리해야 한다. 큐 시스템이 필요하다. Kafka? RabbitMQ? 실패 처리는? 재시도 로직은? 권한? 모든 유저의 데이터를 모두가 볼 수 있나? 아니면 자기 데이터만? 관리자는 모두 본다? 그럼 데이터 필터링 로직이 비즈니스 로직과 섞인다. 권한 검증이 매번 필요하다. 모니터링? 언제 터질지 모르는 시스템인데 모니터링은? 알러트는? 메모리 사용량, CPU, 데이터베이스 쿼리 성능, 캐시 히트율, PDF 생성 시간... 테스트? 단위 테스트는 물론이고, 통합 테스트는? 부하 테스트는? 1000명이 동시에 대시보드를 켜면? 10000명이면? 문서화? 새로운 팀원이 와도 이걸 유지보수해야 한다. 배포? 이게 다 되고 프로덕션에 나가면 롤백 시나리오는?이 모든 것들이 내 머리 안을 도는데, 기획자는 여전히 "이거 간단하죠?"라고 묻고 있다. 내가 대답하지 않자 그가 덧붙인다. "아, 시간 많이 안 걸릴 것 같긴 한데요? 3, 4일?" 3, 4일. 나는 웃었다. 하지만 웃음이 아니라 그냥 생리 반응이었다. 신체의 스트레스 반응 중 하나다. 피하고 싶지만 해야 하는 설명의 악순환 이 상황에서 나에게 두 가지 선택지가 있다. 첫 번째 선택: 현실을 설명한다 "아, 그게 사실은요... 데이터 마이그레이션, 캐시 전략, 동시성 제어, 권한 검증, 모니터링, 부하 테스트... 이런 게 다 들어가거든요. 최소 2주 정도는 필요할 것 같고..." 결과: 기획자의 표정이 굳는다. "아, 그렇군요. 근데 어떻게 이렇게 오래 걸려요? 다른 팀은 더 빨리 안 하던데?" 그리고 나는 또 설명해야 한다. "아, 다른 팀의 요구사항이 달라서..." 이 과정이 3, 4번 반복된다. 기획자는 여전히 이해하지 못한다. 그리고 나는 지친다. 두 번째 선택: 그냥 "네, 알겠습니다"라고 한다 결과: 회의는 빨리 끝난다. 하지만 다음 월요일, 화요일, 수요일, 목요일을 지옥으로 보낸다. 밤 11시까지 사무실에 남아있다. 아내한테 또 야근한다고 전한다. 아내는 "또?"라고만 한다. 그리고 금요일 오후, 여전히 완성 못 한 채로 "이번 스프린트엔 좀 더 필요할 것 같은데요"라고 말해야 한다. 그러면 기획자는 "어, 몇 일만 더 하면 안 돼?"라고 묻는다. 진짜 몇 일만 더 하면 된다. 근데 그건 이미 예측 불가능한 영역이다. 대부분의 경우, 나는 두 번째를 선택한다. 왜냐하면 첫 번째를 선택했을 때 오는 것들이 더 고통스럽기 때문이다. 기획자의 의심 어린 눈빛. "혹시 개발팀이 비효율적인 건 아닐까?" 같은 의구심. 그리고 그게 상사에게까지 전달될 가능성. 나는 이 회사에서 이미 7년을 왔다. 지금 "느리다"는 평판을 얻고 싶지는 않다. 그래서 나는 아무것도 설명하지 않는다. 그냥 한숨을 쉬며 "네, 알겠습니다"라고 한다. 간단하다는 착각의 원인: 눈에 보이는 것과 안 보이는 것 기획자를 탓하고 싶지는 않다. 정말이다. 박기획이는 나쁜 사람이 아니다. 그냥 안 봤을 뿐이다. 개발자의 일은 극도로 불가시적(invisible)이다. 사용자는 버튼을 누르고 결과를 본다. 아름다운 UI, 빠른 응답 속도, 안정적인 서비스. 그게 다다. 그 뒤에 있는 것들은 안 본다. 반면 기획자의 일은 가시적이다. 와이어프레임, 목업, 프로토타입. 보기만 해도 "아, 이런 기능이 들어가는구나"가 한눈에 들어온다. 그래서 기획자는 자연스럽게 생각한다. 저 와이어프레임 정도면 개발할 때 이 정도 난이도 아닐까? 데이터 몇 개 받아서 보여주면 되는 거 아닌가? 그리고 실제로 그 생각이 틀린 건 아니다. 만약 기획자가 요구한 기능이 정말로 그것만 있었다면 말이다. 하지만 그렇지 않다. "데이터를 받아서 보여주는 것"은 정말 간단하다. 5분이면 된다. 하지만 문제는 그 이전과 이후다. 이전: 그 데이터가 어디서 오는가? 데이터는 정확한가? 정확하지 않다면? 일관성이 있는가? 무결성은? 보안은? 이후: 그 데이터를 보여주고 나서? 매달 유저 수가 10배 늘어나면? 데이터가 100배 늘어나면? 여전히 빠를까? 내 마음이 쓰라린 이유들 이 문제가 나를 이렇게까지 자극하는 이유는, 사실 기획자 때문만은 아니다. 일부는 나 자신 때문이다. 7년을 이 회사에서 일하면서, 나는 스스로를 어떻게 정의해왔나? "그냥 일 잘하는 사람." 이 정도면 충분했다. 요구사항이 들어오면 한숨을 쉬지만, 결국 해낸다. 밤새가 필요하면 밤샌다. PR 리뷰는 잘한다. 버그를 찾는 능력도 좋다. 그래서 나는 사실상 이 팀의 버팀목이 되었다. 하지만 버팀목이 되는 것의 대가는 뭔가? 더 이상 '일 잘하는 사람'이 아니라 '일만 계속하는 사람'이 되는 것 아닌가? 기획자의 "간단하죠?"라는 말이 화나는 이유는, 그 말 자체 때문이 아니다. 그 말이 내게 계속 이렇게 살아도 괜찮은 건가 하는 회의감을 자극하기 때문이다. 연봉은 6500만원. 동기들은 7천 넘게 받는다더니. 직책은 없지만 사실상 테크 리드다. 사이드 프로젝트는 세 번 시작했다가 다 접었다. 이직을 생각해본 적 없나? 물론 있다. 하지만 이직 준비할 에너지가 없다. 왜? 일로 이미 죽어있으니까. 그리고 이 악순환 속에서 나는 계속 "간단하죠?"에 직면한다. 그 말이 내게 던지는 메시지는: "넌 충분히 많이 해. 이 정도는 쉽겠지?" 하지만 내 상태는: "나 이미 죽어있는데?"하지만 여전히 내가 해야 한다는 것 여기까지 읽으면, 그럼 난 뭘 원하나? 기획자가 나한테 존경심을 가지고 "이 기능을 구현하기 위해 정말 많은 복잡한 기술적 고려가 필요하군요. 개발자님의 전문성을 존경합니다"라고 말해주기를? 솔직하게 말하자면, 그것도 좋겠다. 하지만 그게 근본적인 해결책은 아니다. 근본적인 문제는 더 깊다. 그건 조직 문화의 문제다. 개발자의 시간과 노력이 제대로 평가받지 못하는 문화. 그리고 개발자 자신도 그걸 당연하게 받아들이는 문화. 나는 어쩌면 박기획보다 나 자신에게 더 화나있는 건지도 모른다. "간단하죠?"라는

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들은... 음, 역시 못할 것 같다. 아, 그거요.테크 리드는 개발자인데, 개발하는 시간이 가장 적다는 게 아이러니다.

아침 9시 출근이 지옥인 이유: 커피 3잔의 진실

아침 9시 출근이 지옥인 이유: 커피 3잔의 진실

아침 9시 출근이 지옥인 이유: 커피 3잔의 진실 아침 7시. 알람이 울린다. 나는 눈을 뜬다. 하지만 뇌는 아직 잠들어 있다. 7시 30분. 샤워를 한다. 따뜻한 물이 얼굴을 적신다. 아직도 아무것도 아니다. 8시. 출근길. 버스에 앉아 창밖을 본다. 세상이 흐릿하다. 이건 창밖이 아니라 내 눈이 문제다. 8시 50분. 회사 건물 1층 카페. 여기서부터 내 하루가 시작된다. 아니, 내 카페인 의존성이 시작된다고 해야 맞다. 첫 번째 커피, 아메리카노(Small): 의식 깨우기첫 아메리카노는 의식을 깨우는 과정이다. 편의점에서 산 아메리카노 한 잔, 350ml. 마시면서 생각한다. '오늘도 버텨야 한다.' 이 시점에서 나는 깨어났다고 생각하지만, 실은 깨어나는 중이다. 이메일을 확인한다. 야간에 들어온 긴급 배포 관련 슬랙 메시지 5개. 아, 이미 스트레스 호르몬이 분비되고 있다. 카페인이 혈액에 흡수되는 데 15분이 걸린다고 한다. 그래서 나는 9시 정각 5분 전에 첫 잔을 마신다. 과학이다. 생존 전략이다. 9시. 자리에 앉는다. 첫 아메리카노의 효과가 나타나기 시작한다. 뇌가 작동한다. 메일을 읽을 수 있다. 슬랙 메시지의 의미를 이해할 수 있다. 이것이 정상인 상태다. 두 번째 커피, 아메리카노(Large): 집중력 유지11시. 두 번째 아메리카노를 마신다. Large 사이즈. 이 시간이 되면 후배들의 PR 리뷰 요청이 들어온다. 어제 올린 4개의 PR, 각각 300줄 이상의 코드를 읽고 의견을 남겨야 한다. 구조적 결함, 네이밍 컨벤션, 잠재적 버그... 이 모든 것을 찾아내려면 뇌가 풀 파워로 돌아야 한다. 두 번째 커피가 없으면 이건 불가능하다. 진짜다. 심지어 한두 번 해봤다. 첫 커피만으로 버티려다가 후배 코드에 "괜찮습니다" 같은 무책임한 리뷰를 달고 나중에 버그가 터져서 야근하는 악순환을 겪었다. 지금은 과학적으로 접근한다. 11시 정각, 두 번째 커피. 오후의 집중력은 이 한 잔에 달려 있다. 세 번째 커피, 핫아메리카노: 일몰 신드롬 극복3시 30분. 여기서 오후 슬럼프가 온다. 오후 3시부터 5시까지는 개발자에게 죽음의 시간이다. 생체 리듬이 오후 커피 이후로 점진적으로 떨어진다. 의학적으로는 '포스트 런치 디프(post-lunch dip)'라고 부른다. 이 시간대에 버그가 터진다. 왜냐하면 우리 모두 집중력이 떨어져 있기 때문이다. 그래서 세 번째 커피가 필요하다. 이번엔 핫아메리카노다. 따뜻한 한 잔이 심리적 위안을 준다. 맛도 좀 더 부드럽고, 마시는 시간도 더 오래 걸려서 정신 차리는 데 도움이 된다. 기획팀에서 '이거 간단하지 않을까요? 오늘 안에 가능할 것 같은데' 같은 메시지가 들어오는 시간도 대략 이 무렵이다. 핫아메리카노를 한 모금 마시고, 깊은 숨을 쉬고, 정중한 톤으로 '검토해보겠습니다'라고 답한다. 커피가 없었다면 아마 폭발했을 것이다. 커피 없이는 불가능한 것들나는 이 회사에 7년을 있으면서 배운 게 있다. 커피는 단순한 음료가 아니라는 것이다. 아메리카노는 내 생산성 매니저다. 회사는 나를 그 역할로 본다(사실 직책도 없이). 커피는 그 일을 가능하게 하는 연료다. 후배들 PR 리뷰, 레거시 코드 분석, 기획팀과의 일정 협상... 이 모든 것이 커피에 의존한다. 문제는 이게 지속 불가능하다는 것이다. 5년 전엔 첫 커피 한 잔으로도 충분했다. 지금은 3잔이 필수다. 내년엔 4잔이 필요할까? 커피 중독이라고 부르면 너무 거창한가? 아니다. 이건 직업병이다. 가끔 주말에 휴무로 하루 종일 집에 있으면 커피 생각이 안 난다. 넷플릭스 보고, 치킨 시켜먹고, 폰 보다가 잔다. 그때는 커피가 필요 없다. 왜냐하면 내가 필요 없는 사람이기 때문이다. 그냥 평범한 34세 남자일 뿐이다. 하지만 월요일 아침이 오면 다시 돌아간다. 알람, 샤워, 출근길. 그리고 편의점. 첫 번째 아메리카노. 이것이 내 일상이다. 9시 정각을 맞추기 위해 매일 같은 것을 반복한다. 생존을 위해서.결국 개발자의 하루는 커피 사이의 공백을 채우는 일이다.