Home 2021년을 보내며
Post
Cancel

2021년을 보내며

속도에 중독되다

cycling

오토바이나 자전거로 빠르게 질주할 때 사람의 시선은 전방으로 고정되며 양옆의 시야는 흐려진다. 온 신경은 눈앞과 뺨을 가르는 바람 소리, 그리고 긴장감에 꽉 깨문 어금니로 인해 어느 샌가부터 아파지는 관자놀이에 집중된다. 바쁜 사람들을 묘사하는데 자주 사용되는 이 상황은 올해의 나를 완벽하게 표현하고 있었다.

활동적인 성향이었던 나는 일을 할 때도 언제나 완급조절을 못 하며 움직이지 못할 상황이 올 때까지 자신을 학대하는 것 처럼 몰아세웠고 계획보다 일이 빠르게 처리되면 그 시간에 새로운 일을 채워 넣었다. 공백을 참을 수 없었고, 개발하고 있을 때 내가 개발자로서 존재한다고 느꼈다.

꽉 차 있는 그릇에 무엇을 더 담을 수 있을까? 머릿속에 일밖에 없었던 나는 다른 모든 것에 대해 점점 흥미를 잃게 됐고, 관심이 없었던 건지 옆을 돌아볼 엄두가 안 났던 건지, 그렇게 더 멍청해지기 시작했다.

무언가에 몰두하고 있으면 그 일이 너무 재밌어서 멈추기 힘든 순간이 온다. 특히나 그 일이 가치 있다고 생각하는 일이고 내가 그것에 시간을 쏟는 것이 정당하다고 느껴질 때는 더더욱 그렇다. 도박 중독이나 마약, 그런 것들도 아니고 일을 하고 배워나가며 스스로가 나아지는 방향으로 걷고 있는 건데, 뭐…잘못될 게 있겠어?

하지만, 무언가가 잘못되고 있다는 것을 깨달았을 때는 보통 조금 늦은 경우가 많다. 소중한 인연을 잃었고, 아이러니하게도 기억력과 표현력, 사고력이 감퇴하고 있었다.

성장부채

기업에서는 흔히 기술부채라는 표현을 사용한다.

1
2
3
4
5
6
7
8
9
기술부채

현 시점에서 더 오래 소요될 수 있는
더 나은 접근방식을 사용하는 대신
쉬운(제한된) 솔루션을 채택함으로써
발생되는 추가적인 재작업의 비용을 반영하는
소프트웨어 개발의 한 관점이다.

- Wikipedia -

쉽게 말해 당장의 중요도에 따라 빠르게 무언가를 해결하고 나중에 보강한다는 뜻이다.

주니어 개발자인 나는 이것을 나의 개발적 성장에 적극적으로 도입했다. 일상생활 보다도 성장을 위해 필요한 노력을 더 중요시하고 달려만 갔다. 일이 끝나고 집에 가면 공부, 주말도 공부, 지하철 이동 시에도 책을 읽고, 학교 수업과 동시에 진행하며 스터디에 공모전까지, 공백을 참지 못하고 그렇게 빚을 늘려만 갔다.

빚의 특성은 이자로 인해 시간이 지날수록 갚아야 하는 양이 늘어난다는 것이다. 제때 잘 쉬어주면 조금이면 해결되었을 것을 나중에 몰아쉴 때는 2~3배 더 긴 시간이 필요했다. 일을 그만두자마자 번아웃이 찾아왔고, 이전보다 무겁게 느껴진 키보드와 희미해진 감각들을 되찾는데는 정말 많은 시간이 필요했다.

달리는 물체는 관성이 있어서 더 빠른 속도로 달릴수록 방향을 쉽게 바꾸지 못하고 부딪혔을 때의 대미지가 크다. 나는 부딪히고 난 뒤에야 멈출 수 있었고, 후유증으로 긴 시간을 어찌해야 할지 모른 채 허공에 손을 가르는 시간을 반복했다.

올 한 해 개발 외적으로 내가 배운 것이 있다면, 성장 부채를 조절하는 것에 대한 중요성이다. 개발을 1~2년 하고 말 것이 아니었기에 무리하지 않는 것이 중요하다는 것을 깨달았다.

it's okay 아니 난 괜찮을 줄 알았지…

물론 당시에는 너무 빠른 속도로 달리고 있어서 주변에서 좀 쉬어야 한다는 말이 잘 들리지 않았고 이해가 안 됐지만.

개발자로서 첫 걸음

힘들었지만 그만큼 남은 것도 많았다. 책으로만 배우던 것들이 왜 필요한지를 몸소 경험했다. 경험하고 난 뒤에 다시 읽어보는 개발 이론들은 이전보다 더 쉽게 공감이 가고 단순 암기가 아니라 체화될 수 있었다.

기획이 확정되지 않은 채 개발을 먼저 시작했기에 다음에 수정사항이 생길 때마다 코드를 엎었고(이건 클로즈 알파 대응 때 특히 더 심각했다.), 사용하던 게임패드 인풋 캡처 라이브러리에 버그가 생겨 다른 라이브러리로 변경하면서 달라진 이벤트 처리 방식과 키코드의 수정 때문에 고통받았다.

Strategy-pattern 너희는 더 유연해야 한다

변경되는 부분과 변경되지 않는 부분을 나누고 필요한 때에 필요한 기능이 구현된 구현체를 주입받는 설계가 왜 중요한지를 알게 되었다. 이때부터 변경에 강한 설계의 중요성에 대해 인식하게 되었다.

스스로에 대한 자기효능감이 굉장히 높아졌던 한 해 였던 것 같다. 생각했던대로 개발을 할 수 있었고, 예상했던대로 움직이는 클라이언트 어플리케이션을 보면서 스스로가 굉장히 개발을 잘하는 것만 같은 착각에 빠지는 것 같았다. 주니어 시기에 위축된 자신감을 회복하는데에는 큰 도움이 됐고, 그 기저에는 훌륭한 라이브러리들과 프레임워크가 도와주고 있었다.

바퀴를 다시 발명하지 마라

회사에서는 이것 저것 개발을 했지만 그 중에서도 많은 것을 고민해보게 했던 프로젝트는 윈도우와 안드로이드로 이미 구현되어 있는 클라이언트 프로그램/앱을 웹으로 포팅하는 일이었다.

클로즈 알파 당시에 회사에서 사용하는 클라이언트 앱은 C++(Windows), Java(Android)로 구현이 되어있었고, 유저의 PC나 핸드폰에 설치해서 테스트 해봐야 했다. 당연히 유저들이 테스트를 해보고 있는 동안에는 버그 패치 등의 업데이트가 있어도 바로 반영할 수 없었고, 추후에 서버 쪽에 변경사항이 있어서 버전이 달라졌을 때 각각에 대응하는 클라이언트를 찾아 사용하는데에 번거로움이 있었다.

Update 지긋지긋한 업데이트

물론 이를 해결하기 위해 웹 클라이언트가 도입된 것은 아니고 처음엔 하나의 옵션으로서 개발을 하게 됐는데(아무래도 네이티브 앱에 비해 성능이 매우 낮아 못 써먹을 것이라 예상했었다), 굉장히 만족스러운 결과물이 나왔다.

웹 클라이언트가 가져다 주는 이점은 다음과 같았다.

  • 유저가 앱을 설치하지 않아도 되기에 테스트 시에 클라이언트의 버전을 신경쓰지 않아도 된다.
  • 전자기기를 사용하는 현대인 중에 웹 브라우저를 가지고 있지 않은 사람은 없다.
    • 이 프로그램은 인터넷 사용을 위해 필수적이기도 하지만 보안성을 위해 개발자가 유저의 기기에 접근하는 것이 제한되어 있어 안심하고 설치할 수 있었기 때문이다.
    • 따라서, 누구나 이 클라이언트를 즉시 간단하게 실행할 수 있다.
  • 플랫폼을 따지지 않는다. 크롬과 사파리를 실행할 수 있다면 그 기기가 윈도우 컴퓨터든 안드로이드 폰이든 맥북이든 상관없이 사용할 수 있었다.
    • 기존에 지원하지 않았던 맥OS도 지원할 수 있게 되어 맥을 사용하던 웹 개발자들도 기능 테스트를 할 수 있게 되었다. (기존에는 윈도우 컴퓨터를 따로 켜서 거기에서만 테스트 해야 했다)

위의 장점들을 모두 적용할 수 있음에도 이를 웹으로 포팅하는데는 혼자서 개발했는데도 약 3개월 정도밖에 시간이 걸리지 않았다.(내가 C++ 코드에 익숙하지 않고, Web API를 잘 몰랐음에도 말이다!) 그 만큼 Web API는 내가 생각했던 것 이상의 기능들이 구현되어 있었고, 이는 굉장히 사용하기 편하고 합리적으로 구현되어 있었다.

가장 우려했었던 것은 Javascript의 느린 처리 속도였는데, Web API에서 I/O 처리는 어차피 네이티브 코드로 구현되어 있을터라 그런지 윈도우 클라이언트와의 체감속도에 있어서 큰 차이는 없었다.

하지만 마냥 순조롭지만은 않았다. iOS 한정으로(MacOS는 괜찮았음) Web RTC(웹 기술로 구현된 실시간 통신 프레임워크; 동영상, 음성, 일반 데이터 통신이 가능)를 이용하여 받아온 서버쪽 영상을 자동재생 할 때는 보안상의 이유로 muted가 강제되는데, 이는 User Interaction을 통해서만 풀 수 있다.

그래서 고민하던 중 어차피 앱을 사용하는데 있어서 매핑된 버튼의 UI가 화면에 뜨고 이를 터치하는 방식으로 사용하기 때문에 어디든 화면을 한 번 터치하면 이 이벤트를 받아서 muted가 되어 있을 때는 해제하는 방식으로 해결했고, 개발을 하는 것이 단순히 정해진 기능을 구현하는 것이 아니라 상황에 따른 제한사항을 어떻게 창의적으로 풀어나가야 하는 것인지도 고민해야 한다는 것을 배웠다.

이 프로젝트를 하면서 나는 Javascript에 대한 편견 그리고 프론트 엔드 개발자가 만드는 것이 단순히 CRUD 결과를 좀 더 예쁘게 표시하는 웹 페이지일 것이라는 편견을 완전히 버리고 한동안 웹 브라우저라는 프로그램의 매력에 푹 빠졌었다.

어떤 개발자이고 싶은가?

나는 웹 백엔드 개발자로서 커리어를 닦아나가고 싶었다. 다만, 그렇기에는 이것 저것 다 손대서 애매한 상황이었고, 경력 1년을 가진 백엔드 개발자치고는 깊이가 없었다.

따로 공부는 하고 있었지만 어디까지나 우선순위는 월급을 주는 회사에서 부여하는 일을 처리하는데에 있었고, 앞서 말한 것처럼 헤비한 생활에 지쳐 있는 상태에서 학습을 하려고 돌아오면 이전에 배웠던 것이 기억이 안나는 상황이 반복되고 있었다.

많은 시니어 개발자들이 개발 지식에만 집중하는 것이 아니라 개발을 통해 문제를 해결하고 비즈니스 밸류를 만들어 내야 한다고 한다. 하지만 이것을 적용하기에 나는 아직 스타트라인에도 못 서있는 것 같은 기분이 들었다.

아직 나에겐 최소한의 개발 지식과 경험이 더 필요했다. 그래서 퇴사의사를 밝히고 더 많이 배울 수 있는 곳으로 가기 위해 이직 준비를 하기로 결심했다.

이제는 같은 실수를 반복하지 않기로 했다. 느리더라도 상관없다. 멈추지만 않으면 된다. 조급해 할 필요도 없고, 원래 페이스 이상으로 달려봐야 결국 나중에는 다 대가를 치룬다. 어차피 모든 일은 충분한 시간과 노력이 필요하다.

This post is licensed under CC BY 4.0 by the author.