코드숨과 함께 했던 12주를 돌아보며

코드숨을 시작했던 첫 주의 화요일 밤. 저는 새벽 한 시까지 과제로 씨름을 하고 겨우 제출을 한 다음, 침대에 누웠습니다. 지금 돌아보면, 'let 대신 const를 쓰라'는 아주 귀여운(!!) 과제였지만, javascript를 써보지 않은 저에게는 너무 어려운 과제였어요. 과제를 모두 마치고 침대에 누워서 핸드폰을 하던 중, 우연히 생활코딩의 이고잉님이 올린 글을 보게 되었습니다.

혼자서 나의 프로젝트와 충분히 많은 시간을 보내다 보면 절대 고독의 상태가 언젠가 오더라고요. 이때가 선택의 순간입니다. 여기서 프로젝트를 마무리할지, 동료를 찾아서 더 높은 단계로 도약할지를 선택할 수 있습니다. 이런 선택지는 혼자 시작한 사람만 누릴 수 있는 기회입니다. 외로움 속에서 충분히 절망한 사람만이 왜 동료가 필요한지, 동료와 무엇을 하고 싶은지를 이해할 수 있는 것 같습니다.

침대에 누워있던 저는, 제가 "코드숨을 해야만 했던 이유"가 바로 이러한 이유 때문이라는 것을, 다시 한 번 생각하게 되었습니다.

내가 코드숨을 해야만 했던 이유

그렇습니다. 저도 동료가 간절하게 필요했던 거 같아요. 코로나로 인해 미국으로 가는 비자 발급이 무기한 연장 됐고, 비자를 기다리며 임시로 하던 재택 근무도 함께 연장 되고야 말았습니다. 소프트웨어 엔지니어라고는 신입인 저밖에 없는 이 회사에서, "완벽하게 혼자서 일해야 하는" 이 업무 환경은 저에게 너무 잔인한 (?) 환경이었습니다. 이제 git 쓰는 것도 겨우 적응한 초초초초보 개발자인 저는 회사의 앱을 혼자서 개발하고 있었고, 매일 같이 마주하는 새로운 문제들을 혼자서 풀어나갈 수 밖에 없었습니다. 모르는 것을 물어볼 곳도 없었고, 그저 인터넷과 책을 매일 같이 뒤적이는 것이 제가 할 수 있는 전부였습니다. 그렇게, 인터넷과 책들에 의지해서 개발을 하던 저는, 제 힘으로 도저히 혼자서는 풀 수 없는 문제 하나를 마주하게 되었습니다.

올해 4월, 저는 우여곡절 끝에 제가 개발하던 앱을 드디어 런칭 하게 되었어요. "해냈다!"라고 외치려던 순간, 저에게는 아주 고통스러운 ㅎㅎ 큰 사건 하나가 일어났습니다. 저희 회사와 연결된 아주 유명한 대학의 교수님 중 한 분께 앱을 소개할 기회가 있었는데, 화면이 잘려서 회원가입 자체가 안되는 문제가 있었거든요. (아니 잘려도 하필 SIgn Up 버튼이 잘려..) "설마 iPhone 6s보다 전 버전을 쓰는 사람이 있겠어~!"라며 개발을 했는데, 알고 보니 그 교수님은 더 낮은 아이폰 버전을 쓰고 있었고, 화면이 잘려서 앱을 사용조차 못해본 덕분에 그 교수님이 아주 화가 단단히 나서 대표님께 연락을 하셨더라고요. 그리고, 저는 이 오류를 해결하고 재배포 하기 까지 고통의 일주일을 보냈습니다. 그리고, 최악이었던 이 경험은, 저에게 조금은 본질적인 질문 하나를 안겨 주었어요.

"어떻게 하면 내가 소프트웨어에 지배당하지 않고, 소프트웨어를 컨트롤 할 수 있을까?"

제가 저의 코드를 모두 알고 있음에도 불구하고, 빠르게 유지보수 할 수 없었던 이유에 대하여 생각 해봤습니다. 저는 이 문제의 원인은, '의존성이 높은 코드 구조'와 '깔끔하지 못한 코드'라고 생각했습니다. 상태 관리하는 코드, 데이터를 받아오는 코드, UI를 그려 주는 코드들이 모두 짬뽕이 되어 섞여 있었고, 그 코드들 마저도 아주 엉망진창이었거든요. (코드숨에서 처음 알게 된 린터를 제 프로젝트에도 적용해 봤는데, lint error가 천 몇 개..ㅎㅎ..) 그래서, 어디서 유명하다는 "클린 코드"와 "클린 아키텍처"라는 책을 사다 읽기 시작했습니다. 특히, 클린 아키텍처를 너무 이해해 보고 싶어서, 어떤 부분은 베껴 써가며 읽어 보기도 하고, 관련된 블로그 포스트는 매일 뒤져보고, 발표 영상까지 여러번 돌려봤습니다. 그런데 그렇게 몇 주를 해 봤는데도, 솔직히 무슨 소리인지 잘 모르겠더라고요.

왜 근본적으로 이런 실수들이 일어났는지도 생각 해봤습니다. 물론, 저의 꼼꼼함이 부족했던 탓도 있을 것입니다. 하지만, 사람은 실수라는 것을 하기 마련이고, 결국 중요한 것은 실수를 하더라도 최대한 빨리 실수를 찾아낼 수 있는, 근본적인 개발 방법을 찾는 것이 중요하다고 생각했어요. 그리고, 우연히 "테스트 주도 개발"이라는 것을 알게 되었고, 저도 테스트 주도 개발을 너무 해보고 싶어서 열심히 검색하고 해보려고 해봤지만, 뭐, 진짜 어떻게 해야 할지 하나도 모르겠더라고요.

나름 최선을 다해 노력 했는데도 해결되지 않는 문제 앞에서 절망 하는 시간이 쌓여 가며, 저는 먼저 이 길을 걸어 본 사람들의 도움이 절실하게 필요하다는 것을 깨닫게 되었습니다. 그리고, 우연히 "코드숨"이라는 프로그램을 알게 되었고, 지식을 가르쳐 주기 보다 좋은 방법과 습관을 가르쳐 준다고 이야기하는 이 프로그램을 보고, 저는 홀린 듯이 (?) 신청을 할 수 밖에 없었습니다. "React"라는 새로운 도구는 중요하지 않았어요. 제가 궁금한 저 질문에 대한, 몇 가지 힌트라도 얻을 수 있다면 저는 그 것으로 이 프로그램을 들을 이유가 충분하다고 생각했습니다. 사실, 지금 돌아보니, 제가 궁금해 하던 것은 초보자가 이해할 수 있는 내용도 아니었고, 무모한 시도들이기도 했습니다. 하지만, 이러한 저의 무모한 시도들이 코드숨을 신청할 수 있는 계기로 이끌어 주었습니다.

나의 코드숨 활용기

코드숨을 신청하기 전, 저의 상태는 이랬습니다.

  • React를 하나도 몰랐습니다.
  • javascript 변수 선언을 const 와 let으로 한다는 사실을 프로그램 시작하기 일주일 전에 알았습니다.
  • CSS는 생활코딩 강의 몇 개 본 게 다였습니다.
  • HTML은 남이 작성해 놓은 코드 몇 줄 고쳐 봤습니다.

사실, 저는 웹개발을 해본 사람들을 대상으로 하는 이 프로그램을 따라갈 수 없는 상태에서 시작했습니다. 그래서, 저는 다른 사람들보다 더 많은 시간을 투자해야 한다는 것도 알고 있었고, 누구보다도 열심히 해야 한다는 것도 잘 알고 있었습니다. 그래서, 저는 코드숨을 하는 동안 아래 세 원칙을 지키기 위해 노력했습니다.

1. 꾸준하기 위해 노력했습니다.

하루에 몰아서 하기 보다, 하루도 빠짐 없이 조금이라도 하자는 원칙을 세웠습니다. 물론, 지키지 못한 날이 며칠 있기도 하지만, 저는 코드숨을 하는 3개월간 거의 매일 코드숨에서 배운 내용들을 공부했고, 코드를 작성하고, 받은 리뷰에 대하여 고민 해보는 시간을 가졌습니다.

2. 지나간 것은 돌아봤습니다.

새로 배운 것이 있다면, 제가 무엇을 배웠고 그 과정에서 어떤 생각을 했는지 곱씹어 보는 시간을 가졌습니다. 그리고, 이러한 성찰의 기록들을 TIL에 남기게 되었습니다. 저의 TIL에는 제가 배운 지식들을 정리하기도 했지만, 어쩌면 "Today I thought"이라는 이름으로 바꿔야 하나 고민했을 정도로(!), 저의 생각들을 정리하는 도구가 되었어요. "왜 이번주는 과제가 힘들었는지", "왜 이번주는 과제가 재미 있었는지", "피드백 강의를 듣고 어떤 생각을 했는지" 등을 글로 적어 보며, 제가 배우고 느낀 것을 돌아보기 위해 노력했습니다.

3. 주어진 것에는 질문을 던졌습니다.

저에게 주어진 피드백 강의와 코드 리뷰를 "당연하게" 받아들이지 않기 위해 노력했습니다. 제가 궁금했던 것은, 하나의 코드에만 적용되는 답이 아닌, 소프트웨어 개발의 전체를 아우를 수 있는 답이었기 때문입니다. 그래서, 멘토님들이 올려 주신 피드백을 보고, 혼자서 한참을 고민했던 거 같아요. 저렇게 리뷰 해준 의도가 무엇일까, 하다 못해 띄어쓰기를 이렇게 했으면 좋겠다는 리뷰도, 한참을 고민했습니다. 그리고 그렇게 고민을 했는데도 모르겠는 때, 멘토님들에게 찾아가 질문을 던졌습니다.


그렇게, 저는 제가 세운 세 가지 원칙을 3개월 동안 꾸준하게 지켰습니다. 물론, 이렇게까지 열심히 했는데도, 쉽지 않았던 적도 많았어요. 처음으로 TDD를 배우기 시작했던 네 번째 주에는, 너무 어려워서 정말 눈물을 머금고... 코딩을 했습니다. 그때는 정말 힘들어서, 프로그램 신청 전에 문의 메일을 보냈을 때 기초 없는 사람이 수강하지 못하도록! 적극적으로!! 뜯어말리지 않은!!!!!! 멘토 윤석님을 원망하기도 했어요ㅎㅎ

그렇지만, 꾸준함은 지치지 않도록 도와주는 연료가 되었고, 잠시 멈춰서 돌아본 시간은 배움에 가장 빠른 지름길을 터 주었으며, 머리 속에 떠오른 질문들은 새로운 것을 배우는 즐거움을 가져다 주었습니다. 그렇게 "이 과정을 무사히 마칠 수 있을까"라는 불안 속에서 시작된 출발은, 벌써 모든 과정을 지나 끝이 나게 되었습니다.

3개월 후, 나는 어떻게 변화 되었는가

만약, "내 삶에서 최선을 다한 시간들" 전시회 같은 것이 있다면, 아마도 코드숨을 했던 지난 12주도 멋진 액자에 끼워서 전시할 거 같습니다. 그만큼, 저는 최선을 다해서 12주의 시간을 지나온 거 같아요. 그리고 모든 것이 끝난 지금, 프로그램을 처음 시작했을 때보다 훨씬 더 성장해 있는 저를 발견할 수 있었어요.

1. 개발자로 성장할 수 있는 좋은 습관을 갖게 되었습니다.

코드숨을 하며 생존하기 위해(?) 만들게 된 원칙들이 이제는 습관으로 자리 잡아가고 있는 것을 발견할 수 있었습니다. 매일 꾸준히 하고, 모르는 것이 있을 때 넘어가지 않고 끝까지 고민 해보고, 배운 것을 돌아보며 더 나아가 글로 옮겨 보는 것들이, 이제는 꽤 익숙한 일상이 되었습니다. 그리고, 이러한 일상들이 조금씩 더 쌓인다면, 좋은 개발자가 될 수 있겠다는 생각이 들었습니다. 물론, 코드숨이 끝난 내일부터 제가 어떻게 할지는 저도 지켜봐야겠지만, 지금 얻게 된 습관이, 앞으로도 계속 되었으면 좋겠다는 생각이 들었어요.

2. 개발하는 것이 이제 두렵지 않게 되었어요!

회사에서 앱을 런칭하고, 저는 사람들이 제가 만든 앱을 사용하지 않기를 아주 간절하게 바랬습니다. 이 앱이 또 어떤 시한 폭탄을 안고 있을지 몰랐거든요. 그런데 이제는, 누군가 제가 만든 소프트웨어를 쓴다는 것이 두렵기보다, 기대 되는 일이 되었습니다. 지난 3개월 동안, 아무리 구조가 복잡해져도 변하지 않는 튼튼한 기초들을 배울 수 있었고, 저의 코드를 누구나 알아볼 수 있는 좋은 코드로 만드는 법을 배웠거든요. 그리고 무엇보다도, 제가 실수 하더라도 잡아줄 수 있는 든든한 테스트 코드와 함께하는 개발 방법을 배웠습니다. 이러한 배움을 통해, 이제는 개발하는 것이 두렵기 보다, "또 어떤 새로운 것을 만들어 볼까?!" 기대하게 되는 일이 되었습니다.

3. 함께하는 동료의 가치를 알게 되었습니다.

어쩌면, 제가 12주 동안 최선을 다할 수 있었던 가장 큰 이유는, 혼자 고민하고 일을 하며 켜켜이 쌓여있던 "동료에 대한 필요" 때문이었는지도 모르겠습니다.

코드숨을 하는 동안, 혼자서 며칠 동안 고민해도 안 되는 것에 더 이상 절망하지 않고, 질문하고 또 같이 고민해줄 멘토가 있는 것이 좋았습니다. 엉망인 저의 코드를 누군가의 피드백을 통해, 더 좋은 코드로 만들 수 있어서 너무 좋았습니다. 아무리 검색해도 안 나오던 답들을, 같은 고민을 했던 다른 수강생 분들이 어떻게 해결했는지 볼 수 있어서 너무 좋았습니다. 또, 혼자서는 못할 거라고 생각했던 일을, 제가 너무 좋아하는 친구들과 함께 하며, 멋진 결과물을 만들어낼 수 있어서 너무 좋았습니다.

그리고 12주가 지난 지금, 처음 시작할 때 썼던 생활코딩 이고잉님의 글처럼 "왜 동료가 필요한지, 동료와 무엇을 하고 싶은지"를 누구보다도 잘 이해할 수 있게 된 거 같습니다.

내가 오늘을 열심히 살아가는 이유

언제 한 번, 이런 상상을 해본적이 있습니다. 누군가 저에게, 어떤 일을 하는데 있어, "무엇을", "어떻게", "왜", 누구"와 하느냐, 네 가지 중 가장 중요한 것이 무엇이냐고 묻는다면, 저는 뭐라고 대답하게 될까요.

무엇(What)을 하느냐도 참 중요한 거 같아요. 저는 지나간 과거를 분석하고 통찰하는 일보다, 정해지지 않은 미래를 새롭게 만들어나가는 일을 할 때 더 행복한 사람이기 때문입니다. 어떻게(How) 하느냐도 중요하겠죠. 저는 특정한 방식을 이유 없이 강요받는 것을 힘들어 하거든요. 목표와 방향성을 공유 하되, 상황에 맞는 방법을 스스로 선택할 수 있도록 하는 방식을 중요하게 여기기 때문입니다. 왜(Why) 역시도 빼놓을 수 없는 거 같아요. 물론, 모든 일들이 이유를 가지고 시작되지는 않습니다. 하지만, 어려움이 찾아왔을 때, 그 어려움을 극복하는 힘은 "왜"에 대한 답으로부터 나왔던 만큼, 이 것 역시 빠뜨릴 수 없겠죠.

글쎄요. 어느 것 하나를 딱 집어 내기가 어려운 거 같아요. 하지만, 하나 확실한 것은, 누구(Who)와 함께 하느냐는 저에게 있어 아주 중요한 것이라는 사실입니다. 제 삶에서 가장 행복했고 가장 성장했던 시간들을 돌아보면, 항상 그 때는 좋은 사람들이 함께 했고, 그들과 같이 열심히 최선을 다 했던 시간들이었거든요.

코드숨과 함께 했던 지난 12주는, 제가 혼자서 채울 수 없었던 것을, 함께 채워주는 "누군가"가 함께했던 시간이었던 거 같습니다. 그래서 노트북 앞에 앉아 회고를 작성하며 끝에 대하여 생각하니 아쉬운 마음들이 들었습니다. 그렇지만, 또 언젠가 저의 삶에 누군가와 멋진 일을 할 수 있는 행운이 찾아오게 될 날을 기다리면서, 오늘을 성실하게 살아 보려고 합니다. 앞으로 제가 마주할 미래에 좋은 동료들을 만나서 함께 일할 수 있을 그 때, 제가 조금 더 준비 된 사람이 되어 그 동료들과 더 멋진 일을 해낼 수 있게 말이에요.