Showing Posts From
신입
- 28 Dec, 2025
메모장의 모르는 용어들: 퇴근 후 인터넷 검색의 시작
오늘도 메모장에 한 줄 추가 아침 회의. 팀장님이 말한다. "이번 스프린트에는 CI/CD 파이프라인 개선도 같이 진행합시다." 고개를 끄덕인다. 모른다. CI/CD가 뭔지도 잘 모른다. 대충 '자동으로 뭔가 되는 거'라고만 알고 있다. 책상으로 돌아와서 메모장을 연다. 노트북 왼쪽에 항상 놔두는 A5 노트. 연필로 적는다. "CI/CD 파이프라인" 오늘의 첫 번째 모르는 용어다. 아직 오전 10시다.점심 먹고 오면 더 늘어난다 오후 2시. 선배가 슬랙에 메시지를 보낸다. "이신입님, 이 API 레이트 리미팅 적용해주실 수 있을까요? 현재 무제한이라 서버 부하가 심해요." 읽는다. 세 번 읽는다. 뭔 소리인지 모른다. '레이트 리미팅'이 뭐지. 'API 제한' 같은 건가. 아닌가. 메시지에 👍 이모지를 누른다. 일단 '확인했다'는 의미. 이해했다는 의미는 아니다. 메모장을 펼친다. "레이트 리미팅 (Rate Limiting?)" 두 번째 용어. 영어 스펠링도 맞는지 모르겠다. 오후 4시. 코드리뷰가 올라온다. 다른 팀 선배가 쓴 코드. "Redis 캐시 레이어 추가로 응답속도 30% 개선" 댓글이 달린다. "오 레디스 좋죠. TTL은 어떻게 설정하셨어요?" 나도 댓글을 단다. "좋네요!" TTL이 뭔지는 모른다. 레디스도 잘 모른다. 그냥 '좋네요'라고 쓴다. 메모장에 적는다. "Redis" "TTL" 네 개가 됐다. 하루가 아직 두 시간 반 남았다.퇴근길 지하철에서 미리보기 7시. 퇴근한다. 지하철에 앉는다. 메모장을 꺼낸다. 오늘 적은 용어를 센다. 총 7개다. 오후 5시에 회의 하나 더 있었다. 거기서 3개가 추가됐다. "컨테이너 오케스트레이션" "로드 밸런싱" "gRPC" 마지막 건 선배가 "우리도 gRPC 도입하면 어떨까요"라고 했는데 다들 고개를 끄덕였다. 나도 끄덕였다. 뭔지는 모른다. 휴대폰을 꺼낸다. 구글에 'gRPC'를 검색한다. "Google Remote Procedure Call..." 읽는다. 이해가 안 된다. 일단 북마크한다. 집 가서 다시 볼 것이다. 창밖을 본다. 어두워졌다. 지하철은 계속 간다. 이해 안 되는 게 너무 많다. 회사 사람들은 다 아는 것 같은데 나만 모른다. 아니면 다들 모르는데 아는 척하는 건가. 그것도 모르겠다. 집에 도착, 본격 검색 시작 8시 반. 집에 도착한다. 샤워하고 편의점 도시락 먹는다. 9시 20분. 노트북을 켠다. 메모장을 펼친다. 오늘의 용어: 7개. 일단 첫 번째부터. 'CI/CD'. 구글에 검색한다. "CI/CD란?" 블로그가 나온다. 10개 정도 탭으로 연다. 첫 번째 블로그: "CI/CD는 Continuous Integration과 Continuous Deployment의 약자로..." 읽는다. 이해가 반쯤 된다. "그러니까 코드 올리면 자동으로 테스트하고 배포하는 거?" 두 번째 블로그 연다. 그림이 있다. 파이프라인이 화살표로 그려져 있다. "아, 이렇게 되는 거구나." 조금 더 이해된다. 50%에서 60%로. 노션을 연다. '오늘 배운 것' 페이지. 적는다. "CI/CD: 코드 푸시하면 자동으로 빌드/테스트/배포. GitHub Actions 같은 걸로 한다고 함." 한 줄 요약. 내일 또 까먹을 것 같지만 일단 적는다.두 번째 용어, 그리고 세 번째 '레이트 리미팅' 검색. "Rate Limiting, API 호출 제한 기법..." 읽는다. "1분에 100번만 호출 가능하게 막는다?" 블로그를 3개 더 읽는다. "express-rate-limit 라이브러리 쓰면 된다고?" npm 문서를 연다. 코드 예제가 있다. const rateLimit = require('express-rate-limit'); const limiter = rateLimit({ windowMs: 15 * 60 * 1000, max: 100 });복사한다. 노션에 붙여넣는다. "내일 출근하면 이거 적용해보자." 될지 안 될지는 모른다. 일단 시도는 해볼 것이다. 시계를 본다. 10시 반. 아직 5개 남았다. 'Redis' 검색. "인메모리 데이터베이스..." 읽는다. 이해가 안 된다. "그러니까 RAM에 저장하는 DB?" 블로그를 더 찾는다. 그림이 있는 걸로. "캐시 용도로 많이 쓴다. 빠르다. 근데 서버 끄면 데이터 날아간다." 대충 이해했다. 70%쯤. 'TTL' 검색. "Time To Live. 데이터 유효기간." 이건 쉽다. "Redis에 데이터 넣을 때 '10분 후 자동 삭제' 이런 거구나." 노션에 적는다. 한 줄씩. 시계를 본다. 11시. 끝나지 않는 검색의 밤 '컨테이너 오케스트레이션' 검색. 어렵다. "여러 개의 컨테이너를 관리하는..." '컨테이너'부터 모른다. '도커 컨테이너란' 검색. "애플리케이션을 격리된 환경에서..." 읽는다. 이해가 30%. 유튜브를 연다. "도커 10분 정리" 영상. 본다. 12분짜리. "아, 가상머신 같은 건데 더 가볍다?" 다시 '컨테이너 오케스트레이션' 검색. "쿠버네티스가 대표적..." 읽는다. 그림을 본다. "여러 개 컨테이너를 자동으로 관리. 하나 죽으면 다시 살린다?" 대충 이해했다. 40%. 노션에 적는다. "컨테이너 오케스트레이션: 쿠버네티스 같은 거. 컨테이너 여러 개 자동 관리. 나중에 제대로 공부 필요." 마지막 줄이 핵심이다. '나중에 제대로 공부'. 언제 할지는 모른다. '로드 밸런싱' 검색. "서버 여러 대에 트래픽 분산..." 이건 비교적 쉽다. "사용자 요청을 여러 서버로 나눠서 처리. 한 서버에 몰리지 않게." 그림을 본다. 화살표가 여러 개로 갈라진다. 이해됐다. 80%. 노션에 적는다. 'gRPC' 검색. 어렵다. "Protocol Buffers를 사용하는..." 'Protocol Buffers' 검색. "구조화된 데이터 직렬화..." 포기한다. "일단 REST API보다 빠른 통신 방법." 이 정도로 적는다. 40% 이해. 시계를 본다. 자정. 메모장의 7개 용어를 다 찾아봤다. 내일은 또 다른 용어들 이불 속에 눕는다. 오늘 배운 것들을 떠올린다. CI/CD, 레이트 리미팅, Redis, TTL, 컨테이너 오케스트레이션, 로드 밸런싱, gRPC. 머릿속에서 정리가 안 된다. 뒤죽박죽이다. "내일 회의에서 또 뭐가 나올까." 걱정된다. 선배가 "이거 알죠?"라고 물으면 뭐라고 대답해야 할까. 모른다고 하면 "이것도 몰라?" 소리 들을 것 같다. 안다고 하면 "그럼 이거 해주세요" 할 것 같다. 둘 다 싫다. 휴대폰을 든다. 노션을 연다. '오늘 배운 것' 페이지. 7개 용어가 적혀 있다. 각각 한두 줄씩. 이게 내 지식이다. 얕다. 하지만 어제보다는 늘었다. 내일은 또 메모장을 펼칠 것이다. 회의 중에, 슬랙 메시지 읽다가, 코드리뷰 보다가. 모르는 용어가 나오면 몰래 적을 것이다. 그리고 퇴근 후에 또 검색할 것이다. "이게 개발자 공부구나." 학원에서는 안 가르쳐줬다. 실무에서 모르는 게 나오면 스스로 찾아서 공부하는 것. 매일 새로운 용어. 매일 검색. 매일 노션에 한 줄씩. 3개월 뒤에는 조금 나아질까. 6개월 뒤에는 선배들 대화를 알아듣게 될까. 모르겠다. 일단 내일도 메모장을 챙겨야겠다. 눈을 감는다. 일주일 후 메모장 월요일. 메모장을 펼친다. 이번 주에 적은 용어들. 총 23개. 평균 하루 4개씩. "많네." 하나씩 읽어본다. "웹소켓, SSE, 폴링, 롱폴링, JWT, OAuth, CORS, CSP..." 머리가 아프다. 다 검색했다. 다 노션에 적었다. 근데 오늘 회의에서 'OAuth'가 또 나왔다. "어? 이거 저번 주에 찾아봤는데." 기억이 안 난다. 노션을 연다. 찾는다. "OAuth: 구글 로그인 같은 거. 토큰 기반 인증." "아, 맞다." 다시 기억난다. 50%. 검색했던 블로그를 다시 연다. 또 읽는다. "한 번 찾아보는 걸로는 안 되는구나." 여러 번 봐야 한다. 실제로 써봐야 한다. 근데 실제로 쓸 일은 언제 올까. 선배가 시켜야 한다. 그래야 해본다. 스스로 하기에는 뭘 해야 할지도 모르겠다. 한 달 후 변화 입사 9개월차. 메모장을 펼친다. 이번 달에 적은 용어: 67개. "진짜 많네." 근데 신기한 게 있다. 지난달에 적었던 용어가 또 나온다. 'Redis' 세 번째 등장. 이제는 검색 안 해도 안다. "인메모리 캐시. TTL 설정 가능. 빠름." 회의에서 나와도 끄덕일 수 있다. 진짜로 이해하고. 'CI/CD'도 이제 안다. 직접 GitHub Actions 설정해봤다. 선배가 시켜서. 에러 10번 나고 성공했다. "이제 알겠다. 이게 CI/CD구나." 메모장에 적었던 용어들이 하나씩 지워진다. 아니, 지우는 건 아니고. 체크 표시를 한다. ✓ CI/CD ✓ Redis ✓ 레이트 리미팅 체크된 게 17개. 아직 50개 남았다. 근데 괜찮다. 한 달 전보다는 늘었다. 메모장의 의미 메모장을 덮는다. 이제 이 메모장이 내 공부 기록이다. 모르는 게 나오면 적는다. 퇴근 후 찾아본다. 노션에 정리한다. 며칠 후 또 나오면 다시 본다. 몇 번 반복하면 외워진다. 이게 내 공부법이다. 학원에서는 커리큘럼이 있었다. "오늘은 이거 배웁니다." 정해져 있었다. 회사는 다르다. "이거 해주세요." 모르면 내가 찾아야 한다. 메모장이 내 커리큘럼이다. 오늘 적힌 용어가 오늘의 공부 주제. 무작위다. 체계적이지 않다. 근데 이게 실무다. 필요한 걸 필요할 때 배운다. 깊이는 얕다. 넓이는 넓어진다. 3개월 전보다 아는 게 많아졌다. 여전히 모르는 게 더 많지만.내일도 메모장을 챙긴다. 오늘은 3개 적었다. 내일은 몇 개일까.
- 27 Dec, 2025
입버릇 '아... 네네'로 버티는 시간들
입버릇 '아... 네네'로 버티는 시간들 오전 10시, 회의실 "이신입씨, 이 부분 이해됐어요?" "아... 네네." 거짓말이다. 하나도 모른다. 선배가 15분간 설명한 건 Redux Saga였다. Redux도 겨우 쓰는데 Saga는 뭐지. 제너레이터 함수? yield? 대학교 때 C언어 배웠는데 그것도 잘 모른다. 회의실 나오면서 손에 땀이 났다. 노트에는 'Redux Saga 찾아보기'라고만 적혀 있다. 뭘 찾아봐야 하는지도 모른다.입버릇의 탄생 입사 첫 주였다. "리액트 훅 알죠?" "네." "useCallback이랑 useMemo 차이 아시죠?" "네." 둘 다 거짓말이었다. 부트캠프 때 들어는 봤다. 써본 적은 없다. 그때부터 '아... 네네'가 시작됐다. 모른다고 하면 뭐라고 할 것 같았다. '그것도 모르고 입사했어?'라는 눈빛이 무서웠다. 2개월 차에 팀장이 물었다. "API 설계 괜찮아요?" "아... 네네." REST API가 뭔지는 안다. POST, GET 정도. 근데 설계? 뭘 봐야 하는지 모른다. 일단 '네'부터 하고 본다. 3개월 차엔 더 심해졌다. "타입 가드 써봤죠?" "아... 네네." 타입스크립트도 겨우 쓴다. any 떼고 string 붙이는 게 전부다. 타입 가드는 검색해도 이해가 안 됐다. 점심시간의 검색 편의점 샌드위치 뜯으면서 핸드폰을 켠다. 'Redux Saga 뭔가요' '타입 가드 쉽게' 'useCallback 언제 써요' 검색 기록이 다 이렇다. 블로그 10개를 봐도 모르겠다. 설명은 친절한데 내 머리가 안 따라간다. 유튜브를 켠다. "Redux Saga 10분 정리". 재생한다. 5분 만에 포기한다. 빠른 이해가 목표인 영상인데 나는 느리다. ChatGPT한테 물어본다. "Redux Saga를 초등학생도 이해할 수 있게 설명해줘" 답변은 길다. 읽다가 졸린다. 복붙해서 노션에 저장한다. 나중에 보겠지. 안 본다.오후 3시, 코드 리뷰 PR을 올렸다. 30분 뒤에 댓글이 달렸다. "이 부분 useMemo로 최적화하면 좋을 것 같아요" "props drilling 심한데 context 쓰는 게 어때요" "이 로직 custom hook으로 분리해보세요" 하나도 모르겠다. 일단 댓글을 단다. "아 네네 수정하겠습니다!" 느낌표까지 쳤다. 긍정적으로 보이려고. 사수가 슬랙 DM을 보냈다. "useMemo 어떻게 쓸지 아시겠어요?" "네 찾아보겠습니다" 거짓말이다. 찾아봐도 모를 거다. 일단 시간을 번다. 내일 물어보면 또 '아... 네네' 할 거다. 저녁 7시, 혼자 남은 자리 동기들은 퇴근했다. 나는 남았다. 오늘 받은 피드백을 고쳐야 한다. useMemo 공식 문서를 켠다. 영어다. 번역기 돌린다. 한국어인데도 모르겠다. 유튜브를 다시 켠다. "useMemo 5분 정리". 본다. 이해가 안 된다. 코드를 따라 친다. 에러가 난다. console.log를 찍는다. 10개 찍는다. 뭐가 문젠지 모른다. 선배 코드를 복붙한다. 돌아간다. 이해는 못 했다. 일단 커밋한다. 커밋 메시지: "refactor: useMemo 적용" 거짓말이다. 리팩토링이 뭔지도 모른다.퇴근길, 지하철 안 오늘도 '아... 네네'로 버텼다. 몇 번이었을까. 세어보지 않았다. 10번? 15번? 모르는 걸 모른다고 하면 뭐가 문제일까. 생각해본다. 시간이 없어서? 아니다. 오히려 시간은 더 걸린다. 혼자 헤매니까. 창피해서? 맞다. 이게 맞다. '그것도 모르세요?' '그럼 왜 리액트 할 줄 안다고 했어요?' '이 정도는 알고 입사하는 건데' 이런 말 들을까 봐 무섭다. 근데 웃긴 건, 어차피 나중에 들킨다는 거다. 코드 보면 다 티가 난다. useMemo를 어떻게 쓰는지도 모르고 그냥 붙였다는 게. 밤 11시, 원룸 침대에 누워서 천장을 본다. 내일도 회의가 있다. 또 모르는 게 나올 거다. 또 '아... 네네' 할 거다. 언제까지 이럴까. 수습 기간 3개월. 이제 1개월 남았다. 평가 항목에 '기술 이해도'가 있다. 망했다. 부트캠프 동기 단톡방을 켠다. "너네 회사에서 모르는 거 나오면 어떻게 해?" 답장이 온다. "나도 그냥 네네 하고 나중에 몰래 찾아봄 ㅋㅋ" "ㅇㅈ 물어보기 무서움" "선배들 바빠 보여서 미안해서 못 물어봄" 다들 나랑 똑같다. 근데 이게 답은 아니다. 알고 있다. 금요일 오후, 1on1 팀장이 말했다. "요즘 어때요?" "아... 네네 괜찮습니다." 또 이거다. 팀장이 웃었다. "신입씨 입버릇이 '아 네네'더라고요. 회의 때마다." 들켰다. 얼굴이 빨개졌다. "모르는 거 있으면 물어봐도 돼요. 다들 그렇게 배웠어요." "아... 네네." 또 했다. 팀장이 다시 웃었다. "지금도 했잖아요." 바뀐 것들 다음 주 월요일이었다. 사수가 Redux Saga 설명을 시작했다. 3분 지났다. 모르겠다. 손을 들었다. "저... 제너레이터 함수가 뭔지 잘 모르겠는데요." 심장이 뛰었다. 사수가 대답했다. "아 그거요? 저도 처음엔 몰랐어요. 보통 그래요." 10분 더 설명을 들었다. 조금 이해됐다. 완벽하진 않다. 근데 '아... 네네'보다는 낫다. 수요일에는 코드 리뷰에서 물었다. "useMemo를 왜 여기 쓰는 게 좋은 건가요?" 선배가 답했다. "이 연산이 무거워서요. 리렌더링마다 다시 계산하면 느려져요." "아 렌더링 될 때마다요?" "네 맞아요." 이해했다. 완전히는 아니다. 근데 어제보단 낫다. 한 달 뒤 아직도 모르는 게 많다. 어제는 Recoil이 뭔지 몰랐다. 오늘은 SSR이 헷갈렸다. 근데 '아... 네네'는 줄었다. 일주일에 한두 번? 물어보는 게 익숙해졌다. 부끄럽긴 하다. 근데 혼자 3시간 헤매는 것보단 낫다. 선배가 말했다. "신입 때는 모르는 게 당연한 거예요. 우리도 다 그랬어요." 믿기지 않는다. 이 선배도 useEffect 몰랐을까. Redux 몰랐을까. 근데 생각해보면 맞다. 처음부터 아는 사람은 없다. 지금 여전히 어렵다. 오늘도 GraphQL이 뭔지 몰라서 30분 헤맸다. 근데 이젠 안다. 30분 헤매면 물어보면 된다는 걸. '아... 네네'로 3시간 버티는 것보다, '죄송한데 이거 모르겠는데요' 5분이 낫다. 부끄럽다. 맞다. 근데 더 부끄러운 건, 모르는 걸 숨기고 결국 들키는 거다. 입버릇은 안 바뀐다. '아... 네네'는 아직도 나온다. 근데 횟수는 줄었다. 조금씩이다. 천천히다. 근데 분명히 줄고 있다.모르는 게 부끄러운 게 아니라, 모른다고 말 못 하는 게 부끄러운 거더라.
- 13 Dec, 2025
유튜브 → 블로그 → 스택오버플로우: 나의 검색 순서
유튜브 → 블로그 → 스택오버플로우: 나의 검색 순서 아침부터 에러 오늘도 출근했다. 슬랙 확인. 선배가 남긴 메시지. "이신입님, 어제 올린 PR 머지했어요. 근데 프로덕션에서 useEffect 무한루프 도는 것 같은데 확인 부탁드립니다." 심장이 멈췄다. 급하게 코드 열었다. 어디가 문젠지 모르겠다. 일단 로컬에서 돌려봤다. 멀쩡하다. 프로덕션은 왜 터진 거지. 검색 시작.1단계: 유튜브 일단 유튜브다. "리액트 useEffect 무한루프" 검색창에 친다. 영상이 수십 개 뜬다. 썸네일에 빨간 화살표 그려진 거 클릭. 10분짜리 영상. 한국어다. 좋다. 재생 시작. 인트로 30초 스킵. "안녕하세요 여러분~" 10초 더 스킵. 본론 나온다. 의존성 배열 설명. 아 이거 아는 건데. 계속 본다. 5분쯤 지나니까 내 상황이랑 비슷한 예제 나온다. 오. 이거다. 근데 끝까지 봐도 정확한 해결책은 안 나온다. 댓글 본다. "이 방법 말고 cleanup 함수 쓰는 게 나을 것 같은데요" cleanup 함수? 그게 뭔데. 다시 검색. "리액트 cleanup 함수" 또 10분짜리 영상. 본다. 이번엔 영어 영상이다. 자막 켠다. 대충 이해했다. 근데 내 코드에 어떻게 적용하지. 시간 30분 지남. 유튜브의 장점은 이거다. 일단 편하다. 누워서도 볼 수 있다. 출근길 지하철에서도 본다. 코드 치는 화면 보면서 따라 하면 된다. 개념도 영상으로 보면 이해가 빠르다. 근데 단점도 있다. 내 문제랑 정확히 일치하는 영상은 없다. 비슷한 것만 있다. 그래서 여러 개 봐야 한다. 그러다 보면 시간이 흐른다. 어느새 1시간. 선배가 지나간다. 모니터 얼른 가린다. 유튜브 보는 거 들키면 안 된다.2단계: 블로그 유튜브로 안 되면 블로그다. 구글 검색. "react useEffect infinite loop production" 한글로 검색했다가 결과 별로면 영어로 다시 검색한다. 첫 페이지에 벨로그 글 세 개. 티스토리 두 개. 미디엄 하나. 일단 벨로그부터 본다. 제목이 정확히 내 상황이다. "프로덕션에서만 발생하는 useEffect 무한루프 해결" 클릭. 들어간다. 글 읽는다. 코드 예시 있다. 복사한다. 내 코드랑 비교한다. 어? 비슷한데 살짝 다르다. 댓글 본다. "이거 저도 겪었는데 결국 strict mode 문제였어요." strict mode? 그게 뭔데. 다시 검색. "리액트 strict mode 무한루프" 티스토리 글 나온다. 읽는다. 아. Next.js는 기본으로 strict mode 켜져 있대. 그래서 개발 환경에서는 useEffect가 두 번 실행된대. 근데 프로덕션은 다르대. 이해했다. 근데 해결은 못 했다. 시간 1시간 지남. 블로그의 장점은 이거다. 검색하면 바로 나온다. 글이니까 빨리 읽을 수 있다. 코드도 복사 붙여넣기 쉽다. 내 상황이랑 비교하면서 볼 수 있다. 한국어 블로그 많다. 같은 고민 하는 사람들 많다. 댓글에 답 있을 때도 있다. 근데 단점도 있다. 글이 오래됐다. 2년 전 글이다. 리액트 버전이 다르다. 어떤 글은 틀린 정보다. 댓글에 "이거 옛날 방식이에요" 써 있다. 블로그마다 설명이 다르다. 누구 말이 맞는지 모르겠다. 결국 여러 글 읽어야 한다. 그러다 보면 헷갈린다. 점심시간 지났다. 밥 못 먹었다.3단계: 스택오버플로우 마지막 희망. 스택오버플로우. 영어로 검색한다. "useEffect infinite loop production only" 질문 글 나온다. 2015년. 오래됐다. 답변 10개. 첫 번째 답변 체크 표시 있다. 좋아요 234개. 읽는다. 영어다. 천천히 읽는다. 코드 예시 있다. 복사한다. 내 코드에 붙여넣는다. 에러 난다. 다시 본다. 아. 이 답변은 클래스 컴포넌트 기준이다. 나는 함수형 쓴다. 스크롤 내린다. 다른 답변 본다. "This answer is outdated. Use hooks instead." 댓글에 써 있다. 또 스크롤. 세 번째 답변. 좋아요 89개. 읽는다. 함수형이다. 코드 복사. 붙여넣는다. 돌려본다. 된다. 심장이 뛴다. 프로덕션 배포한다. 기다린다. 에러 안 난다. 해결했다. 시간 2시간 반 지남. 스택오버플로우의 장점은 이거다. 정확하다. 전문가들이 답한다. 여러 답변 비교할 수 있다. 좋아요 많은 거 보면 된다. 댓글에 최신 정보 있다. "이 답변은 옛날 거예요" 친절하게 알려준다. 비슷한 질문 링크도 있다. 따라가면서 보면 이해된다. 근데 단점도 있다. 영어다. 읽는 데 시간 걸린다. 질문 자체를 이해 못 할 때도 있다. 내가 모르는 용어 많다. 답변이 너무 전문적이다. "You should implement memoization with useMemo" 이런 거 나오면 또 검색해야 한다. 그래도 결국엔 여기서 답 찾는다. 유튜브랑 블로그에서 못 찾으면 마지막은 여기다. 내 검색 패턴 정리하면 이렇다.문제 생긴다 유튜브 검색 (20~30분) 대충 개념 이해 블로그 검색 (30분~1시간) 비슷한 사례 찾기 스택오버플로우 (1~2시간) 정확한 답 찾기 해결매번 이 순서다. 왜냐면 유튜브가 제일 쉽다. 영상 보면 이해된다. 근데 정확하지 않다. 블로그는 중간이다. 한글이라 읽기 편하다. 근데 정보가 들쭉날쭉하다. 스택오버플로우는 어렵다. 영어고 전문적이다. 근데 제일 정확하다. 그래서 쉬운 것부터 시작한다. 안 되면 어려운 걸로 간다. 효율적인지 모르겠다. 근데 내가 할 수 있는 방법은 이거다. 검색도 실력 요즘 깨달은 게 있다. 검색도 실력이다. 같은 문제인데 검색어를 어떻게 치느냐에 따라 결과가 다르다. "리액트 에러" 이렇게 치면 별로다. "react useEffect dependency array infinite loop" 이렇게 쳐야 한다. 영어로 쳐야 결과가 많다. 한글로 치면 한정적이다. 에러 메시지 그대로 복사해서 검색하는 것도 좋다. "TypeError: Cannot read property 'map' of undefined" 이거 그대로 복붙하면 관련 글 바로 나온다. 키워드를 정확히 쓰는 것도 중요하다. "안 돼요" 이러면 안 된다. "작동 안 함" 도 애매하다. "infinite loop" "memory leak" "type error" 이렇게 정확한 단어 써야 한다. 그리고 여러 소스를 봐야 한다. 유튜브 하나만 보고 끝내면 안 된다. 블로그 세 개는 읽어야 한다. 스택오버플로우도 답변 여러 개 비교해야 한다. 시간 걸린다. 근데 이게 공부다. 선배는 어떻게 하나 궁금했다. 점심 먹으면서 물어봤다. 선배한테. "저는 검색할 때 보통 어떤 순서로 하세요?" 선배가 웃었다. "나도 비슷해. 근데 요즘은 ChatGPT부터 물어본다." ChatGPT. 나도 쓴다. 근데 제대로 못 쓴다. "에러 났어요 어떻게 해요" 이렇게 물어보면 답이 애매하다. 선배는 다르게 쓴다. "에러 메시지랑 내 코드 다 붙여넣고, 뭘 시도했는지도 설명한다. 그러면 정확한 답 나온다." 아. 그렇게 쓰는 거구나. 나는 질문을 대충 했다. 그래서 답도 대충 나왔다. 질문을 잘해야 한다. 검색어도 그렇고 ChatGPT도 그렇고. 정확하게 물어봐야 정확한 답이 나온다. 당연한 건데 몰랐다. 시간이 아깝다 오늘 하루 검색한 시간 계산했다. 약 4시간. 실제 코드 짠 시간은 1시간. 검색이 4배 더 길다. 이게 맞나 싶다. 근데 다른 동기들도 비슷하다고 한다. "나도 하루에 검색만 서너 시간 한다." 다들 그렇다. 신입이니까 모르는 게 당연하다. 그래서 검색한다. 근데 언제까지 이럴까. 1년 차 되면 나아질까. 2년 차 되면. 선배들도 검색한다. 근데 속도가 다르다. 나는 한 문제에 3시간. 선배는 30분. 10배 차이다. 경험 차이다. 검색 실력 차이다. 나도 언젠가 빨라질까. 그러려면 지금 이 과정이 필요하다. 검색하면서 배운다. 시행착오하면서 는다. 아깝지만 어쩔 수 없다. 검색 기록 브라우저 히스토리 봤다. 오늘 하루만.react useEffect infinite loop (3회) useEffect cleanup function 사용법 (2회) react strict mode 끄기 (1회) next.js production build useEffect (2회) stackoverflow react hooks (5회) 리액트 의존성 배열 (1회) how to debug useEffect (1회)검색어만 15개. 열어본 페이지는 30개 넘는다. 유튜브 영상 4개. 블로그 글 12개. 스택오버플로우 6개. 그중에서 실제로 도움 된 건 3개. 효율 10%. 나머지 90%는 시간 낭비. 근데 그 3개 찾으려면 30개 봐야 한다. 검색은 원래 이런 거다. 쓸데없는 것도 보고 헤매다가 결국 찾는다. 지름길은 없다. 내일도 내일도 검색한다. 또 유튜브 보고 블로그 읽고 스택오버플로우 뒤진다. 이게 내 일상이다. 3개월 차 신입이 할 수 있는 거. 언젠가는 검색 없이도 코드 칠 수 있을까. 선배처럼 척척 해결할 수 있을까. 모르겠다. 근데 지금은 이렇게라도 한다. 검색하면서 배운다.오늘도 4시간 검색했다. 내일은 3시간으로 줄이고 싶다.
- 02 Dec, 2025
매일 아침 슬랙을 두려워하는 이유
매일 아침 슬랙을 두려워하는 이유 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개를 계속 읽는다. 대부분 별 거 아니다. 그냥 공지. 그냥 조회. 하지만 그 안에 한두 개가 나를 지목한다. 그게 오늘 하루를 결정한다. '이신입, 어제 올린 거 확인해봤어?' 피한다. '아 네. 지금 보겠습니다.' 지금 본다. 에러가 있다. 고칠 수 있나. 못 고칠 것 같은데. 선배한테 다시 물어봐야 하나. 물어본다. '그거 왜 이렇게 됐어요?' '너가 처음부터 잘못 이해했나 봐. 다시 해봐.' 다시 한다. 하루가 이렇게 간다.결국 슬랙은 내 아침을 훔쳐간다. 그리고 아침은 하루를 훔쳐간다.
- 02 Dec, 2025
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분에 들어올 수 있을까? 그때가 되면 이 모든 불안이 사라질까? 아니면 그때쯤엔 새로운 신입에게 같은 걸 하게 될까? 정말 답답하지만, 그래도 내일은 좀 나아지겠지.눈치 본다는 건 결국 내가 이곳에 속하고 싶다는 뜻이기도 하다.
- 02 Dec, 2025
코드리뷰 피드백이 외계어로 들릴 때
코드리뷰 피드백이 외계어로 들릴 때 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개. 뭐 그런대로 괜찮네. 출근한다.코드리뷰는 아직도 무섭지만, 어제보다는 조금 덜 무섭다. 그게 충분하다.
- 02 Dec, 2025
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를 켤 것이고. 또 복붙할 것이다. 하지만 오늘은 조금 다를 것 같다. 어쨌든 코드를 읽어야 한다는 걸 안다. 한 줄씩. 뭘 하는지는 모르겠지만, 적어도 어디가 문제인지는 찾을 수 있을 것 같다. 선배 앞에서 당황하지도 않을 것 같다. 아니, 당황할 거다. 하지만 이번엔 그냥 넘어가지 않을 것 같다. 이게 제일 중요한 거 같다.내일도 버틴다. 오늘보다 조금 똑똑해져서.