Showing Posts From

신입

매일 아침 슬랙을 두려워하는 이유

매일 아침 슬랙을 두려워하는 이유

매일 아침 슬랙을 두려워하는 이유 9시 10분, 의자에 앉기 전에 해야 할 일 출근한다. 키를 꺼낸다. 신발을 벗는다. 그리고 바로 핸드폰을 꺼낸다. 슬랙을 켠다. 왜 이렇게 했는지도 모르겠다. 자동으로 손가락이 움직인다. 마치 누군가 내 팔목을 조종하는 것처럼. 신발장에서 의자로 가는 5초 사이에 이미 확인해야 할 알림이 있는지 없는지가 결정되어 있다는 건 좀 이상하다. 하지만 지금 여기서 슬랙을 확인하지 않으면 뭔가 큰 일이 일어날 것 같은 기분이 든다. '안 읽은 메시지 12개' 심장이 철렁한다. 12개면 많은 건가. 적은 건가. 이게 정상인가. 다들 이렇게 받나. 몰라. 일단 의자에 앉자. 커피는 그 다음에.안 읽은 메시지의 심리학 안 읽은 메시지 개수가 눈에 띄는 순간. 뇌가 자동으로 시뮬레이션을 시작한다. '뭐가 잘못됐나.' '어제 올린 PR에 뭔가 이슈 생겼나.' '선배한테 처리하라고 했던 거 까먹었나.' 손가락이 떨린다. 진짜로. 노을색 아이콘이 떠 있는 슬랙 메시지들. 그걸 클릭하기 전까지는 상황이 정확하지 않다. 상황이 정확하지 않으면 대응할 수도 없다. 그래서 클릭하지 않은 채로 한참 동안 보고만 있다. '읽으면 끝나는데.' 맞다. 읽으면 끝난다. 그런데 읽기 싫다. 어제 날씨 얘기하는 메시지 한두 개는 괜찮다. 근데 그 사이에 '이신입, 요청 사항이 있어서' 이런 게 섞여 있으면? 죽는다. 슬랙에서 직급이 높은 사람의 이름이 떠 있으면 일단 불안하다. 그게 컨텍스트 없이 밤샘 중에 온 메시지라면 더욱 그렇다. 야간 메시지는 높은 확률로 급할 일이다. 야간 메시지가 지금 아침에 안 읽은 채로 남아 있다는 건 내가 이미 뭔가 늦었다는 뜻이다. '아... 네네. 죄송합니다. 지금 확인하겠습니다.' 이 문장을 몇 번이나 날렸는지 모른다. 안 읽은 메시지가 정말 무서운 건, 그게 뭘 요구하고 있는지 모른 채로 하루를 시작하게 된다는 거다. 마치 미션을 받기 직전인 것처럼. 또는 이미 미션을 받았는데 내가 못 들었던 것처럼. 어제 선배가 '이거 좀 부탁해'라고 메시지 남겼다면? 내가 이미 안 본 지 10시간이 지났으면? 선배는 지금 내가 한 줄 읽지 않았다는 걸 알고 있을까. 아니다. 선배는 이미 나를 잊었다. 그리고 1시간 뒤에 '왜 아직 안 했어?' 이러면 난 뭐라고 변명할 건가. '아... 죄송해요. 지금 봤어요.' 항상 이 문장이 나온다.12개의 메시지, 12개의 시나리오 슬랙을 켰을 때 첫 번째로 하는 일. 메시지를 분류한다. 머릿속으로.팀 공지 채널 → 읽어야 하는 건가. 다들 읽나. 바로 내 이름이 멘션된 거 → 죽는다. 스레드 안 메시지 → 아, 내가 답할 차례인가. 선배 개인 메시지 → 가장 무서운 거. 팀 전체 메시지 → 어 뭐라고? 자동화 알림 (예: 배포 성공) → 이건 안심이다.1~5번 중에서 1개라도 있으면 출근 기분이 싹 날아간다. '오늘도 바쁘겠네.' 대체로 그렇다. 안 읽은 메시지가 5개 이상이면 확정. 오늘은 뭔가 처리해야 할 일이 있다. 그게 뭔진 아직 모르지만 분위기상 그렇다. 가장 무서운 건 메시지 제목이 모호할 때다. '한번 봐줄 수 있어?' 이거면 뭘 봐야 하는 거야. PR? 코드? 로직? 디자인? 결과물? 아니면 지금 화면을 공유한 채로 있는 건가. 슬랙에는 창사 이래로 가장 모호한 질문들이 쌓여 있다. '우리 이거 어떻게 할까?' 누가 "우리"야. 내가 한 건가. 선배가 한 건가. 다 함께? 'PR 올려줄래?' 언제까지. 오늘. 내일. 지금. 답변 없이 마침표로 끝나는 메시지는 정말 악질이다. 그건 거의 명령이다. 질문처럼 보이는 명령. 구두점 없는 메시지도 불안하다. 뭔가 급한 느낌이 난다. '이거 빨리' 빨리가 얼마나 빨리인지는 명시 안 하고. 나는 매일 이런 메시지들을 해석하는 데 10분을 쓴다. 그리고 그 해석이 틀렸을 확률은 60%다. 선배에게 물어보면 된다. '선배, 이거 뭐 하라는 거예요?' 근데 이미 바쁜데 이렇게 물으면 선배도 스트레스 받을까봐 묻지 못한다. 그래서 혼자 추리한다. '아마도 이런 뜻인 것 같은데... 내 생각이 맞으면 좋겠어.' 틀렸다. 항상 틀렸다. 그리고 다시 물어본다. 그리고 'PR 다시 올려줄래?'라는 메시지가 온다.읽기 전에 이미 피곤함 슬랙을 켜는 순간 하루가 시작된다. 정확히는 하루가 결정된다. '안 읽은 메시지 0개' 이러면 뭔가 이상하다. 뭔가 빠진 게 있나. 다들 내 얘기를 안 했나. 자유로운 아침이 오면 그게 더 불안하다. 조용함이 불안하다. '안 읽은 메시지 3개' 보통. 이 정도면 조기 중퇴까지는 아니다. 점심까진 버틸 수 있을 것 같다. '안 읽은 메시지 8개 이상' 오늘은 지옥이다. 실제로 읽어보니 그 중 5개가 일반 공지고 2개가 옛날 메시지 캐시였던 일도 있다. 하지만 그건 읽기 전엔 모른다. 읽기 전엔 모두 폭탄처럼 보인다. 심장이 미리 뛴다. 커피를 마셔도 소용없다. 이미 카페인은 필요 없다. 불안감만으로 충분히 깨어 있다. 손이 떨린다. 자판을 잘못 친다. 코드를 쳐야 하는데 자꾸 슬랙 창으로 넘어간다. '또 뭐 왔나.' 또 왔다. 또 온다. 매 시간마다. 가장 많이 오는 건 오전 10시와 오후 2시다. 그 두 시간이 지나면 안심한다. '오늘은 별로 없겠네'라고 생각한다. 하지만 3시쯤 되면 다시 온다. 퇴근 30분 전 쯤에 가장 무서운 메시지가 온다. '내일 아침까지 이거 한번 봐줄 수 있어?' 내일 아침. 즉, 오늘 밤 내 시간이라는 뜻이다. 퇴근 후 1시간은 자유 시간이지만 사실상 그 시간도 빼앗긴다. 왜냐면 메시지가 와도 답장을 하지 않으면 마음 한구석이 계속 불편하기 때문이다. '내일 아침'은 절대 내일 아침이 아니다. 그건 '오늘 밤'이다. 아무도 이 암호를 가르쳐주지 않았는데 나는 알고 있다. 부트캠프에서 배운 것도 아니고. 그냥 실전에서 습득했다. 신입들의 강제 학습 과정. 선배는 몰라도 되는 것들 선배한테 물어봤다. '선배는 아침마다 슬랙 안 읽은 거 보고 불안하지 않아요?' 선배가 웃었다. '신입이니까 그래. 나도 처음엔 그랬어.' 그게 위로인지 협박인지 모르겠다. '이거 저한테 온 거 맞죠?' '응. 너한테.' 그럼 왜 9시간이 지나도록 답장이 없으면서... 아. 나는 그런 부분은 신경 쓰지 않는 거구나. 신입이 아니니까. 선배는 슬랙을 켜긴 하는데 보는 게 아니라 흘려본다. 쭉 지나간다. 마치 뉴스를 보는 것처럼. 그리고 중요한 거만 나중에 처리한다. 근데 내건 전부 중요한 것 같다. 왜냐면 뭐가 중요한지 내가 아직 모르니까. 동기 재준이는 어제 메시지에 답장을 2시간 뒤에 했다. '나 그냥 1시간에 한 번 체크해.' 1시간에 한 번. 신세한 거다. 재준이도 불안한 건 같은데 걔는 좀 더 여유 있어 보인다. 왜 난 안 된다고 생각할까. 아마도 내가 자존감이 낮아서 그런 것 같다. 모르는 게 많아서. 언제라도 혼날 준비가 되어 있어서. 선배는 충분히 알아. 그래서 메시지를 들을 필요가 없다. 근데 나는 부족해. 그래서 매 메시지가 시험처럼 느껴진다. '이거 할 수 있어?' 이 질문도 사실 '할 수 있어?'가 아니라 '바로 해야 해?'라는 뜻일 거다. 근데 '네' 하고 못 하면? 미친다. 마지막으로 남겨진 것들 지금 시간 9시 14분. 내가 슬랙을 켠 지 14분. 여전히 12개가 남아 있다. 이제 읽어야 한다. 그런데 한 가지 확실한 건, 그걸 읽고 나면 내 아침은 끝난다. 아침이 끝나고 나머지 하루가 결정된다. 혹시 모르니까 화장실부터 다녀올까. 그것도 시간 낭비다. 결국엔 봐야 한다. 좋아. 켈 게. 손가락이 미끄러진다. 첫 번째 메시지. '우리 이거 어떻게 할까요?' 다른 선배다. 다른 팀이다. 관계 없는 안내다. 다음. 'ㅂ1대신 ㅂ2로 수정해줄 수 있어?' 이게 뭔데. ㅂ은 뭐고 어디서 수정하는 거야. 다음. '✓' 이건 뭐지. 승인이야. 거절이야. 내 심장은 계속 뛴다. 나머지 9개를 계속 읽는다. 대부분 별 거 아니다. 그냥 공지. 그냥 조회. 하지만 그 안에 한두 개가 나를 지목한다. 그게 오늘 하루를 결정한다. '이신입, 어제 올린 거 확인해봤어?' 피한다. '아 네. 지금 보겠습니다.' 지금 본다. 에러가 있다. 고칠 수 있나. 못 고칠 것 같은데. 선배한테 다시 물어봐야 하나. 물어본다. '그거 왜 이렇게 됐어요?' '너가 처음부터 잘못 이해했나 봐. 다시 해봐.' 다시 한다. 하루가 이렇게 간다.결국 슬랙은 내 아침을 훔쳐간다. 그리고 아침은 하루를 훔쳐간다.

9시 10분 출근의 심리학: 신입 개발자의 눈치 문화

9시 10분 출근의 심리학: 신입 개발자의 눈치 문화

9시 10분 출근의 심리학: 신입 개발자의 눈치 문화 매일 아침 알람은 8시 20분에 울린다. 샤워하고, 옷 입고, 편의점에서 아메리카노 한 잔 사고, 버스 탈 시간을 계산한다. 정확히 8시 50분쯤 회사 건물 지하에 도착한다. 그다음부터는 심호흡을 한다. 사실 나는 8시 50분부터 9시까지 10분간 건물 로비 의자에 앉아 있다. 아무것도 안 하고 그냥 앉아 있다. 왜 이러는 걸까? 이건 정말 이상한 버릇인데, 내가 유일한 사람은 아닌 것 같다. 지난주에 우리 팀 인턴 최준호가 비슷하게 하는 걸 봤다. 9시 정각에 들어갈 용기가 없어서 9시 15분에 들어왔다. 엘리베이터에서 만났을 때 우리 눈이 마주쳤고, 우린 말 없이 고개를 주억였다. 그 순간 알았다. 이건 나만의 문제가 아니라 우리 회사의 문제, 아니 이 직장 문화 전체의 문제라는 걸.첫 출근부터 시작된 마음 속의 전쟁 8개월 전, 입사 첫날 이른 아침 6시에 깼다. 잠을 못 잤다. 부트캠프에서 6개월을 붙어 있다가 드디어 '진짜 직장'에 들어가는 거였다. 면접 때 "React 좀 할 줄 아세요?"라는 질문에 나는 당당하게 "네"라고 대답했다. 지금은 그 대답이 제일 크고 싶은 거짓말이다. 하지만 그날은 몰랐다. 나는 할 수 있다고 생각했다. 첫날 사무실에 도착한 게 8시 45분이었다. 일찍 도착해서 좋은 인상을 주고 싶었다. 신입 개발자의 열정이 그 정도였다. 그런데 사무실을 열고 들어갔을 때 깜짝 놀랐다. 아무도 없었다. 책상들 앞에 아무도 앉아 있지 않았다. 나는 한 시간을 혼자 사무실에서 보냈다. 모니터를 켜고, 마우스를 집어 들었다가 놨다. 메모장을 열었다가 닫았다. 정말 할 게 없었다. 9시가 되자 사람들이 들어오기 시작했다. 그 다음이 문제였다. 들어오는 순서가 있었다. 팀장이 먼저, 그 다음 3년 차 선배 김태호, 5년 차 선배 이준수. 그리고 맨 마지막에 막내들이 들어온다. 아, 그리고 정확히 9시에 들어오는 사람은 거의 없다. 다 9시 5분, 9시 10분, 심하면 9시 20분. 나는 8시 45분에 들어왔으니까 되게 열심히 보이는 거겠지 하고 생각했다. 점심시간이 되자 팀장이 불렀다. "이신입, 너 어제부터 있는 거 알지? 첫날부터 그렇게 일찍 올 필요 없어. 아침에 푹 자고 와. 여긴 그런 회사 아니야." 나는 "네, 감사합니다"라고만 했다. 그 순간부터 뭔가 헷갈렸다. 9시 정각이 정시인데 왜 일찍 오지 말라는 거지? 그럼 몇 시에 와야 하는 거야? 이게 눈치인 건가? 혼자 생각했다. 그걸 팀장에게 물어볼 수는 없었다. 슬랙 메시지가 울리는 순간의 공포 이제 내 일과는 이렇게 시작된다. 9시 정각이 되기 5분 전부터 나는 노트북을 켜서 슬랙(Slack)에 들어간다. 최대한 자연스럽게. 마치 이미 와 있었던 것처럼. 누가 진짜 먼저 슬랙에 연결되는지는 알 수 없지만, 마음 속으로는 "내가 먼저 왔는데?"라는 심리가 작동한다. 그리고 9시 10분쯤 사무실에 정말로 들어간다. 엘리베이터를 타면서 마음을 진정시킨다. 아무것도 아닌 것처럼. 사실 내 심장은 두근거린다. 오늘도 또 모르는 게 있을까? 오늘도 또 코드리뷰에서 야단 맞을까? 누군가 나를 보고 있지는 않을까? 사무실에 들어가면 제일 먼저 슬랙의 안 읽은 메시지를 확인한다. 이 순간이 제일 무섭다. 빨간 숫자가 떴다는 건 뭔가 놓쳤다는 뜻이고, 그건 내가 '게으른 신입'이라는 뜻이고, 그건 결국 3개월 뒤 수습 평가 때 내가 탈락한다는 뜻이다. 논리적이지 않다는 걸 알지만, 새벽 4시에 눈이 떠질 때 이 생각이 제일 먼저 난다.오늘 아침에도 슬랙에 메시지가 3개 있었다. 팀장: "좋은 아침이에요. 다들 오늘 미팅은 11시에 있습니다." 이건 괜찮다. 이준수 선배: "신입, 어제 PR 올린 거 봤어? 코멘트 달았어. 확인하고 수정해 줄 수 있어?" 이건 공식적인 업무니까 괜찮다. 그런데 마지막 메시지는... 김태호 선배의 '반응만'이었다. 내가 어제 올린 PR 코멘트에 👍를 눌렀다. 그건 뭐지? 좋다는 뜻? 아니면 "이 정도는 기본이지"라는 뜻? 나는 이 반응의 의미를 해석하기 위해 5분을 소비했다. 결국 결론은 "아마 좋다는 뜻일 것 같은데, 혹시 모르니까 오늘은 특히 더 잘 보여야겠다"였다. 9시 10분에 사무실에 들어오는 게 정말 중요한 이유가 여기 있다. 너무 이르면 '열심히 하려고 애쓰는' 신입으로 보이고, 정각에 들어가면 '규칙을 정확히 지키는' 신입인데 그건 뭔가 서툰 느낌이 나고, 너무 늦으면 게으른 신입이 된다. 9시 10분은 딱 맞는 타이밍이다. 9시 정각이 아니라는 건 '너는 우리 문화를 알고 있다'는 뜻이고, 10분 정도라는 건 '너무 뻔한 건 아니다'는 뜻이다. 이건 신입이 할 수 있는 최적의 눈치다. "이거 간단한 건데" 함정에 빠지다 어제 일은 정말 최악이었다. 오전 11시 미팅이 있다고 했는데, 미팅은 10시 50분에 시작됐다. 회의실에 들어갔을 때 모두들 이미 앉아 있었다. 나는 제일 마지막에 들어갔다. 그리고 제일 어색한 자리에 앉았다. 팀장 옆. 팀장이 나를 보면서 웃었다. "신입, 너 요즘 기분은 어때?" 모두가 날 본다. 뭔가 심사하는 눈빛이다. 나는 "좋습니다"라고 했다. 더 이상 뭐라고 답할 수 없었다. 미팅 내용은 새로운 프로젝트였다. 우리가 하던 대시보드를 리팩토링하는 건데, 이번엔 Next.js를 쓸 거라고 했다. 나는 React를 쓰다가 Next.js는 처음이었다. 하지만 입 밖으로 꺼내지 않았다. 그냥 고개를 끄덕였다. 끄덕, 끄덕. 이건 내 버릇이 됐다. 모든 회의에서 나는 끄덕인다. 이해가 안 되면 더 끄덕인다. 미팅이 끝나고 이준수 선배가 나한테 왔다. "신입, 너 이 작업 하나 해 줄 수 있어? 사실 간단한 건데..." 그 순간 나는 알았다. '간단한'이라는 단어가 나올 때가 가장 위험하다는 걸. 선배들에게 '간단한'은 결코 간단하지 않다. '간단한 건데'는 '너 같은 신입이 이 정도는 할 수 있겠지?'라는 의미다. 그 작업은 폼(form) 밸리데이션이었다. 사용자가 입력한 데이터를 검증해서 서버로 보내는 기능. 나는 바로 "네, 제가 해볼게요"라고 대답했다. 큰 실수였다. 들어가서 코드를 봤을 때, 그건 정말 '간단한' 수준이 아니었다. TypeScript 제너릭(Generic)을 써야 했고, 커스텀 훅(custom hook)도 만들어야 했고, 에러 핸들링까지 정교하게 해야 했다.나는 ChatGPT에 물었다. "폼 밸리데이션 React 코드 만들어 줄 수 있어?" 그리고 그 결과물을 그대로 복붙했다. 에러가 났다. 타입 에러였다. any를 쓰면 되겠지 했는데, 그 코드엔 any가 이미 10개 있었다. 나는 거기에 any 5개를 더 추가했다. console.log를 10개 찍으면서 뭐가 문제인지 찾으려고 했다. 3시간이 지났다. 이준수 선배가 등에 손을 얹었다. "신입, 뭐 하고 있어? 진행 상황 어때?" 나는 심장이 철렁 내려앉았다. 완성 못 했다는 뜻인가? 아니면 진짜 상황을 물어보는 건가? 둘 다 위험했다. "아... 네네, 이거 좀 복잡한데요. 다시 해볼게요."라고 했다. 내 입버릇인 "아... 네네"가 나왔다. 이건 내가 불안할 때 무조건 나오는 말이다. 선배가 내 화면을 봤다. console.log 10개가 보였다. 그리고 any 15개가 보였다. "아, 그냥 제가 다시 한번 봐 줄까?" 나는 "감사합니다!"라고 했다. 속은 다르지만, 목소리는 감사함으로 가득 찼다. 선배가 5분 만에 수정했다. 정말 간단했다. 나는 그 코드를 다시 읽었다. 공부를 해야겠다고 생각했다. 하지만 퇴근하면서도 인프런에 접속하지 않았다. 눈치의 악순환: 누가 정말 책임일까 지금 생각해 보면, 이 9시 10분의 버릇은 단순히 출근 시간 문제가 아니다. 이건 눈치 문화 전체를 상징한다. 우리 회사는 정식으로 "9시에 출근"이라고 한다. 그런데 실제로는 아무도 9시에 안 온다. 팀장은 9시 5분, 이준수 선배는 9시 20분, 김태호 선배는 9시 15분. 그리고 신입인 나는... 9시 10분. 이게 처음엔 회사 규정이 이상하다고 생각했다. 왜 9시에 오지 말라고 하면서 9시를 정시라고 하는 거야? 그런데 지금은 알 것 같다. 이건 회사가 유연하다는 걸 보여주는 방식인 거다. "우리는 시간이 없어도 돼"라는 의사 표현인 거다. 근데 그 유연함이 오히려 더 큰 압박이 된다는 걸 회사는 모르는 것 같다. 신입 입장에서 보면, 9시 정각에 들어갈 수가 없다. 왜냐하면 그건 "나는 회사 문화를 모르고 규칙만 따르는 사람입니다"라는 신호이기 때문이다. 그렇다고 9시 20분에 들어가면? 그건 "나는 게으릅니다"라는 신호다. 9시 10분은 "나는 당신들이 뭐를 하는지 알고 있습니다. 그래서 적당하게 늦습니다"라는 신호다. 이건 신입이 생존하기 위해 배워야 하는 문법이다. 근데 정말 웃긴 건, 이 문법이 실제로 일의 질과는 아무 상관이 없다는 거다. 9시 10분에 들어온 신입이 더 좋은 코드를 쓰지는 않는다. 더 빨리 일을 끝내지도 않는다. 단지 "눈치가 있다"는 평가를 받을 뿐이다. 그리고 눈치가 있다는 평가가 회사에서 제일 중요한 능력인 것 같다. 코딩 실력? 그건 나중이다. 눈치가 있고 없고가 먼저다. 나는 정말 지쳤다. 매일 아침 10분 동안 건물 로비에 앉아 있는 이 시간이. 심호흡을 하고 마음을 준비하고 '지금부터 연기를 시작해야지'라고 생각하는 이 시간이. 그런데 그렇게 할 수밖에 없다. 왜냐하면 다른 사람들도 다 그렇게 하니까. 그리고 그렇게 하지 않으면 탈락할까봐서. 어제 부트캠프 동기들 단톡방에서 물었다. "너네 회사는 어때? 신입이라고 괜찮아?" 받은 대답은 다 비슷했다. "여긴 9시 정시인데 아무도 9시에 안 와. 왜 이러지?" "우리 회사도 그래. 정시가 뭐지?" "좋아. 그럼 우리 다 똑같네." 이상한데, 이게 이상하다는 걸 모두가 아는데도 바뀌지 않는다. 신입들은 계속 눈치를 본다. 선배들은 계속 그걸 당연하게 본다. 그리고 회사는 "우린 자유로운 회사야"라고 자랑한다. 아무도 이 악순환을 끝낼 생각이 없다. 그래도 내일 아침에도 내일 아침도 알람은 8시 20분에 울릴 거다. 나는 또 8시 50분에 건물 로비에 도착할 거고, 9시 10분에 사무실에 들어갈 거다. 아무것도 바뀌지 않을 거다. 왜냐하면 이게 이미 내 몸에 배인 습관이 됐으니까. 신입이라는 신체가 눈치를 본다는 신호를 받으면 자동으로 반응한다. 근데 언젠가 나도 이준수 선배처럼 9시 20분에 들어올 수 있을까? 그때가 되면 이 모든 불안이 사라질까? 아니면 그때쯤엔 새로운 신입에게 같은 걸 하게 될까? 정말 답답하지만, 그래도 내일은 좀 나아지겠지.눈치 본다는 건 결국 내가 이곳에 속하고 싶다는 뜻이기도 하다.

코드리뷰 피드백이 외계어로 들릴 때

코드리뷰 피드백이 외계어로 들릴 때

코드리뷰 피드백이 외계어로 들릴 때 PR 올렸다. 마음 졸이며 기다렸다. 30분 뒤 선배 댓글이 떴다. "This component violates single responsibility principle. Consider extracting the logic into a custom hook with memoization to prevent unnecessary re-renders. Also, the dependency array here could cause stale closures." 읽었다. 세 번 읽었다. 여전히 모른다. 뭐라는 건데. 일단 '네 수정하겠습니다' 댓글을 남겼다. 손가락이 떨렸다. 지금 뭐라고 했는지는 모르지만 일단 수정한다고 약속했다. 이게 뭐하는 일인지 모르겠지만 일단 한다고 했다.매일 밤 용어 구글링 시간 퇴근하고 집에 왔다. 메모장을 꺼냈다. 오늘 배운 용어들을 정리할 시간이다.Single Responsibility Principle (SRP) Memoization Dependency Array Stale Closures Custom Hook다섯 개다. 어제는 일곱 개였다. 모레는 몇 개일까. 유튜브 검색했다. "single responsibility principle react" - 10분짜리 영상이 나왔다. 3분 봤다. 졸았다. 다시 봤다. 역시 졸았다. 블로그 글 봤다. 코드 예제가 있었다. 예제도 모르겠다. 예제를 이해하려면 다른 걸 알아야 하는데 그것도 모른다. 뭐부터 배워야 하는 건지 모르겠다. 결국 메모장에 적은 다섯 개 중 두 개만 이해했다. 아 맞다. 이해하지 못한 걸 이해했다고 생각했다. 실은 유튜브 영상이 재밌어서 계속 봤던 거다. 메모장 앱을 닫았다. 내일도 같은 일이 반복될 거다.선배가 말하는 건 항상 '이거 간단한 건데' 오전 10시. 선배가 내 자리에 왔다. "여기 봐봐. 이거 간단한 건데." 간단한 게 절대 아니다. 선배가 설명했다. 뭔가 자신감 있게 설명했다. 나는 고개를 끄덕였다. 끄덕이면 이해한 척 할 수 있다. 선배도 그걸 믿는다. "여기서 useCallback을 쓸 필요 없고..." 잠깐. useCallback? 언제 배웠지. 내가 이걸 이미 알아야 하는 사람인가? "...메모이제이션은 이 경우엔 과하고..." 또 메모이제이션이다. 어제도 들었다. 뭐하는 건지 아직도 모르는데. "...쉽게 생각하면 돼." 아. 쉽게 생각하면 되는구나. 그럼 나는 지금 뭘 어렵게 생각하고 있는 건가. 선배가 나왔다. 나는 화면만 봤다. 선배가 말한 게 뭔지 하나도 모르겠지만, PR 댓글은 이미 달렸다. 나는 이미 '네 수정하겠습니다'라고 했다. 구글 검색창을 열었다. "useCallback 언제 쓰는 거" - 검색했다. 15개의 블로그 글이 나왔다. 첫 번째 글을 3분 봤다. 역시 모르겠다. 두 번째 유튜브 영상을 1분 봤다. 진짜 모르겠다. 선배는 간단하다고 했다. 그럼 내가 문제인가.물어보고 싶은데 못 물어본다 회의실에서 코드리뷰 미팅이 있었다. 선배가 내 PR을 화면에 띄웠다. "여기서 의존성 배열에 isLoading을 빼야 해. 불필요한 리렌더링이 생긴다고." 의존성 배열. 또 그거다. 나는 지난 3개월 동안 수십 번 useEffect를 썼다. 매번 '뭐가 들어가야 하지?' 하고 생각했다. 선배들이 자동으로 넣는 건 줄 알았는데 지금 얘기를 들어보니 전략이 있다는 건가. 나는 손을 들어야 한다. "선배, 의존성 배열이 정확히 뭐 하는 거예요?"라고 물어야 한다. 근데 못 물었다. 왜? 이미 8개월 일했으니까 알아야 할 거 같아서. 이미 '네 알겠습니다'라고 대답했을 때가 있어서. 회의실에 있는 4명의 눈이 나를 볼 것 같아서. '이건 신입도 아는 거 아닌가' 할 눈빛. 그래서 나는 또 고개를 끄덕였다. 또 '네 수정하겠습니다'라고 했다. 또 메모장에 '의존성 배열 - isLoading 빼기' 라고 적었다. 퇴근하고 유튜브 검색했다. "의존성 배열 제대로 이해하기" - 1시간 20분짜리 영상이 나왔다. 10분 봤다. 졸았다. 내일도 못할 거다. 모르는데 아는 척하는 게 죄인 줄 알지만, 모른다고 말하는 게 더 큰 죄인 것처럼 느껴진다. [IMAGE_4] 그럼 어떻게 하지? 어제 밤. 침대에 누웠다. 천장만 봤다. 3개월 뒤 수습 평가가 있다. 지금처럼 모르는 척하면서 일하면 평가 때 걸릴까? 아니면 지금 물어보면 걸릴까? 둘 다 걸릴 것 같다. 그래서 내가 택한 방법은 이거다. 일단 모든 피드백에 '네 수정하겠습니다'라고 한다. 그다음 집에 가서 뭐가 뭔지 모를 때까지 검색한다. 조금 이해되면 코드를 수정한다. 선배는 '오 얘 빠르게 배우네'라고 생각한다. (아니다, 선배는 모를 거다.) 하지만 이 방법엔 문제가 있다. 내가 고를 수 없다. 모를 때마다 물어보는 대신, 내가 알 때까지 검색하기만 한다. 근데 모를 때는 많고, 알 때는 거의 없다. 선배한테 물어보는 게 더 빠르다. 5분이면 될 걸 1시간을 검색한다. 근데 못 물어본다. 입버릇처럼 나오는 말이 있다. "이거 제가 해볼게요." 그 말만 하면 선배는 안심한다. 그럼 나중에 못 해도 시간이라도 벌 수 있다. 어떻게든 피하려고 한다. 물어보는 수치심을 피하려고. 하지만 그러다 보니 내가 더 뒤처진다. 코드리뷰 피드백은 여전히 외계어다. [IMAGE_5] 어쨌든 내일도 출근한다 아침 8시 50분. 준비됐다. 샤워했고, 밥 먹었고, 커피도 마셨다. 오늘도 PR을 올릴 거다. 선배가 코멘트를 남길 거다. 나는 이해 못 할 거다. 그리고 '네 수정하겠습니다'라고 댓글을 남길 거다. 그 다음엔 메모장을 켜서 오늘의 용어를 정리할 거다. 그리고 퇴근 후 검색할 거다. 3분 정도는 이해할 거고, 나머지는 그냥 넘어갈 거다. 내일도 같은 일이 반복될 거다. 근데 뭔가 다른 기분이다. 왜냐면 어제 배운 게 있기 때문이다. 아주 조금이지만. 지난주에는 이해 못 했던 걸 이번주에는 조금 이해했다. 아마 다음주에는 조금 더 이해할 거다. 그렇게 천천히 외계어가 한국말로 바뀔 거다. 선배는 내가 모른다고 생각하지 않는다. 나는 모른다고 생각한다. 그 사이에 뭔가 있다. 아마 그게 신입의 8개월이다. 슬랙을 켰다. 좋아요 3개. 뭐 그런대로 괜찮네. 출근한다.코드리뷰는 아직도 무섭지만, 어제보다는 조금 덜 무섭다. 그게 충분하다.

ChatGPT 복붙으로 터진 첫 버그, 그리고 배운 것들

ChatGPT 복붙으로 터진 첫 버그, 그리고 배운 것들

ChatGPT 복붙으로 터진 첫 버그, 그리고 배운 것들 알람이 울린다. 9시 5분. 출근하면 슬랙부터 본다. 어제 올린 PR에 선배가 뭔가 남겼나 싶어서. 손가락이 떨린다. 항상 이 시간이 제일 두렵다. "이신입, PR 봤어? 페이지 에러 나는데." 화면이 하얀색으로 변한다. 앞뒤가 안 맞는다. 어제는 분명 잘 돌아갔었는데.어제는 분명 잘 돌아갔는데 PR을 올린 건 어제 6시 50분. 퇴근 15분 전이었다. 로컬에서는 돌아갔다. 충분히 테스트했다고 생각했다. 아니, 테스트를 제대로 한 건 아니고 새로고침 한 두 번 했으니까 괜찮겠지, 이 정도 생각했다. 기능은 간단했다. 사용자가 버튼을 클릭하면 데이터를 받아와서 화면에 띄우는 거. 페이지네이션도 들어가고 필터링도 들어가고. 그런데 시간이 없었다. ChatGPT를 켰다. "React에서 페이지네이션 구현하는 코드 보여줘." 2초 만에 100줄이 떴다. 복사. 붙여넣기. 폴더 구조에 맞게 좀 수정했다. 임포트 경로 몇 개, 컴포넌트 이름 몇 개. 나머지는 그대로였다. 뭘 하는 코드인지는 정확히 모르겠지만, 일단 로컬에서는 돌아갔다. 그게 기준이었다. "이거 봤어?" 선배 목소리가 무섭다. 모니터를 본다. 빨간 에러 메시지가 가득하다. 뭐가 뭔지 모른다. 에러 메시지는 외계어다 "TypeError: Cannot read property 'map' of undefined" 이 문장 자체가 문제다. 뭐가 undefined라는 거지? 코드를 본다. ChatGPT가 생성한 코드. 100줄. 나는 2줄 밖에 이해 못 한다. "이거 어디가 문제야?" 선배가 물어본다. "아... 네네. 제가 확인해보겠습니다." 이 문장을 말하고 나면 마음이 더 심란해진다. 기한을 정했기 때문이다. 자존심 때문에. 선배는 다시 자기 자리로 돌아간다. 나는 코드를 본다. 또 본다. 또 본다. 뭐가 문제인지 모르겠다. 일단 에러 메시지를 구글에 검색한다. "Cannot read property map of undefined react" 블로그 글이 많다. 다 이해 못 한다. 스택오버플로우를 본다. 사람들이 답변해준 코드들. 나의 코드와는 다르다. 내 코드의 어느 줄이 문제인지 모르겠다. 그냥 ChatGPT에 다시 물어본다. "위 코드에서 map 에러가 나는데 어떻게 해?" ChatGPT가 또 다른 코드를 준다. 복사. 붙여넣기. 돌린다. 에러가 달라진다. 이건 진전이다.3시간 돌다가 된 건 아무것도 없다 12시 30분. 점심 전이다. 아직도 에러다. 내가 한 거는 ChatGPT에 계속 물어보고 계속 복붙한 거다. 뭐가 다른지, 뭐가 나아졌는지도 모르고. 에러 메시지는 계속 바뀐다. 마치 내가 진전을 이루고 있는 것 같은 착각을 준다. 하지만 정말로는 아무것도 고쳐진 게 아니다. 그냥 다른 에러가 난 거다. 선배가 커피를 마시러 나온다. "아직?" "네... 거의 다 됐습니다." 거짓이다. 선배는 웃는다. 약간 씁쓸한 웃음이다. "뭘 했는데 안 돼?" 이 질문을 받으면 정신이 든다. 뭘 했는데 안 돼? 좋은 질문이다. 나는 대답할 수 없다. 정말로 뭘 한 건지 모르기 때문이다. "아... 일단 에러 메시지를 다시 확인해보겠습니다." 선배는 내 모니터 화면을 본다. 2초. "여기 봐. 이 state가 여기서는 배열이어야 하는데, 너는 뭘 넣었어?" 손가락이 가리키는 곳. 코드의 한 부분. 나는 그 부분을 본다. 아, 맞다. 내가 ChatGPT에 준 건 사용자 정보 배열이었는데, 여기서는 상품 데이터를 받아오는 API를 쓰고 있다. 구조가 다르다. "아... 네. 알겠습니다." "이게 뭘 하는 코드인지 알고 썼어?" "네..." 거짓이다. 코드를 읽기 시작했다 선배가 나간 후. 나는 ChatGPT가 생성한 코드를 다시 본다. 이번엔 다르게. 한 줄씩. 첫 번째 줄. const [data, setData] = useState([]);이건 안다. State를 선언하는 거다. 빈 배열로 시작한다. 두 번째 줄. const [page, setPage] = useState(1);페이지도 state인가. 숫자다. 1부터 시작. 네 번째 줄. useEffect(() => { // API 호출 }, [page])useEffect다. 의존성 배열에 page가 있다. 아, 페이지가 바뀔 때마다 이 함수가 실행되는 거구나. 그 안에 API 호출 코드가 있다. fetch(`/api/products?page=${page}`)아, 그래서 page 값이 URL에 붙는 구나. 그리고 받아온 데이터를 setData로 저장한다. .then(res => res.json()) .then(data => setData(data.items))아. data.items. 그래서 상품 배열이다. 그런데 내 API에서는 응답이 다르게 생겼다. { result: [...] }data.items가 아니라 data.result다. 그래서 undefined가 난 거다. map을 undefined에서 실행했으니까. 처음으로 에러가 이해가 된다. 나는 코드를 수정한다. data.result로 바꾼다. .then(data => setData(data.result))돌린다. 에러가 없다. 페이지가 뜬다. 상품 목록이 보인다. 5개. 페이지네이션 버튼도 있다. 2번을 클릭한다. 다른 상품 5개가 보인다. 된다. 진짜 된다.배운 게 뭔지 자꾸 잊는다 내가 오늘 배운 것들. 첫 번째. ChatGPT가 주는 코드는 만능이 아니다. 당연하지만 당연하지 않다. 두 번째. 코드를 알고 써야 한다. ChatGPT가 준 코드도, 유튜브 강의도, 블로그도 마찬가지다. 뭘 하는 건지 모르면, 뭐가 잘못됐을 때 못 고친다. 세 번째. 에러 메시지는 절대 거짓을 말하지 않는다. "Cannot read property 'map' of undefined" 이 메시지는 정확했다. 내가 이해를 못 한 거다. 네 번째. 선배한테 물어보는 게 빠르다. 3시간을 ChatGPT와 싸우고 있었는데, 선배 한 마디에 2분 만에 원인을 찾았다. 하지만 내일은 또 까먹을 것 같다. 그래서 메모를 남긴다. 노션에. "State와 API 응답 구조를 맞춰야 한다. 내 API는 data.result다." 그리고. "코드를 읽자. 한 줄씩." 메모를 하고 나면 뭔가 된 것 같은 기분이 든다. 하지만 이 기분도 금요일엔 사라질 거다. 퇴근하고 생각한 것 맥주잔을 들었다. 동기 태영이가 물었다. "너 오늘 뭐 했어?" "버그 고쳤어." "뭐가?" "ChatGPT 코드 때렸다." 태영이가 웃는다. "아, 나도 그런 경험 있어. 진짜. 내가 준 코드가 production에서 터진 적 있어." 또 다른 동기 지훈이가 끼어든다. "근데 지금 와야 ChatGPT 코드를 쓰면서도 자기 것처럼 행동해야 할 때가 있잖아?" 모두 웃는다. 이상한 웃음이다. 태영이가 맥주를 마신다. "그래도 너는 고쳤으니까 다행이지. 내 동생은 지금도 못 고쳤대. PR이 1주일 동안 열려 있대." "선배가 뭐라고?" "그냥 '이거 뭐 한 거야?'만 물어본다고." 우리는 계속 마신다. 맥주는 쓰다. 이건 맥주의 맛이 아니라, 우리 일의 맛인 것 같다. 내일 또 같은 실수를 할 거다 알 수 있다. 내일 또 새로운 기능이 생길 것이고. 시간이 부족할 것이고. ChatGPT를 켤 것이고. 또 복붙할 것이다. 하지만 오늘은 조금 다를 것 같다. 어쨌든 코드를 읽어야 한다는 걸 안다. 한 줄씩. 뭘 하는지는 모르겠지만, 적어도 어디가 문제인지는 찾을 수 있을 것 같다. 선배 앞에서 당황하지도 않을 것 같다. 아니, 당황할 거다. 하지만 이번엔 그냥 넘어가지 않을 것 같다. 이게 제일 중요한 거 같다.내일도 버틴다. 오늘보다 조금 똑똑해져서.