728x90
반응형

 

AI Research Engnieer로 일하게 된지 어느덧 햇수로 5년차가 된 시점에서 문득 주니어와 시니어에 대한 차이는 무엇일까? 라는 궁금증이 생겼다. 그리고 나는 아직 주니어에 속할까, 시니어로 접어드는 중일까에 대한 의문과 혹은 그 중간 단계는 없는걸까? 라는 생각이 들었고, 이와 더불어 앞으로의 성장 포인트는 무엇일지 파악하기 위해 "AI Research Engineer 성장 포인트" 라는 글을 작성하게 되었다. 

 

처음에 주니어와 시니어의 차이가 뭘까 생각해보다가 구글 검색창 및 여러 커뮤니티에 쳐서 나온 답은 아래와 같은 것들이 있었다.

젊으면 주니어, 늙었으면 시니어 (ㅋㅋ)
주는 것만 하면 주니어, 시키기 시작하면 시니어
똥을 싸면 티가 난다 주니어, 똥을 싸도 남이 싼 것처럼 할 수 있다 시니어 
내가 코딩한게 돌아갈까 남들이 의심하면 주니어, 내가 의심하면 시니어 (오...)
시니어 특, 자기는 지금도 주니어라고 함 

 

무슨 느낌인진 알겠다. 물론 이런 이야기 외에 주니어와 시니어 사이에 중니어(=미들급)가 존재하는 회사도 있었고, 연차로 주니어와 시니어를 나누는 기준도 있었다. 일반적인 대기업이나 중소기업에서는 10년차 이상을 시니어(차, 부장급)라고 지칭하고 있었고, 전통적인 IT기업이나 스타트업에서는 5년차 또는 7년차, 10년차 등 기준들이 애매모호했다. 개인적인 생각이지만, N년 차를 시니어라고 한다면, N년 안에 '어떤 경험'을 했고, '어떤 노력'을 했느냐가 차이를 만드는 것 같다. 그래서 주니어와 시니어를 구분하는데는 연차는 의미가 없는 것 같다. 

 

이 글에서는 모든 엔지니어 직무에서 통용되는 주니어 및 시니어 엔지니어의 특징들과 최근 알게 된 스태프 엔지니어라는 역할을 설명한다. 그리고  나와 같은 고민하는 분들에게 조금이나마 도움이 되기를 바라면서 AI Research Engineer 직무에서 시니어로 성장하기 위해 어떤 역량이 필요한지 다년간 생각했던 것, 경험했던 것 그리고 읽었던 책 내용 위주로 정리해보았다.

 

 

 

 

주니어 및 시니어 엔지니어의 특징 

 

먼저 주니어 엔지니어와 시니어 엔지니어의 특징은 아래와 같다. 본인이 아직 주니어 엔지니어인지 시니어 엔지니어인지 헷갈릴 때는 시니어 엔지니어의 특징 중에서 아닌게 몇개나 해당되는지 체크해보면 자신의 위치가 어디쯤인지 파악하는데 도움이 될 것 같다. 주니어와 시니어 엔지니어의 특징을 동시에 갖고 있다면, 중니어 쯤이 아닐까 싶다. 참고로 아래 특징들은 주니어와 시니어를 구분하는 수 많은 특징들 중 대표되는 몇 가지만을 적어놓은 것이다. 

 

주니어 엔지니어 특징 

 

  • 중형에서 대형 기능까지 독립적으로 완성 가능 
  • 작은 문제부터 시작해 점차 범위를 넓혀가면서 일할 수 있음 
  • 팀에서 기술 리드나 다른 팀원이 정의한 일을 수행함
  • 프로젝트를 단독으로 맡기면 불안함
  • 일을 맡길 수는 있으나 혼자서 단독으로 결정하기에 어려워 가끔 상위자의 판단이 필요함 

 

시니어 엔지니어 특징 

 

  • 대규모 프로젝트를 높은 수준의 생산성으로 설계, 세분화 및 완료할 수 있음
  • 프로젝트 진행 시 포인트만 짚고 넘어간 다음 메인 업무에 집중함
  • 프로젝트를 360도 관점으로 볼 수 있는, 큰 그림을 보는 직관력 및 통찰력이 있음 
  • 현재 갖고 있는 시스템을 구조적으로 발전시킬 수 있는 능력이 있음
  • 별도의 가이드 없이 스스로 기존 문제를 능동적으로 발견하고 솔루션을 제공함
  • 동료에게 구체적이고 실행 가능한 피드백을 제공함
  • 팀 내 주니어 엔지니어의 성장을 이끌 수 있는 실력과 리딩 능력이 있음
  • 팀에 속한 다른 엔지니어에게 의견을 제안하기 시작함
  • 개인의 성과 뿐만 아니라 팀의 성과를 생각 할 줄 앎
  • 인적 자원 관리 업무와 팀 업무 조율 등의 시간이 많아짐

 

 

 

 

스태프 엔지니어

 

주니어 엔지니어와 시니어 엔지니어의 차이는 크게 나눠보자면, 프로젝트를 진행하는데 있어서 개인의 역량이 어느정도 인지, 주변 동료의 성장을 이끌어 낼 수 있는 역량이 있는지, 팀과 관련된 업무를 어느정도 맡고있는지에 따라 달라지는 것 같다. 특히나 시니어 엔지니어는 '관리자' 측면의 성향이 강하다. 이 영향력은 본인이 속한 팀에 한정되는 경우가 있을 수 있다. 그래서 개발 업무도 업무지만, 인적 자원 관리와 팀 업무 조율 등의 업무 비중이 늘어나게 된다. 물론 그 비중을 잘 조절 할 수 있다면, 관리자 측면에서도 성장할 수 있다는 장점이 있지만, 비중을 조절하지 못하는 환경에 놓여져 있다면, (개개인 성향에 따라 다르겠지만) 대부분 익숙하지 않은 업무 등으로 인해 성과를 내기 어려운 상황에 직면 할 수 있다. 그래서 당시 해외에서 여러 기업들이 이런 문제를 해결하기 위해 다양한 시도를 해왔는데, 그 과정에서 탄생한 역할이 '스태프 엔지니어'이다. 

 

스태프 엔지니어에 관련된 내용은 책 '스태프 엔지니어'에서 참고하였는데, 관심 있다면 한번 쯤 읽어보는 것을 추천 드린다. 스태프 엔지니어는 다음과 같은 역할을 수행한다.

 

  • 기술적 방향의 설정과 수정
  • 스폰서십과 멘토십의 제공
  • 조직적 의사결정에 엔지니어링 관점을 주입하는 일
  • 새로운 해결책 모색
  • 그리고 탄야 레일리가 '접착제 역할 하기'라고 부르는 일 등을 수행 
    • 접착제 역할 : 눈에 띄지 않더라도 팀이 계속해서 발전하고 완료한 작업을 내보내는 데 필요한 작업을 하는 것 

 

스태프 엔지니어는 '관리자' 측면에서의 성장 보다는, '기술' 측면에서의 성장이 가능한 직무라고 할 수 있다. 아직 한국에서는 생소한 개념이지만, 엔지니어라면 커리어 성장 측면에서 관심있게 봐야할 직무이다. 그렇다면 이제 AI Research Engineer 직무는 무엇이며, 시니어로 도약하기 위해 갖추어야 할 역량은 무엇인지 알아보자. 

 

 

 

 

AI Research Engineer 의 성장 포인트 

 

우선 아시는 분들도 많겠지만, 모르시는 분들을 위해서 AI Research Engineer 직무를 간단히 설명드리자면, AI 기술을 연구 및 개발하는 직무이다. 회사마다 조금씩 다르긴 하겠지만, 대부분의 AI Research Engineer로 일하는 사람들은 모델의 성능을 1%라도 개선하고자 하는 노력과 함께 원하는 성능이 나올 때 까지 모델을 고도화 하고, 모델의 방향성 설정을 위한 연구 동향 조사와 최신(State-of-the-art) 모델의 프로토타입핑, 모델 성능에 대한 메트릭 정의 및 평가 그리고 원하는 시스템에 배포할 수 있도록 모델 최적화를 수행하는 일을 하게 된다. 그렇다면 주니어에서 시니어 AI Research Engineer가 되려면 어떻게 해야할까?

 

본인이 연구중인 분야 SOTA(State-of-the-art) 꾸준히 따라가기 

물론 SOTA 모델 성능이 좋다 할지라도, 현재 진행중인 회사 프로젝트에 핏이 맞지 않으면 적용 못할 수도 있다. 하지만 SOTA에 적용된 방식들을 Follow Up 하다보면, 본인이 현재 풀고자 하는 문제에 대한 힌트 또는 Cue를 얻을 수 있고, 연구중인 분야가 어떻게 흘러가는지 파악할 수 있게 된다. 즉 연구의 전체 흐름을 파악 할 수 있게 되고, 서베이 논문을 읽지 않더라도 연구 동향이 머리속에 어느 정도 정리된다. 그러면 지금 내가 하고 있는 연구가 어디쯤에 위치하고 있는지 알게되고, 어떤 점이 부족한지 개선점도 보이고, 더불어 앞으로 어떤 방향으로 나아가야하는지 고도화 방향을 잡는데 도움이 된다. 즉, 현재 연구에 대한 인사이트와 통찰력을 얻을 수 있고, 기술적 방향 설정에 도움이 된다. 

 

구성원들 성장 시킬 수 있는 능력 갖추기 

시니어는 구성원들이 성장할 수 있도록 어렵고 모호한 문제들을 정의하고, 이를 올바른 방향으로 풀어나갈 수 있도록 이끌어야한다. 그러려면 먼저 솔선수범하여 배울점 많은 사람이 되어야 하고, 구성원들이 성장할 수 있도록 도울 수 있는 사람이 되어야한다. 배울점 많은 사람이 되려면 기술적 전문성을 포함한 실력은 물론이고, 소프트 스킬(또는 소프트 기술)을 갖추면 좋다. 소프트 스킬은 리더십, 지적 겸손, 협동, 적응력과 같은 자질을 중시한다. 실제로 구글에서도 이러한 항목들을 채용시 중요하게 여기고 있으며, 이 중 가장 중요한 자질은 지적 겸손이 아닐까 싶다. 임백준의 대살개문 책에서는 지적 겸손은 지적 '능력'이며, 이 능력 중 하나는 타인의 아이디어를 인정 할 수 있는 능력이고, 다른 하나는 실수로부터 배우는 능력이라고 한다. 프로그래머들은 기술적인 논쟁을 할 때 자신의 잘못을 인정하는 것을 힘들어한다고 한다.

 

그 다음 중요한 것은 구성원들의 성장을 돕기 위해서 올바른 피드백을 주는 것이 중요하다. 물론 내가 아닌 다른 사람의 성장을 돕는다는 것은 매우 어려운 일이지만, 개선이 필요하다고 생각될 때는 주저하지 않고 피드백을 주자. 쏘카 CTO 류석문님의 리더의 생각이라는 책에서 본 내용인데, 동료에게 피드백을 줄 때는 단순히 맞다 또는 틀리다가 아닌 상대가 한 행동에 대한 객관적인 사실만 전달하여 단점을 인지할 수 있도록 해야한다고 한다. 감정이 섞인 주관적인 판단이 가미된 피드백을 주게 될 경우 감정만 전달될 확률이 높다. 또한 문제를 해결하기 위한 해결 방법을 같이 고민해보면 좋고, 잘한 점이 있다면 진심을 담아 칭찬 하는 것도 좋다. 그리고 피드백을 주지만 말고, 피드백도 받을 때 지적 겸손을 발휘하여 이를 감사히 여기고, 한 단계 씩 더 성장하자.  

 

업무 우선순위 올바르게 결정하기

AI Research Engineer는 모델을 0부터 100까지 즉, 처음부터 만들어야 된다거나, 기존 모델을 개선하거나, 현재 모델에서 원하는 성능이 나오지 않거나 또는 어떤 기능을 기존 성능에 영향을 주지 않고 추가해야 하는 등 업무를 수행한다. 업무를 수행하다 보면, 여러가지 시도가 필요한 실험 목록들이 생기고, GitHub에 올려져 있는 모델이 정말 성능이 좋은지 검증도 필요하고, 현재 방식에서 이런 방법을 적용해보는 것은 어떤지 등 여러 Task 들이 필요하다. 이 때 업무 우선순위를 올바르게 결정하는 것이 중요하다. 아래 차트는 아이젠하워의 시간관리 매트릭스다. 아마도 살면서 이 매트릭스를 한번쯤 마주쳤으리라 생각한다. 업무 우선순위를 올바르게 결정하기 위해 이 매트릭스를 참고 삼아 업무 우선순위를 배정하는 것이 좋겠다. 또한 현재 상황이 '긴급'인지, 아닌지 판단하는 능력과 이 Task가 '중요'한지, 아닌지 판단하는 능력도 필요하다. 그리고 긴급하지도 않고, 중요하지도 않은 일이라 잠시 temp 공간에 두었던 일을 적시에 꺼내는 일도 중요하다.

 

 

전체 파이프라인 이해하는 능력 기르기 

시니어는 '나무'가 아닌 '숲'을 볼 수 있는 능력이 필요하다. 즉, 전체 파이프라인을 이해하는 능력이 필요하다. 단순 PyTorch 나 TensorFlow 만을 다루는 것이 아니라 모델 개발 외에 필요한 프레임 워크와 라이브러리에 대한 이해도가 높아야 전체 파이프라인에 대한 이해가 이루어지고, 숲을 컨트롤 할 수 있는 능력이 된다. 틈틈히 시간을 내어 본인의 메인 기술 스택 외에 다른 기술 스택을 공부해두는 것이 좋겠다. 중요한 것은 여기서 길러야할 다른 기술 스택이란 개인적으로 배우고 싶어 하는 기술이나 접근법이 아닌 자신이 속한 조직에서 실제 수요가 있는 파이프라인과 관련된 기술을 뜻한다. 

 

현재 프로젝트에서 문제점 정확히 짚어내고 분석하기 

시니어는 기존보다 높은 수준에서 더 많은 것을 결정해야하기 때문에 프로젝트의 목표와 Align을 맞춰 분석하고, 문제점을 정확히 짚어내는 능력이 중요하다. 분석 시 단순 Metric을 보고 평가하는 것이 아니라 핵심 Trade-off 및 Side-effect를 정확히 분석해야한다. 이러한 능력은 프로젝트를 진행하면서 '경험치'에 의해 쌓이게 된다. 또한 현재 연구하고 있는 프로젝트나 모델에서 주어진 문제에 대한 적절한 방법론을 타당한 근거에 기반하여 선택하는 능력과 관련된 내용을 빠르게 검증하는 능력도 필요하다. 더불어 충분한 시간이 허락된다면, 현재 프로젝트의 문제점 뿐만 아니라 미래에 발생 가능한 문제점들을 미리 도출해서 먼저 해결 한다면 금상첨화다. 

 

 

 

 

 

 

 

 

참고자료 1 : https://blog.devgenius.io/junior-vs-senior-vs-staff-engineer-eaecea01440c

 

Junior vs. Senior vs. Staff Engineer

Career progression is an evergreen topic for software engineers because it directly impacts income. In this note, I am going to share my…

blog.devgenius.io

 

참고자료 2 : 스태프 엔지니어, 길벗 출판사

참고자료 3 : 임백준의 대살개문, 한빛미디어

참고자료 4 : 리더의 생각, 로드북 

 

728x90
반응형