우당탕탕 지나가고, 너무 많은 걸 배웠던 레벨 1이 끝나고 벌써 회고를 쓸 시간이 된 걸 보면 시간이 정말 빠르게 지나간 것 같다.
들어오기 전의 나만 하더라도 우테코에 들어가서 수업이나 강의만 잘 따라가면 어딜가든 "1인분 하는 개발자"가 되겠지라는 막연한 생각을 가지고 있었던 것 같다.
하지만 실제로 들어와서 직접 겪어본 경험과 나와 다른 크루들의 생각을 얘기해보며 많은 시각이 바뀌고 내가 무엇을 해야할 지를 확실하게 이해 할 수 있었던 것 같다.
이런 깨달음을 간단하게나마 기록에 남겨보려고 한다.
온보딩 기간 때 했었던 첫 미션이었다.
세상이 정말 편해졌고 나의 생각을 빠르게 웹 서비스화 시킬 수 있었던 신기했던 감정을 가지고 시작했다.
일단 백엔드 기준으로는 이렇다 할 수업이 없었던게 정말 신기했다.
그냥 혼자 생각하거나, 생각한걸 기반으로 다른 크루들과 얘기해보고, 각자 스스로 진행하고, 페어 프로그래밍을 통해 하나의 프로그램을 같이 만들어보고, 미션이 완료되면 PR을 날려 리뷰어에게 리뷰를 요청하여 검사(?)를 받는 형태였다.
그러다보니 다른 누군가에 의해 일정이 정해지고 강의를 듣는 기존의 형식이 아니라 크루들끼리 일정이나 룰을 정해서 주어진 미션에서 자유롭게 일정을 잡고 활동하는 것이 많이 다르다는 점이 느껴졌다.
모닝빵이라는 아침 루틴과 오늘 목적지와 내 위치의 날씨를 기반으로 준비물을 추천해주는 서비스이다.
이 프로그램은 페어 프로그래밍을 통해서 개발을 했는데, 그걸 이제 제미나이에서 단순한 프롬프트로 개발을 했었던 프로그램이다.
시작하기 전에 서로가 가진 공통적인 문제점을 찾아보고 그 문제를 해결할 수 있는 프로그램을 만들기로 했다.
개발하는 과정에서 서로가 가진 좋은 프롬프팅 전략을 사용하고 개발을 하며 "진짜 딸깍의 시대가 온건가?"라는 생각이 많이 들었다.
연극이라는 단어를 들었을 땐 "후.. 진짜 어떡하지?"라는 막연한 생각밖에 안들었다.
그래도 앞에 나서기를 좋아하고, 웃기는 걸 좋아하는 나로써도 연기를 해야한다는 것이 정말 쉽지는 않았었다.
이런저런 의견을 내면서 "택시"라는 주제가 금방 생겨서 대본 준비와 연극 준비를 많이 할 수 있어서 다행이었다.
(PS. 연극 준비할 때 대본치는 걸 절반은 애드리브를 쳤었던 것 같다.)
실제로 연극하는 날짜가 다가오자 강남 연습실을 빌려서 가서 연습도 했었다.
태어나서 처음으로 연습실이란 곳에 가봤고 정말 신기했고 가서 정말 연습도 연습이지만 재밌게 놀았던 것 같다.
그 이후로 연극은 성황리에 잘 마무리가 되고 연습 때에 잘 했었던 애드립이 한번 본 무대에서는 살짝 뒤섞여 나왔었긴 했었지만, 자연스럽게 그래도 넘어가서 아무도 모르게 끝났었다.
소프트 스킬이라는 단어를 얼핏 들어보긴 했어도 그걸 "배운다"라는 것은 처음엔 크게 와닿지 않았던 것 같다.
왜냐하면 나는 충분히 잘 하고 있다고 생각했는데, 이런저런 얘기를 해보니 상호 소통뿐만 아니라 편하게 자신의 장/단점과 솔직하게 대화할 수 있는 "분위기"를 조성하는 것도 정말 중요하다고 생각이 들었다.
평소의 "나"였다면 "이런 분위기를 형성을 했었던가?"라고 생각을 해봤을 땐, 아니라고 답을 할 것 같다.
변명(?)을 해보자면 분위기를 형성하기 전에 저렇게 장/단점을 솔직하게 얘기하는 분위기가 형성된다고 느꼈을 땐 항상 술을 몇잔 마시고 나서 그런 분위기가 형성이 됐는데, 현재로서는 그렇지 않고는 하기 쉽지 않다고 생각하는 것 같다.
(PS. 술은 소프트 스킬 향상 도구인 것인가?)
"심리적 안전감"이라는 단어를 얘기해주셔서 무엇인지 자연스럽게 알고자 했고 연극을 하고 난 후에는 "이것이 어떻게 적용이 됐나" 생각해봤다.
심리적 안전감이란 "내가 실수해도, 모르는 걸 물어봐도, 다른 의견을 내도 이 팀은 날 깔보거나 무시하지 않을 거라는 믿음"이라고 얘기를 해주셨다.
자연스럽게 생각이 떠오른 것은 연극을 통해서 실수를 해도 아무도 나무라지 않고, 연습을 할 때 모르는게 생겨도 자연스럽게 물어보면서 자신의 약점을 드러내더라도 아무도 지적하지 않는다는 것을 실제 상황으로 이해할 수 있게 만든 것이 "이 연극이지 않을까"라고 생각이 들었다.

블랙잭이라는 미션을 드디어 시작하게 됐다.
온보딩이 끝나고 정식적(?)으로 시작하는 미션이어서 기대 되기도하고 아직 부족한게 많은데 페어 프로그래밍을 할 때 "도움을 줄 수는 있겠지?"라는 생각도 들었다.
단순히 자바라는 언어를 공부한지 오래되지 않아서 나름의 철학이 잡혀있지 않아서 계속 좋아보이는 것만 따라가는 시선이 있었다.
토론 활동을 통해서 규칙을 세우는 과정이 있었다.
어떤 상황이 닥치면 그 상황을 해결하거나, 개발을 할 때 해야하는 규칙을 토론을 통해서 정했고 최대한 규칙이 생기면 페어 프로그래밍 때 의식적으로 하려고 노력했다.
솔직히 첫 페어 프로그래밍은 나의 의견이 조금 강했었던 것 같다.
그 때 당시에 나의 생각은 "현실 세계의 문제를 해결하기 위한 도구"가 소프트웨어이기 때문에 현실 세계에 있는 개념을 코드에 녹여내도록 했었던 것 같다.
딜러는 카드 덱을 가지고 셔플을 하는 방식이든 이렇게 현실처럼 코드가 동작 될 수 있도록 진행했었던 것 같다.
그러니 개발을 하는 과정에서 프로그래밍 요구사항이 지켜지지 않았고, 코드만 봤을 땐 남이 보기에는 쉽지 않았을 수도 있을 것 같다고 생각이 들었다.
왜냐하면 현실을 고증하려고 많은 노력을 기울이다보니 여러 객체지향 원칙과 클린코드 규칙이 많이 깨지는 경우가 발생했다.
그래도 어찌저찌 코드를 작성하고 나서 PR을 날리고 현업에 있는 코드 리뷰어에게 코드를 리뷰받을 수 있는 좋은 사이클 과정이 있었다.
페어 프로그래밍 과정에서 Service 계층을 도입할지 말지 의견이 갈렸었는데, 리뷰어는 "의도가 있으면 도입해도 상관없다"라고 답을 주셨다.
그래서 자연스럽게 "의도"에 대해서 많이 생각해봤고, 어떠한 기능을 만들더라도 관용적으로 쓰는 것이 아니라 "의도"를 가지고 하는게 중요하다고 생각이 들었고, 이유는 단순하게 코드에는 정답이 없으니 내가 "~~이런 의도를 가지고 ~~썼고, ~~게 쓰면서 더 좋았다."라고 답을 하는게 정말 중요하다고 생각했다.
그러다보니 "객체지향은 뭐지?", "클린코드를 왜 써야하지"라는 생각이 이어지다보니 "객체지향의 사실과 오해"라는 책을 읽게 됐다.
거기서 자연스럽게 "객체는 자신의 역할과 책임이 있으니 서로 메시지를 주고 받으며 하는 것이 중요하다"라고 개인적인 철학이 조금 세워진 것 같다.
솔직히 말해서 선택미션 기간에는 선택미션을 집중하지 못했던 것 같다.
그냥 얼른 끝내고 내가 할 걸 하자라는 생각이 들었고, 블랙잭 미션을 하면서 아직 내가 코드 작성하는 스킬이 많이 부족한걸 느꼈고, "이 상태라면 나 취업할 수 있을까?"라는 생각이 많이 들었기 때문에 메타인지를 해봤던 것 같다.
개인적으로 선택미션도 중요했지만, 메타인지를 했던 과정이 정말 소중했던 것 같다.
뭔가 처음 딱 우테코에 입성하기 위한 목적은 "취업을 할 수 있는 포트폴리오"라는 키워드에 집중하며 들어 왔던 것 같다.
그러다보니 내가 가지고 있는 스펙이 어느정도인지 파악하기 위해서 자연스럽게 자소서를 써보려고 했다.
내가 무엇을 얼만큼 했고, 어떤 과정을 겪었는지 작성하고, 취업하기 위한 프로젝트는 얼마나 있는지 작성해봤다.
프로젝트를 작성하려고 보니 하나도 나에겐 작성할 수 있는 프로젝트가 없다는 걸 알았다.
그래서 자연스럽게 기술적인 메타인지 즉, 내가 어떤걸 채워나가야 할 지를 알 수 있어서 그렇기에 다른 크루들도 사이드 프로젝트를 하는 것이 많고 막 사용자가 생기는 서비스를 실제로 사용하고 있다보니, "나도 이런 취업용 프로젝트 서비스를 만들어 봐야겠다"라는 생각이 크게 들었고 실제로 행했다.
주변에 내가 어떠한 문제를 겪고 있었는지 찾아보기 시작했다.
그래서 기술적 메타인지를 통해 내가 무엇을 채워나가야 할지 알 수 있었다.
주변 크루들도 사이드 프로젝트를 많이 하고 있었고, 실제 사용자가 생기는 서비스를 운영하는 경우도 있었다.
그 모습을 보며 '나도 취업용 프로젝트 서비스를 만들어봐야겠다'는 생각이 크게 들었고, 실행에 옮겼다.
그리고 UI/UX도 불친절했기 때문에 이러한 문제를 같이 수정해보기 시작했고, 프론트엔드 지식은 하나도 모르기 때문에 AI를 활용하여 프론트를 개발하고, 백엔드는 AI와 함께 물어보고 코드를 직접 작성하며 개발하기 시작했다.
그러다보니 서비스도 커지고 내가 이걸 포트폴리오 용도로 사용할 수 있는 프로젝트가 됐다고 생각했다.

블랙잭과 똑같은 사이클을 돌며 장기 미션도 진행했다.
장기 미션이 시작되고 초반에는 같이 사이드 프로젝트가 재밌기도 하고, 해야할 것이라고 생각하고 계속 진행했다.
그러다 보니 페어 프로그래밍을 할 때 피해를 끼치고 있었고, "아 이게 지금 맞는걸까?"라는 생각이 들었다.
장기 미션 기간 중에 선수타 시간이 있었다.
선배와 얘기를 해볼 수 있는 시간이 생겼고, 링크와 선수타 이전에 자세히 한번 얘기해볼 수 있었던 시간이 있었다.
그 시간에 링크는 레벨 1에서 어떤 것을 했고, 어떤 목표를 도달했는지 자연스럽게 알 수 있었다.
그러다보니 링크가 했던 미션의 코드를 보며 링크가 설명을 해줄 때, 링크가 작성한 코드의 철학과 이유를 알 수 있었던게 너무 좋았다.
그러다보니 그렇게 철학을 만드는 방법을 어떻게 했는지 얘기도 해보고, "나만의 언어", "나만의 철학"을 만드는 것이 정말 중요하다고 생각이 들었고, 이를 만들기 위해서는 링크의 방식이 아닌 나의 방식은 어떻게 해야 할 지 생각해봤다.
선수타 시간이 왔는데, 개인적으로 나에게 가장 와닿았던 선수타는 링크, 돔푸, 칼리의 선수타 시간이 정말 유의미하게 다가왔던 것 같다.
링크의 발표에서는 자신만의 언어와 철학을 만든다는 메시지와, 칼리의 발표에서는 메타인지를 어떻게 잘 할 수 있는지에 대해서, 돔푸에게서는 하나의 송곳을 어떻게 잘 만들었는지에 대해서 정말 인상깊게 3명의 발표를 잘 들었었던 것 같다.
개인적으로 해석을 해서 정리해보자면 "메타인지"를 통해서 "무엇을?" 해야하는지 알고 "왜?"를 통해서 해야하는 이유를 생각해보고, 나만의 방식으로 "어떻게?"를 하는 것이 정말 중요하다고 생각했다.
그래서 자연스럽게 나의 언어가 생기면 무엇을, 왜, 어떻게라는 과정이 자연스럽게 할 수 있고, 하나의 송곳을 만든다는 말에 너무 동의를 해서 앞서말한 과정을 통해서 하다보면 "그것이 나의 송곳이 될 수 있겠다"라는 생각이 들었다.
선수타 발표 시간이 끝나고 선배들과 얘기할 수 있는 시간이 있었는데, "우테코 미션을 진행하면서 기술적 메타인지를 하고, 내가 부족한 프로젝트 경험을 쌓고 있는데, 이게 정말 맞는 과정일까요?"라는 질문을 던졌다.
답변으로는 "우테코에서만 할 수 있는 것을 해보는게 좋지 않겠냐"라는 답이 돌아왔고, 당시에 신선한 충격을 받았다.
그래서 집을 가며 생각했는데 "우테코가 아니더라도 나는 사이드 프로젝트를 할 수 있는데 왜 하고 있지?, 우테코에서만 할 수 있는건 뭐가 있지?"를 연쇄적으로 고민하기 시작했다.
이러한 사고 과정을 계속해보며 혼자 정의한 것은 "우테코는 미션, 레벨, 크루들로 현재 구성되어 있고, 같은 레벨의 미션을 진행하면서 생기는 궁금증을 다른 크루들과 토론을 하는 것"이 우테코에서만 진정 할 수 있는 것이라고 생각했다.
이런 깨달음이 있고 나서는 다른 사람의 철학과 언어를 알기 위해서 다른 크루들의 "장기 미션을 어떻게 구현했고, 왜 이런 방식을 택했나요"라고 물어보며 다녔던 것 같다.
DB를 붙여보는 추가적인 과정이 있었는데, JDBC의 키워드와 기술을 잘 모르는 "나"를 마주볼 수 있었다.
그러다보니 단순하게 일단 구현은 했지만, 왜 이렇게 구현했는지를 얘기할 수 없었다.
그래서 일단 PR을 날리고 피드백을 받았는데 JDBC에 관한 내용을 많이 코멘트를 달아주셔서 자연스럽게 공부해볼 수 있었다.
그러다보니 나에게 지금 정말 필요한 기술이라고 생각이 들었고, 자연스럽게 JDBC 기술의 개념에 대해서 궁금증이 생겼고, 왜 이러한 형태로 구현했는지를 찾아보기 시작했다.
그러다보니 선수타에서 작성한 "나만의 언어 찾기"와 연장하여 자연스럽게 나에게 가장 잘 맞는 학습 방법을 찾을 수 있었고, 그것을 통해서 나만의 언어로 정리하다보니 남들에게 설명을 정말 쉽게 해줄 수 있었던 과정이었다.
추가적으로 자연스럽게 DB에 관심이 생겨 스터디에도 합류하기로 했다.
개인학습을 그래서 자연스럽게 SQL을 학습해보려 했으나, 검프와의 원온원을 통해서 "목표"가 없다고 얘기를 해서, 정말 내가 목표가 없었던 것일까를 고민도 해보고 이런 과정을 통해서 내가 그래도 나름 메타인지를 통해서 목표를 잘 세우고 있었다고 생각을 했었다.
하지만 그게 모든게 너무 추상적이다보니 확실하고 현실적인 목표가 아니어서 목표가 없다라는 느낌을 줬던 것 같다.
그래서 로치와 대화를 했는데, 나와 정말 상황이 정반대라는 것을 느꼈다.
로치와의 대화를 하면서 나랑 정말 반대라는 생각이 들었던 이유는 나는 이것을 왜 해야하고 무엇을 해결하기 위해서 하는 목적성이 뚜렷했으나 목표가 없었다.
하지만 로치는 하나의 현실적인 목표를 세우면 일단 쉽고 빠르게 목표에 도달하는 방법을 제일 잘 하고 있었던 사람이라고 느낌을 받았다.
그러다보니 나는 목적성은 뚜렷한데 목표가 없었고, 내가 생각해봤던 로치는 목표가 확실하나 목적성이 크게 보이지 않았던 것 같았다.
그러다보니 자연스럽게 대화를 통해서 목표를 두는 것이 엄청나게 많은 지식 속에서 목표라는 울타리를 두어서 울타리 내에 있는 학습만 하면 나의 목적성과 합쳐지면 좋은 시너지를 낼 수 있다고 생각했다.
이러다보니 현실적인 목표를 잘 세우면 내가 해나가야 할 것이 어떤 것인지 보이고, 이러한 과정 속에서 내가 이걸 왜 하고 있는지를 잘 알 수 있을 것 같다고 느꼈다.
이렇게 대화를 나눈 후에 혼자 내가 무엇을 하고 싶은지 목표를 한번 세웠다.
내 답은 "자사 서비스가 있는 회사의 백엔드 개발자로 취업"이라는 현실적이고 확실한 목표가 생겼다.
그런 목표가 생기다보니 이러한 회사가 요구하는 요구사항이 무엇인지 찾아보고, 공통적으로 요구하는 것은 어떤 것이고, 그런 요구사항들이 왜 필요한지도 알 수 있었고, 내가 어떻게 공부해나가야 할 지를 알 수 있었다.
아직은 완벽하게 다 찾지는 못했지만 이번 방학을 통해서 열심히 목표를 세워 올 예정이다.
레벨 1의 나를 한 문장으로 정리해보면, "왜"는 있었지만 "어디까지"는 없었던 사람이었다.
우테코에 들어오기 전의 나는 "대한민국 최고의 부트캠프에서 좋은 회사로 취직하는 개발자가 되겠다"는 목표 하나만 들고 왔다.
그리고 "붙었다"는 안도감, "뭐부터 해보지"라는 설렘, "이것저것 다 해야지"라는 욕망이 순차적으로 밀려왔던 것 같다.
그 욕망은 자소서를 써보며 "나는 많은 것이 부족하다"는 절망으로 바뀌었고, 동시에 "우테코는 이것저것 해볼 수 있는 샌드박스 같은 존재"라는 희망과 겹쳐져서 사이드 프로젝트를 시작하는 동기가 되었다.
그렇게 블랙잭 이후부터 선택미션과 사이드 프로젝트를 병행하며 "나는 슬기롭게 잘 하고 있구나"라는 안정감에 잠겨 있었다.
하지만 장기 미션이 시작되면서 사이드 프로젝트가 평일까지 이어졌고, 페어 프로그래밍에 집중하지 못하는 스스로를 마주하게 되었다.
그 감정에 솔직해지는 대신 "내가 잘 모르니까 배워야지"로 치환하며 넘어갔다.
그렇게 "머리로는 이해했지만 내가 얻어간 건 뭘까?"라는 질문에 답하지 못한 채로 시간이 흘렀다.
생각의 전환점은 선수타에서 왔다. 나만의 언어와 철학을 만들라는 말, 우테코에서만 할 수 있는 것에 몰입하라는 말이 머릿속에 박혔다.
그때부터 "왜 이렇게 했지?", "내가 무슨 의도로 이 코드를 썼지?"라는 꼬리 질문을 내 코드에 던지기 시작했다.
『객체지향의 사실과 오해』를 읽으면서 "나는 객체 간의 협력과 메시지로 소통한다"는 철학이 조금씩 생겨났고, 그제서야 깨달았다.
"나는 정용태로서는 성장했지만, 흑곰이라는 개발자 자아로서는 성장하지 못했구나."
이 깨달음 이후 모든 것에 "왜?"를 던지기 시작했다. JDBC를 공부할 때도, 내 코드의 의도를 설명하려 할 때도, 꼬리에 꼬리를 무는 질문이 결국 DB 공부까지 이어졌고, 남들에게 내 의도를 설명할 수 있게 되었다.
그런데 여기서 또 다른 벽을 만났고 SQL 공부를 하던 중 검프와의 원온원에서 "목표가 뭐냐"는 질문에 나는 제대로 답하지 못했다.
목적성은 분명했지만, 현실적인 목표가 없었던 것이다. 로치와 대화하면서 이게 더 선명해졌다.
로치는 나와 정반대로, 현실적인 목표가 확실한 사람이었다. "왜"만 쫓던 나는 해야 할 것이 끝없이 늘어나 "이걸 다 할 수 있을까?"라는 불안에 빠져 있었다.
그래서 지금의 결론은 이렇다.
"왜?"라는 사고와 "확실하고 현실적인 목표"가 함께 가야 한다.
중간에 "내가 잘 하고 있을까?" 흔들릴 때, 예전에 답한 "왜"가 나를 다시 동기부여시켜주고, "확실한 목표"는 다른 길로 새지 않도록 울타리가 되어준다.
그래서 남은 레벨 1과 방학은 "어디까지"를 채우는 시간이 될 것 같다.
레벨 2에서는 이 둘을 같이 굴려보고 싶다.
미션이 주어지면 "왜 이렇게 풀고 있지?"를 코드 한 줄마다 던지고, 동시에 "이 미션에서 어디까지 도달할 건지"를 명확하게 정해두는 것이다.
그렇게 하나의 미션이 끝날 때마다 "내가 뭘 얻었는지"를 내 언어로 설명할 수 있다면, 그게 쌓여서 나의 송곳이 될 거라고 믿는다.
혹시 이 글을 읽는 다음 기수가 있다면, 딱 하나만 묻고 싶습니다.
"지금 쓰고 있는 그 코드, 왜 그렇게 썼는지 설명할 수 있나요?"
이 질문에 답할 수 있다면, 이미 잘 하고 있는 겁니다.
자신을 너무 의심하지 말고 굳건하게 자신의 템포대로 잘 나아가면 좋겠습니다.