매번 회고적인 내용의 포스팅을 작성할 때 ~~~ 회고 이런식으로 타이틀을 잡는 것보단, 특정 주제를 통해 작성하는게 더 진정성 있고 작성하기도 원할하다 생각하여 작성 방식의 변주를 준 첫번째 포스팅이다.
이번 포스팅에선 현재 팀에 조인한 지 약 6개월이 넘은 시점의 나에게 성장했을까? 에 대한 질문을 던져 잘한 점과 못한 점을 짚어보려한다.
시간의 흐름에 따라 기억에 남는 것들을 위주로 경험해갔던 일들을 작성해보고자 한다.
# 적응의 과정
당연하게도 본인의 역할과 해야할 일, 팀의 목적과 제공하는 서비스에 대한 전반적인 사항들, 어떤 방식으로 업무를 진행해야하는지 등에 대한 온보딩으로 적응의 과정이 시작됐다.
이 시기에는 팀원분들께서 지금 업무가 몰린 시기라 신경을 많이 써주지 못한 것 같다고 말씀해주시는 것이 기억 남는다.
신경을 많이 써주시지 못했다는 말씀에 대해 서운함보다 내가 더 빨리 1인분을 할 수 있도록 적응해야겠다라는 생각이 더 컸었다.
온보딩을 받으면서 느꼈던 것은 Python과 SQL 문법을 빼고는 거의 모든걸 배워야한다는 것을 알 수 있었다.
그나마 전 팀에서 사내의 툴들을 사용해봤던 것은 다행이었다.
스스로 경험이 많이 부족했고 실수로 잘못 건드리는 상황을 만들고 싶지 않았기 때문에, 실무 환경에서 무언가를 시도하기 보단 퇴근 이후 개인 컴퓨터로 샘플 프로젝트를 만들어가며 사용 방법과 대략적인 프로세스 등을 익히려고 노력했다.
적응의 과정에서 가장 도움되었고 소중했던 경험은 작성한 모듈 전반에 대해 엔지니어 분께서 코드 리뷰를 봐주셨던 것이다.
실무 경험을 쌓기 전 진행했었던 여러 프로젝트를 돌아봤을 때 본인은 제대로된 코드 리뷰라는 것을 진행해본적이 없었고, 내가 짠 코드에 대한 피드백을 하며 보완해나가는 경험에 대한 갈증은 한번도 시원하게 해결해본 적이 없었다.
엔지니어 분께서 직접 시간내주시며 진행해주셨던 코드 리뷰는 본인에게 더 뜻 깊게 다가왔고, 지금 생각해도 감사한 기억이다.
왜 이 코드를 작성했는지에 대해 질문 주시며, 자신이 코드를 작성하는 스타일과 이유에 대해 직접 예시를 들며 보여주시면서 좋은 코드를 작성하는 방법에 대해 전달받는 시간을 가졌고, 말씀주신 모든 피드백을 내 것으로 만들기 위해 메모하고 캡쳐하며 노력했다.
직접 예시를 들어주시면서 프로젝트에 만들어두셨던 유틸 함수들의 목적과 사용 방법을 훨씬 빠르게 확인할 수도 있었다.
해당 피드백을 받기 전과 피드백을 받은 후 작성한 모듈을 비교해보면, 지금 기준으론 하늘과 땅 차이로 여겨진다.
이는 한 곳에서만 작성하던 코드를 적절한 역할로 분리하고, 클래스 기반의 코드와 매직 스트링을 제거하는 방식이었다.
가장 기본적인 코드 작성에 대해서도 돌아볼 수 있는 계기가 되었고, 추후 진행하게될 업무에 이를 적용하기 위해 노력했다.
SQL에 대해서도 다시 공부하는 시기를 가졌는데, 복잡한 Join & With 절 등이 사용된 SQL 쿼리들을 변경해야하는 과정에서 이건 그냥 진행하면 안되겠다는 생각이 들어, 수백줄의 SQL 쿼리를 서브쿼리 단위로 뜯어가며 각각의 서브쿼리들의 목적과 쓰이는 방식을 이해하기 위해 노력했다.
온보딩 시기에는 테이블을 만들고 질의하는 커넥션을 Hive & Trino로 사용한다 정도로만 확인했었는데, 이게 말로만 들었던 하둡 환경에서 사용하는 도구라는 사실은 늦게서야 알게되었다.
온보딩 과정에서 테이블을 만들 때 EXTERNAL을 안붙히면 절대 안된다 라는 말씀이 아직도 기억난다. (부정의 부정)
지금 작성한 내용 말고도 실제로 처음 접하거나 처음 접한다고 해야할만한 수준의 지식과 기술 스택들이 너무나도 많았던 것 같다.
적응의 과정에서는 다양한 기술들이 업무에 어떻게 쓰는지에 초점두어 업무를 해결할 수 있는 능력을 갖추는 것에 초점을 맞추었다.
각 기술과 프로젝트 내부의 코드들에 대한 이해와 학습은 1인분을 해내고 틈틈히 시간을 내며 잡아나가야겠다 생각하며 시간을 보냈다.
4월부터 다수의 모듈을 개발하는 업무를 진행했는데, 이 시기에 코드 리뷰에서 배웠던 내용과 스스로 학습했던 지식들을 코드와 업무에 녹여내기 위한 시간을 가질 수 있었고, 그 시기 이후에 모듈 개발에 대한 업무의 이해와 적응은 마무리가 되었다고 생각할 수 있었다.
# 확장의 과정
기본적인 모듈 개발 업무에 대한 적응을 마무리하고 업무를 진행해나가면서 업무 자체에 대한 확장과 상위 업무로 확장하는 과정을 보냈다.
프로세스를 자동화하기 위한 업무의 일환으로 데이터 파이프라인을 구축해야할 필요가 존재했는데, 이를 구축하기 위한 기술 스택으로(스케줄링 목적) Airflow를 사용해야했다.
우선 Airflow 자체에 대한 이해가 부족한 수준이었기 때문에, 기존 코드와 유데미(복지 활용) 강의를 들으면서 어떻게 코드를 작성하는지, 사내 PR 방식은 어떤지부터 적응하기 위해 노력했었다.
비교적 복잡한 파이프라인은 아니였기 때문에 HQL 위주로 DAG들을 구성했다.
추가적으로, 프로세스를 자동화하는 과정에서 Slack 메시지를 각 단계별로 제공해야할 필요가 있었는데, 엔지니어 분께 가이드를 받으면서 사내에서 관리되는 API 등을 확인하고 슬랙을 붙이는 방법을 연습하며 프로세스를 개선해나갔다.
모듈과 Airflow DAG 모두 슬랙 알림을 쏘는 기능을 추가하는 과정에서, 관리의 주체가 많아짐에서 오는 복잡성과 테스트을 진행할 수 있는 환경과 코드의 중요성을 알 수 있었고, TimeZone의 차이를 미리 숙지하고 반영해야한다는 것을 배울 수 있었다.
또한, Airflow Jinja2 Template의 macro에서 execution_date가 의도와 다르게 반환되는 것들을 확인하며 쓴맛(?)을 여러번 경험했다.
현재는 스케줄링 걸었을 때 문제되거나 하는 현상은 모두 확인해서 의도치않은 실수는 더 이상 발생하지 않지만, 아직도 왜 이슈가 있는지 정확하게 이해는 못했다. (정확히는 봐도 이해하지 못했다.)
추가적으로 팀에서 운용중인 API 서버에 별개의 기능을 추가하며 Kotlin 기반의 Spring API를 개발해보는 경험도 진행했다.
모듈에 슬랙을 붙이면서, 모듈의 주요 목적은 아니지만 모듈 주요 로직에 포함해서 사용하는 기존 방식을 확인했었고, 추후 슬랙 알림을 다수로 추가하는 상황에서 대응하기 위해 기본 방식을 개선하고자 슬랙 알림 확장 모듈을 개발하는 시간도 가졌었다.
여전히 손봐야할 부분이 존재하는데(타협한 부분), 잘 돌던 코드는 굳이 손대지 않는게 원칙이기 때문에.. 이는 Java(객체지향)와 디자인 패턴 공부 좀 더 하고 잡아보려 한다.
이러한 모듈 개발 업무에 대한 확장도 진행했었고, 기회를 주셔서 상위 업무로의 확장하며 팀에서 제공하는 서비스와 연관된 작업들을 진행하게 되었다.
업무를 하면서 서비스에서 제공하는 기능에 대해 어떤 파이프라인이 존재하고 어떤 작업을 하는지를 직접 확인할 수도 있었고, QA 작업을 진행하면서 서비스의 버그사항과 사용성을 높이기 위한 티켓들을 생성해나갔다.
레거시 기능의 데이터 동기화 구조를 파악하기 위해 UI, API, Batch, DAG를 뒤져가며 특정 엔티티가 갖는 상태를 중심으로 State Diagram으로 정리하여 상태를 변경하는 주체를 파악했었고, 레거시 코드들(배치 위주로)이 무슨 역할을 하는지 코드 레벨에서 확인해나가며 레거시 코드들에 익숙해지기 위해 노력했었다.
이 과정에서 Hive Table, 개발 & 운영 환경의 RDB, No-SQL 테이블과 컬렉션들을 뒤져가면서 찾아가는 방법을 배울 수 있었고, 특정 기능에 대해 레거시 코드를 읽고 찾는 역량을 키울 수 있었다.
매니저님과 PM 분들께서 의도하신 바가 있겠지만, 자연스럽게 각 단계에서 배워나가야할 지식들과 기술들을 파악할 수 있었고, 이러한 확장을 바탕으로 현재 시점에서도 업무를 진행할 때 요구사항을 더 정확히 충족시킬 수 있는 역량을 쌓을 수 있었던 것 같다.
아직은 상위 업무(Backend or Data Engineering)를 원할하게 진행하기엔 부족한 역량이란 것을 스스로 잘 알고 있다.
본인은 현재 환경에서 주어진 메인 역할을 제대로 수행하면서, 백엔드 개발, 데이터 엔지니어링등을 위한 기술 스택들을 준비해나가면서 앞으로 성장하기 위한 발판을 쌓을 수 있도록 노력하고자 한다.
# 준비의 과정
시니어 엔지니어 분과 우연히(?) 함께 출근하는 날에 점심먹고 대화를 하면서 사용했던 기술에 대해 얘기하는 시간을 가졌는데, 단순히 팀에서 사용하고 있는 기술 스택이라는 이유만으로 Java와 Spring을 배울 수도 있지만, 추후 다른 언어나 프레임워크를 사용하는 환경이더라도 Java와 Spring에 매커니즘에 대해서는 꼭 알고 있는 것이 백엔드 엔지니어로써 단단한 기반을 다질 수 있다고 조언해주셨다.
해당 말씀을 듣고 빨리 준비를 시작해야겠다라는 생각을 가졌었고, 지금 시점에서 정말 본인에게 필요한 조언을 주셨었다고 생각한다.
본인은 대학 시절에 Java 또는 C++를 사용해보지 않고 Python만을 사용했고, 데이터 분석과 프로그래밍(그 중 웹 백엔드) 분야를 준비하기 위해선 Python 언어만으로 충분하다고 생각했다.
정확히는 홍대병의 일환으로 남들 다 하는거니깐 나는 안할거야!라는 생각이 강했었는데, 현재 시점에서는 그러한 생각이 소프트웨어 엔지니어로써 성장할 수 있는 기회를 두~세 단계를 늦췄던 잘못된 생각이었다는 것을 알 수 있었다.
단순히 취업의 목적을 넘어서, Python만을 사용해왔을 때에는 객체지향의 장점을 근본적으로 이해하지 못한 채 코드를 작성하고 있었다는 것을 알 수 있었다.
지금까지(입사 이전) Python을 사용할 때는 되는데로 코드를 작성해왔는데, dataclasses & abs 모듈, @staticmethod 등과 같이 적절한 제약 또는 확장을 가져다주는 기능들을 접해본적도 없고 접하려 하지도 않았었다.
올해 6월부터 김영한님의 강의를 기반으로 Java와 Spring을 공부하기 시작했는데, 이제 첫걸음을 수준이라 배워나가야할 개념들이 산더미이다.
Java와 Spring을 공부하면서, 지금까지 작성했던 코드에서 OOP의 특징은 캡슐화 정도밖에 없었다는 사실을 깨달을 수 있었고, 다형성을 공부하고 이게 DI를 구현할 수 있게 하는 개념이구나를 이해하면서 지금까지의 사고가 얼마나 편협했는지를 알 수 있었다.
(DI, MVC, 어노테이션, IoC Container 등의 개념도 알 수 있었다.)
이러한 지난 시절의 공백을 메꾸기 위해서 이제는 제대로된 준비의 과정을 거치고자 한다.
이러한 준비를 바탕으로 기본기를 갖추고 더 나아가 좋은 소프트웨어 엔지니어가 되고 싶다.
# PS. 근황
1. 프로모션
하반기 프로모션에 성공했다. 정규직 전환에 성공할 수 있었고 더 나아가 다음 단계의 타이틀을 달게 되었다.
Welcome Kit 또한 받으면서 지금까지 업무를 위해 노력했던 점을 알아주시고 이에 대한 보상을 주신거라 생각하고 앞으로도 성장하기 위해 노력해야한다고 다짐한다.
면접을 준비하는 과정에서도 태도와 답변 방식, 면접을 풀어가는 방법 등에 대해서도 굉장한 도움을 주셨었고 이 덕분에 좋은 결과를 얻을 수 있다 생각한다.
현재 팀에 좋은 팀원분들이 계신다는 점에 감사하며, 성장할 수 있는 환경과 기회를 주신다는 점에 더욱 감사하다.
앞으로의 목표는 Engineer Title을 얻는 것이고 Engineer 타이틀에 걸맞는 역량을 갖는 것이다.
프로모션 후 기존에 이슈가 있었던 노트북도 윈도우에서 맥북으로 바꿨는데, 연휴 때 들고 내려가서 업무 준비하면서 너무너무 만족스러웠다.
2. 김영한님 & 인프런 좋아요
깃허브 잔디처럼 인프런에서도 학습 대시보드를 확인할 수 있는데, 프로모션 준비를 했던 8월에는 공부를 너무 못했던 것 같다.
완강은 3개까지 진행했고, 올해까지 8개 강의를 수강하는 것이 스스로의 목표이다.
Java와 Spring에 대해서 학습을 진행하고 있고, 추후 테스트와 JPA & QueryDSL & Testing 등에 대해서 학습하고자 한다.
퇴근 시간에 공부를 하는 습관이 아직 부족한 것 같은데, 더 열심히 지금까지 사둔 강의들을 바라보며 남은 4분기에는 강으로 달려보려 한다.
김영한님의 자바와 스프링 강의는 처음 입문하는 입장에선 최고라고 할 수 있다. 자바와 스프링에 입문하면서 너무 좋다고 생각했던 점은 토비님, 김영한님과 같은 업계 선배 분들이 주니어분들을 위한 영향력을 펼쳐주고 계시고 이 분들을 바라볼 수 있다는 점이다.
필요한 지식들을 실습을 바탕으로 온라인에서도 몰입력있게 강의를 진행해주시는 점이 매우 좋고, 개인적으로 사투리를 쓰셔서 더 편하게 + 친근하게 들렸던 것 같다.
나중에 언젠가는 덕을 많이 봤다는 감사 인사를 전하는 날이 오길 바란다.
인프런도 3년전 처음 쓸 때는 잘 몰랐는데, 향로님께서 CTO로 부임하시고 나신 시점이 맞는지는 모르겠지만 재미있고 유용한 기능들도 많아지고, 현재는 제일 좋아하는 온라인 교육 플랫폼이 되었다.
'CW2 > Diary & Etc.' 카테고리의 다른 글
24년 하반기 다짐 및 근황 (3) | 2024.07.14 |
---|---|
2024년 3월을 맞이한 근황 (10) | 2024.02.29 |
2024년을 시작하며 (46) | 2024.01.02 |
SWEA D2 정복 겸 후기 (2) | 2023.11.13 |
카카오 클라우드 스쿨 3기 엔지니어 과정 수료 후기 (8) | 2023.11.13 |