Showing Posts From
야근
- 28 Dec, 2025
점심시간에 AWS 콘솔: 쉬어야 할 시간도 일이다
점심시간에 AWS 콘솔: 쉬어야 할 시간도 일이다 점심 먹으러 간다는 게 12시 30분. 배달 음식이 도착했다. 손에 든 건 젓가락이 아니라 노트북이다. "점심 먹으면서 좀 볼게요." 다들 그러는 줄 알았다. 근데 내 주변엔 날 말릴 사람이 없다.기획자는 밖에 나가서 먹는다. 디자이너는 카페 간다. 나는? 책상에서 먹는다. 왜냐면 배포가 오후 2시거든. 점심 먹으면서 로그 확인하고, EC2 상태 보고, RDS 커넥션 체크한다. "점심시간이라도 쉬어야지." 쉬고 싶다. 근데 불안하다. AWS 콘솔이 점심 친구 오늘 메뉴는 제육볶음 덮밥이다. 근데 내 눈은 CloudWatch를 보고 있다. CPU 사용률 65%. 좀 높네. Lambda 에러율 0.3%. 괜찮네. S3 비용 이번 달 12만원. 어? 지난달보다 3만원 올랐네.젓가락으로 밥 한 술 뜨고, 마우스 스크롤. 또 한 술 뜨고, EC2 인스턴스 확인. "너 밥 먹으면서도 일해?" 대표님이 지나가면서 물었다. "아, 그냥 확인만요." 그냥이 아니다. 진짜 확인해야 한다. 왜냐면 오후에 기능 배포하거든. 지금 안정적이어야 나중에 문제가 없다. 점심시간이 온콜 시간 작년 여름이었다. 점심 먹으러 밖에 나갔다. 치킨집. 주문하고 기다리는데 슬랙이 울렸다. "서버 응답 없음" 치킨 포장해달라고 하고 뛰어왔다. 결국 치킨은 식탁에서 먹었다. 노트북 옆에서. 그때부터다. 점심시간에도 노트북 챙긴다."밥 먹을 때만이라도 쉬어." 부모님이 그러셨다. 쉬고 싶다. 근데 장애는 내 점심시간을 배려 안 한다. AWS 알람은 내가 밥 먹는지 안 먹는지 모른다. 유저는 점심시간에도 우리 서비스를 쓴다. 그럼 나도 점심시간에 일해야 한다. 그게 풀스택 개발자다. 비용 알람이 식욕을 잡는다 오늘 AWS 콘솔 열었다. 이번 달 예상 비용: 87만원. 저번 달: 72만원. 15만원 올랐다. 밥이 목으로 안 넘어간다. 뭐가 올랐지? EC2? RDS? 아니면 데이터 전송? Cost Explorer 들어간다. 밥은 식는다. 나는 그래프를 본다. "S3 비용이 왜 이렇게..." 로그 파일이다. 삭제 정책 안 만들어놨다. 6개월치 로그가 쌓여있다. 하루에 1만원씩 나간다. "아 진짜." 젓가락 놓는다. 터미널 연다. aws s3 rm s3://logs/2024-01/ --recursive점심시간이 운영 시간이 됐다. 쉬는 시간이 없는 이유 혼자니까. 개발자가 나 하나니까. 내가 안 보면 아무도 안 본다. "점심시간에 서버 터지면 어떡해요?" 대표님이 그렇게 말한 적 없다. 근데 나는 안다. 내가 안 보면 2시간 동안 방치된다는 걸. 그래서 본다. 밥 먹으면서도. 다른 회사는 어떨까. 개발팀이 5명이면, 로테이션 돌릴 수 있다. "오늘 점심시간 온콜은 민수 차례야." 우리는? 매일 내 차례다. 365일 온콜이다. 밥보다 빠른 알람 음식이 오면 30초 안에 뚜껑 연다. 근데 슬랙 알람은 3초 안에 확인한다. 우선순위가 바뀌었다. 배 > 일 이 아니라 일 > 배 가 됐다. "지금 먹어야 하는데..." 근데 손은 노트북을 연다. 502 Bad Gateway. "아 씨." 밥은 나중이다. 지금은 Nginx 로그 봐야 한다. PM2 프로세스가 죽었다. 재시작한다. pm2 restart all5분 지났다. 밥이 식었다. "전자레인지..." 다시 데운다. 다시 먹는다. 다시 콘솔 본다. 점심시간의 루틴 12시 30분. 밥 시킨다. 12시 35분. 배달 오는 동안 CloudWatch 본다. 12시 45분. 밥 도착. 노트북 연다. 12시 50분. 먹으면서 Cost Explorer 확인. 1시 00분. RDS 커넥션 수 체크. 1시 10분. EC2 메모리 사용률 확인. 1시 20분. Lambda 에러 로그 훑어본다. 1시 30분. 밥 다 먹음. 콘솔은 아직 열려있음. 이게 점심시간이다. 쉬는 시간이 아니라 "먹으면서 일하는 시간"이다. 동기는 밖에서 논다 대학 동기랑 통화했다. "야, 점심 뭐 먹어?" "나? 밥 먹으면서 AWS 보는데." "...너 진짜 그렇게 살아?" 그렇게 산다. 동기는 대기업 다닌다. 점심시간 1시간 30분. 밖에 나가서 먹고, 카페 가서 커피 마시고 온다. "너도 이직해. 거기 왜 있어?" 모른다. 나도 모른다. 근데 여기 떠나면 서비스 터진다는 걸 안다. 그래서 못 떠난다. 점심시간도 못 쉰다. 진짜 쉬는 법을 잊었다 언제 마지막으로 점심시간에 진짜 쉬었을까. 밖에 나가서, 햇빛 보면서, 아무 생각 없이 밥만 먹었을까. 기억이 안 난다. 항상 노트북이 있었다. 항상 콘솔이 열려있었다. 항상 "혹시 모르니까" 확인했다. 이제는 확인 안 하면 불안하다. "점심시간에 장애 나면 어떡하지?" 그 생각이 밥 먹는 내내 머릿속에 있다. 대표님은 모른다 대표님은 점심 잘 먹는다. 밖에 나가서 회의하고, 맛있는 거 먹고 온다. "점심 맛있게 드세요!" 나한테 그렇게 말한다. 모른다. 내가 책상에서 먹는다는 걸. 모른다. 내가 콘솔 보면서 먹는다는 걸. 말 안 했으니까. "점심시간에도 일해요" 라고 말하면 뭐라고 할까. "그럼 쉬세요" 라고 할까? 근데 쉬면 누가 보는데? 비용 최적화는 점심 업무 S3 라이프사이클 정책 만든다. 30일 지난 로그는 Glacier로. 90일 지난 로그는 삭제. 이거 하는 데 20분 걸렸다. 점심시간 절반이다. 밥은 10분 만에 먹었다. 일은 20분 했다. 이게 맞나? 모르겠다. 근데 이번 달 비용 10만원 줄었다. "잘했네." 스스로 칭찬한다. 아무도 안 해주니까. EC2 인스턴스 타입 변경 점심 먹으면서 생각했다. t3.medium 쓰는데, 사용률이 30%밖에 안 된다. t3.small로 바꾸면 월 3만원 아낀다. 오늘 점심시간에 바꿨다. aws ec2 modify-instance-attribute밥 먹고, 명령어 치고, 다시 먹고. 30분 만에 끝냈다. 이게 점심시간 생산성이다. 쉬는 시간이 아니라 "조용히 일하는 시간"이다. 슬랙 알림음이 젓가락을 멈춘다 "띵동" 슬랙이다. 젓가락이 공중에 멈춘다. 심장이 빨라진다. 누가 멘션했나? 장애 알림인가? 확인한다. "[서버] 메모리 사용률 85%" "아..." 밥은 그대로 둔다. 터미널 연다. htop프로세스 확인한다. 메모리 많이 쓰는 놈이 있다. 재시작한다. 사용률 떨어진다. 10분 지났다. 밥이 완전히 식었다. "다시 데워야지." 세 번째 데운다. 오늘. 점심시간 30분 회사 규정상 점심시간은 1시간이다. 근데 실제로는 30분이다. 왜? 나머지 30분은 일하니까. 누가 시킨 거 아니다. 내가 알아서 한다. 안 하면 불안하다. "오후에 배포하는데 지금 상태 확인 안 하면..." 그 생각이 밥보다 크다. 그래서 본다. 확인한다. 점심시간에도. 카페 가는 동료 디자이너가 물었다. "같이 카페 갈래요?" "아, 전 여기서 먹을게요." "매일 책상에서 먹으시네요." "네, 편해서요." 거짓말이다. 편한 게 아니다. 그냥 못 나간다. 나가면 불안하다. 노트북 없으면 불안하다. 콘솔 안 보면 불안하다. 그래서 책상에 있는 게 편하다. 아니, 편한 척한다. 밥 먹으면서 로그 분석 에러 로그 1,247건. 대부분 타임아웃이다. 외부 API가 느리다. 그거 때문이다. "점심 먹고 처리해야지." 근데 점심 먹으면서 처리한다. 로그 필터링하고, 패턴 찾고, 이슈 정리한다. 밥은? 씹는 중이다. 근데 눈은 터미널에 있다. 멀티태스킹이 일상이 됐다. 비용 알람 설정 점심 먹으면서 CloudWatch 알람 만들었다. 일일 비용 3만원 넘으면 슬랙 알림. 이제 비용도 실시간으로 체크한다. 점심시간에 만들었다. 10분 걸렸다. 밥은 5분 만에 먹었다. 효율적이다. 근데 행복하진 않다. 점심시간이 개발 시간 기획자가 오전에 요청했다. "이거 급한데 오늘 중으로 돼요?" "네, 볼게요." 오전엔 회의 있었다. 오후엔 배포 있다. 그럼 언제? 점심시간이다. 밥 먹으면서 코드 짠다. const updateConfig = async () => { // 한 줄 쓰고 밥 한 입 }30분 만에 끝냈다. 밥도 먹고 일도 했다. 대표님이 보면 칭찬할까? "점심시간에도 일하네, 열심히 하네." 칭찬인지 모르겠다. 동료가 없는 점심 혼자 먹는다. 매일. 대기업 다니는 친구들은 팀원들이랑 먹는다. "오늘 뭐 먹을까?" 같이 고민한다. 나는? 혼자 고민한다. "오늘 뭐 먹을까? 그리고 어떤 일 할까?" 점심 메뉴보다 점심시간 업무가 먼저다. 동료가 있었으면 달랐을까. "야, 점심 먹으러 가자. 노트북 두고." 그런 말 해줄 사람 있었으면. 근데 없다. 혼자다. RDS 스냅샷 확인 점심 먹으면서 RDS 콘솔 봤다. 자동 백업 7일치 있다. 수동 스냅샷은 언제 찍었지? 2주 전이다. "오늘 하나 찍어놔야겠다." 오후에 DB 스키마 변경 있다. 지금 스냅샷 만든다. 밥 먹으면서 클릭 몇 번. 30분 걸린다. 백그라운드로 돌린다. 점심시간이 백업 시간이다. 에너지 드링크가 후식 밥 다 먹었다. 냉장고 연다. 에너지 드링크 꺼낸다. 오늘 첫 번째. 카페인 80mg. 타우린 1000mg. "오후 버텨야지." 마신다. 콘솔은 여전히 열려있다. Lambda 함수 실행 시간 체크한다. 평균 850ms. 좀 느리다. "코드 최적화 해야 하는데..." 메모해둔다. 언젠가 할 일 목록에. 근데 언젠가는 안 온다. 점심시간 30분 vs 실제 0분 회사 규정: 1시간 내 점심시간: 30분 진짜 쉬는 시간: 0분 밥 먹는 30분도 일한다. 노트북 보면서 먹는다. 콘솔 확인하면서 먹는다. 코드 짜면서 먹는다. 0분이다. 쉬는 시간 0분이다. "점심시간에 쉬었어?" 거짓말로 "네" 라고 한다. 진실은 "아니오"다. 언제 진짜 쉴까 모르겠다. 채용 되면? 그때까지 몇 개월 남았을까. 이직하면? 그럼 여기는 어떡하지. 서비스 안정화되면? 언제 되는데. 대표님이 이해해주면? 말 안 해봤는데. 답이 없다. 그냥 계속 이렇게 사는 건가. 점심시간도 일하면서. 저녁도 야근하면서. 주말도 온콜 대기하면서. 밥그릇 옆의 노트북 책상을 본다. 왼쪽: 빈 도시락 통 오른쪽: 노트북, AWS 콘솔 열려있음 가운데: 에너지 드링크 캔 이게 내 점심시간이다. 밥은 먹었다. 근데 쉬지 못했다. 몸은 영양을 섭취했다. 근데 정신은 일했다. "이게 맞나?" 질문한다. 답은 없다. 그냥 다시 일한다. 오후 1시 30분이다.점심 먹으면서 AWS 콘솔 보는 게 일상이 된 지 2년. 언제쯤 진짜 쉬면서 밥 먹을 수 있을까.
- 23 Dec, 2025
건강검진 결과: 수면 부족, 스트레스, 경고등
건강검진 결과: 수면 부족, 스트레스, 경고등 우편으로 온 경고장 건강검진 결과지가 왔다. 우편으로. 회사 소속이니까 단체 검진이다. 작년 11월에 받았는데 이제야 왔다. 왜 이렇게 늦게 오냐고? 우리 회사 인사팀이 없어서다. 대표님이 직접 챙기시는데 바쁘시니까. 봉투 뜯었다. 빨간 글씨가 보인다. "재검사 권고" "수면의 질 저하" "스트레스 호르몬 수치 상승" "혈압 경계" 28살한테 나올 결과가 아니라고 생각한다. 근데 놀랍지 않다. 알고 있었으니까.의사 선생님의 말씀 결과지 마지막에 의사 소견이 있다. "수면시간 확보와 스트레스 관리가 필요합니다. 규칙적인 생활과 충분한 휴식을 권합니다." 웃었다. 쓴웃음. 규칙적인 생활. 나도 하고 싶다. 근데 장애는 규칙적으로 안 터진다. 새벽 3시에도 터지고 주말 아침 9시에도 터진다. 충분한 휴식. 나도 쉬고 싶다. 근데 내가 안 고치면 아무도 못 고친다. 개발자가 나 혼자니까. "좀 쉬셔야겠어요"라는 말이 통하지 않는다. 여기서 쉴 수 없으니까. 검진 받을 때도 웃겼다. 11월 목요일 오전 9시 예약이었는데 전날 밤 배포하다가 새벽 4시에 잤다. 5시간 공복 유지하라는데 어차피 안 먹었다. 일하느라. 채혈할 때 간호사가 물었다. "어제 술 드셨어요?" "아니요. 일했어요." "아... 개발자시구나." 다들 안다. 개발자는 이렇게 산다고. 수면 부족의 기록 수면 시간을 계산해봤다. 지난 2주:5시간: 3일 6시간: 4일 4시간: 5일 7시간: 2일 (주말)평균 5.2시간. 권장 수면 시간은 7~8시간이라던데. 잠을 줄이는 게 아니다. 줄어지는 거다. 계획은 항상 12시에 자는 거다. 근데 10시에 '이것만 하고'가 시작되면 2시가 된다. 그리고 8시 반에 일어나야 한다. 10시 출근이지만 9시 반에 슬랙 확인해야 하니까. 주말도 마찬가지다. 토요일 아침에 '오늘은 쉬어야지' 생각한다. 근데 11시쯤 슬랙 알림이 온다. "이거 급한데 오늘 중으로 가능할까요?" 가능하다. 내가 하면. 그래서 한다. 일요일도 비슷하다. 월요일 스프린트 미팅 준비해야 하고, 배포 전에 체크할 것들 있고, 그러다 보면 저녁이다.침대에서 노트북 켜놓고 자는 날이 많다. 그냥 코드 보다가 기절하는 거다. 알람 5개 맞춰놔도 다 끄고 다시 잔다. 수면의 질은 당연히 안 좋다. 꿈도 일 관련이다. 코드 꿈, 배포 꿈, 장애 꿈. 진짜다. 지난주에는 꿈에서 DB 마이그레이션 하다가 롤백 못 해서 깼다. 심장이 뛰었다. 실제로 롤백 안 된 줄 알고 노트북 켰다. 새벽 4시 반이었다. 스트레스의 일상화 스트레스 수치가 높다고 한다. 놀랍지 않다. 아침에 눈 뜨면 스트레스다. 어제 배포한 거 문제없나, 슬랙에 뭐 올라왔나, 모니터링 알람은 안 왔나. 출근하면 스트레스다. 오늘 할 일이 10개인데 긴급 건이 3개 더 생긴다. 점심 먹으면서도 스트레스다. 슬랙 확인하면서 먹으니까. '이거 좀 봐줄래요?' 메시지 오면 밥 맛이 없다. 오후는 더 심하다. 기획자가 '작은 수정'이라고 하는데 백엔드 로직 전체를 뜯어야 한다. 근데 '내일까지'라고 한다. 저녁에는 퇴근 못 한다는 스트레스. 9시가 되어도 끝이 안 보인다. 10시 넘어서 나간다. 집 가서도 스트레스다. 노트북 꺼야 하는데 못 끈다. '혹시 장애 나면?' 하는 생각에. 주말 스트레스는 다르다. '쉬어야 하는데 쉬는 게 불안하다.' 이게 제일 웃기다.스트레스 해소법을 찾아봤다. 운동, 취미, 명상. 운동할 시간이 없다. 퇴근이 10시인데 헬스장은 11시에 닫는다. 취미도 없다. 코딩이 취미였는데 이제는 일이다. 게임 하려고 Steam 키는데 5분 만에 지루해진다. 버그 찾는 게 더 익숙하니까. 명상은 시도했다. 앱 깔아서 5분짜리 했다. 근데 중간에 슬랙 알림 와서 중단했다. 그 뒤로 안 한다. 스트레스가 일상이 되니까 감각이 둔해진다. 이게 스트레스인지 아닌지 구분이 안 된다. 그냥 '원래 이렇게 사는 거 아닌가?' 싶다. 근데 건강검진은 거짓말 안 한다. 수치로 보여준다. "너 스트레스 받고 있어. 많이." 경고등의 의미 혈압이 경계라고 한다. 수축기 135, 이완기 88. 28살 남자 정상 수치는 120/80 정도래. 나는 벌써 넘었다. 재검사 권고 항목이 5개다:혈압 재측정 수면다원검사 스트레스 검사 간기능 재검사 (에너지 드링크 때문인 듯) 위내시경 (속 쓰림 항목 체크했더니)재검사 받으러 가야 한다. 근데 언제 가지? 병원 예약하려면 평일 낮에 가야 한다. 근데 낮에는 일한다. 반차 써야 하는데 반차 쓰면 그날 일은 누가 하지? 야간 진료도 있다. 8시까지. 근데 나는 8시에 퇴근 못 한다. 7시에 나가려면 5시부터 마무리해야 하는데 그럴 수 있는 날이 한 달에 하루? 주말 진료는 토요일 오전만 한다. 토요일 오전은 자고 싶다. 평일에 못 잔 잠 보충하는 유일한 시간이니까. 그래서 재검사를 못 간다. 이미 3개월 지났다. 경고등이 켜졌는데 정비소에 갈 시간이 없다. 그냥 계속 운전한다. 언젠가 멈출 때까지. 에너지 드링크로 버티기 커피는 하루 3잔이다. 아침, 점심, 오후. 근데 그걸로 안 된다. 그래서 에너지 드링크를 마신다. 핫식스, 레드불, 몬스터. 다 마셔봤다. 요즘은 편의점 PB 제품. 1000원이라 부담 없다. 하루 2캔 정도. 오후 3시에 하나, 저녁 8시에 하나. 처음에는 효과가 있었다. 머리가 깨고 집중이 됐다. 근데 이제는 안 마시면 머리가 안 돌아간다. 카페인 의존이다. 알고 있다. 근데 끊을 수 없다. 끊으면 일을 못 하니까. 간기능 검사에서 지적받았다. 수치가 조금 높다고. 에너지 드링크랑 불규칙한 식사 때문일 거라고. 의사가 물었다. "에너지 드링크 자주 드세요?" "네. 하루 2캔요." "줄이셔야겠어요. 간에 부담이 갑니다." "네..." 근데 안 줄었다. 못 줄인다. 이거 안 마시면 오후 3시부터 멍해진다. 동료들 보면 다들 마신다. 스타트업 개발자들 책상에 에너지 드링크 없는 곳 없다. 이게 이 업계 연료다. 건강에 안 좋은 거 안다. 근데 대안이 없다. 잠을 더 자거나 스트레스를 줄이면 되는데, 그게 안 되니까 이걸 마시는 거다. 속 쓰림의 일상 위내시경 권고를 받았다. 속 쓰림 항목에 체크했더니. 속이 쓰리다. 아침에 일어나면 쓰리고, 점심 먹고 나면 쓰리고, 저녁에도 쓰리다. 공복이어도 쓰리고 식사 후에도 쓰리다. 커피 마시면 더 쓰리다. 근데 커피는 마셔야 한다. 약을 산다. 편의점에서 파는 소화제, 제산제. 가방에 항상 들고 다닌다. 효과는 있다. 30분 정도는. 그다음에 또 쓰리면 또 먹는다. 하루에 3~4번 먹는 것 같다. 식후 30분에 1정이라는데 지키지 못한다. 쓰리면 그냥 먹는다. 왜 쓰린지 안다. 불규칙한 식사, 스트레스, 카페인, 수면 부족. 다 해당된다. 점심을 거르는 날이 많다. 정신없어서. 오후 4시에 '아, 점심 안 먹었네' 하고 과자 먹는다. 저녁은 먹는다. 근데 9시 넘어서. 야식이 저녁이다. 치킨, 피자, 라면. 빨리 먹을 수 있는 것들. 위내시경 예약도 못 했다. 금식해야 하고 진정제 쓰면 보호자 동반이래. 누굴 데려가지? 가족은 지방이고 친구들은 다 일한다. 그래서 또 안 간다. 약으로 버틴다. 언젠가 진짜 문제 생기기 전까지. 쉴 수 없는 이유들 의사 말대로 쉬면 된다. 이론상으로는. 휴가를 쓰면 된다. 연차가 15일 있다. 근데 한 번도 안 썼다. 왜냐하면:내가 없으면 개발이 멈춘다 개발자가 나 혼자다. 내가 쉬면 그날은 아무것도 안 된다. 기획자도, 디자이너도, 대표님도 나를 기다린다.휴가 가도 일한다 작년에 3일 휴가 냈다. 부모님 뵈러 지방 갔다. 둘째 날 오후에 장애 터졌다. 노트북 안 가져갔다. PC방 가서 고쳤다. 부모님한테 '급한 일'이라고 했다.돌아와서 더 힘들다 쉬고 나면 일이 쌓인다. 슬랙 메시지 100개, 지라 티켓 20개. 하루 쉬면 이틀 치 일이 생긴다.미안하다 스타트업이다. 다들 바쁘다. 나만 쉬면 민폐다. 그런 기분이 든다.반차도 마찬가지다. 오전 반차 내면 오후에 2배로 일하고, 오후 반차 내면 오전에 미리 다 해놔야 한다. 결국 같다. 재택은 더 웃기다. 재택하면 더 일한다. 출퇴근 시간이 없어지니까 그 시간에도 일한다. 점심시간도 짧게 먹고 일한다. 쉬려면 시스템이 바뀌어야 한다. 개발자를 더 뽑거나, 업무량을 줄이거나, 온콜을 나눠 가지거나. 근데 다 안 된다. 채용 예산 없고, 할 일은 계속 생기고, 나눠 가질 사람이 없다. 그래서 못 쉰다. 아니, 안 쉰다. 쉬면 불안하니까. 주변의 반응들 부모님은 걱정하신다. "얼굴이 왜 그래? 많이 피곤해 보인다." "괜찮아요. 원래 이래요." "건강검진은 받았어?" "네. 괜찮대요." (거짓말) 친구들은 알고 있다. "너 진짜 죽겠다." "ㅇㅇ." "이직 안 해?" "해야지. 근데..." "근데?" "여기 나가면 망할 것 같아서." 전 직장 동기들은 비교한다. "나는 요즘 8시 퇴근해. 야근 거의 없어." "좋겠다." "너네는?" "비슷해." (거짓말. 10시 퇴근이다) 대표님은 모르신다. 아니, 아시는데 모른 척하신다. "너무 무리하지 마. 건강이 최우선이야." 그러면서 업무는 계속 준다. '급한데', '간단한 건데', '오늘만'. 나도 받는다. 거절 못 한다. 거절하면 누가 하지? 버티는 이유 왜 버티나. 돈 때문은 아니다. 4800만원. 많지 않다. 대기업 가면 더 받는다. 경력 때문도 아니다. 3년 차에 풀스택. 이력서는 괜찮다. 이직하면 된다. 책임감 때문이다. 이 서비스를 내가 만들었다. 처음부터 지금까지. 모든 코드에 내 손이 갔다. 유저가 1만 명이다. 적지 않다. 이 사람들이 매일 쓴다. 내가 만든 걸. 내가 떠나면 누가 유지보수하지? 대표님? 못 하신다. 신입 뽑아도 몇 달은 걸린다. 그동안 서비스는? 터질 거다. 장애 나도 못 고치고, 기능 추가도 못 하고. 그게 싫다. 내가 만든 게 망가지는 거. 그래서 버틴다. 건강검진 결과 보면서도 '좀만 더'라고 생각한다. 좀만 더 버티면 채용된다. 좀만 더 버티면 시리즈 A 받는다. 좀만 더 버티면 개발팀이 생긴다. 근데 '좀만 더'가 벌써 1년이다. 바뀌지 않는 것들 건강검진 결과를 책상 서랍에 넣었다. 재검사는 안 갈 거다. 시간 없으니까. 수면 시간은 안 늘릴 거다. 일이 있으니까. 스트레스는 안 줄일 거다. 환경이 안 바뀌니까. 에너지 드링크는 계속 마실 거다. 대안이 없으니까. 다 안다. 이렇게 살면 안 된다는 거. 지속 가능하지 않다는 거. 언젠가 문제 생긴다는 거. 근데 지금 당장은 이렇게밖에 못 산다. 의사의 '좀 쉬셔야겠어요'라는 말이 통하지 않는다. 여기서 쉴 수 없으니까. 건강검진 결과는 경고다. 빨간 신호등이다. 근데 나는 브레이크 밟을 수 없다. 뒤에 차가 너무 많으니까. 그래서 계속 간다. 다음 신호등까지. 그게 어디인지는 모른다. 그냥 간다.내년 건강검진에서도 똑같은 결과 나올 것 같다. 아니, 더 나쁠 거다. 근데 뭐 어쩌겠나. 계속 살아야지.
- 16 Dec, 2025
번아웃의 신호: 커밋 메시지가 의미를 잃었다
예전엔 잘 썼다 입사 첫날 커밋 메시지다. feat: 로그인 API 구현 - JWT 토큰 기반 인증 시스템 - refresh token 자동 갱신 로직 추가 - 에러 핸들링 미들웨어 적용자랑스러웠다. 컨벤션도 지켰다. feat, fix, refactor 다 구분했다. 나중에 내가 봐도, 다른 사람이 봐도 알 수 있게. 프로였다. 3개월 전 커밋이다. update뭘 update 했는지 나도 모른다. 지금 git diff 쳐봐도 파일이 12개다. 프론트도 있고 백엔드도 있고 DB 스키마도 바뀌었다. 한 커밋에 다 때려 넣었다. 어제 커밋이다. asdf진짜 asdf다. 손가락이 자동으로 친 거다. 새벽 3시였다. 장애 고치고 배포하는데 메시지 생각할 여유가 없었다. 그냥 push 하면 됐다. 커밋 로그가 내 정신 상태를 기록하고 있다.3개월 차까지는 괜찮았다 입사하고 첫 프로젝트. 사용자 인증 시스템 만들었다. 혼자지만 괜찮았다. 시간도 충분했다. 커밋 하나에 30분씩 걸렸다. 코드 정리하고, 테스트 돌리고, 메시지 쓰고. 브랜치도 제대로 땄다. feature/user-authentication, fix/login-validation. 깔끔했다. 대표님이 좋아하셨다. "개발 프로세스가 체계적이네요." 뿌듯했다. 그때는 업무가 하나였다. 사용자 시스템. 집중할 수 있었다. 오전에 기획 보고, 오후에 개발하고, 저녁에 배포했다. 퇴근은 7시. 주말엔 클린 코드 책 읽었다. 커밋 메시지 작성법도 공부했다. "좋은 커밋 메시지는 미래의 나를 위한 선물이다." 맞는 말이었다. 리팩토링할 때 예전 커밋 보면 무슨 의도였는지 바로 알 수 있었다. 이게 진짜 개발이지, 생각했다. 6개월 차부터 달라졌다. 업무가 쌓이면서 프로젝트가 3개 됐다. 메인 서비스, 어드민 페이지, 외부 API 연동. 다 나 혼자. 기획자가 추가됐다. 좋은 거 아닌가 했다. 아니었다. 요청사항이 3배가 됐다. "이거 급한데요", "내일까지 가능할까요", "간단한 건데". 간단한 거 없었다. 프론트 고치면 백엔드도 고쳐야 했다. API 바꾸면 DB도 바꿔야 했다. 한 기능에 5개 파일 건드렸다. 커밋 하나에 여러 작업이 섞였다. 원래는 안 그래야 한다는 거 안다. 한 커밋엔 하나의 논리적 변경만. 원칙은 알았다. 시간이 없었다. 아침에 시작한 작업을 저녁에 커밋했다. 중간에 긴급 버그 3개 고쳤다. 다 한 커밋에 들어갔다. fix: 로그인 버그 수정 및 대시보드 레이아웃 개선 및 API 응답 속도 개선이게 무슨 커밋이냐. 3개를 한 줄에 썼다. 나도 알았다. 틀렸다는 거. 근데 브랜치 3개 만들고 커밋 나눌 시간이 없었다. 대표님이 "오늘 배포 가능하죠?" 하셨다. 가능했다. 커밋 메시지 대충 쓰면.새벽 2시의 커밋들 장애는 항상 새벽에 터진다. 법칙이다. 슬랙 알림. 오전 2시 17분. 결제 API 500 에러. 일어났다. 노트북 켰다. 로그 확인했다. DB 커넥션 풀 다 찼다. 재시작했다. 임시 조치였다. 근본 원인 찾았다. 커넥션 릴리즈 안 하는 코드 있었다. 고쳤다. 테스트는 못 했다. 새벽 3시였다. 배포했다. 커밋 메시지. fix그냥 fix. 뭘 고쳤는지 안 썼다. 졸렸다. 다시 자고 싶었다. push 하고 침대 갔다. 아침에 일어나서 봤다. 어제 내가 뭘 고쳤더라. 커밋 메시지 봤다. fix. 도움 안 됐다. diff 열어서 코드 봤다. 아, DB 커넥션. 기억났다. "미래의 나를 위한 선물" 어쩌고 했던 책 생각났다. 미안하다, 미래의 나. 새벽 3시의 나는 선물 포장할 여유가 없었다. 이런 커밋이 쌓였다. fix bug update code temp fix quick fix 급한 거 수정 ㅁㄴㅇㄹ마지막 건 자판 잘못 친 거다. 한글 모드였다. 다시 치기 귀찮았다. 그냥 푸시했다. asdf의 등장 처음 asdf 친 날 기억난다. 정확히 기억난다. 3주 전 목요일. 그날 대표님이 "내일 투자 미팅인데 데모 보여줘야 해요"라고 하셨다. 오후 4시에. 데모는 없었다. 만들어야 했다. 프론트 새로 짰다. 기존 거 쓸 수 없었다. 디자인도 없었다. 내가 대충 했다. 백엔드는 기존 API 썼는데 응답 형식이 달랐다. 어댑터 레이어 만들었다. 밤 11시. 70% 됐다. 계속했다. 새벽 1시. 90% 됐다. 거의 다 됐다. 새벽 2시. 작동했다. 배포해야 했다. Docker 빌드. 5분 걸렸다. 기다렸다. AWS 업로드. 3분 더. 기다렸다. 배포 스크립트 돌렸다. 에러. 환경변수 빠졌다. 추가했다. 다시 배포. 성공. 테스트했다. 작동했다. 끝났다. 새벽 2시 40분. 커밋 안 했다는 거 깨달았다. 로컬에 변경사항 수백 개. 스테이징도 안 했다. git add . 쳤다. 다 올라갔다. 커밋 메시지 쳐야 했다. 머리가 안 돌아갔다. 뭐라고 써야 하지. "투자 미팅용 데모 페이지 구현"? 길었다. "데모 구현"? 뭔가 부족했다. 생각이 안 났다. 손가락이 자동으로 asdf 쳤다. 엔터. 푸시. 끝. 침대 갔다. 다음 날 일어나서 커밋 로그 봤다. asdf. 웃겼다. 웃긴데 웃기지 않았다. 내가 이렇게까지 됐구나. 그 뒤로 asdf가 2번 더 나왔다.내 정신 상태의 기록 커밋 히스토리가 그래프다. 내 멘탈 그래프. 입사 초기. 완벽한 메시지들. 올라가는 그래프. 의욕 넘쳤다. 잘하고 싶었다. 프로처럼 일하고 싶었다. 3개월 차. 메시지 길이 줄어들기 시작. 그래프 평평해짐. 바쁘다는 핑계 댔다. 아직 괜찮았다. 6개월 차. "fix bug", "update" 같은 것들. 그래프 내려가기 시작. 시간 없다고 했다. 진짜로 없었다. 지금. "asdf", "ㅁㄴㅇㄹ". 그래프 바닥. 커밋 메시지 신경 쓸 여유가 없다. 코드가 돌아가면 됐다. 기록 같은 건 사치였다. 예전엔 커밋 로그 보는 게 자랑스러웠다. 내 작업의 흔적. 깔끔한 히스토리. 나중에 누가 봐도 이해할 수 있는 기록. 지금은 보기 싫다. 내 추락이 다 기록돼 있다. 1년 전 커밋이랑 지금 커밋 비교하면 웃긴다. 웃긴데 슬프다. 신입이 들어오면 이거 보겠지. "이 사람 왜 이렇게 커밋 메시지를 대충 써요?" 할 거다. 변명할 수 없다. "바빠서요"라고 할까. 맞는 말이다. 근데 변명처럼 들린다. 실제로 변명이긴 하다. 채용 공고에 쓸 수 없는 것들 우리 회사 채용 공고 봤다. 내가 썼다. 대표님이 "개발자니까 개발자가 제일 잘 알지"라고 하셨다. 우대사항: - 클린 코드 작성 능력 - Git 활용 능력 - 코드 리뷰 경험웃긴다. 우리 회사 와서 할 수 있는 게 하나도 없다. 클린 코드? 여기선 작동하는 코드가 최고다. 리팩토링할 시간 없다. 기술 부채? 나중 문제다. 지금 장애 안 나면 됐다. Git 활용? git add . 하고 git commit -m "asdf" 하고 git push. 이게 다다. 브랜치? main 하나. PR? 나 혼자인데 누구한테 리뷰 받나. 코드 리뷰? 혼자 일하는데 리뷰가 있나. 내 코드를 내가 리뷰한다. "이거 맞나?" 물어본다. 대답 없다. 그냥 머지한다. 지원자가 와서 "커밋 컨벤션 어떻게 되나요?" 물으면 뭐라고 하지. "없습니다. 각자 알아서 씁니다." 근데 각자가 나 혼자다. "제가 아무렇게나 씁니다"가 정확하다. "코드 리뷰 프로세스는요?" 물으면. "없습니다." "그럼 QA는요?" "제가 합니다." "테스트 코드는요?" "...시간 나면 씁니다." 안 쓴다는 뜻이다. 채용 공고는 거짓말이다. 우리가 원하는 사람이 아니라 우리가 되고 싶은 사람을 쓴다. 현실은 다르다. 실제 채용 공고에 써야 하는 것들. 필수사항: - 혼자 일하는 거 익숙하신 분 - 커밋 메시지 신경 안 쓰시는 분 - 새벽 3시 배포 가능하신 분 - asdf 이해하시는 분이건 못 쓴다. 아무도 안 온다. 리팩토링하고 싶다 가끔 시간 날 때 옛날 커밋 본다. 6개월 전 거. 제대로 썼던 것들. refactor: 사용자 인증 로직 모듈화 - 인증 미들웨어를 별도 파일로 분리 - JWT 검증 로직 재사용 가능하도록 함수화 - 에러 메시지 일관성 있게 수정이렇게 쓰고 싶다. 지금도. 못 쓴다. 리팩토링하고 싶다. 코드도, 커밋 히스토리도. 다 지우고 처음부터 다시 쓰고 싶다. 제대로 된 구조로. 제대로 된 메시지로. 시간 없다. 신규 기능 개발해야 한다. 버그 고쳐야 한다. 장애 대응해야 한다. 리팩토링은 우선순위 꼴찌다. 대표님한테 말씀드렸다. "기술 부채 정리 시간 좀 주세요." "얼마나 걸려요?" "2주요." "2주 동안 신규 개발 멈춰요?" "...네." "그럼 안 되죠." 끝이다. 논의 끝. 기술 부채는 계속 쌓인다. 커밋 메시지는 계속 대충 쓴다. 악순환이다. 때때로 꿈꾼다. 출근해서 오늘은 리팩토링만 한다. 코드 정리한다. 테스트 작성한다. 커밋 메시지 제대로 쓴다. 브랜치 전략 세운다. 현실은 다르다. 출근하면 슬랙 메시지 30개. "이거 급한데요" 5개. 장애 알림 2개. 리팩토링 시간 없다. 점심시간에 클린 코드 책 펼친다. 2페이지 읽는다. 슬랙 울린다. 책 덮는다. 동기들은 달랐다 대학 동기 모임 갔다. 한 달 전. 다들 개발자 됐다. 친구 A. 네이버. "우리는 코드 리뷰 필수야. PR 올리면 2명 이상 승인받아야 머지돼. 커밋 메시지도 컨벤션 있어서 지키지 않으면 CI에서 막혀." 부러웠다. 시스템이 있다는 게. 친구 B. 카카오. "우리 팀은 페어 프로그래밍해. 한 명이 코딩하면 옆에서 리뷰하면서. 커밋도 같이 작성해." 좋겠다. 혼자 안 해도 되는 게. 친구 C. 쿠팡. "테크 리드가 코드 품질 엄청 보더라. 한 번은 커밋 메시지가 불명확하다고 다시 쓰라고 했어. 짜증 났는데 나중에 보니까 도움 되더라." 내가 말했다. "난 혼자 개발해서 그런 거 없어." 다들 놀랐다. "혼자? 진짜 혼자?" "응. 프론트부터 백엔드, 인프라까지 다." 감탄했다. "대박. 풀스택이네. 배울 게 많겠다." 웃었다. 배우는 게 아니다. 어쩔 수 없이 하는 거다. 집 가는 길에 생각했다. 저 친구들은 성장하고 있다. 리뷰받고, 피드백받고, 제대로 된 프로세스 배우고. 나는? 기술 스택은 넓어졌다. 깊이는 없다. 다 대충 한다. 제대로 하는 게 없다. 커밋 메시지처럼. 새로 온 인턴에게 지난주에 인턴 왔다. 대학생. 방학 동안 경험 쌓으러. 첫날 코드 리뷰 부탁했다. "커밋 로그 좀 볼게요." 봤다. 표정 굳었다. "이게... 다 하신 거예요?" "응." "커밋 메시지가..." 말 끝까지 안 했다. 안 해도 안다. 엉망이다. "바빠서 그래. 원래는 이러면 안 돼." 변명했다. 인턴이 물었다. "그럼 컨벤션 어떻게 되나요? 저도 맞춰서 쓸게요." 대답 못 했다. 컨벤션 없다. "음... 그냥 알아볼 수 있게만 써." 이게 무슨 가이드냐. 인턴 첫 커밋 봤다. feat: 관리자 대시보드 차트 컴포넌트 추가 - Chart.js 라이브러리 적용 - 월별 사용자 증가 추이 시각화 - 반응형 레이아웃 적용완벽했다. 부끄러웠다. 내 최근 커밋. asdf인턴이 나한테 배우러 왔다. 내가 가르쳐줄 게 없다. 나쁜 습관만 가르쳐주게 생겼다. "선배님, 커밋 메시지 왜 중요한가요?" 물었다. "나중에 보면... 뭘 했는지 알 수 있지." 말하면서도 설득력 없었다. 내 커밋 보면 모른다. 나도 모른다. 인턴이 2주 동안 제대로 된 커밋 썼다. 나도 따라 쓰려고 했다. 3일 갔다. 급한 일 생겼다. 다시 "fix", "update". 인턴 마지막 날. "많이 배웠어요." 뭘 배웠을까. 혼자 일하는 법? 커밋 메시지 대충 쓰는 법? 나쁜 것만 배웠을 것 같다. 이직 준비하면서 이직하려고 한다. 결심했다. 이대로는 안 된다. 이력서 썼다. GitHub 링크 넣어야 한다. 고민했다. 커밋 로그 보이는 게. 부끄럽다. Private 레포로 바꿀까 생각했다. 근데 그럼 포트폴리오가 없다. 어쩔 수 없다. 공개한다. 면접 준비했다. 예상 질문 적었다. "Git 워크플로우 어떻게 하시나요?"답: 혼자 main 브랜치에 푸시합니다."커밋 컨벤션은요?"답: 없습니다. asdf 같은 것도 있습니다."코드 리뷰는 어떻게 하시나요?"답: 혼자 일해서 안 합니다.전부 감점이다. 옛날 프로젝트 파기 시작했다. 사이드 프로젝트. 제대로 할 거다. 커밋 메시지 하나하나 신경 써서. 시작했다. React 프로젝트. 첫 커밋. chore: 프로젝트 초기 설정 - CRA로 React 프로젝트 생성 - ESLint, Prettier 설정 - 절대 경로 import 설정기분 좋았다. 이거다. 이렇게 쓰는 거다. 예전 감각 돌아왔다. 2주 했다. 커밋 10개. 다 제대로 썼다. 뿌듯했다. 면접 때 보여줄 수 있겠다. 근데 본업 커밋은 여전히 "fix", "asdf". 분리된 느낌이었다. 사이드는 완벽, 본업은 난장판. 이게 정상인가. 아니다. 알고 있다. 버릴 수 없는 이유 퇴사 고민한다. 맨날 한다. 근데 못 한다. 이유는 간단하다. 나 없으면 여기 돌아가지 않는다. 대표님 의존도 100%. 코드 아는 사람 없다. 서버 구조 아는 사람 없다. DB 스키마 아는 사람 없다. 다 내 머릿속에만 있다. 문서화? 해야 한다는 거 안다. 시간 없다. 개발하기도 바쁘다. 동료가 없다는 게 이런 거다. 대체 불가능해진다. 자랑이 아니다. 올가미다. 퇴사 상상한다. 인수인계 어떻게 하지. 2주로 되나. 한 달 줘도 모자랄 것 같다. 코드 설명해야 한다. 근데 커밋 로그 보면 이해 안 된다. 코드 봐도 이해 안 된다. 주석 없다. 내 머릿속에만 있다. "이 부분은 왜 이렇게 했어요?" 물으면 답해야 한다. "급해서요." 이게 답이다. 전부 그렇다. 책임감 때문에 못 나간다. 여기 나가면 서비스 터진다. 100% 터진다. 새로 온 사람이 파악하는 동안 장애 몇 번 날 거다. 그게 내 책임은 아니다. 알고 있다. 혼자 개발하게 만든 회사 책임이다. 근데 죄책감 든다. 이상하게. 언젠가는 정리할 거다 꿈꾼다. 언젠가 시간 나면. 커밋 히스토리 다시 쓰기. git rebase 로. 메시지 전부 수정. "asdf" 없애기. 의미 있는 메시지로 바꾸기. 브랜치 전략 세우기. feature, develop, main. 제대로 된 워크플로우. PR 만들고 머지하기. 혼자지만. 문서 작성하기. README 제대로. 아키텍처 설명. 왜 이렇게 만들었는지. 다음 사람이 보면 이해할 수 있게. 테스트 코드 작성하기. 유닛 테스트. 통합 테스트. 커버리지 80% 이상. 리팩토링할 때 안심하고 할 수 있게. 리팩토링하기. 기술 부채 청산. 스파게티 코드 정리. 모듈화. 클린 아키텍처. 자랑스러운 코드베이스. 언젠가. 시간 나면. 할 거다. 근데 언제? 모른다. 지금은 아니다. 내일도 아니다. 다음 주도 아니다. 신규 기능 개발해야 한다. 버그 고쳐야 한다. 언젠가는 영원히 오지 않는다. 안다. 근데 위안 삼는다. 언젠가는, 하면서. 커밋 로그는 계속 쌓인다. 의미 없는 메시지들로. 내 추락의 기록이. 신호였다 커밋 메시지는 신호였다. 처음 "update"라고만 쓴 날. 신호였다. 바쁘다는 핑계. 진짜 문제는 시간이 아니었다. 여유가 없었던 거다. 정신적 여유. 처음 "fix"라고만 쓴 날. 신호였다. 뭘 고쳤는지 안 썼다. 귀찮아서가 아니다. 생각할 힘이 없
- 14 Dec, 2025
금요일 밤도 안전하지 않다: 주말 장애의 공포
금요일 밤도 안전하지 않다: 주말 장애의 공포 금요일 저녁의 착각 금요일 오후 6시. 배포 완료. "이번 주말은 진짜 쉰다." 대표님한테 슬랙 보냈다. "금주 배포 완료했습니다. 주말 푹 쉬세요." 돌아온 답장. "수고했어요 👍" 노트북 덮었다. 가방에 넣었다. 집에 가는 지하철에서 유튜브 봤다. 치킨 시켰다. 맥주 마셨다. 오랜만이다. 이 해방감. 새벽 2시까지 넷플릭스 봤다. 괜찮다. 내일은 토요일이니까.토요일의 배신 토요일 오후 2시. 침대에서 일어났다. 12시간 잤다. 오랜만에 제대로 잔 느낌. 샤워하고 밥 먹고. '오늘 뭐하지.' 생각하는데. 띠링. 슬랙 알림음. 심장이 멈췄다. "서버 응답 없음 - 프로덕션" 아니. "502 Bad Gateway 발생" 제발. "유저 문의 폭주 중" 씨발. 침대에서 벌떡 일어났다. 노트북 어딨지. 가방. 가방이 어디 있지. 거실 소파에 던져놨던 가방 뒤졌다. 손 떨린다. 부팅되는 30초가 30분 같다. 슬랙 들어갔다. 대표님 멘션 5개. 기획자 멘션 3개. CS팀 멘션 7개. 전부 나한테. "지금 확인 중입니다." 타이핑하는 손이 떨렸다. 주말 장애의 특징이 있다. 혼자다. 도와줄 사람이 없다. 전부 나한테 온다.파자마 차림의 장애 대응 AWS 콘솔 열었다. CloudWatch 확인. CPU 사용률 98%. 메모리 100%. "또 이거냐." 지난주 추가한 기능. 대표님이 "이거 급해요" 했던 그거. 배치 작업이 멈췄다. 메모리 릭. 근데 왜 하필 토요일 오후냐. 금요일 밤에는 멀쩡했잖아. 파자마 바람에 앉아서 코드 뒤졌다. 머리 산발. 양치도 안 했다. 슬랙에서 계속 울린다. "언제쯤 복구 가능할까요?" "유저들 환불 요청하는데요" "지금 매출 나가는 시간인데" 알아. 다 알아. 근데 나도 지금 원인 찾는 중이라고. "30분 내 복구 예정입니다." 거짓말이다. 얼마나 걸릴지 모른다. 코드 수정했다. 배포했다. 재시작했다. 안 된다. 또 수정. 또 배포. 또 재시작. 3시간 지났다. 창밖을 봤다. 토요일 오후다. 사람들 공원 산책한다. 나는 파자마 바람에 장애 대응 중이다.주말 장애의 특별함 주말 장애가 평일 장애보다 최악인 이유. 첫째, 혼자다. 도움 청할 사람 없다. 전부 나한테 온다. 둘째, 기대치가 있었다. '이번 주말은 쉬어야지' 했으니까. 셋째, 복구해도 박수 없다. 당연한 거니까. 주말인데 일했다고 칭찬 안 한다. 넷째, 월요일에 또 출근한다. 주말이 사라진 거다. 오후 5시. 드디어 복구했다. "복구 완료했습니다." 대표님 답장. "고생했어요 👍" 이모지 하나. 3시간 날렸는데 이모지 하나. 기획자도 답장 왔다. "다행이네요. 월요일에 회의 잡을게요." 회의까지 잡힌다. 노트북 덮었다. 양치하러 갔다. 거울 봤다. 머리 엉망. 눈 충혈. 파자마 구겨짐. 오늘 토요일이다. 일요일도 안전하지 않다 토요일 저녁 먹었다. 편의점 도시락. '내일은 쉬어야지.' 또 같은 생각. 일요일 오전 11시. 침대에서 폰 봤다. 슬랙 알림 없다. 다행이다. 샤워하고 밥 먹고. 빨래 돌리고. '오늘은 좀 쉴 수 있나.' 오후 3시. 띠링. 또. "결제 모듈 오류" 진짜냐. 어제 수정한 코드가 결제에 영향 준 거다. 사이드 이펙트다. 미처 못 봤다. 노트북 켰다. 또 시작이다. 일요일 오후 3시. 사람들 카페 간다. 영화 본다. 데이트한다. 나는 결제 모듈 뒤진다. 2시간 걸렸다. 핫픽스 배포했다. "복구 완료" 대표님 답장 없다. 일요일 오후니까. 나만 일한 거다. 창밖 봤다. 해 진다. 주말이 끝났다. 월요일 아침 월요일 오전 10시. 출근했다. 동료들 "주말 잘 쉬었어요?" "네." 거짓말이다. 대표님 만났다. "주말에 고생했어요. 덕분에 큰일 안 났네요." "괜찮습니다." 괜찮지 않다. 회의 시작했다. 기획자가 말한다. "이번 주 일정 빡빡한데요." 알아. 주말도 없었는데 이번 주도 없는 거지. 책상 앉았다. 슬랙 확인했다. 어제 복구한 건 들어가 있다. 당연하다. 커피 마셨다. 세 번째다. 책상 서랍에 노트북 충전기 두 개 있다. 하나는 집에 두고 왔다. 어차피 집에서도 쓸 거니까. 주말 장애 대응한 게 업무일지에 안 들어간다. 당연한 일이니까. 야근 수당도 없다. 스타트업이니까. 스톡옵션 0.5%가 있다. 의미 있을까. 금요일이 두렵다 이번 주 금요일. 배포한다. 또. "이번 주말은 쉬어야지." 또 같은 말 할 거다. 그리고 토요일 오후. 슬랙이 울릴 거다. 또 노트북 켤 거다. 또 파자마 바람에 장애 대응할 거다. 주말이 안전하지 않다는 걸 안다. 근데 계속 기대한다. 이번 주말은 다를 거라고. 거짓말이다. 알고 있다. 온콜이 24시간이다. 주말도 포함이다. 혼자라서 그렇다. 나 말고 고칠 사람이 없어서 그렇다. 채용 공고 6개월째다. 안 뽑힌다. 면접 볼 시간도 내가 없다. 장애 대응하느라. 이직 생각한다. 근데 못 한다. 여기 떠나면 서비스 터질 거 같아서. 미안해서. 책임감이다. 주말 장애도 책임감 때문에 대응한다. 근데 이게 맞나. 모르겠다. 금요일이 두렵다. 주말이 두렵다. 쉬고 싶다. 진짜로.다음 주 금요일도 "이번 주말은 쉰다" 할 거다. 거짓말인 줄 알면서.
- 03 Dec, 2025
터미널 탭 20개, 내 정신 상태를 나타내는 지표
터미널 탭 20개, 내 정신 상태를 나타내는 지표 오전 10시 47분. 노트북을 열었다. 터미널 탭이 어젯밤 그대로다. 23개. 닫을 수가 없다. 어떤 게 뭔지 모른다.아침의 탭 정리, 실패 첫 번째 탭. npm run dev 돌아가는 중. 두 번째 탭. docker-compose logs -f 보고 있었나보다. 세 번째 탭. PostgreSQL 접속 상태. 쿼리 반쯤 쓴 흔적. 닫으면 안 될 것 같다. 다 의미가 있었을 거다. 어젯밤의 나는. 네 번째부터 열한 번째까지는 SSH 접속이다.프로덕션 서버 3대 스테이징 서버 1대 DB 마스터 왜인지 모를 htop 돌아가는 창 3개열두 번째 탭에서 git status 쳐봤다. Changes not staged for commit: modified: src/api/user.js modified: src/components/Header.tsx modified: migrations/20240115_add_index.sql modified: docker-compose.yml modified: .env.production5개 파일. 전부 다른 작업이다. 프론트, 백엔드, DB, 인프라, 환경설정. 이게 내 하루다. 오전: 컨텍스트 스위칭의 연속 10시 52분. 슬랙 메시지. "로그인 버튼 클릭 시 로딩 표시 안 나와요." 좋아. 프론트부터 본다. src/components/LoginButton.tsx 연다. 탭 하나 추가. 24개. const handleLogin = async () => { setLoading(true); // 이거 있는데? await loginAPI(); setLoading(false); }코드는 멀쩡하다. 크롬 개발자도구 연다. 탭 25개. 네트워크 탭 확인. API 응답이 0.2초. 너무 빨라서 로딩이 안 보이는 거였다. "빠른 건데요" 라고 말할 수 없다. setTimeout 300ms 추가한다. 11시 8분. 커밋하려는데 슬랙. "DB 용량 90% 넘었어요. 확인 부탁드려요."프론트 작업 멈춘다. 커밋 안 한다. 탭 전환. PostgreSQL 들어간다. SELECT schemaname, tablename, pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) AS size FROM pg_tables ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC LIMIT 10;logs 테이블이 38GB다. 3개월치 로그가 쌓여있다. 파티셔닝 해야 하는데 시간이 없다. 일단 3개월 전 데이터 아카이빙. 새 터미널 탭 연다. 26개. pg_dump --table=logs --where="created_at < '2024-10-01'" > logs_archive.sql덤프 돌리는데 15분 걸린다고? 그동안 다른 거 해야지. 정신이 5개로 분열되는 순간 11시 23분. 덤프는 진행 중. 아까 프론트 작업 커밋하려고 했지. git add 하려는데 슬랙. "API 응답 느린데 확인 가능하세요?" 백엔드로 간다. node.js 프로세스 로그 확인. 탭 27개. tail -f /var/log/app/api.log | grep "slow query"나온다. /api/users/list 엔드포인트. 쿼리가 3초 걸린다. 코드 열어본다. 탭 28개. const users = await db.query(` SELECT * FROM users LEFT JOIN orders ON users.id = orders.user_id WHERE users.status = 'active' `);인덱스가 없다. status 컬럼에. 이거 내가 짠 건데. 언제 짠 거지. 인덱스 추가 마이그레이션 파일 만든다. 탭 29개. 11시 47분. PostgreSQL 덤프 끝났다. 아직 삭제는 안 했다. 백업 확인부터. psql test_db < logs_archive.sql테스트 DB에 복원해본다. 이것도 10분 걸린다. 그동안 인덱스 추가? 아니다. 프로덕션에 바로 추가하면 락 걸린다. 새벽에 해야 한다. 메모해둔다. 메모장 탭 연다. 30개. "TODO: 새벽 3시 인덱스 추가 - users.status" 이 메모를 볼 가능성은 30%다.점심, 먹으면서 AWS 콘솔 12시 18분. 편의점 김밥 뜯는다. 한 손으로 먹고 한 손으로 탭 정리. 닫아도 될 것 같은 거 찾는다. htop 3개 중 2개 닫는다. 28개. AWS 콘솔 확인한다. 습관이다. CloudWatch 들어간다. EC2 CPU 사용률 78%. 오전보다 올랐다. 평소 50%인데. 뭔가 있다. 확인해야 한다. 김밥 씹으면서 서버 접속. top -cnode 프로세스가 2개다. 하나는 정상. 하나는? ps aux | grep node 쳐본다. 좀비 프로세스다. PM2 재시작 안 된 거. pm2 restart all 친다. CPU 사용률 내려간다. 52%. 김밥 다 먹었다. 12시 34분. 점심시간 16분 썼다. 오후: 긴급 요청의 연속 2시 11분. 대표님 슬랙. "결제 모듈 테스트 환경 급하게 필요합니다." 결제 모듈. 토스페이먼츠. 프론트도 고쳐야 하고 백엔드도 고쳐야 하고. 스테이징 서버에 배포해야 한다. 근데 스테이징 서버 환경변수가 다르다. .env.staging 파일 연다. 탭 29개. 토스 테스트 키 찾는다. 노션에 있을 거다. 브라우저 탭 연다. 30개. 노션 로그인 만료됐다. 다시 로그인. 테스트 키 찾았다. 복사한다. .env.staging 에 붙여넣는다. 프론트 코드 수정. PaymentButton.tsx 연다. 탭 31개. const clientKey = process.env.REACT_APP_TOSS_CLIENT_KEY;환경변수 추가해야 한다. .env.development 도 수정. 탭 32개. 백엔드 코드 수정. payment.controller.js 연다. 탭 33개. 결제 승인 API 수정하고. 웹훅 엔드포인트 추가하고. 3시 2분. 배포 준비 끝. git commit -m "Add payment test environment" 친다. 배포 스크립트 돌린다. 탭 34개. ./deploy.sh staging5분 걸린다. 기다린다. 그동안 다른 거 못 한다. 불안해서. 3시 7분. 배포 끝. 테스트해본다. 결제 버튼 누른다. 에러 난다. 콘솔 확인. "CORS policy error" 아. NGINX 설정 안 했다. 서버 접속. 탭 35개. sudo vim /etc/nginx/sites-available/defaultCORS 헤더 추가. add_header 'Access-Control-Allow-Origin' '*';sudo nginx -t 테스트. sudo systemctl reload nginx 재시작. 다시 테스트. 된다. 대표님한테 메시지. "완료했습니다." 3시 29분. 저녁: 장애의 전조 6시 43분. 슬랙 알림. "사이트 느려요." 심장이 빨리 뛴다. 조건반사다. CloudWatch 연다. 이미 열려있다. RDS CPU 91%. 뭔가 쿼리가 터졌다. PostgreSQL 접속. 슬로우 쿼리 확인. SELECT * FROM pg_stat_activity WHERE state = 'active' ORDER BY query_start;10초 넘게 돌아가는 쿼리가 3개다. 전부 orders 테이블 조인. 내가 오전에 추가한 인덱스. 아직 안 만들었다. 새벽에 하려고 했는데. 지금 만들어야 한다. 프로덕션이 느리면 장애다. CREATE INDEX CONCURRENTLY idx_users_status ON users(status);CONCURRENTLY 옵션. 락 안 걸린다. 하지만 시간이 오래 걸린다. 진행 상황 확인할 방법이 없다. 기다린다. 7분. 7시 2분. 인덱스 생성 완료. 쿼리 속도 확인. 0.3초로 줄었다. RDS CPU 58%로 내려간다. 숨 쉰다. 아무도 모른다. 방금 장애를 막았다는 걸. 밤: 드디어 내 시간? 9시 17분. 퇴근 시간 한참 지났다. 사무실에 나 혼자. 오늘 한 일 정리해본다.프론트 버그 수정 1건 DB 용량 정리 (미완) API 성능 개선 결제 모듈 테스트 환경 구축 인덱스 긴급 추가5개 다른 영역이다. 오늘 못 한 일.프론트 리팩토링 백엔드 테스트 코드 작성 DB 파티셔닝 설계 CI/CD 파이프라인 개선 로그 아카이빙 자동화5개 다 못 했다. 터미널 탭 확인. 37개. 이제 정리해야 한다. 하나씩 닫는다. 어떤 건 뭐하던 건지 모른다. 그냥 닫는다. 15개 남았다. 여기서 멈춘다. 내일 쓸 것들이다. 리팩토링이나 하자. user.service.js 파일 연다. 탭 16개. 코드 보다가 슬랙 알림. "API 타임아웃 에러 났어요." 9시 48분. 다시 시작한다. 이게 정상인가 퇴근은 11시 23분. 집 가는 지하철에서 생각한다. 오늘 내가 한 일. 프론트엔드 개발자의 일. 백엔드 개발자의 일. DBA의 일. DevOps 엔지니어의 일. 그리고 장애 대응. 5명이 할 일을 혼자 한다. 아니, 5명이 제대로 하면 더 잘할 일을. 나 혼자 대충 한다. 터미널 탭 20개는. 내 정신이 20갈래로 찢어져 있다는 뜻이다. 각 탭마다 다른 문맥. 다른 언어. 다른 문제. React에서 PostgreSQL로. Node.js에서 NGINX로. AWS에서 다시 프론트로. 스위칭할 때마다. 뇌가 재부팅된다. "멀티태스킹 잘하시네요." 대표님이 칭찬한다. 멀티태스킹이 아니다. 생존이다. 채용 공고 올린 지 7개월. 아직도 혼자다. "역량 쌓기 좋은 환경이에요." 맞다. 억지로 쌓인다. 원하지 않아도 쌓인다. 근데 깊이가 없다. 전부 얕다. 급해서. 제대로 하고 싶다. 한 가지를 깊게 파고 싶다. 코드 리뷰 받고 싶다. 테스트 코드 짜고 싶다. 시간이 없다. 터미널 탭 20개가 날 기다린다. 집 도착. 12시 9분. 노트북 가방 던진다. 씻고 자야지. 근데 슬랙 확인부터. 빨간 점이 하나 있다. 열어본다. "내일 오전에 급한 건 있습니다." 하하. 웃음이 나온다. 오늘도. 내일도. 터미널 탭 20개.내일 아침 터미널 탭은 몇 개일까. 어차피 닫을 시간 없다.
- 03 Dec, 2025
리팩토링하고 싶은데 급한 기능이 또 들어왔다
리팩토링하고 싶은데 급한 기능이 또 들어왔다 오전 10시 30분 출근했다. 슬랙 알림 27개. 대표님: "오늘 중으로 결제 모듈 붙여주실 수 있나요? 내일 투자자 미팅인데 꼭 보여줘야 해요." 나: "네, 볼게요." 내가 보려던 건 3주 전부터 미뤄온 인증 로직 리팩토링이었다. 코드 열어볼 때마다 토 나올 것 같은 그 코드. 회원가입, 로그인, 토큰 갱신 로직이 5군데에 중복되어 있다. 버그 고칠 때마다 5곳을 다 수정해야 한다. 오늘은 꼭 정리하려고 했다. 결제 모듈 작업 예상 시간: 6시간. 리팩토링은 또 미뤄진다.기술 부채 통장 잔고 현재 내가 파악한 리팩토링 필요 목록:인증 로직 중복 (5곳) - 3주 경과 상품 조회 API 응답속도 4.2초 (목표 1초 이하) - 2달 경과 에러 핸들링 없는 비동기 함수 148개 - 카운트 포기 테스트 커버리지 12% - 올릴 생각도 못 함 Docker 이미지 3.2GB (최적화하면 500MB 가능) - 배포 때마다 10분 DB 인덱스 없는 테이블 9개 - 점점 느려짐 하드코딩된 설정값 곳곳에 - 환경 바뀌면 재배포이게 3개월 치다. 3개월 전엔 이것보다 적었다. 6개월 전엔 더 적었다. 계속 늘어난다. 갚는 속도보다 빌리는 속도가 빠르다. 기술 부채 이자만 내고 있다. 원금은 불어난다. 결제 모듈 작업 시작 일단 급한 거부터. 기존 코드 열어봤다. 주문 로직이 컨트롤러에 다 박혀있다. 비즈니스 로직이 라우터 파일에 200줄. 서비스 레이어가 없다. "이거 나중에 정리해야지." 메모장에 적는다. 47번째 항목. 일단 결제 API 연동부터. 문서 읽는다. 콜백 URL 설정, 웹훅 처리, 실패 케이스 핸들링. 제대로 하려면 결제 서비스 레이어 만들고, 에러 처리 통일하고, 트랜잭션 관리하고. 시간 없다. 기존 코드 복붙한다. 200줄이 400줄 된다. "나중에 정리하지 뭐."오후 3시 결제 모듈 70% 완성. QA팀 (기획자가 겸함): "상품 상세 페이지 로딩 너무 느려요. 5초 걸려요." 알고 있다. 2달 전부터 알고 있다. 상품 한 개 조회하는데 DB 쿼리 17번 날린다. N+1 문제다. JOIN으로 한 방에 가져오면 0.3초 컷. "급하게 수정할게요." 임시방편으로 Redis 캐싱 붙인다. 30분 작업. 1.5초로 줄어든다. 근본적 해결은 아니다. 캐시 무효화 로직도 제대로 안 짰다. 상품 수정하면 한참 후에 반영된다. "나중에 쿼리 최적화하면서 제대로 해야지." 메모장 48번째. 기능 개발과 리팩토링의 시간 역설 기능 개발: 1시간에 완성, 성과 보임, 대표님 좋아함. 리팩토링: 3일 걸림, 겉보기 변화 없음, "그래서 뭐가 달라진 건가요?" 어떤 게 우선순위가 될까. 명확하다. 대표님 입장에선 당연하다. 투자 유치해야 하고, 고객 늘려야 하고, 매출 만들어야 한다. 코드가 예쁜지 안 예쁜지는 관심 없다. 나도 이해한다. 근데 문제는. 기술 부채가 쌓일수록 기능 개발 속도가 느려진다. 3개월 전엔 기능 하나 추가하는 데 1일 걸렸다. 지금은 2일 걸린다. 6개월 후엔 4일 걸릴 거다. 코드가 복잡해져서 버그 찾기 어렵다. 수정하면 다른 데서 터진다. 테스트도 없어서 확인도 못 한다. 결국 느려진다. 그럼 대표님이 말한다. "왜 이렇게 오래 걸려요? 예전엔 빨랐는데." 설명할 수 없다. "코드가 더러워져서요"라고 하면 "그럼 깨끗하게 하면 되잖아요"라고 한다. 시간을 달라고 하면 "급한 게 먼저 아닌가요?" 무한 루프다.저녁 7시 결제 모듈 완성. 배포했다. 대표님: "고생하셨어요! 내일 미팅에서 잘 보여드릴게요." 뿌듯하다. 3초간. 그리고 생각한다. 오늘 추가한 코드 300줄. 제대로 설계 안 한 코드. 에러 처리 부실한 코드. 테스트 없는 코드. 다음 개발자가 이거 보면 욕할 거다. 아, 다음 개발자가 없다. 나다. 3개월 후의 나다. 미래의 내가 현재의 나한테 욕한다. 매일. 악순환의 구조 기능 개발 급함 → 제대로 못 짬 → 기술 부채 쌓임 → 다음 개발 느려짐 → 더 급해짐 → 더 못 짬. 어디서 끊어야 할까. 방법은 안다. 리팩토링 시간 확보. 일주일에 하루는 기술 부채 갚기. 새 기능 개발할 때 관련 코드 정리하고 시작. 근데 현실은. 월요일: "이번 주 금요일까지 A 기능 개발 가능할까요?" 화요일: "고객 문의 많은데 B 기능 급하게 추가해주실 수 있나요?" 수요일: "투자사에서 C 기능 보고 싶대요. 이번 주 안에 가능할까요?" 목요일: 장애 대응. 금요일: A, B, C 다 못 끝냄. 주말 작업. 리팩토링 시간은 어디 있나. 밤 11시 퇴근 준비하는데 슬랙. 대표님: "내일 미팅에서 D 기능도 보여주고 싶은데, 혹시 오늘 밤에..." D 기능은 장바구니다. 장바구니 로직 제대로 만들려면 이틀 걸린다. 세션 관리, 비회원 장바구니, 로그인 시 병합, 수량 변경, 재고 확인. "급하게라도 프로토타입만 만들 수 있을까요?" 프로토타입. 임시방편. 나중에 다시 짜야 할 코드. "해볼게요." 메모장 49번째: "장바구니 제대로 다시 짜기" 노트북 다시 연다. 새벽 2시 장바구니 프로토타입 완성. 로컬 스토리지에 때려박기. 제대로 된 장바구니 아니다. 보여주기용 껍데기. 배포한다. 침대에 눕는다. 천장 본다. "내일은 리팩토링 좀 해야지." 3개월째 하는 생각. 기술 부채의 실체 기술 부채는 눈에 안 보인다. 대표님 눈엔 "기능 잘 돌아가네" 밖에 안 보인다. 내 눈엔 보인다.중복 코드 덩어리 의미 없는 변수명 (data1, data2, temp, result) 1000줄짜리 함수 주석 없는 복잡한 로직 하드코딩된 값들 try-catch 없는 비동기 함수들이게 쌓인다. 눈덩이처럼. 작은 버그 하나 고치는데 3시간 걸린다. 코드 따라가다가 길 잃는다. 스파게티다. 새 기능 추가하려는데 어디에 넣어야 할지 모르겠다. 구조가 없다. 그래서 또 아무 데나 박는다. 더 복잡해진다. 홀로 싸우는 전쟁 시니어 개발자가 옆에 있었으면. "이거 이렇게 하지 말고 저렇게 해봐." "지금 리팩토링하는 게 나중에 이득이야." "일단 구조 잡고 시작하자." 조언해줄 사람이 없다. 구글링한다. 스택오버플로우 뒤진다. 유튜브 본다. 정답을 모른다. 내가 하는 게 맞는지 모른다. 그냥 돌아가게만 만든다. 나중 생각은 나중에. 근데 나중은 안 온다. 오늘의 커밋 로그 feat: 결제 모듈 추가 fix: 상품 조회 속도 개선 (임시) feat: 장바구니 프로토타입 refactor: ...refactor 커밋은 3개월째 없다. feat, fix, hotfix만 쌓인다. GitHub contribution 그래프는 초록색이다. 매일 커밋한다. 근데 코드 품질은 빨간색이다. 매일 나빠진다. 이직을 고민하는 밤 가끔 생각한다. 이직할까. 채용공고 본다. "클린 코드", "테스트 주도 개발", "코드 리뷰 문화". 좋아 보인다. 근데 또 생각한다. 여기 떠나면 서비스 어떻게 되나. 나 말고 아무도 코드 모른다. 대표님한테 미안하다. 같이 시작했는데. 동료들한테 미안하다. 개발자 나뿐인데. 책임감이 발목 잡는다. 그래서 못 떠난다. 그래서 계속 이렇게 산다. 금요일 오후 한 주가 끝난다. 이번 주 완성한 기능: 5개. 이번 주 리팩토링: 0건. 기술 부채 목록: 49개 → 52개. 다음 주 계획: 월요일: "이번엔 진짜 리팩토링 시작해야지." 화요일: 급한 기능 요청 들어올 거다. 수요일: 그거 하느라 리팩토링 못 할 거다. 목요일: 장애 터질 거다. 금요일: 다음 주엔 꼭 하자고 다짐할 거다. 예측 가능하다. 그래도 포기는 안 한다. 언젠가 시간 생긴다. 그때 한 방에 정리한다. 그때까지 버틴다. 메모장 열고 50번째 항목 적는다. "전체 아키텍처 재설계." 언젠가 할 거다. 오늘은 아니다. 내일도 아닐 거다. 근데 언젠가.오늘도 급한 기능이 또 들어왔다. 리팩토링은 내일.