쿠버네티스? 도커? 선배들 대화가 외계어처럼 느껴질 때

쿠버네티스? 도커? 선배들 대화가 외계어처럼 느껴질 때

쿠버네티스? 도커? 선배들 대화가 외계어처럼 느껴질 때 회의실에서 오늘 전체 회의가 있었다. 팀장님이 말했다. "이번 프로젝트는 쿠버네티스로 배포할 겁니다." 선배 A가 고개를 끄덕였다. "그럼 도커 이미지부터 만들어야겠네요." 선배 B가 덧붙였다. "CI/CD 파이프라인도 새로 구축해야 할 것 같은데요." 팀장님이 웃었다. "그래, 젠킨스로 할까 깃랩 러너로 할까." 나는 고개를 끄덕였다. 아무것도 모른다.회의가 끝나고 자리로 돌아왔다. 메모장을 꺼냈다. 오늘 들은 단어를 적었다.쿠버네티스 도커 CI/CD 파이프라인 젠킨스 깃랩 러너6개다. 하루에 6개씩 모르는 단어가 생긴다. 일주일이면 30개. 한 달이면 120개. 도저히 못 따라간다. 점심시간 편의점 편의점에서 삼각김밥을 샀다. 테이블에 앉아서 먹으면서 폰을 꺼냈다. '쿠버네티스'를 검색했다. 위키백과가 나왔다. "컨테이너화된 애플리케이션의 자동 배포, 스케일링 등을 제공하는..." 뭔 소리야. 유튜브를 켰다. '쿠버네티스 10분 만에 이해하기' 재생했다. 3분 듣다가 껐다. 더 모르겠다.'도커'를 검색했다. 블로그가 나왔다. "도커는 컨테이너 기반의 오픈소스 가상화 플랫폼입니다." 컨테이너? 가상화? 또 모르는 단어가 2개 생겼다. 메모장에 추가했다.컨테이너 가상화이러다 끝이 없다. 삼각김밥을 다 먹었다. 20분 남았다. 인프런을 켰다. 어제 듣던 리액트 강의를 재생했다. 3분 듣다가 졸았다. 오후 3시 슬랙에 메시지가 왔다. 선배 A였다. "신입님, PR 확인 부탁드려요." 깃허브를 열었다. 코드가 빼곡하다. 파일이 15개. Dockerfile이 있다. docker-compose.yml도 있다. 뭔지 모르겠다. 일단 'Approve' 버튼을 눌렀다. 선배가 바로 답장했다. "감사합니다 ㅎㅎ" 나는 'ㅎㅎ'로 답했다. 죄책감이 든다.선배 B가 옆자리에서 말했다. "도커 컴포즈 진짜 편하지 않아요?" 선배 A가 답했다. "그니까요, 로컬 환경 구축이 진짜 빨라졌어요." 나는 모니터만 봤다. 대화에 끼고 싶다. 근데 뭐라고 말해야 할지 모른다. 그냥 고개만 끄덕였다. 퇴근 후 집에 왔다. 노트북을 켰다. 오늘 적어둔 단어들을 다시 봤다. 쿠버네티스부터 검색했다. 2시간 동안 글을 읽었다. 유튜브도 3개 봤다. 대충 이해했다. 컨테이너를 관리하는 도구. 여러 서버에 자동으로 배포. 그런데 왜 필요한지 모르겠다. 지금 우리 회사는 어떻게 배포하는지도 모른다. 도커를 검색했다. 1시간 반 동안 글을 읽었다. 설치도 해봤다. Docker Desktop을 깔았다. 실행했다. 튜토리얼을 따라했다. 에러가 났다. "Cannot connect to the Docker daemon." 구글링했다. 30분 동안 삽질했다. 해결했다. 다시 튜토리얼을 따라했다. "Hello from Docker!" 출력됐다. 기분이 좋았다. 10분 정도. 그리고 생각했다. 이게 뭐에 쓰는 건지 모르겠다. 일주일 후 선배들이 또 회의실에 모였다. 팀장님이 말했다. "쿠버네티스 배포 잘 됐죠?" 선배 A가 답했다. "네, 헬름 차트로 정리했습니다." 헬름? 메모장을 꺼냈다. '헬름'을 적었다. 선배 B가 말했다. "프로메테우스 모니터링도 붙였어요." 프로메테우스? '프로메테우스'도 적었다. 팀장님이 고개를 끄덕였다. "좋아요. 그라파나 대시보드는?" 그라파나? '그라파나'도 적었다. 3개가 또 생겼다. 지난주에 적었던 '쿠버네티스'를 아직도 제대로 모른다. 그런데 오늘 또 3개가 생겼다. 이거 평생 못 따라잡는다. 퇴근길 지하철 지하철에서 메모장을 봤다. 2주 동안 적은 단어가 47개다. 아는 건 5개 정도. 대충 아는 거까지 합쳐도 10개. 37개는 모른다. 검색해봤던 것도 있다. 쿠버네티스, 도커, CI/CD. 근데 다시 보니까 까먹었다. 결국 그냥 단어만 알고 있다. 무슨 뜻인지, 왜 쓰는지, 어떻게 쓰는지 모른다. 집에 가서 또 공부해야 하나. 근데 내일 또 새로운 단어가 나온다. 끝이 없다. 동기 단톡방 밤 11시에 동기 단톡방에 메시지를 보냈다. "너네 쿠버네티스 알아?" 3분 후에 답장이 왔다. "이름만 들어봤어." "그게 뭔데?" "왜 갑자기?" 나만 모르는 게 아니었다. 조금 안심됐다. 그런데 또 생각했다. 우리 다 같이 모르면 어쩌지. 선배들은 다 아는데. 우리는 언제 알게 되는 거지. 3개월 차 입사한 지 3개월이 지났다. 메모장에 적힌 단어가 200개를 넘었다. 이제 포기했다. 다 알 수 없다. 불가능하다. 그냥 필요할 때 검색한다. 그때그때. 선배들 대화는 여전히 외계어다. "istio 설정 좀 봐주세요." "argocd로 배포 자동화했어요." "redis 클러스터 구축했습니다." 고개만 끄덕인다. 그런데 신기한 게 있다. 가끔 아는 단어가 나온다. "도커 컨테이너 재시작해야 할 것 같아요." 아, 도커. 그거 알아. 작은 성취감이 든다. 진짜 작은 거. 그리고 또 모르는 단어가 나온다. "sidecar 패턴으로 구현할까요?" sidecar? 메모장을 꺼낸다. 끝이 없다. 정말 끝이 없다. 선배와의 대화 어제 선배 A가 물었다. "신입님, 요즘 뭐 공부해요?" 솔직하게 답했다. "선배님들 대화 따라가려고 메모하는데요, 너무 많아서..." 선배가 웃었다. "저도 그랬어요." "네?" "저도 신입 때 맨날 메모했어요. 쿠버네티스, 도커, 다 모르는 거." "그럼 언제 아셨어요?" "글쎄요. 딱히 언제부터인지 모르겠어요. 그냥 계속 듣다 보니까." "계속 듣다 보니까요?" "네. 처음엔 단어만 알고, 그다음엔 뭔지 알고, 그다음엔 왜 쓰는지 알고. 그렇게." "얼마나 걸렸어요?" "1년? 2년? 근데 지금도 모르는 거 많아요." 선배도 모른다. 조금 위로가 됐다. 오늘도 오늘도 회의가 있었다. "GraphQL subscriptions로 실시간 통신 구현할게요." GraphQL은 안다. 대충 안다. API 쿼리 언어. subscriptions는 모른다. 메모했다. "그럼 Apollo Client 설정도 바꿔야겠네요." Apollo Client도 들어봤다. 뭔지는 모른다. 메모했다. 회의가 끝났다. 오늘도 2개가 추가됐다. 자리로 돌아와서 검색했다. 30분 동안. 대충 알았다. 내일이면 까먹을 것이다. 그리고 또 검색할 것이다. 이게 내 일상이다. 8개월 차 지금 지금은 입사 8개월 차다. 메모장은 버렸다. 200개 넘어갈 때. 이제 그냥 필요할 때 검색한다. 선배들 대화는 여전히 외계어다. 50%는 모른다. 근데 괜찮다. 30%는 안다. 3개월 전엔 10%도 몰랐다. 조금씩 늘고 있다. 아주 조금씩. 쿠버네티스? 아직도 잘 모른다. 써본 적도 없다. 도커? 로컬에서 MySQL 띄울 때 쓴다. 그것만 안다. CI/CD? 우리 회사 배포 프로세스는 안다. 이론은 모른다. 근데 됐다. 지금은 이 정도면 된다. 나중에 또 배운다. 필요하면. 지금은 리액트나 제대로 하자. useEffect 의존성 배열부터 확실하게. 신입 후배가 오면 언젠가 신입 후배가 올 것이다. 그럼 나도 선배가 된다. 회의 때 이렇게 말할 것이다. "이번엔 도커로 배포할게요." 후배가 고개를 끄덕일 것이다. 아무것도 모르면서. 나도 그랬다. 지금도 그렇다. 그게 정상이다.메모장 200페이지 넘어갈 때 버렸다. 이제 필요할 때만 검색한다. 언젠간 나도 설명하는 선배가 될 거다.

수습 평가 D-90: 새벽 3시에 깨는 이유

수습 평가 D-90: 새벽 3시에 깨는 이유

수습 평가 D-90: 새벽 3시에 깨는 이유 또 깼다 새벽 3시 12분. 눈이 떠졌다. 이유도 모르고. 어제는 2시 47분이었다. 그제는 3시 반. 화장실 가려고 깬 게 아니다. 갈증도 아니다. 그냥 깬다. 눈 뜨면 바로 생각난다. 수습 평가. D-90. 정확히는 D-87.계산이 시작된다 침대에 누워서 눈만 뜬 채로 계산한다. 지금까지 8개월. 남은 기간 3개월. 지금 내 실력으로 괜찮은가. 아니다. 어제 선배가 말했다. "이신입씨, 이거 왜 이렇게 짰어요?" 대답 못 했다. "아... 그게..." 머릿속이 하얘졌다. 그 코드 짠 게 사흘 전이다. 왜 그렇게 짰는지 나도 모른다. ChatGPT가 알려준 대로 했다. 그게 문제였다.체크리스트 어둠 속에서 머릿속으로 리스트를 만든다. 할 줄 아는 것:React 기본 문법 컴포넌트 만들기 useState 쓰기 구글링못하는 것:useEffect 정확히 이해 못 함 TypeScript 제네릭 뭔지 모름 상태관리 라이브러리 실무에서 못 써봄 테스트 코드 한 번도 안 짬 Git conflict 나면 당황 Docker는 들어만 봄 API 설계 못 함 데이터베이스 쿼리 최적화? 모름못하는 게 더 많다. 아니, 훨씬 더 많다. 손가락으로 세다가 포기했다. 다른 신입들은 부트캠프 동기 단톡방 켰다. 밤 12시에 올라온 메시지. "오늘 Redux 완강했다ㅠㅠ 드디어" 새벽 1시. "면접 봤는데 React Query 물어보던데 이거 필수인가" 새벽 2시. "다들 자나요? 저 내일 코테 보는데 긴장돼서..." 다들 뭔가 하고 있다. 나는 뭐 했나. 어제 퇴근하고 편의점 갔다. 맥주 두 캔 샀다. 집 와서 유튜브 켰다. '프론트엔드 로드맵 2024'. 10분 보고 잤다.선배가 던진 말 지난주 금요일. 퇴근 30분 전. 선배가 슬랙 DM 보냈다. "이신입씨 잠깐 통화 가능?" 심장이 멈췄다. "네 가능합니다" 전화 왔다. "이번 주 작업 보니까 좀 아쉬운 부분이 있어서요." "...네." "컴포넌트 분리를 좀 더 신경 써야 할 것 같고, 네이밍도 좀 더 명확하게 하면 좋겠어요." "아... 네네." "그리고 커밋 메시지도 컨벤션 맞춰주세요. 이거 몇 번 말씀드린 것 같은데." "죄송합니다." "괜찮아요. 아직 신입이니까. 근데 조금씩 개선되면 좋겠어요." "네 그렇게 하겠습니다." 끊고 나서 손이 떨렸다. '아직 신입이니까' 이 말이 계속 맴돈다. 지금은 신입이지만 3개월 뒤에는? 수습 평가 기준 입사할 때 받은 서류 다시 꺼내 봤다. 수습 평가 항목:업무 이해도 기술 역량 커뮤니케이션 조직 적응도 자기개발 의지각 항목 A부터 D까지. C 두 개 이상이면 재평가. D 하나라도 있으면 위험. 지금 나는? 업무 이해도: C 기술 역량: D 커뮤니케이션: C 조직 적응도: B 자기개발 의지: C 솔직하게 매기면 이렇다. D가 하나 있다. 오늘 한 일 어제 하루를 복기한다. 9시 10분 출근. 슬랙 확인. 읽지 않은 메시지 12개. 다 읽는 데 20분. 이해 못 한 건 5개. 일단 넘김. 10시 데일리 스크럼. 어제 한 일: "로그인 폼 스타일링 완료했습니다." 오늘 할 일: "회원가입 유효성 검사 추가하겠습니다." 실제로 한 일: 유튜브에서 '리액트 폼 validation' 검색. 점심 12시. 편의점. 참치김밥 하나. 바나나우유. 먹으면서 인프런 강의 10분 봤다. 오후 1시부터 코딩. input에 onChange 걸고 state 업데이트. 에러 났다. 뭔지 모름. console.log 찍었다. 7개. 이해했다. 아니, 이해한 척. 복붙해서 돌아간다. 커밋. 오후 4시 회의. "이번 스프린트 목표는..." 졸음 왔다. 커피 마셨다. 무슨 말인지 30%만 이해. 끄덕였다. 다들 끄덕이니까. 오후 6시. 선배가 내 PR에 코멘트 8개. 심호흡. 하나씩 읽었다. "이 부분 useMemo로 감싸면 어떨까요?" useMemo가 뭐였지. 검색했다. 아... 맞다. 최적화. "네 수정하겠습니다." 9시 퇴근. 집 도착 10시. 씻고 누웠다. 11시. 내일 뭐 공부하지 생각하다가 잤다. 이게 내 하루다. 충분하지 않다 새벽 3시 12분. 이불 속에서 생각한다. 이 정도로 충분한가. 동기들은 토이 프로젝트 한다. 나는 주말에 게임했다. 동기들은 블로그 쓴다. 나는 노션에 '오늘 배운 것' 2줄 적고 말았다. 동기들은 스터디 한다. 나는 혼자 강의 듣다가 잔다. 차이가 벌어지고 있다. 지금 당장은 아니어도 3개월 뒤면 드러난다. 수습 평가 때 물어볼 것 같다. "이신입씨, 이번 기간 동안 어떤 걸 공부했나요?" "음... 리액트 강의 들었습니다." "프로젝트는?" "아... 회사 업무가 바빠서..." "본인 강점이 뭐라고 생각하세요?" "..." 대답 못 한다. 지금도 못 한다. 악순환 불안하다. 불안해서 유튜브 본다. '주니어 개발자 공부법' 영상. 20분 본다. 동기부여된다. 노트에 적는다. '내일부터 매일 1시간 공부' 다음 날. 퇴근하면 녹초다. 침대에 누운다. 5분만 쉬자. 눈 뜬다. 새벽 2시. 또 불안하다. 또 영상 본다. 악순환이다. 선배들도 그랬을까 팀장님은 개발 10년 차. 코드 보면 깔끔하다. 회의 때 말하는 것도 논리적이다. 막히는 게 없어 보인다. 저 사람도 신입 때 이랬을까. 새벽에 깨서 불안했을까. 수습 평가 걱정했을까. 물어보고 싶다. 못 물어본다. "팀장님 신입 때 어떠셨어요?" 이렇게 물으면 이상할까. 아니, 이상한 게 아니라 내 불안이 들킬 것 같다. '쟤 요즘 불안해하네' 이렇게 생각할까 봐. 그래서 혼자 끙끙댄다. D-87의 무게 87일. 길다면 길다. 짧다면 짧다. 매일 1시간씩 공부하면 87시간. 강의 10개는 볼 수 있다. 토이 프로젝트 2개는 만들 수 있다. 블로그 글 20개는 쓸 수 있다. 계산은 완벽하다. 실행이 문제다. 어제도 계획했다. 오늘도 계획했다. 내일도 계획할 것이다. 실행은 모레쯤. 모레도 계획만 한다. 불 켜고 일어났다 3시 12분. 더 이상 못 눕겠다. 불 켰다. 노트북 켰다. 뭐라도 해야 할 것 같다. '리액트 공식 문서' 탭 열었다. 읽는다. 5분 읽었다. 졸리다. 아니다, 졸리면 안 된다. 커피 끓였다. 마신다. 다시 읽는다. useEffect 문서. "의존성 배열에 들어간 값이 변경될 때마다..." 알고 있다. 근데 실전에서 헷갈린다. 예제 코드 따라 쳤다. 돌려봤다. 이해했다. 조금. 시계 봤다. 4시 23분. 출근까지 4시간 반. 더 할까. 아니다. 자야 한다. 내일 졸면 안 된다. 눕는다. 잠이 안 온다. 당연하다. 커피 마셨으니까. 반복되는 다짐 이불 속에서 또 다짐한다. 오늘은 정말 한다. 퇴근하고 바로 집 온다. 편의점 안 간다. 유튜브 안 본다. 노트북 켜서 코드 짠다. 토이 프로젝트 시작한다. 간단한 거. Todo 앱. 이미 100번 만들어 봤지만 또 만든다. 이번엔 TypeScript로 만든다. 제대로 공부하면서. 블로그도 쓴다. '오늘 배운 것' 정리한다. 주말에는 스터디 찾아본다. 혼자 하니까 안 되는 거다. 같이 하면 된다. 다짐한다. 또. 어제도 다짐했다. 그제도 다짐했다. 이번엔 다르다고 믿는다. 믿고 싶다. 7시 알람 눈 떴다. 7시. 4시간 잤다. 머리 무겁다. 일어나야 한다. 씻는다. 옷 입는다. 현관문 열기 전에 거울 봤다. 다크서클 짙다. "오늘도 화이팅..." 누가 들으면 웃긴다. 나도 웃긴다. 밖으로 나간다. 지하철 탄다. 핸드폰 켠다. 부트캠프 동기 단톡. 새벽 6시에 올라온 메시지. "오늘 알고리즘 1문제 풀고 출근합니다!" 나는 새벽에 뭐 했나. 다짐만 했다. 오늘도 출근 9시 10분. 책상 앉았다. 슬랙 켰다. 읽지 않은 메시지 15개. 오늘도 시작이다. 수습 평가 D-87. 내일은 D-86. 모레는 D-85. 숫자는 줄어든다. 실력은 늘고 있을까. 모르겠다. 그래도 출근했다. 그게 어디야.새벽 3시에 깨는 건 불안 때문이다. 그 불안은 정당하다. 근데 불안만으로는 안 된다. 내일은 정말 뭐라도 해봐야지. D-86부터는 다르게. 그렇게 믿고 또 출근한다.

회의 중 고개만 끄덕이기, 신입의 생존 기술

회의 중 고개만 끄덕이기, 신입의 생존 기술

회의 중 고개만 끄덕이기, 신입의 생존 기술 오늘도 회의 오전 10시. 슬랙에 알림. "30분 후 회의실 B. 신기능 설계 논의" 심장이 쿵 내려앉았다. 설계 논의. 내가 뭘 알아. 일단 노션 켰다. 지난주 회의록 검색. "API 구조 재설계, Redis 캐싱 도입 검토" Redis가 뭐더라. 검색했다. "인메모리 데이터베이스". 아직도 모르겠다. 10시 28분. 화장실 갔다 왔다. 회의 2분 전에 들어가는 게 제일 안전하다. 너무 일찍 가면 선배랑 어색한 대화해야 함.회의실 입성 문 열고 들어갔다. "안녕하세요." 벌써 앉아있는 선배들. 김 선배, 박 선배, 팀장님. 나는 제일 구석 자리. 노트북 열고, 메모장 켰다. 펜도 꺼냈다. 쓸지 모르지만. 팀장님이 말을 시작했다. "이번에 유저 피드 성능 개선하려고 하는데." 고개를 끄덕였다. 유저 피드. 그거 내가 건드린 적 없다. "현재 API 응답속도가 평균 2.3초거든." 끄덕. 2.3초가 느린 건가 빠른 건가. "DB 쿼리 최적화랑 캐싱 레이어 추가 검토 중이야." 끄덕끄덕. 캐싱 레이어. 어디다 추가하는 거지. 김 선배가 말했다. "Redis로 가는 게 나을 것 같은데, 세션 관리도 같이 옮기면 어때?" 끄덕. Redis. 아까 검색한 그거. 세션 관리는 또 뭐지.모르는 용어의 향연 박 선배가 화이트보드에 뭔가 그렸다. "클라이언트-서버-DB-Redis 구조로 가면." 끄덕. 화살표가 5개쯤 그려졌다. 하나도 모르겠다. 팀장님이 물었다. "신입이는 어떻게 생각해?" 심장이 멈췄다. "아... 좋을 것 같습니다." 내가 한 말이다. 좋을 것 같다니. 뭐가. "구체적으로는?" 끝났다. "음... 성능도 개선되고, 유지보수도 편할 것 같아서요." 유지보수. 어디서 들은 단어. 팀장님이 고개를 끄덕였다. 살았다. 김 선배가 말을 이었다. "TTL은 얼마로 잡을까?" 끄덕. TTL. Time To Live인가. 아닌가. 메모장에 적었다. "TTL - 나중에 검색" 회의가 40분째 진행 중이다. 내가 한 말은 딱 한 문장. 고개는 스무 번 넘게 끄덕였다. 끄덕임의 기술 회의 중 고개 끄덕이기에도 기술이 있다. 너무 자주 끄덕이면 이상하다. "너 진짜 이해하고 있어?" 너무 안 끄덕이면 더 이상하다. "너 듣고 있긴 해?" 적당히 끄덕여야 한다. 3초에 한 번. 아니면 문장 끝날 때. 선배가 나를 쳐다보면 더 끄덕인다. "네네, 맞습니다." 팀장님이 말할 때는 살짝 앞으로 몸을 기울인다. 경청하는 자세. 실제로는 하나도 안 들린다. 메모는 계속 한다. 뭐라도 적는다. "Redis 검토", "성능 개선", "API 2.3초" 나중에 읽어보면 아무 의미 없다. 그래도 적는다. 적는 사람은 일하는 것처럼 보인다.질문이 무서운 이유 회의에서 제일 무서운 순간. "질문 있어?" 없다. 질문하면 더 모르는 게 드러난다. 한 번 질문했던 적 있다. "저기, API 엔드포인트가 정확히 어디 있는 건가요?" 선배들이 나를 쳐다봤다. 3초간 침묵. 김 선배가 말했다. "너 이거 작업하기 전에 문서 읽었어?" 죽고 싶었다. 그 이후로 질문 안 한다. 모르면 나중에 검색한다. 회의 끝나고 선배 책상 옆 지나가면서 슬쩍 물어본다. "저기, 아까 말씀하신 Redis 관련해서..." 일대일이면 덜 창피하다. 회의실에서는 무조건 끄덕인다. 이해하는 척한다. 살아남는다. 회의 후 현타 회의 끝났다. 50분 진행. 노트북 덮고 일어섰다. 선배들은 계속 얘기하고 있다. "그럼 이거 내일까지 POC 만들어볼게." POC. 또 모르는 단어. 자리로 돌아왔다. 아까 적은 메모 봤다. "Redis 검토" "TTL" "캐싱 레이어" "POC" 하나도 모르겠다. 구글 켰다. "Redis란 무엇인가" "TTL 뜻" "POC 개발 용어" 검색 결과 읽었다. Proof of Concept. 개념 증명. 아. 이제 알았다. 회의 중에는 몰랐다. 메모장에 정리했다. 나중에 또 까먹을 거다. 슬랙에 회의록이 올라왔다. 김 선배가 작성. 읽어봤다. 회의 중에 들었던 내용이 맞긴 한데. 여전히 무슨 말인지 모르겠다. 선배도 그랬을까 점심시간. 편의점 갔다. 김치찌개 도시락 데웠다. 김 선배가 옆에 앉았다. "신입이, 오늘 회의 어땠어?" 심장이 또 쿵. "아... 좋았습니다." "이해되긴 했어?" 끝났다. 솔직하게 말할까. "솔직히... 반은 모르겠어요." 김 선배가 웃었다. "나도 신입 때 그랬어." 진짜? "나는 80% 몰랐는데." 위로가 됐다. "지금도 가끔 모를 때 있어. 그럼 나중에 검색하지 뭐." 선배도 그랬구나. "회의 중에 모르는 거 물어보기 무섭지 않았어요?" "무섭지. 그래서 안 물어봤어. 너처럼." 웃었다. 처음으로. "근데 나중에 보면 다 별거 아니더라. 하나씩 알아가는 거야." "네." "오늘 회의 내용 중에 궁금한 거 있으면 나한테 물어봐. 회의실 밖에서." 고마웠다. 도시락 먹으면서 물어봤다. "Redis가 정확히 뭔가요?" 김 선배가 설명해줬다. 10분 동안. 회의실에서 들었던 것보다 10배 이해가 잘 됐다. 그래도 나는 끄덕인다 오후 3시. 또 회의 알림. "긴급 회의. 버그 대응" 또 회의실 갔다. 또 끄덕였다. 이번에는 조금 달랐다. "API 응답 지연"이라는 말이 들렸다. 아까 점심시간에 김 선배한테 들은 내용이다. "Redis 캐싱으로 해결 가능할까요?" 내가 말했다. 선배들이 나를 봤다. 팀장님이 고개를 끄덕였다. "그것도 방법이네." 살았다. 아니, 살았다를 넘어섰다. 회의가 20분 만에 끝났다. 짧은 회의가 제일 좋은 회의다. 자리로 돌아왔다. 가슴이 두근거렸다. 내가 한 말이 말이 됐다. 처음이다. 메모장에 적었다. "오늘 회의에서 Redis 얘기 꺼냄. 팀장님이 끄덕였음." 작은 성공이다. 하지만 성공이다. 언젠가는 저녁 7시. 퇴근 준비. 오늘 회의 두 개. 끄덕인 횟수 아마 50번. 실제 이해한 비율 30%. 그래도 괜찮다. 입사 8개월. 처음엔 10%도 못 알아들었다. 지금은 30%. 3배 성장이다. 내년 이맘때면 50%쯤 될까. 2년 후면 김 선배처럼 설명해줄 수 있을까. 모르겠다. 하지만 조금씩 나아지고 있다. 회의실에서 끄덕이는 게 창피했다. 지금도 창피하다. 하지만 이게 신입의 생존 기술이다. 끄덕이면서 배운다. 모르는 걸 적고, 나중에 찾아본다. 선배들한테 하나씩 물어본다. 조금씩 이해한다. 언젠가는 나도. 회의에서 먼저 말하는 사람이 되겠지. 그때까지는. 오늘도 끄덕인다.회의 후 검색창에 남은 단어가 다섯 개. 내일은 네 개로 줄이고 싶다.

면접 때 '네' vs 현재의 '아니'

면접 때 '네' vs 현재의 '아니'

면접 때 '네' vs 현재의 '아니' 그날의 '네' 면접은 5월이었다. 작년 5월. 면접관이 물었다. "React 다룰 줄 아세요?" 나는 대답했다. "네." 거짓말이었다. 아니 거짓말은 아니었다. 부트캠프에서 했으니까. Todo 앱 만들었고, 날씨 앱도 만들었다. 컴포넌트 나누는 것도 알고, props 전달하는 것도 안다. useState도 쓸 줄 알고, useEffect도... 뭐 대충 안다. "TypeScript도 가능하신가요?" "네, 괜찮습니다." 이것도 거짓말은 아니었다. 부트캠프 마지막 프로젝트에서 썼다. 타입 지정하는 거. interface 쓰는 거. 에러 나면 any 박는 거. 다 안다. 면접관이 고개를 끄덕였다. "좋습니다. 저희 스택이랑 잘 맞네요." 그날 집에 가는 길이 기억난다. 지하철에서 유튜브 쇼츠 보면서 웃었다. 합격할 것 같았다. 아니 합격해야 했다. 6개월 동안 구직 활동 했다. 면접 8번 떨어졌다. 이번엔 될 것 같았다.입사 첫날의 '아니' 입사는 7월이었다. 첫날 선배가 코드베이스 보여줬다. "이게 우리 메인 프로젝트고요, 여기가 컴포넌트 폴더예요." 화면을 봤다. 모르는 게 보였다. 아니 아는 게 없었다. const { data, isLoading } = useQuery(...)useQuery가 뭐지. React에 이런 거 있었나. <Suspense fallback={<Loading />}>Suspense는 또 뭐지. 이것도 React야? 선배가 설명했다. "React Query 쓰고 있어요. 서버 상태 관리 라이브러리죠." 고개를 끄덕였다. 이해 못 했다. "그리고 여기 보면 Zustand로 클라이언트 상태 관리하고요." 또 끄덕였다. Zustand가 뭔지 모른다. 첫날 저녁 7시에 퇴근했다. 원룸 와서 노트북 켰다. '리액트 쿼리 튜토리얼' 검색했다. 영상 10분 보다가 잤다. 일주일 차의 '전혀 아니' 첫 태스크를 받았다. "이 버튼 클릭하면 모달 띄워주세요. 간단한 거예요." 간단하다고 했다. 간단하지 않았다. 모달 컴포넌트를 찾았다. 코드가 200줄이었다. props가 15개였다. 주석은 없었다. interface ModalProps { isOpen: boolean; onClose: () => void; children: React.ReactNode; size?: 'sm' | 'md' | 'lg'; closeOnOverlayClick?: boolean; // ... }어떤 props를 써야 하는지 몰랐다. 다른 페이지 코드를 봤다. 복사했다. 붙여넣었다. 에러가 났다. Type 'string' is not assignable to type 'ModalSize'타입 에러였다. any를 박았다. 에러가 사라졌다. 동작했다. PR을 올렸다. 손이 떨렸다. 30분 뒤 코드리뷰가 달렸다. "any 사용은 지양해주세요. 타입을 명시적으로 지정해주시면 좋겠습니다." "onClose 함수를 useCallback으로 감싸주세요." "이 부분은 custom hook으로 분리하면 더 좋을 것 같아요." useCallback이 뭐지. custom hook은 또 뭐지. 구글에 검색했다. 블로그 3개 읽었다. 이해 안 됐다. 유튜브 봤다. 10분짜리 영상. 7분에 멈췄다.한 달 차의 '완전히 아니' 회의가 있었다. 기술 스택 논의. "Next.js 14 App Router로 마이그레이션 어떨까요?" "Server Component 쓰면 성능 개선 확실할 거예요." "RSC 도입하면 클라이언트 번들 사이즈도 줄고." 무슨 말인지 하나도 모르겠다. Next.js는 React 아니었나. App Router는 또 뭐고. RSC는 뭐야. 고개만 끄덕였다. 회의록을 적었다. 나중에 찾아보려고. 퇴근 후 검색했다. 'Next.js 14 App Router' 공식 문서가 나왔다. 영어였다. 번역기 돌렸다. 이해 안 됐다. 유튜브에 '넥스트 14 튜토리얙' 검색했다. 40분짜리 영상. 재생했다. 5분 보다가 다른 영상으로 넘어갔다. '리액트 기초부터'. 그날 깨달았다. 나는 React를 모른다. 면접 때 '네'라고 했던 그 React를. 두 달 차의 '절대 아니' 선배가 물었다. "신입님, useEffect 의존성 배열 왜 비워두셨어요?" 나는 대답했다. "한 번만 실행하려고요." 선배가 말했다. "여기 state 참조하고 있는데요?" 코드를 봤다. useEffect(() => { fetchData(userId); }, []);userId가 바뀌면? 음... 모르겠다. "의존성 배열에 userId 넣어야죠." "아 네." 고쳤다. 다시 에러가 났다. 무한 루프였다. console.log가 100번 찍혔다. 선배가 옆에 와서 봤다. "fetchData를 useCallback으로 감싸야 해요." 또 useCallback이다. 유튜브에서 봤는데. 이해 못 했는데. "네... 그렇게 할게요." 검색했다. 'useCallback 언제 써요'. 블로그 10개를 읽었다. 하나도 이해 안 됐다. 예제 코드를 복사했다. 붙여넣었다. 됐다. 왜 되는지 모른다. 그날 저녁 편의점에서 삼각김밥 샀다. 참치마요. 500원 할인이었다. 앉아서 먹으면서 생각했다. 나는 React를 모른다. TypeScript도 모른다. 면접 때 '네'라고 했던 건 뭐였을까.세 달 차의 '그래도' 오늘 PR이 머지됐다. 첫 번째 기능 완성. 로그인 페이지 에러 처리였다. 일주일 걸렸다. 코드는 80줄. 코드리뷰는 12개 받았다. 수정은 7번 했다. 하지만 머지됐다. 선배가 슬랙에 메시지 보냈다. "고생하셨습니다 👍" 답장했다. "감사합니다." 저장했다. 그 슬랙 메시지 스크린샷. 노션에 붙였다. '칭찬 모음' 페이지에. 그리고 생각했다. 면접 때 '네'라고 했던 나를. 거짓말쟁이라고 생각했다. 사기꾼이라고 생각했다. 회사를 속였다고 생각했다. 근데 지금은 생각한다. 그때 '아니요'라고 했으면 어땠을까. 면접 떨어졌을 거다. 여기 못 왔을 거다. 지금 이 코드도 못 봤을 거다. useQuery도 몰랐을 거고, Zustand도 몰랐을 거고, useCallback도 몰랐을 거다. 모르는 게 많다. 여전히 많다. useEffect 의존성 배열 아직도 헷갈린다. TypeScript any 아직도 쓴다. 코드리뷰 받을 때마다 심장 뛴다. 근데 3개월 전보다는 안다. 조금은 안다. PR 2개 머지했다. 버그 1개 고쳤다. 선배한테 칭찬 1번 받았다. 용서 면접 때 '네'라고 했던 나에게. 미안하다고 하고 싶었다. 거짓말쟁이라고 하고 싶었다. 근데 지금은 안다. 그건 거짓말이 아니었다. '할 수 있다'는 건 '지금 할 수 있다'가 아니라 '배워서 할 수 있다'는 거였다. 면접 때 나는 대답했다. "네, React 할 줄 압니다." 정확히는 이거였다. "네, React 배워서 할 수 있습니다." 지금도 못한다. 여전히 모른다. 하지만 배우고 있다. 매일 조금씩. 그게 '할 줄 안다'는 거였다. 부트캠프 동기가 어제 톡 보냈다. "면접 때 뻥쳤던 거 생각나서 밤에 잠 안 와." 답장했다. "그거 뻥 아니야. 진짜야. 우리 지금 하고 있잖아." 읽씹이었다. 10분 뒤 답장 왔다. "ㅇㅈ"면접 때 '네'는 거짓말이 아니라 약속이었다. 지금 그 약속 지키는 중이다.

퇴근 후 인프런: 10분 강의, 10분 수면

퇴근 후 인프런: 10분 강의, 10분 수면

오늘은 다르다고 생각했다 퇴근했다. 7시 50분. 회사에서 원룸까지 30분. 지하철에서 서서 왔다. 앉으면 잔다. 문 열고 들어왔다. 책상 위에 어제 켜놨던 노트북. 인프런 강의가 일시정지 상태다. 12분 23초에서 멈춰있다. 어제도 못 봤다는 뜻이다. 오늘은 다를 거라고 생각했다. 지하철에서도 생각했다. '오늘은 최소 1시간은 본다. React 훅 제대로 이해한다. useEffect 의존성 배열 완벽하게 이해한다.' 씻었다. 편의점 도시락 데웠다. 3900원짜리 제육볶음. 밥을 먹으면서도 생각했다. '밥 먹고 바로 시작한다. 30분만 쉬고.'30분이 1시간이 되는 법칙 침대에 누웠다. 30분만. 유튜브 쇼츠 켰다. 개발 관련 영상이다. 공부다. 이건 공부의 일부다. 쇼츠가 20개 지나갔다. 시계를 봤다. 8시 40분. 50분이 지났다. 일어났다. 책상 앞에 앉았다. 노트북을 켰다. 인프런을 켰다. 내 강의 목록이 보인다."React 완벽 가이드" - 진도율 14% "TypeScript 기초부터" - 진도율 8% "클린코드 실전" - 진도율 3% "JavaScript 심화" - 진도율 22%다 돈 주고 샀다. 총 27만원. 할인할 때 샀다고 했지만 27만원이다. 부모님한테 용돈 받은 돈으로 샀다. 명절 때. 오늘은 React를 본다. 클릭했다. 로딩됐다. 강사 얼굴이 나온다. 밝은 목소리다. "안녕하세요 여러분!" 나도 안녕하세요. 근데 좀 피곤하긴 하다.10분의 전투 재생했다. 1.5배속이다. 1배속으로 들으면 시간이 너무 오래 걸린다. 1.5배속도 느린 것 같은데 2배속은 못 알아듣는다. "오늘은 useEffect의 의존성 배열에 대해 알아보겠습니다." 바로 이거다. 내가 모르는 거다. 집중한다. 메모장을 켰다. 필기한다. "의존성 배열은..." 눈이 감긴다. 아니다. 떴다. 계속 본다. "...배열 안에 들어가는 값이 변경될 때마다..." 고개가 앞으로 간다. 아니다. 다시 든다. 커피를 마신다. 아까 편의점에서 산 아메리카노. 식었다. "...그렇기 때문에 의존성 배열을 비워두면..." 3분 지났다. 아직 7분 남았다. 할 수 있다. 화면을 본다. 코드가 나온다. 따라 친다. VSCode를 켰다. 새 파일을 만들었다. test.jsx. 강의 코드를 따라 친다. useEffect(() => {}, [])입력하다가 멈췄다. 뭘 치는 거였지. 강의를 다시 돌렸다. 10초 전으로. "...여기서 console.log를 찍어보면..." 아 맞다. console.log. 쳤다. useEffect(() => { console.log('마운트') }, [])눈이 또 감긴다. 안 된다. 일어났다. 스트레칭했다. 제자리에서 10번 뛰었다. 다시 앉았다. 강의는 계속 재생 중이다. 5분 지났다. 강사는 계속 말한다. 밝게. "이해되셨나요? 그럼 이제..." 이해 안 됐다. 근데 계속 간다.침대가 부른다 7분 지났다. 3분 남았다. 할 수 있다. 거의 다 왔다. 근데 침대가 보인다. 책상 바로 옆이다. 원룸이니까. 1.5미터 거리다. 이불이 보인다. 푹신해 보인다. 아까 누웠을 때 기억이 난다. 좋았다. 강의는 계속된다. "...dependency array의 두 번째 활용법은..." dependency array. 의존성 배열. 알아들었다. 이 정도면 됐다. 오늘 뭔가 배운 것 같다. 8분. "잠깐만 눈 붙이고 다시 보면 되지 않나." 이 생각이 들면 끝이다. 알고 있다. 근데 생각이 들었다. "10분만. 타이머 맞추고." 핸드폰을 들었다. 타이머 10분. 시작. 침대로 갔다. 누웠다. 이불을 덮었다. 노트북에서 강의 소리가 들린다. "...그래서 이 부분이 중요한데요..." 중요하구나. 근데 눈이 감긴다. "10분만. 10분 후에 일어나서 다시 본다." 눈을 감았다. 다음날 아침 알람이 울렸다. 7시. 일어났다. 책상을 봤다. 노트북이 켜져 있다. 화면보호기가 떠 있다. 핸드폰을 봤다. 타이머가 7시간 전에 울렸다. 못 들었다. 노트북을 깨웠다. 인프런 화면이다. "이 영상이 도움이 되셨나요?" 팝업이 떠 있다. 강의는 끝까지 재생됐다. 나는 10분 보고 잤다. 진도율을 봤다. 14%에서 15%가 됐다. 1% 올랐다. 오늘 출근하면 또 선배한테 useEffect 질문 들어올 것 같다. 모른다고 해야 한다. 또. 씻으러 갔다. 거울을 봤다. "오늘 저녁엔 진짜 본다." 어제도 했던 말이다. 그제도 했다. 27만원의 무게 출근길 지하철이다. 선 채로 간다. 핸드폰으로 인프런 앱을 켰다. 내 강의 목록을 본다. 진도율들을 본다. 계산했다. 평균 진도율 11.75%. 총 결제금액 27만원. 본 만큼 나누면 약 3만원어치 봤다. 24만원이 날아갔다. 아니다. 아직 안 날아갔다. 강의는 거기 있다. 내가 안 본 것뿐이다. "오늘은 진짜 본다." 옆 사람이 쳐다본다. 혼잣말했다. 회사 도착했다. 9시 8분. 자리에 앉았다. 슬랙을 켰다. 선배가 멘션을 날렸다. "@이신입 어제 말한 거 useEffect로 처리 가능할 것 같은데 한번 해볼래요?" 심장이 뛴다. "네 해보겠습니다." 검색했다. "useEffect 사용법". 또. 어젯밤 10분 들은 강의가 떠오른다. 뭐라고 했더라. dependency array가... 뭐라고 했지. 기억 안 난다. 유튜브를 켰다. "useEffect 5분 정리". 영상을 봤다. 5분짜리는 본다. 안 졸린다. 이해했다. 코드를 짰다. 돌아간다. PR을 올렸다. 선배가 approve 했다. "굿!" 기분이 좋다. 근데 생각한다. '어젯밤에 10분만 더 봤으면 유튜브 안 찾아봐도 됐을 텐데.' 오늘 저녁 계획 점심시간이다. 편의점에 갔다. 삼각김밥 두 개. 2600원. 먹으면서 생각한다. 오늘 저녁 계획. '퇴근하고 씻고. 밥 먹고. 바로 책상 앞에 앉는다. 침대는 쳐다도 안 본다. 1시간 본다. 무조건.' 동기한테 카톡이 왔다. "너 요즘 공부 어떻게 해?" "강의 듣는데 잘 안 돼ㅠ" "나도ㅠㅠ 퇴근하면 너무 피곤해" "인정... 근데 해야 하는데" "ㅇㅈ... 주말에 하자" 주말. 토요일. 11시에 일어난다. 점심 먹는다. 오후 2시. '저녁 먹고 하지.' 저녁 먹는다. 7시. '소화 좀 시키고.' 9시. '내일 하자.' 일요일도 똑같다. 알고 있다. 주말에 안 한다는 거. 그래도 말한다. "ㅇㅇ 주말에 몰아서 하자" "ㅇㅋㅇㅋ" 안 될 거다. 우리 둘 다. 삼각김밥을 다 먹었다. 편의점 커피를 샀다. 1500원. 오늘 세 번째 커피다. 자리로 돌아왔다. 오후 업무 시작이다. 선배가 또 말했다. "신입아 이거 보면 state 관리 로직이..." 모르는 말이 나온다. 고개를 끄덕인다. "네네." 퇴근까지 5시간. 오늘은 정시 퇴근이다. 6시. '오늘은 진짜 공부한다.' 어제도 한 생각이다. 그저께도. 내일도 할 것 같다.인프런 강의가 14개다. 총 금액 60만원. 평균 진도율 9%. 오늘도 10분 볼 거다. 내일도.