글 작성자: Key Ryung

막상 회고록을 쓰려고 하니 1인칭 관점에서 푸념을 써야 될지 3인칭 관점에서 리뷰를 해야 될지, 담담한 어조로 써야 될지 격정적인 어조로 써야 될지 모든 것들이 고민되었다. 하지만 다양한 방향에서 2021년의 나에 대해서 기록하는 것도 재밌을 거 같아 하나씩 써보려고 한다. 

나에게 2021년은...
고진감래의 정확히 반대. 감진고래, 달콤한 뒤에 오는 씁쓸함

 

2020년 10월에 전 직장에서 퇴사를 해서 2020년 11월에 이직한 회사에서 산뜻한 새 출발을 진행했다. 새로운 환경에서 새로운 사람들과 프로젝트를 진행해 나가고 전에는 나 혼자 고민했던 것들을 함께 고민해나간다는 것이 이렇게 재밌을 줄은 몰랐다. 설레기도 했고 걱정되기도 했다. 내가 이 모든 것을 망쳐버릴까 봐, 그래서 정말 열심히 진행했다. 일주일 단위로 업무 목표를 정하고, 일주일 단위가 모여 한 달 단위의 더 큰 목표를 세우고, 더 명확한 마일스톤을 얻기 위해 각 버전별로 앱의 세부 특징과 한계들을 정의하고 일을 진행했다.

 

기획서 개요를 보고 만든 개발 Agenda

2021's History

Apppp에서 시작하여 Spring까지 도달하기 까지의 여정,
어떤 사건들이 일어났고 거기서 어떤 것을 배웠는지 잘 기억하기 위해 전반적인 부분을 모두 정리했다.

 

기획자와 디자이너와 팀을 이루어 하나의 프로덕트를 진행해 나가는 경험은 처음이었고 면접 시에 이미 MVP 프로덕트가 나와있다고 전달을 받아 2달 정도면 프로덕트를 완성시키고 원래 지원했던 직무로 개발을 진행시키려는 Happy Path😇를 계획하고 있었다.

제안받았던 포지션은 DICOM + BackEnd, 본격적인 직무 전에 마감이 얼마 안 남은 Android 프로젝트 마무리가 필요하다고 했고 수락했다. 스타트업 특성상 각각의 포지션을 모두 뽑을 수 없기에 많은 회사들이 여러 직무를 소화하는 다른 개념의 Full-Stack 개발자를 선호하는 것을 이미 알고 있었다.

 

이런 상태에서 나와 있는 앱과 소스 코드를 받게 되는데 엄청난 것들을 마주하게 되었다.😭

Android를 처음 배우면 "God-Activity"라는 구조를 대체적으로 사용하게 된다.(Activity는 화면을 제어하는 안드로이드의 요소 중 하나) 간단하게 말해서 모든 로직과 더불어 모든 코드들이 Acitivity라는 Class에 모두 있는 구조다. 프로그래머들이 대부분 아는 단일 책임 원칙, 함수는 하나의 기능을 갖게 작성해야 한다, 응집도 등등 이런 개념들과 완전히 동떨어지게 되는 구조이다.

Model-View-Presenter VS. God-Acitity

근데 하필 이미 나왔다는 MVP 프로덕트가 이 구조를 사용해서 작성되어 있었다. 이 앱은 해외 시장에 공공 의료 목적이고 BM은 B2G라고 전달받았는데... 그대로 진행한다면 지금 당장은 퍼포먼스가 올라간 것처럼 보이지만 발목을 잡는 족쇄로 작용될 것이라는 게 예상되었다. 그래서 기존 프로덕트를 남겨두고 새롭게 진행하기로 결정했다. 아무도 원망하지 않았다. 위기는 기회로 사용될 수 있으니까!

 

그렇게 확장성과 재사용성을 고려한 MVVM과 Clean Architecture를 도입하여 설계를 다시 진행했다. 혼자 개발할 때는 MVP만으로도 충분히 커버할 수 있었지만 기획자, 디자이너와 협업을 하기 위해서 좀 더 유연한 구조가 필요했다. 앞서 언급했듯 기획자와 더불어 디자이너가 함께 하는 프로젝트는 처음이었다. 그렇게 디자이너와 기획자의 요청사항을 앱 사양에 하나씩 추가하다 보니 추가 사항이 100개 정도가 추가되었다...

 

이런 상황이 나오지 않도록 노력해야 된다!

스케줄이 계속 변동되고 연장되는 것이 내가 아직 실력이 부족해서, 시니어가 아니라서, 공부를 많이 하지 않아서라는 생각이 머리에서 떠나지 않아 더욱 나를 몰아쳤다.(플랫폼 총괄 팀장님은 대부분의 경우 개발자에게 문제가 있기 때문에 이런 문제가 발생한다고 하셨다.)

 

퇴근하고 저녁만 먹은 뒤에 계속 혼자서 여러 자료를 뒤적거리며 방법론과 앱 아키텍처, Kotlin의 내부 구조 등 주말에도 빠짐없이 공부했다. 공부하다 보니 역시 나는 많이 부족하구나라는 것을 느끼며 공부한 것들을 다시 프로덕트에 적용시키며 제품을 완성해 나갔다. 2월 말까지 모든 기능을 완성하고 AI Model 분석 시간 최적화를 위해 다양한 기법들을 적용하였다. 그 이후 3월까지 디자인까지 적용해서 배포를 진행했다.(드디어 끝인가?)(그 사이 기획자가 퇴사했다. 완성되지 않은 기획서를 남겨두고...)

 

해당 제품은 의료 목적으로 사용하는 앱이기 때문에 인증을 받기전까지는 플레이스토어에 공개 배포를 진행하지 못했다. 그래서 여러 임시 인증 문서를 작성하며 앱을 계속 업데이트하여 모든 것이 준비되었다고 느꼈지만 이제는 AI Model이 성능이 충분치 않아 시연을 할 때 올바른 동작을 보이지 못했다. 시간은 흐르고 흘러 6월이 되었다. AI Model도 성능 향상, 인증 문서도 쓸 준비 완료, 코드 리팩터링, UI Testing 완료 모든 것이 순조로워 보였다.

백엔드, 프론트엔드, DevOps 등 같은 팀 팀원들이 퇴사했다.

 

App 쪽으로는 더 이상 추가적인 투자를 하지 않는다고 비공식적으로 결정되었다. 그동안의 성과가 없어질 수도 있었지만 내 노력과 공부한 것들은 사라지지 않기 때문에 이제 내 원래 직무인 Back-End를 할 수 있다는 것에 희망을 가졌다. 기존 팀장님도 퇴사를 하시고 연차가 그래도 많은 팀원 중 팀장이 새로 임명되었다. 그렇게 새 팀장님과 첫 면담, 기존 백엔드 모듈이 이미 확장 가능한 구조로 다 작성되어 있기 때문에 새로운 서비스를 위한 쿼리를 작성하면서 백엔드에 적응을 시작하는 것으로 면담을 진행했다. 

 

Git Flow 방식을 채택하고 있다는 것을 알고 있었고 Develop 브랜치를 pull 받아 clean build를 진행했다. 빌드가 진행되지 않았다...

메서드 파라미터 타입과 호출하는 부분에서의 파라미터 타입이 달랐다. JPA와 QueryDSL을 사용하는데 연관관계 매핑이 하나도 되어있지 않았다. Exception으로 로직이 분기(goto처럼)되어 어느 부분부터 수정을 해야 될지 감조차 오지 않았다.

소스 코드 보면서 공부하라고 하시는데 Best Practice를 공부하면서 배우는게 아닌 Worst Practice를 보며 앞으로 이런 코드를 짜지 말아야겠다는 것을 배우라는 것인가라는 생각이 많이 들었던 시간이었다. 더욱 신기했던 건 이런 코드가 이미 배포되어 Release까지 올라가서 사용하고 있었다는 점이다.

 

멘탈을 붙잡아 코드 분석을 각 레이어별로 진행하고 어떤 부분에 대해서 고쳐야 되는지 팀장님께 보고 드렸다. 원래 코드 이렇게도 짜는 거라는 답변을 받았다. 이상적이지만 현업에서는 그렇게 안 한다고... 그동안 공부하고 익혀왔던 Coding Standard, Best Practice들을 떠올리며 설득을 이어나갔지만 상대방에게 이해시키고 받아들이게 하는 것은 실패했다. 적어도 어떤 이유로 이렇게 짜야 됐던 것인지에 대한 부분이라도 들었으면 좋았을 텐데 말할 당시의 내 화법이 공격적이거나 누군가를 힐난하는 것으로 들렸을 수도 있겠다는 자책을 했다.

당연히 Legacy를 유지보수 하는 것은 개발자로서 당연히 거쳐야(?) 하는 통과의례라는 것은 인지하고 있었다. 다만 그 Legacy가 적어도 상식에 맞는 Legacy였으면 좋겠다는 바람이 생겼다.

 

이런 상황이 벌어지고 생각한 것은 다시 Android로 직무를 진행하거나 이직을 할까도 고민했었다. 그동안 Android를 진행할 때도 감을 놓치지 않기 위해 계속 해왔던 백엔드 공부한 것이 아쉽기도 했지만 더 이상 있다가는 이런 코드들과 상황들에 익숙해지는 Comfort Zone에 들어갈까 봐 걱정되었다. 그래도 일단 주어진 미션까지는 해보자는 마음과 백엔드를 다시 본격적으로 하면서 즐거웠다. 이것이 내가 원하던 분야라는 것을 다시 한번 느꼈다. 그래서 리팩토링과 테이블 정리와 쿼리들을 수정해가며 어떻게든 기한에 맞춰 부여받은 미션들은 완성을 했다. 

- 2021 년 끝 -

 

2021년으로부터 얻은 것

- 주변 상황에 따라 바뀌는 멘탈 이슈로부터 많은 내성을 얻었다.

 

- 멘탈 이슈에서 처지지 않고 계속 공부하고 또 공부해서 안정적인 베이스 지식들(Java/Kotlin 내부 구현, C++, 알고리듬 개념, RxJava, Database, OS, Network 등)을 익히고 파고들었다. 아직 채우고 높여(프레임워크) 나아가야할 부분도 남아있지만 바닥 시공이 끝이 보이기 시작한다.

 

- 아직은 적용해보지 못했지만 회사를 보는 눈이 더 넓어졌다. 전에는 사업 아이템 측면과 분야에 대한 전망만 고려했다면 이제는 기술적인 부분에 대해서도 고려를 할 수 있어졌다.

 

- Legacy Code들을 보며, 나는 더 성장할 수 있는 부분이 많다고 약간의 자신감을 얻었다. 

 

- 다른 팀과의 협업, 같은 팀과의 협업을 모두 체험해보았고 무엇을 우선순위로 두고 어떻게 행동해야 하는지 짐작하는 바가 생겼다.

 

- 이직에 대한 확실한 Motivation을 얻었다.

내가 좋은 개발자가 되어 더 많은 좋은 개발자들과 일하고 싶다.

 

Happy New Year!

2022년 새해가 되었다.

 

2021년에는 회사 자금 조달 문제, 구인 문제 등 회사 내외부로 많은 문제들이 있었다. 이런 문제를 가까이에서 지켜보며 그때 당시에는 마음고생이 진짜 심했었다. 하지만 지금 보니 그로 인해 내가 좀 더 멘탈 부분에 있어서는 성장하고 단단해졌다는 느낌을 받는다. 2022년에는 더욱더 성장하여 옆그레이드가 아닌 업그레이드를 진행할 것이다! 반드시!

 

 

REF

[1] God-Acitivity 이미지

https://medium.com/@taylorcase19/god-activity-architecture-one-architecture-to-rule-them-all-62fcd4c0c1d5

'Note > 회고' 카테고리의 다른 글

2022년의 회고록  (0) 2023.01.10