첫 회사 생활
4학년 1학기에 졸업작품을 마치고 현업을 경험하고 싶어 인턴을 지원했다. 그 때 당시에는 아직 세세한 직무를 정하지 않아서, 평소에 관심 있던 백엔드와 데이터엔지니어 두 분야에 지원했다. 둘 중 더 좋은 조건의 인턴을 붙게 된다면 해당 직무를 경험해보자는 생각이였다. 지원은 많이 했지만, 코테 준비가 미흡해서 면접까지 간 회사는 거의 없었다. 코테를 보지 않는 회사 중 두 곳을 면접을 보게 되었는데, 첫 번째 회사의 면접 경험은 정말 최악이었다. 두 번째 회사의 면접은 정말 마음에 들었다. 내가 했던 프로젝트에 대해서 상세하게 질문이 들어왔고, 꼬리에 꼬리를 무는 질문이 많았다. 면접을 하면서도 내가 부족한 부분이 무엇인지 더 공부해야할 부분들을 알게 되는 신기한 경험을 하게 되었다. 면접을 진행하면서 모르겠다고 답변했던 것들 투성이여서 그 때 당시 내 현주소도 알게 되면서 조금 부끄러웠던 것 같다. (졸업작품을 막 끝내고 더닝크루거의 우매한 봉우리에 위치 해 있었던 것 같다…)
1주일 뒤에 합격 통지를 받았고, 데이터엔지니어 챕터의 인턴으로 합류하게 되었다. 굉장히 설레면서도 무서웠다. 할 수 있는 것은 야매로 프로젝트를 했던 경험이 전부인데, 현업에 뛰어들어 내가 1인분 역할을 할 수 있을지 정말 미지수였다. 하지만, 평소에 궁금했던, 현업에서는 코딩을 어떻게 하는지, 어떤 프로젝트들을 맡아 진행하는지, 팀원들간의 의사소통은 어떻게 하는지 등등… 을 해결할 수 있어서 신나기도 했다.
좌절의 연속
인턴 생활을 하면서 내 자신이 프로그래머로서 너무나도 부족한 사람이구나를 여러번 깨달았다.
첫번째, 업무를 진행하기 위해서 환경세팅을 하는 모든 것이 어려웠다. 나는 R로 작성되어 있는 ETL 레거시 파일들을 python 으로 migration 하는 업무를 맡았다. Docker를 사용해서 python 개발 환경을 구축해야 했고, git-secret 등록, git-secret을 등록하기 위해서 GPG Key 생성, SSH Key 생성, AWS MFA 설정 등등… 사용 방법이 작성되어 있는 문서를 봐도 쉽게 따라할 수 없는 것들이였다.
두번째, 챕터내의 전반적인 개발 프로세스를 따라하는 것이 어려웠다. 개발자들은 소통을 위한 tool을 굉장히 많이 사용하고 있었다. Slack 부터 사용해서 Notion, Jira, Ally, Github 등등… Slack을 통한 간단한 메세지와 Notion을 통한 문서화는 어렵지 않았지만, 새로운 task를 부여 받았을 때 Jira로 관리하는 것이 뭔가 어색하기도 해서 어렵게 느껴졌다. Jira를 사용할 때 문서를 작성하는 것도 어색했던 것 같다. 그리고 이러한 소통을 하면서 사용하는 단어들(예를들어 에픽, man month, OKR 등등…) 또한 처음 들어본 단어들이 많아서 의사소통을 하면서 처음에 적응하기 쉽지 않았다.
세번째, 사내에 다양한 세미나에 참여했는데, 반 이상은 이해하지 못했다. 가장 크게 좌절했던 부분이다. 다른 팀원들은 세미나 주제에 대해서 일정 시간동안 문서를 읽고 다양한 의견들을 서로 주고 받는데, 나는 문서를 읽으면서도 이해하지 못하는 것들이 태반이였고, 당연하지만 여러 의견들도 나누지 못했다. 여기서 나는 이론적으로도 실무적으로도 너무나도 부족한 개발자라는 것을 뼈저리게 느꼈다. 예를들어 우리 DE 챕터에서는 PostgreSQL을 사용했는데, 세미나 주제가 PostgreSQL의 인덱싱 알고리즘이였다. PostgreSQL 에서 인덱싱에 사용되는 여러 알고리즘들을 소개하고, 해당 방법들이 어떤 데이터에서 유용한지에 대한 공식 도큐멘테이션을 읽고 서로 의견을 나누는 세미나다. 하지만 나는 ‘인덱싱’ 이라는 개념 조차도 정확히 알고있지 못하는 상태였다.
마지막은 코딩이다. ETL을 작성하면서 python pandas를 가장 많이 사용하였는데, 코드 리뷰를 받으면서 내가 알지 못하는 문법들이 굉장히 많았고, 프로그램의 속도에 관해서 처음으로 고민을 시작하게 됐던 것 같다. Unittest를 작성하면서도 모르는 개념들 투성이였다. R로 작성되어 있는 코드를 실행하면서 실행결과를 비교해가면서 migration 했는데, 코딩 속도도 굉장히 만족스럽지 못했고, Terminal 안에서 파일들을 열고 수정하는 부분들도 부족함을 많이 느꼈다. <- 이 부분에 대해서 얘기하고 싶은 것이 하나 있는데, 같은 팀원이 했던 얘기가 굉장히 인상 깊었다. “GUI 툴로는 사용자가 원하는 만큼 접근할 수 없다. 프로그램에 컨트롤 당하면 안되고 프로그램 위에서 컨트롤 할 줄 알아야 한다.” GUI 툴에서 지원하는 기능에 너무 기대지 않고 직접 해당 기능들을 만질 수 있어야 된다는 의미 같다.
어깨 너머로 배운 것들
좌절도 많이 했지만, 독학으로는 배우지 못했던 것들을 어깨 너머로 많이 배운 것 같다. 내가 맡았던 업무에 대한 프로세스를 간단히 얘기해보자면, 레포 세팅을 하면서 webhook과 git-secret, AWS, GPG 를 secret action에 등록해준다. Docker로 해당 task의 환경을 세팅해주고, Dockerfile을 빌드하기 전에 AWS ECR 레포와 DB 환경 변수를 추가해주고 빌드를 진행한다. ETL과 Unittest를 모두 작성하면 해당 파일에 lint를 적용해 일정 점수 이상을 받게 되면 black 과 isort로 한번 더 파일을 정리해준다. 이후에 work branch 에서 test branch로 merge하게 되면, Git Action에서 CI/CD가 자동으로 돌고 AWS ECR에 생성했둔 레포에 해당 ETL 파일의 이미지가 저장된다. 해당 이미지를 가지고 Airflow에 Dag를 작성해 배포해준다.
ETL 프로세스에 대해 전반적으로 배울 수 있었던 것 같다. 추가적으로 공부하고 싶은 부분이 있다면, ETL과 unittest 작성 부분을 제외하고 나머지 모두 다이다. 나 혼자서 CI/CD를 자동으로 구축해보고 싶고, Airflow를 구축해서 자동으로 배포도 해보고 싶다. 또한 Dockerfile을 만들어 python 개발 환경을 구축해보고 싶다.
위의 것들은 개인 프로젝트로 진행해볼 예정이다! 위의 것들을 적용시키기 위한 좋은 아이디어를 생각중이다…
또한 팀내 다양한 문서와 세미나를 통해 데이터엔지니어가 알고 있어야할 개념들을 많이 알게 되었다. 입사하기 전에는 데이터웨어하우스의 개념조차도 몰랐었던걸 비교하면 굉장히 다양한 개념(딱 개념 수준정도만…)을 알게 된 것 같다.
앞으로의 방향성
어쩌다보니 다음 목적지도 데이터엔지니어로 정하게 됐다. 인턴을 하면서 부족했던 CS 지식들은 독학으로 채워가고 있다. 어느정도 CS 공부가 마무리 되면(공부에 마무리는 없지만…) 개인 프로젝트를 진행하면서 인턴 생활을 하면서 직간접적으로 배웠던 것들을 직접 적용해볼 생각이다. 또한 데이터엔지니어 과정의 국비교육도 수강할 계획에 있다. 앞으로 신입 데이터엔지니어가 되기 위해 필요한 지식들을 하나씩 쌓아가면서 든든한 데이터엔지니어가 되어보겠다.
댓글남기기