입사 첫 주에 팀 슬랙 채널의 대화를 읽었다. 무슨 말인지 하나도 모르겠었다. "hydration mismatch 때문에 SSR fallback 처리 바꿔야 할 것 같아요"라는 문장에서 내가 아는 단어는 '때문에'와 '바꿔야'뿐이었다.
그 주에 나는 매일 퇴근 후에 동료들이 슬랙에서 언급한 기술 키워드를 노트에 적고 하나씩 검색했다. hydration이 뭔지, SSR에서 fallback이 왜 필요한지, mismatch는 어떤 상황에서 발생하는지. 한 가지를 이해하면 그 안에서 또 모르는 게 세 개씩 튀어나왔다. 구멍을 메울수록 구멍이 더 많이 보이는 기분이었다.
그래도 괜찮았다. 아직은. 신입이니까 모르는 게 당연하다고 스스로를 달랠 수 있었으니까. 문제는 그다음 달부터 시작됐다.
옆자리의 PR
입사 한 달쯤 됐을 때, 옆자리 동료의 PR을 봤다. 같은 팀이니까 코드 리뷰에 참여해보라는 팀 리드의 권유 때문이었다. 열어보는 순간 숨이 막혔다.
Custom hook 하나로 폼 상태 관리, 유효성 검사, 서버 동기화를 전부 처리하고 있었다. 타입 추론이 자연스럽게 흘러가서 사용하는 쪽에서는 타입을 하나도 안 써도 됐다. 에러 핸들링도 깔끔했다. 나는 리뷰 코멘트를 하나도 달지 못했다. 이해하는 데만 이틀이 걸렸으니까. 내가 뭔가를 지적하거나 제안할 수 있는 수준이 아니었다.
나는 저런 코드를 절대 못 짤 것 같았다.
일주일 뒤에 기술 공유 시간이 있었다. 팀에서 돌아가면서 최근에 공부한 것이나 프로젝트에서 겪은 기술적 문제를 공유하는 시간이었다. 한 팀원이 React Server Components의 직렬화 제약에 대해 발표했다. 다른 팀원이 Suspense boundary 설계에 대해 이야기했다. 또 다른 팀원은 번들 사이즈 최적화를 위해 barrel export를 제거한 경험을 공유했다.
다들 고개를 끄덕이고 있었다. 중간중간 날카로운 질문도 나왔다. 나만 멍하니 앉아서 모르는 용어를 받아 적고 있었다.
그날 저녁, 집에 오는 지하철 안에서 생각했다. '아 나 여기 있으면 안 되는 사람인가.'
끝없는 비교의 늪
회사 안에서의 비교만으로도 충분히 힘들었는데, 바깥 세계가 더 잔인했다.
트위터를 열면 나와 비슷한 연차의 개발자가 오픈소스 프로젝트에 기여한 PR을 자랑스럽게 공유하고 있었다. 어떤 사람은 React 생태계에서 꽤 쓰이는 라이브러리의 메인테이너였다. 같은 연차. 나는 회사 프로젝트의 버튼 컴포넌트 하나 만드는 데도 쩔쩔매고 있는데.
컨퍼런스 발표 영상도 그랬다. "주니어 개발자의 성능 최적화 여정"이라는 제목에 끌려서 봤는데, 발표자의 연차가 나보다 적었다. LCP를 어떻게 줄였고, CLS를 어떻게 잡았는지 명확하게 설명하고 있었다. 나는 LCP가 뭔지 지난주에 겨우 알았다.
자괴감이라는 단어로는 부족한 감정이었다. 정확히 말하면 '나는 개발자를 하면 안 되는 사람인데 실수로 개발자가 돼버린 것 같다'는 공포에 가까웠다. 면접에서 운 좋게 내가 아는 질문만 나와서 합격한 거고, 팀에서도 곧 내 실력이 들통나면 "이 사람을 왜 뽑았지?" 하게 될 거라는 시나리오가 머릿속에서 반복 재생됐다.
그 시기에 나는 아침마다 출근 준비를 하면서 속이 울렁거렸다. 코드를 치는 것 자체가 두려웠다. 내가 작성한 코드가 리뷰에 올라가면 "이것도 모르고 이렇게 짰어?"라는 반응이 올 것 같았다. 물론 실제로 그런 리뷰를 받은 적은 한 번도 없었다. 전부 내 머릿속에서 만들어낸 시나리오였다.
시니어의 한마디
전환점은 정말 사소한 데서 왔다.
어느 날 PR을 올렸는데, IntersectionObserver를 사용해서 무한 스크롤을 구현한 코드였다. 나름 검색도 많이 하고, 여러 블로그 글을 참고해서 작성했다. threshold 옵션이나 rootMargin 같은 것도 신경 써서 넣었다. 자신 없었지만 일단 올렸다.
시니어 한 분이 리뷰를 남겼다.
"rootMargin 이렇게 쓸 수 있는 거 나도 이번에 처음 알았네요. 좋은 접근인 것 같아요."
짧은 코멘트였다. 그런데 그 한 줄을 읽었을 때 뭔가 균열이 생겼다. 그 사람도 모르는 게 있구나.
5년 차 시니어, 팀에서 기술적 의사결정을 주도하는 사람, 내가 PR을 올릴 때마다 날카로운 피드백을 주는 그 사람도 IntersectionObserver의 rootMargin을 이번에 처음 알았다고 했다. 충격이라고 하면 과장이지만, 분명히 인식의 전환이 일어나는 순간이긴 했다.
그때부터 좀 다르게 보이기 시작했다. 기술 공유 시간에 Server Components에 대해 발표하던 그 팀원 — 그 사람은 CSS 관련 질문이 나오면 은근히 말을 아꼈다. Suspense boundary를 설명하던 팀원은 상태 관리 라이브러리 논의에서는 "나는 잘 모르겠는데"를 자주 말했다.
아는 것의 총량이 다른 게 아니었다. 아는 영역이 다른 거였다.
내가 모르는 건 그 사람들이 더 많이 아는 게 아니라 그 사람들이 그 영역에 시간을 더 썼기 때문이었다. 나도 내가 시간을 쓴 영역에서는 다른 사람이 모르는 걸 알고 있었다. 다만 그걸 '당연한 것'이라고 생각해서 가치를 부여하지 않았을 뿐이다.
이건 나중에 읽은 글에서 본 개념인데, 사람은 자기가 아는 것의 가치를 과소평가하고 남이 아는 것의 가치를 과대평가하는 경향이 있다고 한다. 내가 딱 그랬다.
비교 대상을 바꿨다
깨달음이 왔다고 해서 임포스터 신드롬이 바로 사라지는 건 아니다. 머리로는 이해했는데 감정이 따라오지 않았다. 트위터를 열면 여전히 자괴감이 밀려왔고, 다른 팀원의 코드를 보면 여전히 "나는 왜 저렇게 못 짜지" 하는 생각이 들었다.
그래서 방법을 바꿨다. 비교를 안 하겠다는 건 비현실적이었다. 대신 비교 대상을 바꿨다. 다른 사람이 아니라, 6개월 전의 나.
6개월 전의 나는 useEffect의 cleanup 함수가 왜 필요한지 몰랐다. 지금은 안다. 6개월 전의 나는 TypeScript에서 제네릭을 쓸 때마다 에러가 나서 any를 갈겼다. 지금은 최소한 기본적인 제네릭 패턴은 자연스럽게 쓴다. 6개월 전의 나는 "이 컴포넌트 왜 리렌더링 되지?"라는 질문에 답을 못 했다. 지금은 React DevTools Profiler를 열고 원인을 추적할 수 있다.
이 비교는 항상 내가 이긴다. 당연하다. 시간이 흘렀으니까.
그리고 하나 더. 매달 말에 "이번 달에 새로 알게 된 것" 3개를 적기 시작했다. 거창한 게 아니다. 노션에 페이지 하나 만들어서 짧게 적는 거다.
2025년 11월
1. Next.js에서 revalidateTag 쓰면 특정 캐시만 선택적으로 날릴 수 있다
2. CSS의 :has() 선택자로 부모 스타일링이 가능하다
3. Promise.allSettled가 Promise.all보다 에러 핸들링에 유리한 경우가 있다
이게 쌓이니까 시각적으로 보인다. 내가 성장하고 있다는 증거가 문서로 남는다. 자괴감이 밀려올 때 이 목록을 스크롤 해보면 "아, 나 꽤 많이 알게 됐네"라는 감각이 돌아온다. 감정을 데이터로 이기는 방식이다.
회고까지 할 필요는 없다. 그냥 적기만 하면 된다. 3개가 안 떠오르는 달이 있으면 그때 좀 위기감을 느끼면 된다. 매달 3개도 새로 모르면 정말 정체된 거니까. 근데 실제로 3개가 안 되는 달은 거의 없었다. 의식하지 못할 뿐 매일 뭔가를 배우고 있더라.
또 다른 발견
비교를 멈추니까 예상 못 한 부수 효과가 있었다. 질문을 더 잘하게 됐다.
예전에는 모르는 걸 질문하는 것 자체가 무서웠다. "이런 것도 모르나"라는 소리를 들을 것 같아서. 그래서 혼자 2시간씩 검색하다가 결국 물어보고, 5분 만에 해결되는 일이 반복됐다. 모르는 걸 숨기는 데 에너지를 쓰고 있었다.
비교를 멈추고 나니까 "이거 모르는 게 부끄러운 게 아니라 모르면서 아는 척하는 게 부끄러운 거구나" 하는 생각이 들었다. 그래서 모르면 바로 물어보기 시작했다. "이 부분 제가 잘 모르는데 설명해주실 수 있나요?"라고. 놀랍게도 아무도 이상하게 생각하지 않았다. 오히려 "아 이거 저도 헷갈리는 부분이에요"라는 답이 돌아오는 경우가 많았다.
다들 각자의 '모르는 것'을 안고 일하고 있었다. 나만 모르는 게 아니었다.
사라지지 않는 것
솔직하게 쓰자면, 지금도 임포스터 신드롬이 완전히 사라지진 않았다.
새 프로젝트를 시작할 때마다 "이거 내가 할 수 있나?" 하는 생각이 든다. 처음 써보는 기술 스택으로 뭔가를 만들어야 할 때, 팀에서 나한테 기대하는 수준이 높아졌다고 느낄 때, 후배 개발자가 나한테 기술 질문을 했는데 바로 답을 못 할 때. 그때마다 가슴 어딘가가 서늘해진다.
근데 요즘은 그 감정을 다르게 해석한다.
그 불안이 완전히 사라지면 성장도 멈추는 거 아닌가 싶다. 내가 모든 걸 다 아는 것 같고, 어떤 프로젝트든 자신 있고, 배울 게 없다고 느끼는 상태 — 그게 오히려 더 위험한 거 아닌가. 불안은 내가 아직 성장 중이라는 신호다. 내 능력의 경계선 바깥에 있다는 뜻이고, 그 경계선이 넓어지고 있다는 뜻이다.
물론 이건 건강한 수준의 불안에 한해서 그렇다. 아침에 출근이 두렵고, 코드 에디터를 여는 것 자체가 스트레스이고, 잠을 못 이루는 수준이라면 그건 다른 문제다. 그때는 무리하지 말고 누군가에게 이야기해야 한다.
나의 경우는, 그 극심한 시기를 지나고 나서 불안의 농도가 많이 옅어졌다. 완전히 투명해지진 않았지만, 이제는 같이 갈 수 있는 정도가 됐다. "또 이 감정이네" 하고 알아채고, 6개월 전의 나를 떠올리고, 이번 달에 새로 알게 된 것 목록을 열어보고, 다시 코드를 친다.
반복이다. 화려한 해결책은 없다. 그냥 매일 조금씩, 어제보다 한 줄이라도 더 이해하면 되는 거다.
