지난 1 년 돌아보기


2019년 9월 12일 부트캠프에 웹개발 과정을 시작했다. 지난 시간을 되돌아 보며 잘한 점, 부족했던 점, 앞으로 나아갈 방향을 적어본다.

좋았던 점

좋은 사람들과 함께했던 부트캠프

부트캠프에서 처음 한달 반은 기초적인 코딩과 웹개발 전반에 대해 배웠다. 그 후에 두가지 프로젝트를 진행했는데 좋은 팀원들을 만났고, 만족스러운 결과를 얻었다. 코드의 품질이나 대단한 지식이 아니라, 팀원 그리고 프로젝트를 수행하며 겪었던 경험 자체에서 얻는 만족감이다. 지금까지도 일부 분들과 정기적으로 기술에 대해 발표하는 자리가 있다. 좋은 분들을 만나 감사하다.

지속

2020년 1월, 부트캠프를 마치고 얼마되지 않아 입사했다. 주변에 소프트웨어를 하고있는 친구들과, 선배 개발자들의 조언으로 CS 공부를 꾸준히 했다. 자료구조, 알고리즘을 시작으로 운영체제를 내 언어로 정리했다. 토이 프로젝트로 서버와 Flutter 앱을 만들어 배포하기도 했다. 중간에 프로젝트 기획을 많이 바꾸어 아직 그럴듯 한 결과물을 얻지는 못했지만 프로젝트와 기획을 몸소 체험했던 경험이었다. 블로그 플랫폼 유목민이었던 시절을 지나, 지금은 gatsby로 만든 블로그에 포스팅 하고 있다. 며칠 전에는 개발 커뮤니티에 지금부터 시작하는 3가지 글쓰기 습관을 공유했다. 몇 몇 분들의 좋아요에 기분이 좋았고, 지식을 공유한다는 측면에서 동기부여가 되었다.

부족했던 점

소프트웨어를 만드는 나의 시선과 마음가짐

내게 소프트웨어란 웹 어플리케이션이였고, 사이트였다. 유저가 보는 것과 크게 다르지 않았다. UI 를 그리고, 서버에서 데이터를 가져와서 보여주면 되는 문제로 생각했다. 기존에 알고 있는 방식으로, 디자인 가이드와 동일한 UI, 서버 통신을 구현하면 되었다. 대다수의 스타트업들도 동일한 상황이겠지만 안정성, 확장성, 장인 정신, 테스트 등의 우선순위가 높지 않았다. '하면 좋은 것들', 개인적으로는 '언젠가는 해야 할 것들' 이었다. 어찌 보면 갓 배운 주니어 개발자에겐 당연할 수도 있다고 생각한다. 타고난 성향도 확실한 작은 블록을 쌓아 올리기 보다는 불완전하지만 커다란 무언가를 생각하는 경향이 있다. 앞서 말한 몇가지가 종합되어, 작성한 코드를 살펴보고 품질을 생각하기 보다, 다른 일을 시작했다. 한가지 언어를 잘 알려고 노력하기 보다, 다른 라이브러리나 프레임웍을 시도해봤다. 품질에 대해 노력을 아예 하지 않았던 것은 아니다. 테스트가 중요하고 들었으니, '테스트가 필요한 부분이 어디인지'에 대한 고민 없이 적당한 부분에 테스트 코드를 작성했다. 하지만, 테스트 코드의 본질인 리팩토링, 확장, 변화를 염두했다고 보긴 어렵다. 그 때의 내 자신을 변호하자면 구현하기에 벅찼던 순간도 있다. 하지만 지금 생각해보면, 근본적으로 만드는 행위에서 아래의 질문처럼 다양한 각도에서의 의문을 가지지 않았다고 생각한다.

  • 튼튼하게 만들 수 있는 방법은 무엇일까?
  • 여럿이 만들 때 어떤 규칙/구조가 필요한가?
  • 어떤 단위로 모듈화를 해야 용이할까?
  • 변화와 추가에도 잘 적응할 수 있는 구조인가?
  • 어떤 테스트가 어디에 작성되어야 하지?

위의 물음을 구체적으로 업무와 사이드 프로젝트에 녹여 실행에 옮길지는 구체적인 방법론과 함께 조만간 정리할 예정이다.

순서적 사고와 실행

두 번째는 문제를 풀기 위해 필요한 단계에서의 아쉬움이다. 문제를 해결하기 위한 순서, 계획이 부실하거나 간과하여 헤매는 경우가 종종 있었다. 예를 들어 간단한 날씨앱을 만든다고 하면, 코드로 옮기기 전에 외부 API를 확인하고. (React를 사용한다고 가정하면) UI 컴포넌트를 구성한다. 대략적으로 이런 순서를 정해놓고, 가능하면 backlog 형식으로 잘개 쪼개 관리하는 방향이 좋다고 생각한다. 왜냐하면 각 단계별로 한 번에 한가지 일만 신경쓸 수 있어 문제가 명확하다. 이런 경우 집중도가 함께 향상된다. 이 프로세스가 주는 유용함을 머리로는 알고있지만 실행에 잘 옮기지 않았었다. 대략적인 계획을 세우더라도, 꼼꼼하게 체크해야할 부분이 누락되어 변경하는 경우가 많다. 태생적인 성격과 성향이 어느정도 작용했다고 생각한다.

하지만 알고있으면 나아질 수 있다고 믿는다. 하지만 아인슈타인이 말했듯 '같은 일을 반복하면서 다른 결과를 바라는 것은 미친 짓이다' 라는 것을 염두해야 겠다. 어떤 문제를 만난다면 최소한의 시간을 정해 미리 계획하고, 큰 그림을 그려보는 시간을 갖도록 시도해봐야겠다. 더해서 가능한 작은 단위로 쪼개서, 예측가능한 시간단위로 업무를 관리하고, 태스크 단위로 history를 기록해놓으면 좋을 것 같다. TDD를 크고 작은 프로젝트에서 실천해보는 것도 도움이 될 거라고 생각한다. 아래 분야별로 중/장기적으로 습득해 나가야 할 것들의 list를 정리해봤다.

Computational thinking

  • algorithm
  • TDD

CS fundamental

  • network
  • data structure

Front-end

  • JS fundamental
  • architecture
  • JS framework and how it works (detail API)

Visualization

  • HTML canvas(D3)
  • WebGL

만들고 싶은 것

자신을 조금 더 잘 알 수 있는 어플리케이션을 만들고 싶다. 기록부터 분석 및 시각화까지 자동화되었으면 좋겠지만 일단 단계를 나누어 할 수 있는 부분부터 시도해야할 것 같다. 이 글을 완성하며 기획단계를 거쳐 서버 초기버전은 어느정도 완성되었다. 서버 + 프론트(visualization) + 모바일앱 + (약간의 자연어처리)를 차근차근 구현할 생각이다. 아 ! 프로젝트 이름은 lifeToPixel 이다.

마치며

개발을 시작하기 전, 검은 화면에서 도전, 한계 등의 매서운 겨울처럼 정말 어려운 문제를 만날 것 같았다. 하지만 돌이켜보면, 오히려 반복해서 내가 해결하는 문제들은 자주 오는 가랑비 같았다. 부족한 점을 파악하기 어려웠고 간과하기 쉬웠다. 지난 일년을 돌아보면, 매 순간 어떻게 대처하고 생각하는지가 더 중요하다는 생각이 든다.

반복의 느린 變化
oowgnoj github
© 2022, by oowgnoj