- 03 Dec, 2025
기획서가 없다: 슬랙 메시지로 시작되는 개발의 악순환
기획서가 없다: 슬랙 메시지로 시작되는 개발의 악순환 오전 10시 23분, 슬랙 알림 출근했다. 커피 마시려는데 슬랙이 울린다. "@정민 님, 유저들이 검색 기능이 불편하다는 피드백이 있어요. 개선 가능할까요?" 가능하냐고? 당연히 가능하지. 근데 뭘 어떻게 개선하라는 건지 모르겠다. "어떤 부분이 불편한 건가요?" "음... 그냥 전반적으로요. 네이버처럼 자동완성도 있으면 좋을 것 같고요." 네이버. 개발자 4000명 있는 곳이랑 비교하는구나. "자동완성 추가하려면 검색어 로그 수집, 인덱싱, API 구축 필요한데 일정이..." "급한 건 아니에요! 다음 주까지만요 ^^" 다음 주. 오늘이 금요일인데.기획서는 없고, 레퍼런스는 넘친다 점심 먹고 왔다. 슬랙 메시지 12개. 전부 "참고 이미지" 링크다. 당근마켓, 토스, 배민, 무신사, 에어비앤비. "이런 느낌이면 좋겠어요!" 느낌. 개발을 느낌으로 하나. 피그마 열었다. 기획 문서는 없다. 화면 정의서도 없다. 요구사항 정리서도 없다. 있는 건 슬랙 대화 히스토리 347개. 스크롤 올리면서 정리했다.검색창 위치 변경 (3주 전 대화) 필터 기능 추가 (2주 전 대화) 실시간 검색어 순위 (어제 대화) 음성 검색 (오늘 새벽 2시 대화, 누가 새벽에)요구사항 4개. 우선순위는 모른다. 다 "급해요". 노션에 정리했다. 제목: "검색 기능 개선 (추정)". 추정이라고 쓴 이유는 내가 추측한 거라서. 대표님한테 공유했다. "정민님이 정리를 잘하시네요!" 내가 기획자냐.디자인 없으면 내가 한다 요구사항 정리했다. 이제 디자인이다. 우리 디자이너? 퇴사했다. 3개월 전에. 채용 중이다. 6개월째. "정민님, 프론트 하시니까 UI는 대충 넣어주세요. 나중에 디자이너 오면 수정하면 되죠." 대충. 나중에. 개발자가 제일 듣기 싫은 단어 2개. 피그마 열었다. 디자인 시스템? 없다. 컬러 팔레트? 없다. 폰트 가이드? 없다. 기존 화면 캡처해서 색깔 추출했다. #3B82F6, #10B981, #F59E0B. 파란색, 초록색, 주황색. 통일성은 없어 보이지만 뭐. 버튼 디자인했다. 라운드는 8px. 왜 8px? 다른 버튼들이 8px이니까. 검색창 디자인했다. 높이는 48px. 왜 48px? 48이 예쁘니까. 아이콘? 구글에서 무료 아이콘 찾았다. "free search icon png". 라이선스 확인? 나중에. 2시간 걸렸다. 디자이너는 이런 거 하루 종일 하는구나. 대표님한테 공유했다. "오 괜찮은데요? 디자이너 안 뽑아도 되겠어요 ㅋㅋ" 농담이겠지. 농담이라고 해줘.개발 시작, 그리고 변경사항 디자인 끝. 이제 개발이다. 프론트부터. React 컴포넌트 만들었다. SearchBar, AutoComplete, FilterModal. API 설계했다. GET /search?query=. POST /search/log. 로그는 나중에 분석용. 백엔드 작업. Node.js, Express. 라우터 만들고, 컨트롤러 만들고, 서비스 로직 만들고. PostgreSQL 테이블 설계. search_logs, search_keywords, search_rankings. 인덱스 추가. query 컬럼에 GIN 인덱스. 한글 검색 성능 개선용. 작업 중이다. 집중하고 있다. 슬랙 알림. "정민님, 검색 결과를 카드 형태로 보여줄 수 있을까요? 리스트보다 이쁠 것 같아요." ...지금? "지금 리스트 형태로 개발 중인데, 카드로 바꾸면 레이아웃 전체를..." "아 그럼 리스트요! 괜찮아요 ^^" 10분 뒤. "역시 카드가 나을 것 같아요. 요즘 트렌드가 카드잖아요." 카드로 바꿨다. 컴포넌트 3개 수정. CSS 전부 다시. 30분 뒤. "리스트가 정보 한눈에 보기 좋네요. 리스트로 할까요?" 노트북 덮고 싶다. "둘 다 만들어서 대표님이 선택하시죠." 결국 둘 다 만들었다. 토글 버튼도 만들었다. 개발 시간 2배. 테스트는 프로덕션에서 새벽 2시. 배포 준비 끝났다. 테스트 서버? 없다. 예산 부족. AWS 인스턴스 하나로 운영 중. 로컬에서 테스트했다. 문제없다. 내 로컬에선. 배포했다. Docker 이미지 빌드. ECR 푸시. ECS 업데이트. 5분 뒤. 슬랙 알림. 대표님: "검색이 안 돼요." 심장 멈췄다. 로그 확인. DB 커넥션 에러. 동시접속 제한 초과. 로컬에선 유저 1명. 프로덕션은 유저 200명. 커넥션 풀 설정 수정. 긴급 핫픽스. 재배포. 10분 뒤. 정상화. 대표님: "고생하셨어요! 내일 점심 제가 쏠게요 ^^" 점심. 8000원. 내 2시간 = 8000원. 기획서 없는 개발의 대가 월요일. 주간회의. "검색 기능 잘 나왔어요! 근데 필터가 좀 복잡하다는 피드백이..." 또 시작이다. "구체적으로 어떤 부분이 복잡한가요?" "음... 그냥 전체적으로요. 좀 더 직관적이면 좋겠어요." 직관적. 추상적인 단어 1위. "레퍼런스 있으세요?" "쿠팡이요! 쿠팡처럼요." 쿠팡. 개발자 2000명. 지난 3일간 작업 내역:기획 추정: 4시간 디자인: 2시간 프론트 개발: 8시간 백엔드 개발: 6시간 DB 작업: 3시간 배포 및 핫픽스: 2시간 총 25시간문서화된 것:없음다음에 누가 수정하면? 슬랙 히스토리 뒤져야 함. 왜 이렇게 만들었는지 아무도 모름. 기술 부채 +1. 악순환의 시작 기획서 없는 개발. 한 번 시작하면 끝이 없다. 요구사항이 명확하지 않으니 개발자가 추측한다. 추측이니 틀릴 수 있다. 틀리면 다시 만든다. 디자인 없으니 개발자가 만든다. 일관성 없다. 나중에 디자이너 오면 전부 다시. 테스트 환경 없으니 프로덕션이 테스트다. 장애 난다. 유저가 테스터. 문서 없으니 인수인계 불가능. 채용해도 온보딩 불가능. 결국 혼자. "정민님이 다 아시잖아요." 라는 말이 가장 무섭다. 내가 모든 걸 알아야 하는 구조. 내가 없으면 돌아가지 않는 구조. 휴가? 불가능. 퇴사? 미안함. 기획자한테 말했다. "기획서 좀 써주세요." "네! 다음부터요!" 다음은 오지 않는다. 급한 게 먼저니까. 오늘도 슬랙이 운다 오후 5시. 퇴근 1시간 전. 슬랙 알림. "@정민 님, 결제 페이지 UI 좀 바꿔주실 수 있나요? 급해요." 기획서? 없다. 디자인? 없다.요구사항? "그냥 이쁘게요." 노트북 열었다. 피그마 열었다. VSCode 열었다. 에너지 드링크 땄다. 세 번째. 입버릇처럼 말했다. "제가 볼게요." 내일도 모레도. 슬랙 메시지로 시작되는 개발. 기획서는 오늘도 없다.결국 내가 기획자고, 디자이너고, 개발자다. 그리고 테스터. 풀스택이 아니라 풀포지션이지.
- 03 Dec, 2025
배포-롤백-재배포: 저녁 7시부터 밤 10시까지의 카오스
배포-롤백-재배포: 저녁 7시부터 밤 10시까지의 카오스 저녁 7시, "이번엔 다를 거야" 금요일 저녁 7시. 배포 버튼을 눌렀다. "이번엔 로컬에서 완벽하게 테스트했어." 그렇게 생각했다. 정말로.테스트 코드도 돌렸다. 로컬에서 3번 확인했다. 스테이징 환경도 문제없었다. "30분이면 끝나겠지." 주말 전에 깔끔하게 마무리하고 싶었다. 그래야 주말에 슬랙 알림 안 들리니까. 배포 스크립트가 돌아간다. Building... ✓ Testing... ✓ Deploying... ✓완벽하다. 그런데. 7시 12분, 첫 번째 신호 슬랙에 메시지가 떴다. "결제가 안 돼요?" 고객사 담당자다. 금요일 저녁인데 왜 일하시나. "확인해보겠습니다." 손이 떨린다. 아니, 떨리지 않았다. 아직은. 로그를 확인한다. Error: Payment gateway timeout Retry count: 3 Status: Failed"아." 결제 모듈이다. 방금 리팩토링한 거.7시 20분, 롤백 1차 시도 당황하지 말자. 롤백하면 된다. git revert HEAD docker-compose down docker-compose up -d익숙한 명령어들. 이론상 5분이면 끝난다. 그런데 Docker 컨테이너가 안 내려간다. "뭐가 문제야." 강제 종료한다. docker kill. 다시 올린다. 이미지를 못 찾는다. 이전 버전 이미지를 내가 언제 지웠지? "아, 지난주에 디스크 용량 확보한다고..." 다시 빌드해야 한다. 이전 버전으로. 체크아웃한다. 빌드한다. 10분 걸린다. 금요일 저녁 7시 30분인데 배포가 죽어있다. 고객사 담당자가 또 메시지를 보냈다. "아직도 안 되는데요?" "죄송합니다. 5분만 더 기다려주세요." 거짓말이다. 10분은 더 걸린다. 7시 35분, 문제의 본질 롤백이 완료됐다. 이전 버전이 떴다. 결제를 테스트한다. 여전히 안 된다. "???" 이전 버전인데 왜 안 되지? 로그를 뒤진다. 30분 전 로그를 본다. 배포 전 로그. 결제는 잘 됐다. 그럼 뭐가 문제지? 환경변수를 확인한다. PAYMENT_API_KEY=*** PAYMENT_TIMEOUT=3000타임아웃이 3초다. 이전엔 10초였는데. "누가 바꿨지?" 나다. 어제 '최적화'한다고.환경변수는 코드 롤백으로 안 돌아간다. AWS 콘솔에서 직접 바꿔야 한다. 콘솔 들어간다. ECS 태스크 정의. 환경변수 수정. 새 리비전 생성. 서비스 업데이트. 또 5분. 고객사 담당자: "지금 주문 못 받고 있어요. 매출 손실인데요." 식은땀이 난다. 8시 05분, 두 번째 배포 환경변수 수정 완료. 서비스 재시작. 헬스체크 통과. 결제 테스트. 성공. "드디어." 고객사에 메시지 보낸다. "정상화됐습니다. 불편 드려 죄송합니다." 답장이 빠르다. "근데 관리자 페이지가 안 열려요?" "..." 관리자 페이지? 그건 또 뭐야. 확인한다. 500 에러. "이건 또 뭔데." 로그를 본다. Error: Database migration pending Run 'npm run migrate' to apply migrations마이그레이션. 롤백하면서 DB도 롤백했어야 했다. 그런데 나 백업 안 만들었다. "망했다." 8시 25분, 데이터베이스 지옥 DB 마이그레이션은 롤백이 까다롭다. 특히 테이블 구조를 바꿨으면. 마이그레이션 파일을 연다. 오늘 배포에서 뭘 바꿨는지 확인한다. ALTER TABLE payments ADD COLUMN gateway_version VARCHAR(10);컬럼 하나 추가했다. 이전 코드는 이 컬럼을 모른다. "괜찮아. 컬럼 하나 지우면 돼." 그런데 이미 데이터가 들어가 있다. 오늘 7시 이후 결제 시도들. 지우면 안 된다. 데이터 손실이다. 컬럼은 남기고 코드를 수정해야 한다. 이전 버전 코드에 컬럼 참조를 추가. 핫픽스다. 금요일 밤 8시 30분에. 코드를 연다. 손이 빠르게 움직인다. // 긴급 수정 const payment = await db.payments.findOne({ // gateway_version 무시 attributes: { exclude: ['gateway_version'] } });더러운 코드다. 나중에 리팩토링해야 한다. 지금은 일단 돌아가게. 커밋. 푸시. 빌드. 배포. 또 10분. 에너지 드링크를 연다. 세 번째다. 8시 50분, 재배포의 공포 새 버전이 올라간다. 정확히는 "이전 버전 + 긴급 패치". 헬스체크. 통과. 결제 테스트. 성공. 관리자 페이지. 로딩된다. "끝났나?" 고객사에 다시 메시지 보낸다. "이번엔 정말 정상화됐습니다." 5분 동안 답이 없다. 불안하다. 답장이 온다. "네, 잘 되네요. 고생하셨습니다." 긴장이 풀린다. 등받이에 몸을 기댄다. 그런데 또 슬랙 알림. 다른 채널이다. 운영팀. "배송 조회가 느려진 것 같은데요?" "..." 9시 10분, 끝나지 않는 밤 배송 조회 API를 확인한다. 응답 속도가 느리다. 평소 200ms인데 지금 2초. "왜지." New Relic을 연다. 쿼리 성능 모니터링. SELECT * FROM orders WHERE status = 'shipped' ORDER BY created_at DESC;인덱스가 없다. 이전 버전에는 있었는데. 마이그레이션 롤백하면서 인덱스도 날아갔다. 내가 수동으로 복구 안 했다. "진짜 미치겠네." DB 콘솔 접속. 인덱스 다시 생성. CREATE INDEX idx_orders_status_created ON orders(status, created_at);10초 걸린다. 작은 테이블이라 다행이다. 배송 조회 다시 테스트. 200ms로 돌아왔다. "이제 됐지?" 슬랙을 본다. 30분 동안 새 메시지 없다. 좋은 신호다. 9시 45분, 사후 정리 모니터링 대시보드를 30분 동안 지켜본다.결제: 정상 관리자 페이지: 정상 배송 조회: 정상 에러율: 0.1% (평소 수준) 응답 속도: 정상괜찮다. 정말 끝난 것 같다. 사후 기록을 남긴다. 노션에. [장애 리포트] 2024.XX.XX 결제 장애 - 발생 시간: 19:12 - 복구 시간: 21:00 - 원인: 환경변수 타임아웃 설정 + DB 마이그레이션 롤백 미숙 - 영향: 결제 불가 48분, 관리자 페이지 불가 30분 - 대응: 환경변수 복구, 핫픽스 배포, 인덱스 재생성재발 방지책을 쓴다. 1. 환경변수 변경 이력 관리 2. 롤백 체크리스트 작성 (DB, 환경변수 포함) 3. 스테이징에서 롤백 테스트 4. 금요일 저녁 배포 자제4번은 지킬 수 있을까. 모르겠다. 밤 10시, 퇴근 책상을 정리한다. 에너지 드링크 캔 3개. 과자 봉지 2개. 터미널을 닫는다. 20개 탭. 맥북을 끈다. 아니, 못 끈다. 슬랙 알림 들어야 해서. 슬립 모드로. 집에 간다. 가방에 맥북과 충전기. 지하철에서 슬랙을 확인한다. 습관이다. 새 메시지 없다. 다행이다. 집 도착. 10시 40분. 샤워한다. 침대에 눕는다. 맥북을 옆에 둔다. "내일 아침에 로그 확인해야지." 그런 생각을 하다가 잠든다. 토요일 새벽 2시 슬랙 알림에 깬다. "결제 오류 알림" 눈을 비빈다. 맥북을 연다. 에러율 스파이크. 5분 전부터. "또?" 터미널을 연다. 손이 자동으로 움직인다. ssh production docker logs app -f로그가 흐른다. 에러가 보인다. Error: Payment gateway connection refused외부 결제 게이트웨이 문제다. 우리 쪽 이슈가 아니다. 공지를 올린다. "외부 결제 시스템 장애로 일시적으로 결제가 불가합니다. 복구 중입니다." 거짓말이다. 우리가 복구할 수 있는 게 아니다. 결제사 상태 페이지를 확인한다. "일부 서비스 장애 조치 중". "할 수 있는 게 없네." 맥북을 닫는다. 다시 눕는다. 잠이 안 온다. 월요일 아침 대표가 묻는다. "금요일에 뭐 있었어요?" "배포 장애 있었습니다." "심각했어요?" "2시간 정도 복구했습니다." "다음부턴 조심해요." "네." 조심한다고 안 생긴다. 혼자라서 생기는 거다. 코드 리뷰 없다. 더블체크 없다. 롤백 도와줄 사람 없다. 전부 나다. 기획자가 묻는다. "이번 주에 신규 기능 배포 가능해요?" "지난주 롤백 정리하고 해야 할 것 같은데요." "급한 건데..." "네, 해보겠습니다." 혼자라는 것 풀스택 개발자. 멋있는 말이다. 뭐든 할 수 있다는 뜻. 근데 뭐든 혼자 해야 한다는 뜻이기도 하다. 배포도 혼자. 롤백도 혼자. 장애 대응도 혼자. 실수해도 혼자. 수습도 혼자. 금요일 저녁 7시의 "이번엔 다를 거야"는 항상 거짓말이 된다. 그래도 다음 주 금요일에 또 배포한다. "이번엔 정말 다를 거야." 또 거짓말이겠지.다음 배포는 목요일로 미루기로 했다. 금요일은 너무 위험하다. 근데 목요일도 비슷할 거다.
- 02 Dec, 2025
밤 11시 출근, 새벽 4시 장애 알림: 나는 왜 이 회사를 못 떠나는가
밤 11시 출근, 새벽 4시 장애 알림: 나는 왜 이 회사를 못 떠나는가 새벽 4시의 손가락 슬랙 알림음이 울린다. 그 소리를 들은 지 벌써 2년째다. 처음엔 한 번 깬다. 일어난다. 노트북을 켠다. 이제는 그 과정이 생략된다. 알림음이 울리는 순간 손가락이 이미 키보드를 두드리고 있다. 뇌는 아직 자고 있는데 손은 docker ps 명령어를 입력한다. 몸이 먼저 움직인다. 반사다. 조건 반사. "서버 에러율 60% 이상입니다." 문자가 온다. 대표님은 안 자고 있나? 날짜를 확인한다. 목요일 새벽 4시 17분. 내가 새벽 2시에 배포한 버전 때문일 거다. 자꾸만 그렇다. 로그를 확인한다. 20줄 읽다가 문제를 찾는다. 쿼리 타임아웃. 또 PostgreSQL이다. 어제 마이그레이션한 테이블에 인덱스를 안 깔았다. 내가 깔았어야 했다. 하지만 배포 시간이 없었다. 그래서 날림으로 올렸다. 이 과정을 매주 반복한다. 롤백한다. 15초 걸린다. 에러율이 떨어진다. 슬랙에 Rolled back to v2.4.8이라고 쓴다. 대표님이 바로 답한다. "고마. 원인 찾아봐." 알겠다고 한다. 하지만 알겠다는 게 뭔지 모르겠다. 내가 뭘 찾아야 하는 건지 모른다는 뜻이고, 그것도 알아야 할 나의 책임이라는 뜻이다. 침대로 돌아간다. 시간은 4시 47분. 6시에 일어나야 한다. 아니, 4시 47분에 눈을 감았으니 6시에 또 일어나면 1시간 13분을 자는 건가. 계산하다가 잠든다.11시 출근의 미학 "오늘 안에 좀 돼?" "네, 제가 봐볼게요." 항상 이 대사다. 대표님이 기획서도 없이 요청한다. '오늘 안에'는 사실 '지금 당장' 이라는 뜻이다. 그리고 '제가 봐볼게요'는 '제가 다 하겠습니다'라는 뜻이다. 10시에 일어난다. 샤워한다. 밥을 먹을 시간이 없다. 회사에서 먹자고 생각한다. 회사에 가면 먹을 시간이 없다. 매번 이 사이클이다. 11시 5분, 책상에 앉는다. 슬랙을 열어본다. 밤에 온 메시지 정리. 기획팀(2명)이 각각 2번, 3번 씩 요청했다. 영업팀(3명)도 고객 피드백을 전달했다. 개발자는 나 하나다. 그들은 그것을 알고 있다. 하지만 요청은 멈추지 않는다. 우선순위를 정한다. 세 번째로 온 요청부터 한다. 왜냐하면 첫 번째 요청자가 먼저 물어볼 가능성이 높으니까. 시간을 벌기 위해 순서를 바꾼다. 11시 15분, 코드를 본다. '이거 간단하죠?'라고 했던 기능은 간단하지 않다. 간단한 기능이란 세상에 없다. 있는 건 '당신이 이미 알고 있는 기능'과 '당신이 모르는 기능'뿐이다. 대표님은 내가 알아야 할 것들만 남겨놓고 간다. React 컴포넌트를 수정한다. 버튼 하나 추가. 텍스트 색 변경. 간단한 일이다. 근데 그 버튼은 데이터베이스에서 정보를 받아와야 한다. 그럼 API를 수정해야 한다. API를 수정하려면 데이터 구조를 봐야 한다. 데이터 구조가 복잡하다. 이미 꼬여 있다. 내가 3개월 전에 해놓은 구조다. 그때는 왜 이렇게 만들었는지 모르겠다. 주석을 찾아본다. 주석이 없다. 왜냐하면 내가 주석을 쓸 시간이 없었기 때문이다. 두 시간 반을 쓴다. 완료했다고 슬랙에 쓴다. "확인해봤어. 좋아. 이거 배포해도 돼?" "네 바로 배포할게요." 배포한다. 1분 걸린다. 배포하는 동안 두 번째 요청을 본다. 이거는 더 복잡하다. 백엔드를 수정해야 하고, 프론트도 수정해야 한다. Node.js와 React를 왔다갔다해야 한다. 점심시간이다. 혼자 밥을 먹는다. AWS 콘솔을 본다. 이 달 요금이 지난 달보다 30% 올랐다. 왜일까. 뭘 낭비했을까. 로그를 확인한다. 누군가 S3 버킷에 동영상을 4TB 올렸다. 우리 서비스에 영상 기능이 없다. 왜 4TB가 있는 거야. 기획팀에 물어본다. "어? 그거 테스트하다가 지운 줄 알았는데?" 테스트가 뭔지 모르겠다. 그냥 지워버린다. 이달은 못 돌릴 거고, 다음달부터 줄겠지.휴가를 계획한 적이 없다 휴가라는 단어는 이 회사에서 금지어다. 나뿐 아니라. 대표님도 안 간다. 직원 12명인데 누구도 길게 휴가를 못 본다. 1박 2일이 최대다. 그것도 긴장 풀린 상태에서. 이전 직장에선 여름에 1주일 휴가를 갔다. 회사에서 강제했다. 잠금 장치처럼. 깔끔했다. 여기서 휴가는 다르다. 지난 달 추석. 3일을 쉬고 싶었다. 9월 25일부터 27일까지. 미리 말했다. 8월에. "추석 안 나와도 되나?" "그럼... 누가 서버를 봐?" 12명이 있다. 그중 개발자는 나뿐이다. 그래서 나의 휴가는 항상 조건부다. "혹시 모르니까 폰은 켜놔. 뭐 있으면 한 번씩만 봐줘." 그렇게 추석 연휴를 보냈다. 25일: 실시간 쿼리 에러. 1시간에 한 번씩 확인. 고칠 수 없다. 일단 알았다고만 하고 26일에 한다고 했다. 26일: 아침 8시에 데이터베이스 마이그레이션 시작. 오후 5시에 끝. 명절 음식을 못 먹었다. 냉장고에 남겨진 음식을 야식으로 먹었다. 27일: 괜찮았다. 아무도 안 건드렸다. 대신 불안했다. 조용하면 더 불안하다. 뭔가 잘못됐을 가능성이 높으니까. 28일: 출근해서 로그를 본다. 25일에 에러가 20만 건 쌓였다. 근데 아무도 안 알려줬다. 슬랙에서 기다리고 있었단 거다. 내가 연휴를 끝내고 들어올 때까지. 휴가 신청은 이제 안 한다. 책상에 계속 앉는다. 그게 낫다. 내 몸은 내 것이 아니다 건강검진을 받았다. 회사 규정상 1년에 한 번. 이번 회차 검사 결과가 나왔다. 혈압: 높음 수면 패턴: 불규칙 스트레스 수치: 최상 의사가 물었다. "스트레스 관리를 하세요?" "네, 해봅니다." 뭘 해봤다는 건지 모르겠다. 에너지 드링크를 덜 마신다? 한 다섯 잔 덜 마신다. 원래 하루 2캔인데. 요즘은... 다시 2캔이다. 수면 시간. 어제는 3시간 45분. 그 전날은 2시간. 그 전전날은 5시간인데 새벽 4시 이후라서 숫자 의미 없다. "최소 6시간은 주무세요." 알겠다고 했다. 할 수 없을 줄 알면서. 밤 11시. 11시 30분. 밤 12시에 잤다고 해서 아침 6시에 일어나면 6시간이다. 하지만 밤 12시에는 못 잔다. 점검을 해야 한다. 배포를 해야 한다. 커밋 메시지를 정리해야 한다. 그래서 새벽 1시에 잔다. 6시간을 자려면 새벽 1시에 자서 아침 7시에 일어나야 한다. 하지만 아침 7시에 일어나도 11시에 출근하지 않는다. 10시 55분에 출근한다. 그 사이에 뭐하는 건지 모르겠다. 시간이 증발한다. 몸이 말을 듣지 않는다. 새벽 3시쯤에 한 번 깬다. 슬랙을 본다. 아무것도 없다. 다시 자려고 하는데 못 잔다. 뭔가 잘못될 수 있다는 생각이 든다. 노트북을 켠다. 코드를 본다. 버그 같은 게 있을까봐. 없다. 그래도 마음이 놓이지 않는다.왜 못 떠나는가 면접이 있다. 10시간 차이 나는 시간대의 회사. 연봉도 40% 올려준다고 했다. 근데 내가 가면 여기 서비스가 터질 것 같다. 터질 리가 있나. 우리 사용자는 5만 명이다. 누군가는 와서 대체할 거다. 누군가는. 근데 6개월을 뽑지 못했다. 왜일까. 연봉이 낮아서? 아니다. 성과급 때문에 연봉 인상이 안 된다고 들었다. 그럼 회사 돈이 없다는 뜻이다. 그럼 내가 떠나면 누가 와? 그리고 대체 누가? 내가 여기서 하는 일들을 정리해본다.프론트엔드 개발 및 유지보수 백엔드 개발 및 운영 데이터베이스 설계 및 마이그레이션 AWS 인프라 관리 배포 및 모니터링 긴급 장애 처리 기술 채용 면접 (하지만 시간이 없음) 개발팀 리드 (팀이 나뿐) 신입 온보딩 (신입이 없음)한 사람이 열 가지를 한다. 이걸 두 명이 한다는 보장도 없다. 세 명이 나눠야 정상이다. 근데 세 명을 뽑을 돈이 없다. 그럼 계속 내가 한다. 대표님이 밥을 사줄 때도 있다. 그럼 일 얘기를 한다. "너 아직 버티고 있네. 고마워." "네." "이 정도면 잘 하고 있는 거야. 나도 알아. 힘들겠지." "괜찮습니다." 뭐가 괜찮은지 모르겠다. 하지만 그 말이 마음에 남는다. 이 사람이 알아준다. 내가 뭘 하는지. 다른 회사에서는 이렇게 못할 거다. 수십 명이 있는 회사에선 내가 투명인간이 될 거다. 여기선 내가 필요하다. 내가 없으면 회사가 안 돈다. 근데 그게 이유가 되나. 이직 제의를 받았을 때 나 말고 누군가에게 물었다. 전직 동기들에게. '그냥 가면 안 되나?'라고. "너 아직도 책임감 갖고 있네." 그 동기는 이미 3번을 이직했다고 했다. 매번 '이 회사가 망할까봐'라고 생각했단다. 어디든. 근데 다 멀쩡히 돈다고 했다. "회사는 하나의 생명체야. 너 하나 없어도 돈다. 다만 회사 주인이 다시 고민해야 할 뿐." 그 말이 맞는 것 같은데도 가슴이 철렁한다. 손가락은 여전히 움직인다 지금도 슬랙 알림음에 귀가 쫑긋하다. 밤 11시 30분. 키보드를 두드린다. 커밋 메시지를 정리한다. 주석을 추가한다. 버전을 업그레이드한다. 이 모든 게 배포 전 세팅이다. 미드나잇을 넘긴다. 새벽 1시. 배포한다. 테스트한다. 에러가 없다. 좋다. 오늘은 괜찮겠다. 침대로 간다. 새벽 4시 17분. 알림음. 손이 움직인다.내일은 면접을 안 가기로 했다.
- 02 Dec, 2025
개발팀은 '나'입니다: 한 명의 개발자가 모든 기술 스택을 통째로 담당하면 생기는 일
개발팀은 '나'입니다 풀스택, 그 달콤하고 위험한 말 대표님이 면접 때 했던 말이 있다. "개발팀은 풀스택으로 구성할 거예요. 비용도 절감되고, 유연성도 있고. 다행히 당신이 React도, Node.js도, AWS도 다룰 수 있으니까." 그렇게 시작됐다. 나 혼자가 곧 개발팀이 되는 악몽. 세상에 풀스택 개발자는 많다. 근데 "풀스택이니까 다 해줄 수 있겠네"라고 생각하는 대표는 특이한 종류의 희귀동물이다. 처음엔 괜찮다고 생각했다. 자유롭다. 누가 간섭하지 않는다. 내가 하고 싶은 기술 스택으로 서비스를 만들 수 있다. React 쓰고 싶으면 쓴다. Node.js 쓰고 싶으면 쓴다. AWS 아키텍처도 내 맘대로다. 하지만 3개월 후. 아이디어가 나온다. "이 기능, 프론트에서 바로 처리할 수 있게 해줄 수 있어?" 끝나지 않는 요청. React. 라우팅 로직 추가. 상태 관리 수정. 컴포넌트 분리. 근데 API가 아직 안 나왔다. "API는?" 오늘 만든다고 했으니까. Node.js. Express 라우터 4개 추가. 데이터 유효성 검사 로직. 에러 핸들링. 근데 DB 스키마를 먼저 확인해야 한다. PostgreSQL에 테이블이 있나? 마이그레이션을 해야 하나? PostgreSQL. 기존 테이블 수정. 새 칼럼 추가. 인덱스 생성. 마이그레이션 스크립트 작성. 어제 데이터는 어떻게 처리하지? 데이터 정합성 체크. Docker. 로컬 개발 환경에서는 잘 되는데 운영 서버에서 왜 안 되지? 이미지 다시 빌드. 볼륨 마운팅 설정 재확인. AWS. S3에 파일 업로드? CloudFront 캐시 무효화? RDS 스토리지 거의 찼다고? 우린 아직 초기 스타트업인데. 프리티어는 이미 끝났고. Figma. 아 맞다, 기획팀이 없다. 대표가 그린 스케치를 보고 "이게 뭔데?" 하다가 기획자처럼 일한다. Figma 열어서 와이어프레임 그린다. 그리고 그 와이어프레임대로 코딩한다. 디자인시스템은? 없다. 한 시간이 지났다. 기능 하나가 끝났다. 기획자는 없다. 디자이너는 없다. QA는 없다. DevOps는 없다. 데이터베이스 관리자는 없다. 다 나다.하루의 흐름 (왜 이렇게 길까) 10시 출근. 아니, 이건 출근이 아니라 사무실 도착이다. 슬랙을 본다. 새벽에 온 메시지 23개. "이거 확인해주세요", "버그 났어요", "이거 언제까지 돼요?", "시간 있으시면 이것도". 대표님의 "좋은 아침입니다 :) 이것만 꼭"로 시작된 메시지들. 밤새 자지 못했다. 어제 배포 후 장애가 났으니까. 새벽 2시까지 버그 추적했다. DNS 캐싱 이슈였다. 역시 AWS다. 기획자가 요청사항 정리를 해달란다. 기획팀이 없으니까 개발자인 내가 한다. 스프레드시트 열어서 "이 요청들 우선순위 어떻게 해요?" 라고 물어본다. 대표 답장은 3시간 후. 오전 11시. 드디어 코딩을 시작한다. 프론트. 상품 목록 페이지 레이아웃이 이상하다. "왜 이렇게 나와요?" 라고 본부장이 물어본다. 아, 이건 백엔드 API가 데이터를 이상하게 준 거다. API 가서 체크한다. API. 조회 로직을 다시 본다. 쿼리가 복잡하다. PostgreSQL에서 직접 실행해본다. 근데 이상하다. 데이터가 중복으로 나온다. 조인 로직을 다시 짠다. 이번엔 뭐가 빠졌다. 서브쿼리를 추가한다. 점심 12시 30분. 밥을 먹으면서 AWS 콘솔을 본다. 이번 달 비용 추세를 본다. 또 올랐다. 왜 EC2가 이렇게 비싼 거야? RDS도 스토리지 비용이 장난 아니다. 프리티어를 벗어난 지 8개월. 스타트업 자금은 런웨이가 6개월 남았다고 했는데. 오후 1시. 대표가 온다. "이거 좀 봐주시겠어요? 경쟁사가 이렇게 했는데, 우리도 이렇게 할 수 있어?" 화면을 보여준다. 자동 추천 기능이다. "네, 할 수 있지만 시간이 걸릴 텐데요." "오늘 중으로 할 수 있어? 내일 투자자한테 보여주고 싶어." 오늘은 이미 할 일이 8개 있다. 근데 "오늘 중으로"라는 말을 들으면 할 수 없다는 건 없다. 그냥 밤새면 된다. "네, 해보겠습니다." 오후 2시부터 저녁 6시까지 4시간. Node.js에서 추천 로직을 짠다. 머신러닝은 아니고 단순 카테고리 기반 추천이다. 근데 한 번에 잘 안 되니까 여러 번 수정한다. PostgreSQL 쿼리도 최적화한다. SELECT 문이 점점 길어진다. 오후 6시. React에서 추천 섹션 UI를 만든다. 대표가 준 스크린샷을 보고 Figma에 그린 후 코딩한다. 컴포넌트는 재사용할 수 있게. 상태 관리는 Redux로. 캐싱은? 나중에 하자. 오후 8시. 밥을 먹지 않았다. 컵라면을 먹는다. 모니터 앞에서. 저녁 9시. 배포한다. Docker 이미지 빌드. AWS ECR에 푸시. ECS 서비스 업데이트. 롤아웃 안정성 설정 확인. 뭔가 느렸다. 이미지가 너무 크나? 역시 npm 의존성 문제다. 저녁 10시. QA를 누가 하나? 나다. 직접 기능을 테스트한다. 이 상품이 왜 추천돼? 저 상품은 왜 안 나와? 기준이 맞나? 다시 로직을 본다. 수정. 저녁 11시. 배포. 다시. 밤 12시. 대표에게 "완료됐습니다" 메시지. 스크린샷 2개 첨부. "오! 대박! 완벽한데요? 이거 내일 투자자한테 보여줄게. 고마워요!" 좋다. 내 일이 쓸모가 있다는 걸 느낀다. 근데 피곤하다. 밤 1시. 이제 어제 미루던 일을 한다. 리팩토링. 기술 부채 정리. 근데 시간이 없다. 새벽 2시. 자야 한다. 내일도 있으니까. 새벽 2시 30분. 여전히 깨어있다. 코드 리뷰를 받은 적이 없어서 내 코드가 맞는지 모른다. 다시 본다. 괜찮은 것 같은데? 아니면 이게 나쁜 건가? 모르겠다. 새벽 3시. 자러 간다. 새벽 4시. 휴... 또 뭔가 터진 거 같다. 슬랙 알림음. "서버 응답이 이상해요!" 일어난다. 노트북을 든다. 기술 부채는 눈덩이다 처음 3개월은 빨랐다. React 컴포넌트도 깔끔했다. API도 체계적이었다. PostgreSQL 마이그레이션도 계획적이었다. 하지만 요청이 늘었다. 시간이 줄었다. 기획도 변했다. React는 이제 상태 관리가 엉망이다. Redux 스토어에 뭐가 들었는지 모른다. Props drilling도 많다. 컴포넌트는 500줄짜리가 여럿 있다. 분리해야 하는데 시간이 없다. 새로운 기능을 먼저 추가해야 한다. Node.js는? API가 겹친다. 같은 데이터를 조회하는 엔드포인트가 3개다. 왜 3개나 있는지 기억이 안 난다. 지워도 되나? 뭐가 쓰나? 모른다. 그냥 둔다. PostgreSQL. 마이그레이션 스크립트가 10개 쌓여있다. 언제 적용했는지 모른다. 데이터가 정합하나? 체크해본 적이 없다. 인덱스가 있나? 슬로우 쿼리? 모른다. AWS RDS 성능 인사이트를 보면 경고등이 켜져 있다. "데이터베이스 로드가 높습니다." 뭐 어떻게 하라는 건지. Docker. 로컬에서는 도는데 서버에선 왜 안 돼? 환경 변수 때문인가? 볼륨 마운팅? 메모리 리미트? 복잡하다. AWS. 다양한 서비스를 쓰고 있는데 왜 이렇게 비싼가. 비용 최적화를 해야 하는데 어디서 시작해야 할지 모른다. Reserved Instance? 스팟 인스턴스? 자동 스케일링? 일단 대기만 한다. Figma. 디자인이 왜 계속 바뀌지? 사람마다 기대하는 디자인이 다르다. 코딩해놨는데 "이거 아닌데요" 하면 다시 한다. 코드리뷰는? 없다. 누가 해주나. 내가 짠 코드가 맞는지 틀린지 모른다. 그냥 잘 도는 것 같으니까 넘어간다. 나중에 문제가 터진다. 테스트 코드? 없다. 자동화 테스트? 없다. 수동 테스트만 한다. 배포 전에 "이거 제대로 도나?" 손가락 꼽으면서 기도한다. 기술 부채는 이렇게 쌓인다. 한 장의 종이처럼. 시간이 지나갈수록 두꺼워진다. 얇을 때 치워야 하는데, 계속 새로운 기능을 추가해야 하니까 못 본다. 어느 순간 눈덩이가 된다. 굴러간다. 멈출 수 없다.혼자라는 것의 위험성 개발자가 여럿이면 코드리뷰를 한다. 내가 짠 코드가 이상한지 정상인지 누군가 본다. 버그는 일찍 잡힌다. 나는 그게 없다. 어제 PostgreSQL 쿼리를 짰다. N+1 문제가 있었나? 조인을 좀 더 효율적으로 할 수 있었나? 누가 봐주지 않으니까 모른다. 그냥 도는 것 같으니까 배포한다. 4일 후. 성능이 떨어졌다. 응답 시간이 5초다. "왜 이렇게 느려요?" 라고 대표가 묻는다. 쿼리를 다시 본다. "아, 이거 좀 비효율적이네." 수정한다. 2초로 내려간다. 좋다. 근데 이걸 처음부터 안 했어야 했다. 휴가를 못 간다. 서비스가 터질까봐. 장애 알림이 올까봐. 휴가를 가도 핸드폰을 손에서 놓지 못한다. 슬랙을 계속 본다. "괜찮나?", "에러는 없나?". 여행지에서 5명이 묵는 에어비앤비에서 혼자 노트북을 켠다. 부다페스트에 갔을 때. 발리에 갔을 때. 그 때도. 회사에서 배우려는 기술이 있다. 새로운 프레임워크. 데이터베이스 최적화. 아키텍처 디자인 패턴. 공부하고 싶다. 근데 언제 하나? 유튜브에서 강의를 찾는다. 책을 산다. 읽는다. 한 장이면 졸린다. 피곤해서. 멘토가 없다. 내가 짠 아키텍처가 맞나? 의견을 나눌 사람이 없다. 대표는 기술을 모른다. 동료 개발자도 없다. 혼자 판단한다. 그리고 나중에 후회한다. "이건 이렇게 했어야 했는데." 면접을 본다. 새 개발자를 뽑아야 한다. 6개월째 공석이다. 근데 누가 면접을 본다? 나. 이력서를 읽고, 전화면접을 하고, 기술면접을 한다. 시간이 없는데. 채용공고를 내도 반응이 없다. 혼자 개발 중인 스타트업. "앞으로도 혼자겠겠네요" 라고 생각하는 개발자들이 많다. 실제로 그럴 거다. 그러면 내가 더 많이 한다. 혼자니까. 야근 문화도, 기술 선택도, 모든 게 이미 정해져 있다 11시에 출근한다. 원래는 9시였는데, 새벽 2시까지 일하니까 11시 출근을 하기로 했다. 하지만 정한 건 말일 뿐이다. 화상회의가 10시에 있으면 10시에 나간다. 장애가 밤 3시에 터지면 3시에 일어난다. 야근 문화? 없다. 문화라는 건 선택의 여지가 있을 때 말이다. 나는 할 일이 많으니까 자동으로 야근한다. 주말도 마찬가지다. "쉬세요!" 라고 대표가 말한다. 신경 써줘서 고맙지만, 쉴 수 없다. 장애가 터질까봐. 서비스가 느려질까봐. 일요일 밤 11시에 슬랙 알림이 울리면? 노트북을 든다. 그것뿐이다. 기술 선택도 내가 한다. React? 당연히. 나는 React를 잘 안다. 새로운 프레임워크를 배울 시간이 없다. Node.js? 당연히. JavaScript를 하나의 언어로 통일하면 편하다. 누군가 이견을 제시할 사람이 없으니까. PostgreSQL? "왜 이거 골랐어?" 라고 물어볼 사람이 없다. 그냥 관계형 DB가 필요하니까 PostgreSQL. 이 선택들이 맞나? 모른다. 더 좋은 대안이 있나? 있을 수 있다. 근데 배울 시간이 없다. 그냥 현재 스택으로 계속 간다. 기술 부채처럼 아키텍처 부채도 쌓인다. 스타트업이니까 빠르게 움직여야 한다. 그건 맞다. 근데 "빠르게 = 나 혼자 다 한다"는 방정식이 언제부턴가 생겼다. 대표와 나. 둘 다 이 방정식을 받아들였다. 누가 먼저 제안한 건지는 모르겠다. 어쨌든 지금은 이렇게 돌아간다. 연봉 4800만원, 그리고 스톡옵션 0.5% 연봉을 협상했을 때, 나는 이 모든 일을 할 줄 몰랐다. "풀스택이니까 연봉을 4800으로 제시할게요." 시장 가격은 5500에서 6500 사이였다. 나는 1000 이상을 내려줬다. 스타트업이니까. 초기 기업이니까. 그리고 주식 0.5%를 받기로 했다. 주식의 가치를 계산해봤다. 회사의 현재 평가액이 50억이라고 치자. 0.5%는 2500만원이다. 근데 지금은 의미가 없다. 상장하거나 인수될 때 의미가 생긴다. 그 확률이 얼마나 될까? 스타트업의 10%만 성공한다고 한다. 우린 어느 쪽일까? 연봉 4800에서 세금 떼고 나면 3600 정도다. 서울 월세 80만원, 생활비 150만원, 통신비, 보험. 남는 게 얼마나 될까? 많지 않다. 동기들은 어디 가 있을까? 대기업 분석가: 연봉 6500, 보너스 있음, 의료보험 완벽, 퇴직금, 휴가 자유로움. 네이버 개발자: 연봉 6800, 자유로운 휴가, 기술 커뮤니티 활발, 코드리뷰 문화 있음. 당신 회사 개발자: 연봉 5800, 딱 11시간 근무, 장애 지원팀 있음. 나? 연봉 4800, 24시간 온콜, 코드리뷰 없음, 휴가 못 감. 아직 3년 경력인데. 근데 떠날 수가 없다. 왜냐하면 서비스가 터질 것 같으니까. 내가 떠나면 누가 하나? 대표도 코딩을 안 하고, 다른 개발자도 없다. 책임감이 있는 건지, 아니면 그냥 정신없는 건지 모르겠다.내일은 어떻게 될까 사직서를 작성했다. 세 번이나. "안녕하세요. 개인적 사유로 사직을 신청합니다." 지우고 다시 저장했다. 세 번이나. 떠나면 뭐가 될까? 처음 한 달은 좋을 것 같다. 쉴 수 있으니까. 책도 읽고, 영화도 보고, 연애도 해보고. 두 번째 달. 불안하다. 이 회사 또 망했나? 알림을 켠다. 뉴스를 본다. 뭐가 나왔나? 세 번째 달. 후회한다. "내가 떠난 후 어떻게 됐을까?" 궁금하다. 동료들에게 연락한다. "어떻게 되고 있어요?" 결국 이직할 거다. 근데 이 회사는? 역설적으로, 나 때문에 서비스가 잘 도는 거다. 내가 모든 기술 스택을 이해하고, 버그를 빨리 잡고, 기능을 빨리 추가한다. 효율적이다. 대표 입장에선. 근데 나한테는 지옥이다. 이걸 어떻게 해결할까? 개발자를 더 뽑는다. 그럼 교육에 시간이 걸린다. 기존 코드를 설명해야 한다. 온보딩 과정. 그 시간에 새로운 기능은 더디다. 대표는 불만족한다. 아니면 내가 더 견딘다. 내년도, 그 다음 해도. 언제까지? 몰라. 혹은 영리하게 한다. 문서화한다. 아키텍처를 정리한다. 코드를 정리한다. 점진적으로 다른 개발자가 들어올 준비를 한다. 그럼 시간이 걸린다. 하지만 결국 그게 맞다. 근데 할 시간이 없다. 주 5일 중 4.5일을 버그 수정하고 기능 추가하는데 쓴다. 나머지 0.5일은 AWS 비용 확인하고, 배포 설정 확인하고, 슬랙 처리하는데 간다. 문서화할 시간은 없다. 악순환이다. 오늘 저녁도 야근할 거다. 내일도. 모레도. 언제쯤 변할까? 아마도 다음 중 하나:회사가 자금 부족으로 망한다. 나의 건강이 악화된다. 새로운 개발자가 들어온다. 내가 사직한다.어느 것이 먼저 올까? 요즘 따라 건강검진 결과가 자꾸 떠오른다. "스트레스 지수: 높음" "수면 부족: 주의" "혈압: 약간 높음" 30살도 안 됐는데. 이게 평생 이렇게 갈까? 아니다. 언젠가는 바뀔 거다. 분명히. 하지만 오늘은 아니다. 오늘도 야근한다.내일은 좀 나아지겠지. 아마도.
- 02 Dec, 2025
스톡옵션 0.5%, 의미가 있을까? 1년 차 온콜 개발자의 현실
스톡옵션 0.5%, 의미가 있을까? 1년 차 온콜 개발자의 현실 연봉 계산기 켜놨다가 다시 끈다 4800만원. 월급 400만원. 월급통장에 떨어진 숫자는 400만이다. 세금 떼지만 일단 그게 맨손으로 만질 수 있는 돈이다. 스톡옵션은 뭐가 떨어지나. 아무것도 떨어지지 않는다. 계약서에 적혀 있었다. 0.5%. 회사가 성공하면 언젠가 현금이 될 수도 있는 종이다. IPO나 인수합병 때. 근데 "언젠가"는 언제인가. 대표님은 회의할 때 자주 말한다. "2년 안에 시리즈 B 라운드 목표예요." 그걸 들을 때마다 생각한다. 정말? 이 회사가? 현재 직원 12명. 개발자는 나 혼자. 기획자 2명. 디자이너 1명. 나머지는 영업이랑 CS. 이게 2년 안에 유니콘이 될 것 같은가. 상관없다. 어쨌든 그 "언젠가"를 기약으로 버틴다.0.5%가 뭔데 스톡옵션 계산기를 켜본다. 인터넷 검색. "스톡옵션 계산 방법". 회사 밸류에이션이 필요하다. 지금 우리 회사 밸류에이션이 뭐라고 생각하나. "글쎄요... 100억? 150억?" 대표님이 그런다. 투자유치 설명회 때 얘기하는 숫자다. 정확하지 않다. 투자자한테 어떻게 말하냐에 따라 달라진다. 0.5% × 150억 = 750만원. 750만원을 기다리고 있다. 언제. 상장까지 몇 년? 3년? 5년? 10년? 그동안 월급 400만원으로 산다. 서울 월세 80만원. 통신비. 식비. 의류비 거의 없다. 옷은 회사 T셔츠다. 남는 게 뭐가 있나. 저축 월 150만원 정도? 스톡옵션이 현금이 되려면 기다려야 하니까 저축을 해야 한다. 자본금 없이 정말 "언젠가"만 바라본다. 친구들은 뭐하냐. 대기업은 기본급 5500만원에 보너스. 비상장 회사는? 스톡옵션 5% 받았다는 친구도 있다. 그 친구 회사는 작년에 시리즈 D 가서 밸류 2조 됐다. 5% × 2조 = 100억. 내가 받는 게 뭐냐고. 계산기를 다시 끈다. 기분 나빠진다. 급여 구조의 악마는 디테일에 있다 "정말 의미 있는 스톡옵션을 원한다면" 스타트업 인턴 출신 선배가 말했다. "최소 2%, 그것도 베스팅 기간 없는 거." 베스팅 기간. 우리 계약서에 뭐라고 되어 있나. 못 봤다. 진입할 때 읽지 않았다. 대표님이 "여기 뭔가 사인해주세요" 하면 사인했다. 계약서가 명확하지 않았다. 마지막 페이지 어딘가에 작은 글씨로 뭔가 있었던 것 같은데. HR이 없다. 인사팀이 없다. 이 회사에서 계약 관리는 회사 대표가 직접 한다. 지금도 한다. 베스팅 기간이 있다면. 4년. 그럼 내가 4년 동안 여기 있어야 내 스톡옵션이 온전히 내 것이 된다는 뜻이다. 지금 2년차 중간. 벌써 여기 있기 싫다. 베스팅 기간이 2년이라면. 아직 절반만 내 것이다. 0.5%의 절반. 0.25%. 아니면 아예 없을 수도 있다. 계약서를 확인한 적 없으니까. "제가 한 번 확인해볼게요." 나는 항상 이렇게 말한다. 확인한다. 이런 건 못 한다. 온콜 비용을 환산하면 밤 11시. 알람이 난다. 슬랙 알림음. "서비스 장애입니다. 즉시 조치 부탁드립니다." CS팀이 쓴 거다. 사용자가 신고했고 CS가 대표에게 보고하고 대표가 나한테 슬랙을 친다. 이 과정이 3분. 3분 안에 노트북을 켜야 한다. 장애 대응. 3시간 걸린다. 새벽 2시까지. 그날 밤은 잤나. 아니다. 자다가 또 알람 난다. 4시. 롤백한 서비스가 뭔가 이상하다. 재배포 필요. 자다가 깬다. 수면의 질이 떨어진다. 그게 월 4~5번 일어난다. 월급을 시간급으로 환산하면. 4800만원 = 월 400만원 = 월 160시간 일 = 시간급 25000원. 장애 대응할 때 시간급은 얼마인가. 새벽 2시다. 인력에이전시라면 새벽 시급은 기본 2배. 50000원? 100000원? 내 경우는 같은 4800만원에 온콜 24/7. 시간급으로 환산하면. 뭐지. 음... 계산이 복잡하다. 포기한다. 내가 번 돈 중 몇 %가 스톡옵션으로 가는가. 아니. 스톡옵션이 내가 버린 시간의 대가인가. 그렇다면 내가 버린 시간의 비용을 청구할 수 있나. 못 한다.밸류에이션이 오르는 건 맞는데 회사 밸류에이션이 올랐다는 소식은 들었다. 작년 시리즈 A. 50억 밸류. 올해 시리즈 A+. 100억 밸류 (그렇다고 대표가 말했다). 100억이라면. 0.5% × 100억 = 5000만원. 와. 5000만원이다. 그건 내 연봉과 같다. 만약 내년에 200억이 되면? 1억. 2년 뒤 500억? 2.5억. 그럼 진짜 의미가 있지 않나. 2.5억이면 집 낼드린다. 근데 그게 된다면. 그 기간 동안 내 건강은? 수면은? 개인 시간은? 내 나이는 30 전후다. 가장 왕성한 시기를 이 회사에서 쓰고 있다. 만약 실패한다면. 시리즈 A+에서 자금이 2년 안에 떨어진다면. 구조조정. 나 포함. 그럼 스톡옵션은 휴지다. "이 부분 리스크가 있지 않냐"고 대표에게 물을 수 있나. 못 한다. 팀이 나 혼자니까. 모두를 기대게 하는 수식 스타트업 생태계가 이 수식을 만들었다. 낮은 급여 + 높은 스톡옵션 = 기대. 희망. 인내심. "조금만 더 버티면"이 몇 년이 될 수 있다는 걸 고용주는 안다. "이 회사가 커지면 너는 부자가 돼"라는 말은 약이면서 독이다. 약일 때가 있다. 정말 회사가 크는 경우. 몇 명이 그렇게 됐다. 강남에 집 샀다는 얘기 들었다. 독일 때가 대부분이다. 회사 망했다. 스톡옵션 종이 조각. 나이는 30을 넘었고 이력서에는 "스타트업" 두 글자만 있다. 경력이 쌓여있나. 아니다. 스타트업은 1인 개발자여서 코드리뷰를 받지 못한다. 기술 트렌드를 놓친다. 새로운 기술을 배울 여유가 없다. 3년 뒤 "이 기술은 너무 구식인데요"라는 말을 듣는다. 그런데도 많은 사람이 스톡옵션을 기다린다. 내 포함. 왜냐면 월급 4800만원은 서울에서 "중간"이기 때문이다. 대기업 신입 월급이 300만원이라면. 스타트업 풀스택 개발자는 400만원이 합리적인가. 월 100만원 더 받는다. 대신 무엇을 포기했나. 1인 개발팀. 온콜 24/7. 코드리뷰 없음. 휴가 갈 수 없음. 공식 업무 시간 외 일(기획, CS 상담, 배포, 모니터링). 이걸 월 100만원의 가치로 계산하는가. 아니다. 스톡옵션으로 보상받는다. 나중에. 언젠가. 그게 말이 되냐. 되지 않는다. 그런데 모두가 이렇게 한다. 재정적 자유의 환상 "5년 안에 exit하면 각각 1~2억씩 가져갈 거예요." 대표님이 회의에서 말했다. 회의실 분위기가 한 번에 좋아졌다. 사람들이 웃는다. 1~2억이면. 서울에서 전세금이 된다. 또는 명동 원룸을 살 수 있다. 5년을 버티면 그게 된다고 약속하는 셈이다. 5년. 나는 지금 29살이다. 5년 뒤면 34살이다. 결혼은? 아이는? 휴가는? 전부 미룬다. "회사가 성공할 때까지." 친구는 27살에 결혼했다. 28살에 아기를 낳았다. 아내는 육아휴직. 대출로 반전세를 샀다. 그래도 그 친구가 나보다 행복해 보인다. 왜냐면 그 친구는 지금을 살고 있고 나는 "나중"을 산다. 재정적 자유를 위해 현재의 자유를 포기한다. 현재의 자유 = 시간. 건강. 관계. 일상. "5년 뒤 1~2억으로 그걸 다 되찾을 수 있나"라는 건 나이에 달려 있다. 39살에 1억이 있어 봐야. 지난 10년은 돌아오지 않는다. 건강도. 20대의 시간도. 현실이 부딪힐 때 계약서를 다시 읽어보기로 한다. 슬랙에서 HR 담당자한테 물어본다. 근데 HR 담당자가 있나. 없다. 대표에게 묻는다. "스톡옵션 베스팅 기간이 몇 년이었더라요?" "아 네. 4년이에요. 그리고 클리프 1년." 클리프? "1년 안에 나가면 스톡옵션 못 받아요." 아. 1년 이내에 나가면 0%. 1년 넘으면 25%. 2년 50%. 3년 75%. 4년 100%. 지금 1년 10개월. 2개월 뒤면 25%가 25%에서 50%가 된다. 그 2개월이 길다. 휴가를 신청하려니 대표가 "지금은 좀 어려워요"라고 한다. "장애 대응이..." 항상 그렇다. "지금은" 어렵다. 내일도 어렵다. 모레도. 다음 달도. 내년도. "지금은"이 4년을 채우나. 그럼 베스팅이 100%가 되는 건 언제냐. 4년 후. 그때까지 내가 여기 있을 수 있나. 모르겠다.대기업과 스타트업의 거울 인턴 때 다니던 대기업 선배와 커피를 마신다. "넌 왜 스타트업 갔어?" "더 배울 수 있을 것 같았어요." 선배가 웃는다. "스톡옵션 때문이지." 맞다. 숨기지 않는다. 선배는 대기업에서 개발자 30명 중 한 명이다. 월급 600만원. 보너스 3개월치. 스톡옵션 없다. 대신 휴가를 간다. 연 20일. 다 쓴다. 여행 가고 친구 만나고 쉰다. 코드리뷰를 받는다. 선임 개발자 4명이 본다. "여기 더 나을 수 있어요" 피드백이 나온다. 기술을 배운다. 장애 터져도 온콜이 아니다. 교대다. 선배 나이가 32살. 결혼했다. 아내는 회사원. 딸이 2살. "너도 결혼해야 해. 우리 대표한테 인사 좀 받고." 웃고 넘긴다. 선배가 정말 의미하는 건 뭔가. "충분히 벌고 충분히 쉬어. 스톡옵션 같은 건 버려. 현재가 최고야." 그런데 내가 그 말을 들을 수 있을까. 현재가 충분한 것처럼 느껴질까. 월급 600만원은 내 월급에 100만원만 더한 거다. 근데 환경이 완전히 다르다. 그 100만원이 가치가 있나. 있다. 지금은 없는데, 나중에 있을 거야. 그 "나중"이라는 게... 선배는 "절대로 안 온다"고 한다. 내가 이걸 쓰는 이유 3년이 흘렀다. 아직 여기 있다. 베스팅은 얼마나 차가 났나. 내년 여름쯤이면 75%. 또 1년 버티면 100%. 그 1년을 버틸 수 있나. 정말 모르겠다. 밤 3시다. 또 알람이 났다. DB 쿼리가 느려져서 서비스가 먹통이라고 한다. 나만 고칠 수 있다. 노트북을 킨다. 우리 회사 밸류가 또 올랐다는 소식을 들었다. 200억이라고. 확인 안 했다. 0.5% × 200억 = 1억. 1억. 아직도 먼 나라 같다. 1년 후에 이 글을 다시 읽으면 뭐라고 생각할까. 또 버텼으면 좋겠다. 버티는 게 맞기를. 근데 정말 그럴까. 쿼리를 최적화하고 배포하고 다시 테스트한다. 시간은 아침 5시. 새벽 공기가 차다. 창밖은 까만데 한두 개 불빛이 켜져 있다. 다른 누군가의 스타트업도 똑같은 시각일 거다. 그들도 스톡옵션을 기다리고 있을 거다. 모두가 "나중"을 기다린다. 정말 그 "나중"이 올까. 와도 좋고 안 와도 진짜 좋을 것 같다.내일도 온콜이고 내일도 기다릴 거다.