Showing Posts From

면접

면접 때 '네' 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분 뒤 답장 왔다. "ㅇㅈ"면접 때 '네'는 거짓말이 아니라 약속이었다. 지금 그 약속 지키는 중이다.