Showing Posts From

풀스택

기획자의 요청이 기획서가 아닐 때: 개발자가 기획자가 된다

기획자의 요청이 기획서가 아닐 때: 개발자가 기획자가 된다

기획자의 요청이 기획서가 아닐 때: 개발자가 기획자가 된다 오늘도 슬랙이 울렸다 오전 10시 37분. 슬랙 알림. "OOO님, 로그인 화면에 소셜 로그인 추가해주세요~ 급해요!" 기획서? 없다. 화면 설계? 없다. 어떤 소셜? 모른다. 이게 3년차 개발자의 일상이다.기획이 아니라 '아이디어'를 받는다 처음엔 물었다. "자세한 기획서 있나요?" 돌아오는 답: "아 그냥 카카오톡처럼요!" 카카오톡처럼. 네이버처럼. 쿠팡처럼. 그게 얼마나 복잡한지 아는가. 모른다. 그래서 나한테 물어본다. 결국 내가 묻는다:어떤 소셜 로그인? (구글, 카카오, 네이버, 애플?) 기존 계정이랑 연동은? (이메일 중복이면?) 프로필 정보는 어디까지? (이름만? 프사도?) 약관 동의는? (필수, 선택 구분은?) 에러 처리는? (소셜 연동 실패하면?)이게 개발자 질문인가, 기획자 질문인가.대답을 듣고 나서도 기획은 없다 대답은 온다. 하지만 여전히 애매하다. "일단 카카오, 구글만! 나머지는 나중에요." 나중에. 이 단어가 제일 무섭다. "연동은... 음, 이메일 같으면 하나로 합쳐주세요!" 합쳐주세요. 어떻게? 자동으로? 확인하고? 덮어쓰기? 병합? 결국 내가 정한다. 기획서를 내가 쓴다. 노션 켜서:사용자 플로우 그린다 예외 케이스 정리한다 UI 와이어프레임 그린다 (Figma까지 켠다) API 스펙 설계한다 DB 스키마 수정안 작성한다이거 다 하고 나면 2시간. 개발은 아직 한 줄도 안 했다. 결국 내가 PM이 된다 기획자에게 보낸다. "이렇게 하면 될까요?" 답: "오 좋아요! 그렇게 해주세요~" ...내가 물어본 건데 내가 답을 정했다. 이게 반복되면 학습한다. 아예 안 물어본다. 요청 오면:내가 바로 기획 완성 30분 안에 간단히 검증 바로 개발 시작더 빠르다. 커뮤니케이션 비용이 사라진다. 그런데 문제가 생긴다.책임은 개발자가 진다 기능 출시 후 2일. "아 이거 왜 이렇게 했어요? 이메일 덮어쓰기는 좀..." 내가 정했는데 내가 혼난다. "기획서에 없었잖아요." 이 말이 안 먹힌다. 왜냐면 애초에 기획서가 없었으니까. "그럼 물어보지 그랬어요." 물어봤다. 답이 애매했다. 그래서 내가 정했다. 이 과정을 설명하면 "아 그래도..." 로 끝난다. 결국: 기획자가 한 건 아이디어. 나머지는 다 내가 했다. 그런데 책임은 50:50이 아니다. 코드 짠 사람이 진다. 개발 시간은 누가 보상하나 기획하는 데 2시간. 개발하는 데 3시간. 총 5시간짜리 작업. 그런데 산정은? "개발 3시간이면 되죠?" 기획 시간은 안 쳐준다. 왜? 원래 기획자 일이니까. 그럼 나는 뭐지. 개발자인데 기획도 하는 사람. 풀스택의 의미가 확장된다:프론트 + 백엔드 (여기까진 예상함) DevOps (그래 이것도 인정) 디자인 (Figma 쓸 줄 알게 됨) 기획 (이건 예상 못 함) QA (테스트도 나) CS (장애 대응도 나)이게 연봉 4800에 스톡옵션 0.5%로 해결되는가. 그래서 기획 실력이 늘었다 아이러니하게도 기획을 잘하게 됐다. 사용자 플로우가 보인다. 예외 케이스가 보인다. "이렇게 하면 나중에 이런 문제 생긴다"가 보인다. 실제로 기획자보다 더 디테일하게 기획한다. 왜냐면:직접 구현할 사람이니까 장애 터지면 내가 고칠 거니까 나중에 수정하면 내가 할 거니까이게 장점인가 단점인가. 이력서에 쓸 수 있다: "기획부터 배포까지 전 과정 경험" 실제 의미: "혼자 다 했다" 경계가 사라진다 어느 순간부터 역할 구분이 없다. 회의에서:"이 기능 어떻게 하면 좋을까요?" → 나한테 물어봄 "이 화면 배치 괜찮을까요?" → 나한테 물어봄 "이 데이터 어떻게 보여줄까요?" → 나한테 물어봄대표님은 좋아한다. "역시 풀스택!" 기획자는 편해한다. 나한테 물어보면 되니까. 나는? 피곤하다. 개발만 하고 싶은데 기획 회의에 2시간. 기획만 하면 되나? 아니다. 개발도 해야 한다. 결국 둘 다 한다. 시간은 그대로다. 기획자는 정말 필요 없는가 가끔 생각한다. 기획자 없어도 되는 거 아닌가. 어차피 내가 다 하는데. 그런데 아니다. 기획자는 필요하다. 제대로 된 기획자면:시장 조사한다 경쟁사 분석한다 사용자 인터뷰한다 데이터 분석한다 우선순위 정한다 로드맵 그린다나는 이거 못 한다. 시간도 없고 역량도 없다. 문제는 "제대로 된 기획자"가 없다는 것. 12명 스타트업에서 기획자는 '주니어 1명'. 그 사람도 처음이라 헤맨다. 나한테 물어본다. 결국 내가 알려준다. 기획하는 법을. 이게 맞나 싶다. 이직할 때 뭐라고 쓰지 이력서 쓸 때마다 고민이다. "기획부터 개발, 배포, 운영까지 전체 프로세스 담당" 멋있게 들린다. 실제로는 "혼자 다 함". 면접에서 물어본다: "가장 어려웠던 점은?" 솔직하게 말한다: "명확한 기획 없이 개발하는 것" 그럼 또 묻는다: "그럼 어떻게 해결했나요?" "제가 기획했습니다." 이게 플러스인가 마이너스인가. 모르겠다. 어떤 회사는 좋아한다: "주도적이네요!" 어떤 회사는 걱정한다: "프로세스 없는 곳이었나보네요." 둘 다 맞다. 결국 나는 무엇인가 3년차 풀스택 개발자. 이력:React, Node.js, PostgreSQL, AWS Figma, Notion, 기획 문서 작성 프로젝트 매니징, 우선순위 조정 사용자 플로우 설계, 와이어프레임 DB 설계, API 설계 프론트 개발, 백엔드 개발 배포, 모니터링, 장애 대응 CS, 버그 수정이게 한 사람이 할 일인가. 명함에는 "Developer"라고 써있다. 실제로는 "Developer + PM + Designer + DevOps + QA" 연봉은 Developer 하나 값. 이게 스타트업이다. 이게 1인 개발자의 현실이다. 그래도 배우긴 했다 긍정적으로 보면: 기획 능력 생겼다. 이제 Product Sense가 있다. 사용자 관점에서 생각한다. "이거 쓰기 불편한데?" 가 보인다. 기술 선택할 때도 다르다. "이 기술이 좋다"가 아니라 "이 문제에 이 기술이 맞다". 전체를 본다. 부분이 아니라 흐름을. 이게 시니어 개발자로 가는 길인가? 모르겠다. 확실한 건: 이제 기획서 없어도 개발한다. 좋은 건지 나쁜 건지 모르겠다. 언제까지 이럴 건가 채용 공고 올린 지 6개월. "주니어 개발자 구합니다" 지원 없다. 면접 본 사람 2명. 안 뽑았다. 이유: "같이 일할 사람 없어서" 나밖에 없으니까 코드 리뷰 해줄 사람 없다. 가르쳐줄 시간도 없다. 기획도 해야 하고 개발도 해야 하는데. 결국 안 뽑는다. 나 혼자 한다. 이게 계속될수록 떠나기 어려워진다. 내가 없으면 서비스 터진다. 기획도 개발도 다 멈춘다. 책임감이 족쇄가 된다. 대안은 있는가 생각해봤다. 몇 가지 선택지:계속 한다장점: 안정적 (?) 단점: 번아웃이직한다장점: 제대로 된 프로세스 경험 단점: 여기 서비스는?프로세스 바꾼다장점: 근본 해결 단점: 안 바뀜 (시도해봄)현실은 1번. 계속한다. 왜? 떠나기 미안해서. 이게 맞나 싶다. 내 커리어인데. 다음 회사에서는 다짐한다. 다음 회사는:기획서 있는 곳 코드 리뷰 되는 곳 온콜 로테이션 도는 곳 개발자가 2명 이상인 곳최소한의 기준이다. 이게 사치인가. 이력서에 쓴다: "명확한 요구사항 정의와 협업 프로세스가 있는 환경을 선호합니다" 번역하면: "제발 기획서 좀 주세요" 그래도 남는 것 3년 동안: 기획 문서 87개 작성했다. 내가. 와이어프레임 120개 그렸다. Figma로. 사용자 플로우 42개 설계했다. 이게 개발자 포트폴리오에 들어가나? 모르겠다. 그래도 배웠다:문제를 정의하는 법 솔루션을 설계하는 법 우선순위를 정하는 법 커뮤니케이션하는 법 (혼자지만)이게 쓸모있을까. 아마도. 다음 회사에서는 "기획 잘 아는 개발자"가 될 것이다. 좋은 건지 나쁜 건지는 나중에 알겠지.결국 나는 개발자다. 기획도 하는 개발자. 선택이 아니라 생존이었다.

Docker 설정부터 배포까지: DevOps도 내 몫이다

Docker 설정부터 배포까지: DevOps도 내 몫이다

Docker 설정부터 배포까지: DevOps도 내 몫이다 어느 날 나는 DevOps 엔지니어가 되어 있었다 풀스택 개발자로 입사했다. JD에는 "React, Node.js 가능자" 라고 써있었다. 첫 출근날 대표님이 말했다. "AWS 계정 드렸어요. 배포 환경은 알아서 구축해주시면 돼요." 그날부터 나는 DevOps 엔지니어다. Docker, Kubernetes, CI/CD, 모니터링, 로그 수집, 백업, 보안. 전부 내가 한다. 개발자가 나 혼자라서 그렇다. 누가 할 사람이 없다.Docker부터 시작한 이유 처음엔 EC2에 바로 배포했다. Node.js 설치하고, PostgreSQL 설치하고, Nginx 설정하고. 한 달 뒤 서버가 터졌다. 뭐가 문제인지 모르겠다. 로컬에선 되는데 서버에선 안 된다. 버전 문제? 환경변수 문제? 3시간 삽질 후 깨달았다. "환경을 통일해야 한다." 그게 Docker였다. Dockerfile 작성했다. 처음엔 FROM node:14만 썼다. 지금은 multi-stage build로 이미지 크기 500MB에서 150MB로 줄였다. .dockerignore도 만들었다. node_modules 안 들어가게. docker-compose.yml도 만들었다. DB, Redis, API 한 번에 띄우게. version: '3.8' services: api: build: . ports: - "3000:3000" depends_on: - db db: image: postgres:14 environment: POSTGRES_PASSWORD: ${DB_PASSWORD}로컬에서도 쓴다. docker-compose up 하면 개발 환경 준비 끝. 새로 합류할 개발자 있으면 (언젠가) 바로 시작할 수 있다. ECR에 이미지 올리고 ECS로 돌리고 처음엔 EC2에 Docker 설치하고 거기서 돌렸다. 배포할 때마다 SSH 접속해서 git pull, docker build, docker run. 새벽 2시에 긴급 배포하면서 생각했다. "이거 자동화해야 한다." AWS ECR에 이미지 올리기로 했다. 로컬에서 빌드 → ECR push → EC2에서 pull → 컨테이너 재시작. 그것도 귀찮아서 ECS로 갈아탔다. Fargate 쓴다. 서버 관리 안 해도 된다. Task Definition 만들고, Service 만들고, Load Balancer 연결하고. 처음 설정하는데 이틀 걸렸다. 문서 보면서 삽질. 근데 한 번 만들어두니까 편하다. 새 이미지 푸시하면 자동으로 교체된다. 블루-그린 배포도 설정했다. 무중단 배포. 대표님이 "오, 전문적이네요" 했다. 뿌듯했다. 3일 밤샘한 건 안 말했다.GitHub Actions로 CI/CD 구축 배포 자동화했다고 끝이 아니다. 빌드 → 테스트 → 이미지 푸시 → 배포. 이 과정을 자동화해야 한다. GitHub Actions 쓴다. 무료 티어로도 충분하다. .github/workflows/deploy.yml 만들었다. main 브랜치에 푸시하면 자동으로 돌아간다. name: Deploy on: push: branches: [ main ] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Build Docker image run: docker build -t myapp . - name: Push to ECR run: | aws ecr get-login-password | docker login ... docker push ... - name: Deploy to ECS run: aws ecs update-service ...실제론 더 복잡하다. 환경변수, 시크릿, 롤백 로직. 처음엔 실패했다. IAM 권한 문제, 환경변수 누락, 타임아웃. 로그 보면서 하나씩 고쳤다. 지금은 커밋 푸시하면 10분 뒤 배포 완료된다. 슬랙에 알림 온다. "Deployment successful ✅" 실패하면 롤백된다. "Deployment failed ❌ Rolling back..." 혼자 만들었다. 뿌듯하다. 근데 유지보수도 혼자 한다. 피곤하다. 모니터링은 필수다 배포하고 끝이 아니다. 서버 살아있는지 봐야 한다. CloudWatch 쓴다. CPU, 메모리, 네트워크 지표. 알람 설정했다. CPU 80% 넘으면 슬랙 알림. 새벽 4시에 알림 왔다. CPU 95%. 뭔가 터졌다. 급하게 노트북 켜서 확인했다. 무한 루프 버그였다. 롤백했다. 10분 만에 복구. 그 뒤로 알람을 더 세밀하게 만들었다. 에러율 5% 넘으면 알림, 응답속도 2초 넘으면 알림, 메모리 부족하면 알림. Sentry도 붙였다. 프론트/백엔드 에러 추적. 에러 나면 슬랭에 바로 온다. 스택 트레이스까지. 덕분에 새벽 알림이 더 늘었다. 주말에도 온다. 디테일하게 설정한 내 잘못이다.로그는 어디로 가는가 서버 여러 대 돌아간다. ECS task 3개. 각 컨테이너가 로그를 뱉는다. 어디서 봐야 하나. CloudWatch Logs에 다 모인다. Log Group 만들어뒀다. 근데 찾기 힘들다. 로그가 너무 많다. "5분 전에 에러 났는데 어디 있지?" 스크롤 하다가 지친다. ElasticSearch 고려했다. 비싸다. 월 100만원. 대신 CloudWatch Insights 쓴다. 쿼리 짜서 검색한다. SQL 비슷하다. fields @timestamp, @message | filter @message like /ERROR/ | sort @timestamp desc | limit 100에러 로그만 필터링해서 본다. 특정 사용자 요청 추적도 가능하다. Request ID로 그룹핑. 처음엔 쿼리 짜는 게 어려웠다. 지금은 익숙하다. 대표님이 "이 기능 왜 느려요?" 물으면 로그 바로 뽑는다. "14:32:05에 DB 쿼리가 3초 걸렸네요. 인덱스 문제입니다." 데이터로 말한다. 설득력 있다. 백업과 재해 복구 처음엔 백업 신경 안 썼다. "PostgreSQL RDS 쓰는데 자동 백업되지 않나?" 된다. 근데 복구 테스트는 안 해봤다. 어느 날 대표님이 물었다. "DB 날아가면 어떻게 되나요?" "...RDS 스냅샷이 있습니다." "복구해본 적 있어요?" 없었다. 그날 밤 복구 시나리오 짰다.RDS 스냅샷 복원 (30분 소요) 환경변수 업데이트 ECS task 재시작 헬스체크 확인테스트 환경에서 해봤다. 1시간 걸렸다. 프로덕션에서 하면 더 걸릴 것 같다. 압박 받으면 실수한다. 스크립트 만들었다. 복구 절차 자동화. S3에 매일 백업도 추가했다. DB 덤프 떠서 올린다. 이제 조금 안심이다. 완전히는 아니다. 재해 복구 계획서도 썼다. 대표님께 공유했다. "전문적이네요." 또 들었다. 근데 이거 원래 DevOps 팀이 할 일 아닌가. 보안은 끝이 없다 AWS 계정 만들고 바로 했던 것. MFA 설정. 루트 계정은 봉인했다. IAM 유저로만 쓴다. 권한은 최소한으로. 필요한 것만 준다. 시크릿은 코드에 안 넣는다. 환경변수나 Secrets Manager. 처음엔 환경변수에 직접 박았다. .env 파일. 그게 git에 올라갔다. API 키가 public repo에. 바로 삭제하고 키 재발급했다. 식은땀 났다. 지금은 AWS Secrets Manager 쓴다. 코드에서 불러온다. 비밀번호도 rotation 설정했다. 90일마다 바뀐다. 보안 그룹도 손봤다. 불필요한 포트 다 막았다. SSH는 내 IP에서만 접근 가능. RDS는 VPC 내부에서만 접근. Load Balancer만 외부에 노출. AWS Inspector 돌려봤다. 취약점 스캔. 몇 개 나왔다. 패치 적용했다. Security Hub도 켰다. 대시보드로 한눈에. 이거 다 공부하는 데 한 달 걸렸다. 보안은 끝이 없다. 근데 해야 한다. 한 번 뚫리면 끝이다. 비용 최적화는 계속된다 AWS 계정 만든 첫 달. 청구서 30만원. "왜 이렇게 나왔지?" Cost Explorer 열었다. 항목별로 나온다. NAT Gateway가 15만원. 왜? 트래픽이 많아서? 아니다. 설정을 잘못했다. VPC endpoint 만들어서 해결. 비용 70% 감소. ECS Fargate도 비쌌다. Task 계속 돌아간다. 스케줄링 넣었다. 새벽에는 task 줄인다. 트래픽 적으니까. RDS는 Reserved Instance로 바꿨다. 1년 약정. 40% 할인. S3는 Intelligent-Tiering 설정. 자주 안 쓰는 건 Glacier로. CloudWatch Logs는 retention 30일. 오래된 건 삭제. 지금은 월 18만원 정도. 반으로 줄었다. 매주 Cost Anomaly Detection 확인한다. 비정상 지출 있으면 알림. 대표님이 "비용 관리 잘하네요" 했다. 당연하다. 회사 돈이고, 내 월급이 여기서 나온다. 근데 이것도 개발자가 할 일인가 싶다. 언제부터 나는 DevOps 엔지니어였나 JD엔 풀스택 개발자라고 했다. 입사 3년. 이제 뭐가 내 업무인지 모르겠다. 프론트 개발 30%, 백엔드 개발 30%, DevOps 40%. 비율로 따지면 DevOps가 제일 많다. Docker, AWS, CI/CD, 모니터링, 로그, 백업, 보안, 비용. 전부 혼자 공부했다. 유튜브, 문서, 삽질. AWS 공인 자격증도 땄다. Solutions Architect Associate. 회사에서 시험비 지원해줬다. 15만원. 합격하고 나서 연봉 협상했다. "DevOps 업무 비중이 크니 조정 필요합니다." 올랐다. 300만원. 연봉 5100만원. 감사하다. 근데 시장가보다는 낮다. 이직하면 6500만원은 받을 수 있다. DevOps 경력 3년이면. 근데 못 간다. 여기 내가 만든 인프라다. 내가 없으면 배포 못 한다. 장애 대응 못 한다. 책임감이다. 아니면 집착이다. 동기가 물었다. "너 언제까지 거기 있을 거야?" 모르겠다. 개발자 한 명 더 뽑히면 그때 생각해본다. 근데 6개월째 안 뽑힌다. 풀스택에서 원맨밴드로 요즘 명함에 뭐라고 써야 할지 모르겠다. Full-stack Developer? DevOps Engineer? SRE? 전부 맞는 것 같기도 하고, 전부 틀린 것 같기도 하다. 정확하게는 "혼자 다 하는 사람"이다. 기획자가 "이 기능 추가해주세요" 하면 프론트 만들고. 백엔드 API 만들고, DB 스키마 수정하고. Docker 이미지 빌드하고, ECR에 푸시하고. ECS 배포하고, 모니터링 설정하고. 장애 나면 로그 보고, 원인 찾고, 패치하고. 비용 넘치면 최적화하고. 보안 이슈 나면 대응하고. 이게 한 사람의 일인가. 대기업 가면 이 일을 팀 단위로 나눠서 한다. 프론트팀, 백엔드팀, DevOps팀, SRE팀. 여긴 나 혼자다. 장점은 빠르다. 의사결정 필요 없다. 그냥 한다. 단점은 외롭다. 코드리뷰 없다. 내 방식이 맞는지 모른다. 기술 부채 쌓인다. 리팩토링할 시간 없다. 기능 개발이 우선이다. 번아웃 온다. 온콜 24시간. 휴가 못 간다. 내가 없으면 서비스 멈춘다. 그래도 배운 건 많다. 3년 전엔 Docker가 뭔지도 몰랐다. 지금은 Kubernetes도 할 수 있다. 필요하면. AWS는 10개 넘는 서비스 쓴다. 손에 익었다. 이력서는 화려해졌다. 실무 경험 빡빡하다. 이직하면 잘 나갈 것 같다. 근데 지금은 여기서 버틴다. 조금만 더. 다음 개발자를 위한 문서 언젠가 개발자가 한 명 더 들어올 것이다. 그 사람을 위해 문서 쓴다. "온보딩 가이드", "배포 매뉴얼", "장애 대응 플레이북". Notion에 정리한다. 스크린샷 넣고, 명령어 적고. 다음 사람이 나처럼 삽질 안 하길 바란다. README.md도 열심히 쓴다. "로컬 환경 설정", "환경변수 설정", "Docker로 실행하기". 코드에 주석도 단다. "왜 이렇게 했는지" 설명. 미래의 나를 위해서이기도 하다. 6개월 뒤엔 내가 쓴 코드도 이해 못 한다. 그때 주석 보고 "아, 그래서 이렇게 했구나" 한다. 문서화는 시간 많이 걸린다. 근데 안 하면 더 걸린다. 같은 질문 받고, 같은 설명 반복하는 시간. 한 번 써두면 계속 쓴다. 대표님도 본다. "문서 정리 잘 되어있네요." "나중에 팀 커지면 도움 될 겁니다." 나중이 언제인지 모르겠지만, 준비는 해둔다.개발자인데 DevOps 엔지니어 됐다. 아니, 될 수밖에 없었다. 혼자니까. 그래도 배운 건 많다. 지치긴 하지만.

서울 투룸 월세 80만원, 그리고 자택 근무의 경계 흐려짐

서울 투룸 월세 80만원, 그리고 자택 근무의 경계 흐려짐

서울 투룸 월세 80만원, 그리고 자택 근무의 경계 흐려짐 집이 사무실이 되는 순간 월세 80만원. 서울 기준으로 괜찮은 편이다. 역세권 투룸. 깔끔하게 이사했다. 6개월 전 일이다. 지금? 여기가 집인지 사무실인지 모르겠다. 침대 옆에 모니터 2개. 책상에 노트북 2대. 거실엔 테스트용 태블릿 3개. 주방 테이블에도 맥북 하나 놓여있다. 왜 이렇게 됐냐고?"재택 하세요. 편하게." 대표님의 배려였다. 처음엔 좋았다. 출퇴근 2시간 세이브. 아침 늦게까지 잘 수 있다. 편한 옷으로 일한다. 2주 정도는 천국이었다. 그런데. 침대에서 일어나자마자 슬랙 확인. 화장실 가면서 노트북 들고 간다. 밥 먹으면서 코드 리뷰. 자기 직전까지 배포. 경계가 사라졌다. 침대가 사무실이 된 이유 침대에서 일하게 된 건 필연이었다. 새벽 4시 장애 알림. 침대에서 일어나서 책상 가기 귀찮다. 그냥 침대에서 노트북 펼친다. 30분이면 끝날 줄 알았다. 2시간 걸렸다. 그대로 다시 잤다. 노트북 옆에서. 다음 날도 똑같다. 침대에서 일어나면 바로 노트북. 씻기 전에 슬랙부터 확인. "어제 수정한 거 확인 부탁드려요." "긴급 버그 있는데요." "API 응답이 느린 것 같은데." 10시 전에 메시지 20개. 침대에서 답장 보낸다. 그러다 보면 이미 일하는 중이다.책상에 앉는 건 '진짜 일'할 때다. 배포하거나. 중요한 코딩하거나. 미팅 있을 때. 나머지는 침대에서 다 한다. 버그 수정. 코드 리뷰. 문서 작성. DB 쿼리 돌리기. 침대가 편하다. 등 기대고 할 수 있다. 자세 바꾸기도 쉽다. 문제는 잘 때다. 누워서 잔다. 노트북 옆에 두고. 충전기 꽂아놓고. 알람 울리면 옆에 노트북이 보인다. 반사적으로 연다. '어제 커밋 잘 들어갔나.' '로그 확인해야지.' 일어나기도 전에 일한다. 집이 아니다. 사무실이다. 침대 딸린. 거실은 테스트 공간 거실 테이블. 원래는 밥 먹는 곳이었다. 지금은 다르다. 태블릿 3개 놓여있다. 아이패드, 갤럭시탭, 킨들. 왜? 반응형 테스트 때문이다. "모바일에서 레이아웃 깨지는데요." 대표님 메시지. 급하게 확인해야 한다. 책상에서 일어나기 귀찮다. 거실 테이블에 태블릿 놓고 테스트한다. 한 번 그러니까 습관이 됐다.거실에도 맥북 하나 놓게 됐다. 왜? 밥 먹으면서 로그 확인하려고. 배달 음식 시켜서 먹는다. 거실 바닥에 앉아서. 노트북 켜놓고. "아 맞다. 저거 수정해야 하는데." 젓가락 놓고 타이핑한다. 밥 식는다. 다시 먹는다. 또 타이핑. 30분 걸릴 식사가 2시간 걸린다. 거실 바닥에 흔적 남는다. 충전기. 케이블. 마우스. 키보드. 에너지 드링크 캔. 과자 봉지. 청소? 주말에 한다. 근데 주말에도 일한다. 그래서 안 치운다. 이제 거실 바닥이 더 편하다. 책상보다. 등 기대고 앉을 데도 많다. 자세 바꾸기도 쉽다. 친구 오면 민망하다. "야, 너 여기서 사는 거 맞아?" 맞다. 사는 건 맞는데. 일도 하는 곳이다. 아니, 일하는 곳인데 자기도 하는 곳이다. 뭐가 맞는지 모르겠다. 주방 테이블의 배신 주방 테이블. 제일 깨끗했던 곳이다. 한 달 전까지만 해도. 지금은 거기도 점령당했다. 계기는 간단했다. 라면 끓여 먹는다. 주방 테이블에 앉는다. 슬랙 알림 온다. "긴급한데 확인 가능하세요?" 라면 먹으면서 노트북 펼친다. 주방 테이블에서. 간단한 수정이었다. 10분 걸렸다. 근데 그게 시작이었다. 다음 날도 라면 끓인다. 주방 테이블. 슬랙 확인. 노트북 펼친다. 이제 습관이다. 주방 테이블에 노트북 상주한다. 왜? 커피 내려 마시면서 작업하려고. 아침에 핸드드립 한다. 10분 걸린다. 기다리면서 뭐 하나. 노트북 펼친다. 커피 내리면서 코드 수정한다. 효율적이다. 시간 낭비 없다. 문제는 식사 시간이다. 밥 먹으러 주방 가면 노트북이 보인다. 자동으로 연다. '저거 빨리 확인하고.' '이것만 고치고 먹어야지.' 밥 식는다. 매번. 배달 음식 시키면 더하다. 치킨 시킨다. 주방 테이블에 놓는다. 노트북 옆에. 한 손으로 치킨 먹는다. 한 손으로 타이핑한다. 키보드에 기름 묻는다. 티슈로 닦는다. 또 묻는다. 이제 주방도 사무실이다. 화장실만 남았다 화장실. 마지막 안식처였다. 과거형이다. 지금은 거기도 아니다. 볼일 보면서 슬랙 확인한다. 핸드폰으로. "급한 건 아닌데요..." 그러면서 붙는 업무 요청. 화장실에서 답장 보낸다. "네, 확인했습니다. 30분 안에 처리하겠습니다." 볼일 빨리 끝낸다. 나가서 노트북 펼친다. 샤워할 때도 마찬가지다. 샤워 전에 배포 돌린다. 10분 걸린다고 나온다. "샤워하고 오면 되겠네." 샤워한다. 5분 만에 끝낸다. 나와서 확인한다. 배포 실패했다. 젖은 머리로 롤백한다. 다시 배포한다. 수건도 안 두른다. 그냥 의자에 앉는다. 20분 뒤 성공한다. 그제야 머리 말린다. 머리카락 물 뚝뚝 떨어진다. 키보드에. 닦는다. 또 떨어진다. 이제 샤워 시간도 계산한다. '배포 15분 걸리니까 샤워 10분 안에 끝내야지.' 화장실이 휴식 공간이 아니다. 대기 시간이다. 다음 작업까지의. 밤 12시의 침대 회의 밤 12시. 자야 하는 시간이다. 근데 침대에서 노트북 펼친다. "오늘 것만 끝내고 자야지." 30분이면 된다고 생각한다. 항상 거짓말이다. 2시간 걸린다. 새벽 2시. 이제 진짜 자야 한다. 노트북 닫는다. 충전기 꽂아놓는다. 침대 옆에. 불 끈다. 눈 감는다. 슬랭 알림음. "내일 아침까지 급한데요." 핸드폰 확인한다. 침대에서. "네, 확인했습니다." 노트북 다시 펼친다. 침대에서. 불 안 켠다. 노트북 화면 빛으로 작업한다. 1시간 더 걸린다. 새벽 3시. 완료됐다. 메시지 보낸다. "완료했습니다. 확인 부탁드립니다." 노트북 닫는다. 다시. 눈 감는다. 다시. 근데 잠이 안 온다. 머릿속에 코드가 돌아간다. '저 부분 리팩토링해야 하는데.' '내일 저거 먼저 수정하고.' 'DB 인덱스도 추가해야 하고.' 침대가 회의실이다. 혼자 하는. 새벽 4시에 겨우 잔다. 8시에 알람 울린다. 침대 옆 노트북이 보인다. '어제 배포 잘 됐나.' 반사적으로 연다. 또 시작이다. 월세 80만원의 의미 월세 80만원. 싸지 않다. 근데 이게 집 값인가. 사무실 임대료인가. 계산해봤다. 하루 24시간. 잠 6시간 빼면 18시간. 그 중 일하는 시간. 평균 14시간. 집에 있는 시간의 78%를 일한다. 사무실이다. 집이 아니라. 80만원. 한 달 30일. 하루 26,666원. 14시간 일한다. 시간당 1,905원. 사무실 시간당 임대료로 치면 싸다. 근데 집으로 치면 비싸다. 2시간밖에 안 쉰다. 하루에. 잠자는 시간 빼면. 월세 80만원이 아니다. 사무실 임대료 80만원이다. 침대 딸린. 친구가 물었다. "이사 안 해? 더 좋은 데로." 대답 못 했다. 어차피 집이 사무실인데 뭐가 중요한가. 거실이 넓든. 방이 하나 더 있든. 다 사무실 확장이다. 경계가 사라진 공간 일과 삶의 경계. 없다. 공간적 경계도 없다. 침대 = 사무실 거실 = 테스트룸 주방 = 서브 오피스 화장실 = 대기실 집 어디에도 일 안 하는 곳이 없다. 베란다? 거기도 위험하다. 담배 피우면서 슬랙 확인한다. "급한 거 아니면 내일 하겠습니다." 그렇게 말하고 들어온다. 노트북 펼친다. 결국 한다. 급하지 않아도. 왜? 일하는 게 습관이 됐다. 집에 있으면 자동으로 일한다. 의식적으로 멈춰야 쉰다. 근데 멈추는 게 어렵다. 노트북이 보이면 일한다. 핸드폰 보이면 슬랙 확인한다. 집에서 벗어나야 쉰다. 카페 간다. 노트북 안 가져간다. 핸드폰만. 2시간 앉아있는다. 커피 마신다. 슬랙 알림 온다. 참는다. 30분 참는다. 못 참는다. 답장 보낸다. "지금 밖인데 들어가서 확인하겠습니다." 카페에서 나온다. 집 간다. 노트북 펼친다. 쉬는 시간 끝. 자택 근무의 역설 자택 근무. 좋은 제도다. 이론상으로는. 출퇴근 안 해도 된다. 편한 옷 입는다. 시간 자유롭다. 실제로는 다르다. 출근하면 퇴근이 있다. 사무실 나오면 집이다. 일 끝난다. 자택 근무는 다르다. 출근이 없으니 퇴근도 없다. 일어나면 출근. 자면 퇴근. 24시간 대기 상태다. 언제든 일할 수 있다. 그러니까 언제든 일한다. "지금 시간 괜찮으세요?" 밤 11시 메시지. 자택 근무니까 괜찮다고 생각한다. 그들은. 실제로 괜찮다. 노트북이 옆에 있으니까. 응답한다. 일한다. 자택 근무의 역설이다. 자유로운 것 같지만 더 묶인다. 사무실보다 더 많이 일한다. 왜? 경계가 없으니까. 되돌릴 수 없는 습관 습관이 됐다. 침대에서 일하는 거. 거실 바닥에 앉아서 작업하는 거. 밥 먹으면서 코드 보는 거. 고치고 싶다. 근데 고칠 수가 없다. 혼자 개발자다. 대체 인력 없다. 언제든 대응해야 한다. 그러니까 언제든 일할 수 있어야 한다. 집이 사무실이 되는 건 필연이다. 선택이 아니다. 생존이다. 친구들 만난다. "너 요즘 어때?" "괜찮아. 재택이라 편해." 거짓말이다. 편한 게 아니다. 갇혔다. 집에. 월세 80만원짜리 사무실에.침대 옆 노트북을 치우지 못하는 이유를 이제 안다. 치우면 불안하다. 장애 나면 어떡하지.

입버릇 '제가 볼게요': 모든 문제의 흡수 지점이 되어버린 나

입버릇 '제가 볼게요': 모든 문제의 흡수 지점이 되어버린 나

입버릇 '제가 볼게요': 모든 문제의 흡수 지점이 되어버린 나 "제가 볼게요." 오늘도 이 말을 했다. 세 번째다. 아침 10시, "이 버그 어떻게 해야 하나요?" → "제가 볼게요." 점심 1시, "DB 느린데 최적화 가능한가요?" → "제가 볼게요." 오후 4시, "결제 모듈 이상한 것 같은데..." → "제가 볼게요." 이게 언제부터였나. 입사하고 한 달쯤 지났을 때부터였던 것 같다. 처음엔 프론트만 하려고 들어왔다. 그런데 백엔드 개발자가 퇴사했다. 대표가 물었다. "Node.js 할 줄 아시죠?" 할 줄 안다고 했다. 실수였다.흡수 지점의 탄생 처음엔 나쁘지 않았다. "이것도 할 줄 아세요?" "네, 해봤습니다." "저것도 가능하세요?" "해보겠습니다." 배우는 게 좋았다. 풀스택이라는 타이틀도 괜찮았다. 이력서에 쓸 수 있는 기술 스택이 늘어났다. React, Node.js, PostgreSQL, Redis, Docker, AWS. 뭐든 할 수 있다는 느낌. 개발자로서 성장하는 기분. 그런데 6개월이 지나자 달라졌다. "이거 누가 해요?" → 나 "저거 담당자가 누구죠?" → 나 "이 문제 아는 사람?" → 나 모든 질문의 끝이 나였다. 프론트 버그도 나, 백엔드 에러도 나, DB 쿼리 최적화도 나, 배포도 나, 모니터링도 나. 심지어 디자인 시안 검토도 "개발자 의견 좀 들어볼까요?" 하면 나였다. 입버릇이 됐다. "제가 볼게요." 다른 말을 할 수가 없었다. 다른 개발자가 없으니까. 물어볼 사람이 없으니까. 해결할 사람이 나밖에 없으니까.'오늘 중으로'라는 주문 더 문제인 건 다음 말이었다. "오늘 중으로 될 거예요." 이것도 입버릇이 됐다. 왜 그랬을까. 지금 생각해보면 바보 같다. 월요일 아침, 대표가 물었다. "이번 주 금요일까지 결제 모듈 붙일 수 있어요?" "네, 될 거예요." 화요일 점심, 기획자가 물었다. "이 기능 이번 주 안에 나올 수 있나요?" "오늘 중으로 확인해드릴게요." 수요일 오후, 디자이너가 물었다. "이 UI 수정 언제까지 가능해요?" "내일까지 될 거예요." 목요일 저녁, 나는 터미널 앞에 앉아 있었다. 해야 할 일 목록을 봤다.결제 모듈 연동 (50% 완료) 신규 기능 개발 (30% 완료) UI 수정 7건 (0% 완료) 기존 버그 수정 3건 (0% 완료) API 성능 개선 (계획만)전부 "될 거예요"라고 말한 것들이었다. 시계를 봤다. 오후 7시. 퇴근 시간은 지났다. 에너지 드링크를 땄다. 두 번째였다. "오늘 중으로" 해야 했다. 내가 그렇게 말했으니까. 새벽 3시에 퇴근했다. 다음 날 11시에 출근했다. 대표가 물었다. "어제 말한 거 됐어요?" "네, 됐습니다." 거짓말은 아니었다. 잠을 안 자면 됐다.24시간 온콜 시스템 더 심각한 건 따로 있었다. 장애 알림이었다. 새벽 2시, 핸드폰이 울렸다. 슬랙 알림. "서버 응답 없음." 눈을 떴다. 노트북을 켰다. AWS 콘솔에 접속했다. EC2 인스턴스가 죽어 있었다. 재시작했다. 다시 잤다. 새벽 4시, 또 울렸다. "DB 연결 오류." 일어났다. RDS를 확인했다. 커넥션 풀이 터졌다. 코드를 수정했다. 배포했다. 알람을 껐다. 아침 7시, 또 울렸다. 이번엔 전화였다. 대표였다. "고객이 결제가 안 된대요." 침대에서 일어났다. 노트북으로 로그를 확인했다. PG사 API가 타임아웃이었다. 재시도 로직을 추가했다. "지금 됩니다." 전화를 끊었다. 10시에 출근했다. 대표가 웃으며 말했다. "고생했어요. 오늘은 일찍 퇴근하세요." 일찍 퇴근이 뭔지 몰랐다. 7시에 나갔다. 집에 도착했다. 9시였다. 씻고 침대에 누웠다. 10시에 슬랙이 울렸다. "급한 건데요, 내일 아침까지 이거 가능한가요?" 노트북을 다시 켰다. 혼자라는 것의 무게 문제는 간단했다. 나 말고 없었다. 코드리뷰를 해줄 사람이 없었다. 내 코드가 맞는지 틀린지 몰랐다. 스택오버플로우만 믿었다. GPT한테 물어봤다. 그래도 확신이 없었다. 페어 프로그래밍을 할 사람이 없었다. 막히면 혼자 끙끙댔다. 3시간 동안 버그를 찾았다. 오타였다. 누군가 옆에서 봤으면 5분이면 찾았을 것이다. 휴가를 갈 수 없었다. 작년에 3일 휴가를 냈다. 이틀째 되는 날 전화가 왔다. "서버가 안 되는데요." 휴가지에서 노트북을 켰다. 나머지 하루는 호텔에서 코딩했다. 백업이 없었다. 내가 아프면? 내가 사고 나면? 서비스가 터진다. 그 생각에 병원도 못 갔다. 작년에 독감 걸렸을 때도 재택으로 일했다. 38도 열이 나는데 코드를 짰다. 이게 맞나 싶었다. 채용 공고의 빈자리 6개월 전부터 채용 공고를 냈다. "주니어 개발자 채용" "경력 1년 이상" "풀스택 환영" 지원자는 많았다. 면접을 봤다. 문제는 내가 면접을 봐야 한다는 거였다. 화요일 오후 2시, 면접 일정이 잡혔다. 오전에 급한 버그가 터졌다. 고객사 데모가 3시였다. 면접을 미뤘다. 목요일 오후 4시, 다시 잡았다. 오후 1시에 서버 장애가 났다. 원인을 찾는데 3시간 걸렸다. 면접 시간에 장애를 해결하고 있었다. 지원자한테 사과 메일을 보냈다. 다음 주 월요일, 세 번째 시도. 이번엔 면접을 봤다. 30분 동안 기술 질문을 했다. "우리 서비스는요..." 설명하다가 슬랙이 울렸다. "급한 건데요." 면접 중간에 노트북을 켰다. 그 지원자는 합격 통보를 거절했다. 당연했다. 나라도 안 왔을 것이다. 지금까지 15명을 면접 봤다. 합격 통보를 한 사람이 4명. 실제로 입사한 사람은 0명이었다. "연봉 조건이 안 맞아요", "업무 범위가 너무 넓어요", "다른 곳으로 결정했습니다." 다 이해했다. 여기 오면 나처럼 된다. 누가 오겠나. 기술 부채라는 시한폭탄 코드를 볼 때마다 한숨이 나왔다. 6개월 전에 짠 코드였다. 주석이 없었다. 변수명이 'temp', 'data', 'result'였다. 뭐 하는 코드인지 몰랐다. 내가 짠 코드인데. 급하게 짠 코드들이었다. "오늘 중으로"를 지키려고 막 짰다. 테스트 코드? 없었다. 리팩토링? 시간이 없었다. 일단 돌아가게만 만들었다. 그게 쌓였다. 이제는 새 기능을 추가할 때마다 무서웠다. 어디가 터질지 몰랐다. A를 수정하면 B가 깨졌다. B를 고치면 C가 망가졌다. 스파게티 코드의 정석이었다. 리팩토링을 하고 싶었다. 주말에 시도했다. 토요일 오전 10시부터 시작했다. 오후 3시에 슬랙이 울렸다. "고객사 데모 준비 됐나요?" 월요일이었다. 준비 안 됐다고 말할 수 없었다. 리팩토링을 멈췄다. 데모 준비를 했다. 일요일 저녁에 다시 시도했다. 밤 11시에 장애 알림이 왔다. 리팩토링하다가 뭔가 건드린 것 같았다. 롤백했다. 리팩토링 브랜치를 지웠다. 기술 부채는 계속 쌓였다. 언젠가 터질 것이다. 그때 나는 여기 있을까. 책임감이라는 올가미 이직을 생각했다. 여러 번. 작년 9월, 채용 공고를 봤다. "시니어 백엔드 개발자", "연봉 7000만원~", "워라밸 보장". 이력서를 썼다. 저장만 하고 보내지 않았다. 12월, 다시 봤다. "풀스택 개발자", "스타트업 경험자 우대". 이력서를 업데이트했다. 이번에도 안 보냈다. 올해 2월, 친구가 연락 왔다. "우리 회사 오면 어때?" 조건이 좋았다. 연봉도 오르고 팀도 있다. 고민했다. 거절했다. 왜? 책임감 때문이었다. 내가 떠나면 서비스가 터진다. 진짜로. 코드를 아는 사람이 나밖에 없다. 인수인계? 누구한테? 신입이 오면? 그 사람이 적응할 때까지 몇 개월이 걸린다. 그동안 누가 서비스를 유지하나. 대표한테 미안했다. 믿고 맡겼는데. 회사가 어려운 거 알았다. 직원이 12명밖에 안 됐다. 투자 유치도 힘들다고 했다. 개발자 연봉을 올려줄 여유가 없었다. 동료들한테도 미안했다. 내가 떠나면 그들도 힘들어진다. 기획자는 개발 일정을 못 잡는다. 디자이너는 구현 가능한지 물어볼 사람이 없다. 마케터는 기능 개발을 못 한다. 고객한테도 미안했다. 서비스를 쓰는 사람들이 있었다. 많지는 않았다. 그래도 매일 쓰는 사람들이었다. 내가 떠나면 그들은? 그래서 못 떠났다. 책임감이 올가미가 됐다. 마지못한 '제가 볼게요' 요즘은 이 말을 할 때 감정이 없다. "제가 볼게요." 자동으로 나왔다. 반사 작용이었다. 생각하지 않고 말했다. 어차피 내가 봐야 했다. 다른 선택지가 없었다. 오늘 오후, 기획자가 물었다. "이 버그 급한데, 오늘 중으로 될까요?" "제가 볼게요." 3초도 안 걸렸다. 무슨 버그인지도 안 봤다. 일단 받았다. 어차피 해야 할 것이다. 저녁, 대표가 물었다. "내일 미팅에서 데모 보여줘야 하는데, 이 기능 추가 가능해요?" "오늘 중으로 될 거예요." 시계를 안 봤다. 오후 6시였다. 퇴근 시간이었다. 그래도 말했다. "될 거예요." 습관이었다. 밤 11시, 아직 회사였다. 기능을 추가하고 있었다. 테스트를 돌렸다. 버그가 나왔다. 고쳤다. 또 버그가 나왔다. 고쳤다. 새벽 2시, 집에 왔다. 내일 아침 미팅이 9시였다. 6시간 자면 됐다. 괜찮았다. 어제도 그랬다. 에너지 드링크를 마셨다. 오늘 네 번째였다."제가 볼게요." 오늘도 다섯 번 말했다. 내일은 몇 번 말하게 될까.

에너지 드링크 하루 2캔, 내 생명줄

에너지 드링크 하루 2캔, 내 생명줄

에너지 드링크 하루 2캔, 내 생명줄 아침 9시, 첫 번째 캔 눈 뜨자마자 손이 간다. 침대 옆 테이블. 핫식스 250ml. 따는 소리가 익숙하다. 푸슈. 첫 모금. 탄산이 목을 긁는다. 이제 시작이다. 씻지도 않고 노트북 켠다. 슬랙 확인. 새벽 3시에 온 메시지가 있다. "내일 아침까지 이거 급한데요." 내일이 오늘이다. 웃긴다.에너지 드링크를 마시기 시작한 게 언제였나. 정확히 기억난다. 2년 전. 첫 스타트업 입사 2주차. "개발자면 밤샘 정도는 해야지." 대표가 웃으며 말했다. 농담 같았다. 진담이었다. 그날 밤 11시까지 일했다. 집에 가니 1시. 씻고 누우니 2시. 다음날 9시 출근. 6시간 잤다. 졸렸다. 동료가 건넸다. 핫식스. "이거 먹으면 깬다." 마셨다. 30분 후 정신이 들어왔다. 신기했다. 그게 시작이었다. 점심 먹고, 두 번째 캔 12시 반. 점심은 김밥천국. 돈까스 6500원. 먹으면서 노트북 본다. AWS 비용 알림. 또 올랐다. RDS 인스턴스가 문제다. 쿼리 최적화 해야 하는데. "오늘 해야지." 이미 2주째 미루는 중이다. 1시. 사무실 복귀. 졸음이 온다. 점심 먹으면 당연하다. 오후 2시가 고비다. 냉장고를 연다. 레드불. 두 번째 캔.카페인 함량을 아냐. 핫식스 250ml: 62.5mg 레드불 250ml: 80mg 하루 두 캔이면 140mg 정도. 의학 자료 찾아봤다. 성인 권장량 400mg 이하. "아직 괜찮네." 이게 내 논리다. 근데 커피도 마신다. 아메리카노 2잔. 카페인 200mg 추가. 합계 340mg. 권장량 안쪽이다. "문제없어." 스스로를 속인다. 오후 4시, 슬럼프 카페인이 떨어진다. 몸이 안다. 집중력이 흐려진다. 코드가 안 보인다. 세 번째 캔을 고민한다. "참자. 저녁에 마시자." 10분 버틴다. 안 된다. 냉장고로 간다. 몬스터 에너지 355ml. 카페인 120mg. "오늘만." 매일 하는 말이다.친구가 물었다. 작년에. "그거 몸에 안 좋다며?" 안다. 당연히 안다. "끊을 거야." 3개월째 못 끊었다. 이유가 있다. 끊으면 일을 못 한다. 시도해봤다. 2주 전. "이번엔 진짜 끊는다." 첫날. 오전 11시부터 졸렸다. 코드 3줄 쓰는데 30분 걸렸다. 머리가 안 돌아갔다. 점심 먹고 더 심해졌다. 눈을 뜰 수가 없었다. 오후 3시. 대표가 불렀다. "이 기능 오늘 안에 되죠?" "...네." 냉장고로 갔다. 포기했다. 건강검진 결과지 지난달 받았다. 회사 단체 검진. 간 수치. 경계. 혈압. 높음. 수면의 질. 불량. 의사가 말했다. "스트레스 관리하세요. 카페인 줄이시고요." "네." 대답만 했다. 다음날부터 똑같았다. 아침 1캔, 점심 후 1캔. 바꿀 수가 없었다. 일정이 그대로인데. 혼자 하는 개발. 마감은 촘촘하다. 속도를 낼 방법은 카페인뿐이다. 아니, 그렇게 믿는다. 작년에 읽었다. 어떤 개발자 블로그. "카페인은 빚이다. 지금 집중력을 미래에서 빌려오는 것." 맞는 말이다. 안다. 근데 미래는 나중 문제다. 지금이 급하다. 오늘 배포 못 하면 내일 회의에서 까인다. 내일 회의에서 까이면 다음 주 일정이 더 빡빡해진다. 악순환이다. 끊을 타이밍이 없다. 밤 10시, 마지막 고민 퇴근 준비한다. 가방에 노트북 넣는다. 집에서 좀 더 해야 한다. 배포 전에 테스트. 냉장고를 본다. 레드불 1캔 남았다. "가져갈까." 고민한다. 5초. 가방에 넣는다. 집에 가는 지하철. 캔을 꺼낸다. 차갑다. 아직 안 땄다. "집 가서 마시자. 진짜 급할 때만." 11시. 집 도착. 노트북 켠다. 테스트 돌린다. 에러 3개. "씨발." 캔을 딴다. 푸슈. 마신다. 익숙한 맛이다. 새벽 2시까지 작업한다. 배포 완료. 침대에 눕는다. 잠이 안 온다. 카페인 때문이다. 당연하다. 유튜브를 켠다. 아무거나 본다. 4시가 돼서야 잔다. 6시간 후 알람이 울린다. 손이 또 간다. 침대 옆 테이블. 새로 산 핫식스 6캔 박스. "오늘도 화이팅." 스스로에게 말한다. 이게 정상인가 가끔 생각한다. 이게 정상적인 삶인가. 20대 후반. 건강검진에서 경고. 에너지 드링크 없으면 일 못 함. 주말에도 마신다. 습관이 됐다. 친구들 만나도 들고 간다. "너 그거 또 마셔?" "어. 몸이 찾네." 농담처럼 말한다. 웃긴 게 아니다. 전 회사 선배가 말했다. 2년 전. "개발자는 체력이다. 건강 챙겨." 못 챙긴다. 방법을 모른다. 일을 줄일 수 없다. 혼자 하는데. 카페인을 끊을 수 없다. 대안이 없다. 운동? 시간이 없다. 수면? 부족하다. 알고 있다. 건강한 식습관? 웃기는 소리다. 근데 재밌는 게 있다. 회사 냉장고 에너지 드링크. 내가 90% 먹는다. 나머지 사람들은 가끔 한 캔. 나는 하루 2~3캔. 기획자가 물었다. 지난주. "이거 누가 이렇게 먹어요?" "...저요." "헐. 건강 괜찮아요?" "괜찮아요." 거짓말이다. 끊을 수 있을까 솔직히 모르겠다. 이직하면 나아질까. 그것도 모른다. 대기업 가면 야근 없을까. 아니다. 거기도 바쁘다. 스타트업이 문제가 아니다. 개발 문화가 문제다. "빨리빨리." "오늘 안에." "내일 아침까지." 이게 당연한 세상이다. 버티려면 카페인이 필요하다. 다들 마신다. 커피든 드링크든. 나만 유난히 많이 마실 뿐이다. 언젠가 끊고 싶다. 30살 되기 전에. 아니면 결혼하기 전에. 아니면... 몸이 망가지기 전에. 근데 지금은 아니다. 오늘 마감이 있다. 내일 회의가 있다. 다음 주 배포가 있다. "나중에." 또 미룬다. 냉장고에 캔이 4개 남았다. "내일 사야겠다." 이미 장바구니에 담아뒀다. 핫식스 24캔. 무료배송.오늘도 캔을 딴다. 푸슈. 이게 내 삶이다.

기획서가 없다: 슬랙 메시지로 시작되는 개발의 악순환

기획서가 없다: 슬랙 메시지로 시작되는 개발의 악순환

기획서가 없다: 슬랙 메시지로 시작되는 개발의 악순환 오전 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 열었다. 에너지 드링크 땄다. 세 번째. 입버릇처럼 말했다. "제가 볼게요." 내일도 모레도. 슬랙 메시지로 시작되는 개발. 기획서는 오늘도 없다.결국 내가 기획자고, 디자이너고, 개발자다. 그리고 테스터. 풀스택이 아니라 풀포지션이지.