회사가 주니어와 함께 성장하기 - 주니어의 필요성
개요
얼마전에 레딧에서 주니어가 당신의 조직에 필요한 이유에 대해서 대략 살펴봤는데
굉장히 공감이 되어 정리하고자 한다.
주니어 개발자를 단순히 저렴한 인력으로만 보는 시각이 있을 수 있지만,
그 이상의 이유로 모든 조직에서 필요하다고 생각한다.
1. 조직 시스템의 개선 촉진
일반적으로 주니어는 비용이 저렴하다는 이유로 고용된다고 생각할 수 있다.
하지만 주니어를 고용하려면 그들을 교육하고 성장시킬 체계와 프로세스가 필요하다.
(아무리 작은 규모의 회사라도 아무것도 모르는 신입에게 일을 시킬 수는 없으니)
이를 통해 조직은 내부 시스템을 점검하고 고도화할 기회를 얻게 된다.
당장 나도 온보딩 문서 만들면서 정리한 주요링크, 배포 프로세스 등을 아직도 활용하는중..
2. 최신 기술 도입의 촉진
주니어가 조직에 들어오면, 이들이 학부 시절이나 취업 준비 과정에서 배운 최신 기술들이 조직 내에서 다시 한번 논의되고 활성화된다.
회사는 항상 최신 기술로 변화할 수 없지만, 주니어가 기존 레거시 시스템을 이해하지 못하는 그 '신선한 시각' 덕분에 회사 내에서 기술 변화의 촉매 역할을 할 수 있다.
예를 들어, 우리는 Next.js에서 타입스크립트를 고도화하여 사용하고 있었지만, 각 페이지의 Query를 타입으로 관리하지 못하고 있었다. 그냥 각 페이지의 컨테이너에서 useSearchParams로 쿼리를 뽑아서 쓰는 방식.
이때 신입이 "이번 주말에 밤새서라도 이 부분을 정리하겠다. 너무 보기 불편하다"고 제안했다.
이때 Zod를 도입하였고, Zod를 통해 각 페이지에서 사용할 타입을 강제할 수 있었다.
그리고 이후 데이터 텍소노미를 구조화 하기 위한 공통 함수 작성에도 Zod를 활용하여 편리하게 타입 관리를 할 수 있었다.
Best Practice - 정적 타입 분석을 통한 데이터 텍소노미 구조화하기
Best Practice - Next.js useSearchParams 는 안쓰는게 좋다
3. 주니어의 의욕과 변화에 대한 적극성
주니어는 변화와 혁신에 대해 더 적극적인 경향이 있다.
반면 시니어는 보수적일 수밖에 없다.
예를 들어, 어드민 시스템을 Vue에서 React로 마이그레이션하는 문제에 대하여, 시니어는 회사 리소스를 고려하여 신중한 결정을 내린다.
"지금 프론트엔드 개발자들이 이걸 다 처리할 수 있을까?"
같은 현실적인 제약을 고민하는 것이다.
반면, 주니어는
"React가 더 편리하고 널리 쓰이는데, 우린 왜 Admin에 Vue를 쓰는거야? 바꾸자!"
라며 몇 일 밤을 새워서라도 바꾸려는 의욕을 보인다.
물론 시니어의 관점이 옳다고 할 수 있지만, 주니어의 이런 혁신적인 사고는 때로 시니어들에게 긍정적인 자극을 줄 수 있다.
또한 주니어가 제기하는 의견을 방어하고 설명하는 과정에서 시니어는 자신들의 논리를 고도화하며, 서로 동반 성장하는 결과를 가져온다.
4. 시니어와의 소통 및 교육
시니어 개발자들끼리는 서로 잘 알고 있는 부분이 많기 때문에 대화가 간단할 수 있다.
A: "hey, 공룡에 이니시스 붙였어?"
B: "아 맞다 그거 아직 PR안올림"
A: "그거 익룡앱에서도 써야한대"
B: "아 그럼 컴포넌트로 빼야겠네 오늘 오후까지 수정해서 PR올릴게"
정도로도 충분한 경우가 많다.
이 짧은 대화에서 시니어 개발자들은 '공룡'과 '익룡'이라는 프로젝트명, '이니시스'라는 결제 시스템, PR(Pull Request)의 개념, 그리고 컴포넌트화의 필요성 등을 별도의 설명 없이 즉각적으로 이해하고 있다.
반면, 주니어 개발자와의 대화는 훨씬 더 상세한 설명과 맥락 제공이 필요하다:
시니어: "공룡 앱에 이니시스 결제 모듈 연동 작업을 해야 해."
주니어: "아 네 무슨 작업을 해야하나요?"
시니어: "일단 이니시스 결제 연동은 모바일 결제와 데스크톱 결제 각각 분기처리해야해. 모바일의 경우 서버에 결제 정보 불러오는 api를 별도로 호출해야하고, 데스크톱의 경우 결제id와 결제수단, 가격과 수량만 서버에 form으로 보내면 돼. 기본적인 건 레거시 코드에서 참고하면 돼. 근데 로컬환경에서는 테스트 안되니까 개발서버에 올려서 테스트 해"주니어: "왜 로컬환경에서는 테스트가 안되나요?"
시니어: 결제 완료 처리 시 이니시스에 등록된 도메인으로만 리다이렉트 할 수 있거든. localhost는 등록할 수 없어. 그리고 이 결제 모듈은 우리 익룡 서비스에서도 갖다 쓸 수 있도록 재사용 가능한 컴포넌트로 만들어줘.주니어: 익룡앱은 네이티브 앱 아니에요?
시니어: 어. 결제쪽은 웹뷰를 통해 개발되어 있기 때문에 웹뷰로 만든 부분은 우리가 개발하고 관리해야해. 브릿지를 사용하여 앱에서 우리 함수를 호출 할 수 있게 인터페이스 구현해야하니까 리다이렉트는 별도의 함수로 빼줘.
이 대화에서 볼 수 있듯이, 주니어 개발자와의 소통에는 다음과 같은 특징이 있다:
- 상세한 설명: 시니어 개발자는 작업의 세부 사항을 단계별로 설명해야 한다. 이 과정에서 시니어는 자신의 지식을 체계화하고 명확하게 전달하는 능력을 기를 수 있다.
- 배경 지식 제공: 주니어가 모를 수 있는 개념(예: 이니시스, 웹뷰, 브릿지 등)에 대해 추가 설명이 필요하다. 이는 주니어의 학습을 돕고, 동시에 시니어가 해당 개념을 더 깊이 이해하는 계기가 된다.
- 질문에 대한 대응: 주니어의 질문("왜 로컬환경에서는 테스트가 안되나요?", "익룡앱은 네이티브 앱 아니에요?")에 답하면서, 시니어는 시스템의 제약사항이나 설계 결정에 대해 다시 한번 생각해보게 된다.
- 실무와 이론의 차이 설명: 주니어가 학교나 책에서 배운 내용과 실제 업무 환경의 차이(예: 네이티브 앱에서 웹뷰 사용)를 설명하면서, 시니어는 실무 경험의 가치를 전달하고 주니어는 실제 개발 환경을 이해하게 된다.
이러한 과정은 단순히 지식 전달에 그치지 않는다.
코드 리뷰에서도 주니어가 작성한 코드가 비효율적일 경우, 왜 그런지 구체적으로 설명할 수 있는 논리와 시간이 요구된다.
이 과정에서 시니어 개발자는 논리적인 사고와 설명 능력을 키우고, 주니어는 실질적인 개발 지식과 함께 코드 품질 향상의 중요성을 배우며 성장할 수 있다.
결과적으로, 이러한 상호작용은 조직 내 커뮤니케이션과 지식 공유를 더욱 활성화시킨다.
주니어의 존재가 시니어 개발자들로 하여금 자신의 지식을 명확히 언어화하고 체계화하도록 유도하며, 이는 전체 팀의 지식 수준을 높이는 데 기여한다.
또한, 주니어의 신선한 시각과 질문은 때로 기존 시스템이나 관행에 대한 재고의 기회를 제공하여 조직의 기술적 발전을 촉진할 수 있다.
5. 주니어 없는 조직의 한계
주니어가 없는 조직은 시니어들로만 구성된 팀이기에 변화나 혁신에 대한 필요성을 느끼지 못하고, 점점 더 보수적으로 변할 수 있다.
주니어가 없는 조직은 성장을 멈출 가능성이 크다.
주니어의 존재는 변화에 대한 자극제가 되고, 조직의 발전을 위해 필수적이다.
6. 결론
결국, 성장하는 조직에서 주니어 개발자는 반드시 필요하다.
주니어의 혁신적이고 신선한 시각이 시니어들의 보수적인 경험과 결합되어 조직의 성장을 도울 수 있다.
주니어와 시니어가 함께 상호 보완적으로 성장하는 환경이 조직의 발전을 이끄는 핵심 요소가 될 것이다.
주니어가 마주하게 되는 레거시 코드에 대한 시각은 [[KnowledgeBase/Blog/레거시 코드의 아름다움 - 레거시 존중의 필요성]]을, 이를 경험하며 성장하는 환경인 모노레포 도입기는 [[KnowledgeBase/Blog/모노레포를 실무에 적용한 뒤 한달. 후기]]를 참고할 수 있다.
댓글
첫 번째 댓글을 남겨보세요.