본문 바로가기

개인적인 글

이제서야 쓰는 우아한 테크코스 3기, 프리코스 참여 후기

 벌써 우아한 테크 코스 3기의 프리코스가 끝난 지도 3주가 지났다. 운 좋게 합격해 본과정에 참여하기까지도 3주. 원래는 결과 나오기 전에 작성해 두려고 했는데 게으름을 피우다 보니, 시간이 이렇게 되어있었다. 그래도 좋은 경험이었던지라 기록은 남기고 싶어서 이제야 글을 써본다.

 

| 지원, 그리고 합격

 우아한 테크코스의 지원은 자기소개서와 코딩 테스트로 이루어졌다. 자기소개서 작성은 꽤나 급하게 작성했는데, 제출하는 날 까지도 지원을 할지 말지 고민했던 것 같다. 게으른 것도 있었고. 그래도 내가 쓸 수 있는 최선을 다해서 작성했다. 지금 와서 읽어보면 1000 자라는 짧은 글 안에 많은 것을 넣으려고 노력했었던 것 같다. 질문은 프로그래밍 학습 과정과 본인의 역량, 프로그래머가 되려는 이유, 몰입한 경험, 우 테코에 참여하려는 이유로 이루어져 있었던 것 같은데, 나는 그 간의 내 경험을 솔직하게 작성했다.

 

지원서 작성

노션에 어떻게 백업은 해둬서 심심할때 다시한번씩 읽어보는 중이다. 글 더 잘 쓰고 싶다..

 어떻게 작성했는지 자기소개서를 올릴 생각은 없지만, 내가 작성하면서도 이런것들을 적어도 되나? 이게 맞는 건가 싶었던 것들이 있어서 다음 누군가에게 도움이 될까 싶어서 간략하게 내가 어떻게 프로그래밍을 접하고 학습했는지, 어떤 경험을 가지고 지원했는지 등은 간단하게 적어보려고 한다. 사람들마다 경험이 달라서 큰 도움은 안 되겠지만, 그냥 이런 사람도 있었다 하는 정도로 읽어 주시면 좋을 것 같다.

 

  나는 별로 재밌어 하지는 않지만, 사람들은 꽤 내 성장과정..? 내 생활..? 을 재밌어한다. 그래서 간단히 적어보자면, 나는 중학교 때부터 flash로 게임을 만들고는 했다. 부끄럽지만 주전자 닷컴에 게임을 올리고, 추천을 많이 받아서 네이버의 게임랜드에 올라가도 있었던 것 같다. (지금은 없어졌지만) 그때에는 그냥 만드는 것이 즐거워서, 필요한 코드를 서로 강좌라는 형태로 주고받고 사용법도 서로 물어가면서 배웠던 것 같다. 내가 대학을 진학하고자 했을 때에는 컴퓨터학과라는 것이 있다는 것도 몰랐다. 이과라고 하면 물화생지가 전부일 줄 알았던 그때 그 시절, 나는 내가 재미있는 것을 하고자 신문방송학과, 미디어학부 등을 희망했고 그에 맞게 대학을 진학했다. 그렇게 미디어 관련 강의를 듣다가 빅데이터나 통계에 흥미를 가지고, 컴퓨터 교양 수업을 듣고 나니 이게 은근 적성에 맞더라. 재미있게 듣다 보니 해당 수업의 조교를 하기도 했었고, 결국 이중전공으로 컴퓨터 학과를 선택했다. 그러고 나서 다양한 것을 배웠다. 인공지능, 프론트, 백 흥미가 있는 것들은 다 배워봤던 것 같다. 잘하는 건 아니지만 그러면서 아 내가 프론트에 조금 더 맞고, 재미를 느끼는구나를 느꼈었던 것 같다. 쓰다 보니 재미있는데, 나중에 인생 회고록을 작성해야 하나 싶다.

 

 우테코 이전까지의 내 프로그래밍과 관련한 역량은 학교의 이중전공, 42 seoul, 프로젝트 경험 정도가 있다. 일단은 이중전공으로 컴퓨터 학과를 하고 있었기 때문에 자료구조, 운영체제 등과 같은 기초 CS 지식을 가지고 있었고, 20년도에 운 좋게 42 seoul 본과정에 합격하게 되어 해당 과정도 이수하고 있는 중이었다. 과제는 학교 수업 듣는다고 과제 거의 안 해서 지금 부랴부랴 하는 중이지만, 42 seoul에서 만난 사람들과 웹 프로젝트를 진행했고, 진행하고 있었다. 바닐라 자바스크립트로 서비스를 짜 본 적은 없지만, React.js를 이용해서 간단한 서비스(회원가입), 웹 기반 게임을 제작하고 있었다. 그래서 아예 웹에 대한 지식이 없다고는 못할 것 같지만, 디자인 패턴이나 객체지향이나 이런 것들은 하나도 모르는 상태로 시작했다. 이 부분은 프리코스를 참여하면서 아 내가 많이 부족했었구나를 느꼈던 부분이기도 하다.

 

 몰입했던 경험으로는 인형뽑기를 만든 일을 작성했다. 1년 이상 투자한 것을 작성하라고는 했지만, 1년 넘게 하나에만 몰입해본 경험이 없어서 19년도에 메이커 스페이스에서 학생 스태프로 일하면서 약 10개월 정도 투자해서 제작한 인형 뽑기에 대해 작성했다. 이때도 참 많은 삽질을 했는데, 왜 만들고 싶었는지, 어떻게 제작했는지, 하면서 어려운 점은 무엇이었고 그것을 어떻게 해결했는지에 대해 작성했던 것 같다. 이 부분에서 최소 1년이라고 되어 있어서 이 경험을 작성해도 될까? 싶었지만 되더라. 사실 나도 왜 되었는지는 모르겠지만 좋게 봐주신 것 같다. 

 

 작성하지 못한 부분은 깃허브나 블로그 주소, 노션을 넣어도 된다고 되어있어서 노션으로 간단하게 나를 설명하는 페이지를 작성했다. 위에 프로그래밍과 관련한 경험 말고도 영화제작, 메이커로써의 활동, 맥주 양조 등 나를 표현할 수 있다고 생각하는 것은 다 적었었던 것 같다. 어떻게든 다 때려 넣었다고 해도 과언이 아닐 정도로 이것저것 사진과 간단한 1-2줄의 설명을 첨부했다.

그때 같이 첨부했었던 노션 페이지. 제목을 뭐로 해야 하나 하다가 포트폴리오라고 하기도 뭐해서 :) 라는 제목을 지어놓았었던 것 같다.

 

코딩 테스트

 코딩 테스트는 알고리즘이나 자료구조보다는 구현에 초점이 맞춰진 문제였다. 총 7문제 4시간이었고, 중간 조카님의 방문으로 6문제를 풀었다. 마지막 문제 거의 다 풀었었는데.. 아직도 아쉽다. 문제 난이도는 쉬운 편이었고, 그래서 다른 언어로 풀까 하다가 차피 난 떨어지겠지~ 하는 마음으로 자바스크립트 연습이나 하자하고 자바스크립트로 풀었다. 사실 메인 언어라고 할 것도 없었다. 이때도 바닐라 자바스크립트에 관한 지식은 기초 문법 정도라서 C랑 비슷하게 짰던 것 같고, 시간 복잡도나 그런 것들을 고민할 시간이 없기도 했다. 어떻게 6문제를 풀었나 싶기도 하지만, 시간복잡도 등을 조금 더 고려해가면서 짤 걸 하고 후회하기는 했다.

 

합격 메일

 진짜 발표하기 10분 전부터 떨었다. 이거 고질병인데 합격에 대한 기대와 상관없이 그냥 시간이 정해진 무언가가 있으면 엄청 떠는 병이 있다. 학교에서 학점 나오는 거 기다릴 때도 이러는데 진짜 손도 발도 다 떨었다. 3시에 온다면서! 왜 정시에 안 와요!!!! 42 seoul 클러스터에서 회의하다가 앗.. 곧 시간.. 이러면서 친구들이랑 호에에에에 하면서 봤다. 결과는 합격이었고, 뭐 잘못 온 거 아닌가 싶어서 프리코스가 시작하는 날 까지도 불안해했던 기억이 남는다.

사실인가 싶어서 10번은 넘게 다시 열어봤다. 

| 우아한 테크 코스 프리코스의 시작

 그런데 웬걸, 우아한 테크코스 기간이 학교 기말고사 기간과 겹쳤다. 프리코스는 11월 25일부터 12월 15일까지 진행되었고, 내 종강 날은 16일이었다. 진짜 환장하는 줄 알았지만 결국에는 둘 다 어떻게 어떻게는 했던 것 같다. 학점은 망했지만 그래도 큰 후회는 없다. 프리코스는 3주간 총 3번의 미션을 진행하는데, 이때 과제를 수행하면서 많은 것을 배웠던 것 같다. 위에서도 말했다시피 개발 경험은 있었지만 객체지향, 단일 책임원칙, mvp패턴, SOP 등은 과제를 하면서 처음 접했다. 그래서 하나하나 배워가면서 나중에도 볼 수 있도록 잘 적어놓아야지 했었던 것 같다. 프리코스 커리큘럼은 꽤 잘 설계되었다고 느꼈는데, 이런 부분에서 무식자인 내가 함수 분리, 모듈 분리, 데이터 관리 등 한 주 한 주 무리하지 않고 성장할 수 있게끔 만들어져 있다는 생각이 들었다. 아래는 과제에 대한 스포 아닌 스포 (어차피 공개 레포로 열려있었다) 지만 그냥 한주 한주 내가 어떻게 공부를 했었고, 어떤 걸 배웠는지만 간략하게 적어놓으려고 한다.

 

괜찮았던 1주 차 미션, '숫자 야구 만들기'

 

이때까지만 해도 천천히 배워나가면서 여유로웠다. 분명 그랬는데..

 첫 미션은 숫자야구 만들기였다. 이때에는 클래스, 객체라는 개념에 대해서 알고 있지 못했다. 그래서 객체를 분리하는 것보다는 함수를 잘 분리하는데 신경을 쓰면서 개발을 했다. 처음 접했던 것은 기능 명세를 작성하는 것이었는데, 어떤 기능이 필요할지를 고민해보고 글로 작성한 후 그에 맞게 개발을 하는 과정이 좋았다. 이전에 프로젝트를 진행할 때에는 작은 덩어리를 잡아서 그것을 단지 구현하는데 초점을 맞췄었는데, 기능 구현 목록을 작성하면서 어떤 구조로 프로그램이 만들어져야 하는지, 사용자 입력에 따라서 어떤 프로세스로 작업이 진행되는지에 대해서 생각해보고 이해할 수 있었던 것 같다.

 

 이때 처음 배운 기능이 또 있는데, 그것은 바로 서버를 열어서 확인하는 것.. 항상 VS Code에서 option + B를 눌러서 브라우저에 띄워서 보고는 했는데, 상호작용이 있는 경우에는 그것이 문제가 된다는 것을 알지 못했다. 그래서 CORS 에러가 나길래 왜지.. 했는데 로컬에서 서버를 열지 않고 요청을 보내게 되면 origin 이 null로 잡힌다는 것을 알았다. 웹에서 로컬 파일로의 접근을 막기 위해 SOP 가 적용되는데 이 부분에서 origin이 달라서 생기는 문제였다. 이때 SOP라는 개념을 처음 알았고, 서버를 열어서 실행시키는 방법도 처음 알았다. 진짜 이전에 개발 어떻게 한 거지 싶을 정도.

 

 이때에는 최대한 지치지 않도록 하루하루 꾸준히 조금씩 하는 것에 중점을 뒀던 것 같다. 배워야 할 것이 많기도 했고, document 들을 하나하나 천천히 읽어 보고 싶기도 해서 하루에 많은 기능을 구현하기 보다는 크게 기능을 나눠서 하루에 하나의 기능을 구현했다. 이 때 코드를 보면 아직도 아쉬운 점이 많다. 그래도 이때 코드랑 3주 차 코드를 비교하면 많이 발전했구나 싶은 생각이 든다.

 

모듈 분리, 객체지향에 대해 처음 생각해 보게 해 준 '자동차 게임'

README.md 를 예쁘게 쓰려고 노력했던 2주차

 1주 차에서는 함수를 분리하는 것에 초점을 맞췄다면, 2주 차에서는 모듈 분리에 초점을 맞췄다. 물론 자동차 객체와 메인 게임 객체 두 개로 밖에 분리하지 않았다. 이때에도 모듈을 분리한다는 것이 무엇인지 이해가 안 가서, 결국 제출 하루 전인 월요일에 '객체지향의 사실과 오해'라는 책을 다 읽었다. 책을 읽으면서 가장 도움이 됐던 부분은 뒤편의 코드와 함께 설명되어있었던 부분이었다. 앞부분은 아 이런 게 객체지향이구나 하고 개념적으로 설명한다면, 뒷부분에서는 실제 코드와 함께 해당 상황의 문제를 어떻게 해결했는지가 나와있어서 이 부분이 많은 도움이 됐다. 비슷한 책인데 코드로 예시가 더 많이 나와 있는 책인 '오브젝트' 도 구매했으나, 읽을 시간이 없어서 시험 당일날 아침에 잠깐 읽었다. 

 

 아 이때 함수들 보면 static의 향연인데, 1주 차에는 Google convention을 쓰다가, 2주 차에는 Airbnb convention을 이용했는데, 모듈의 값을 참조하지 않을 거면(this를 이용하지 않을 거면) static으로 구현을 해야 한다는 거다. 그래서 엥 뭐지 하고 다 static으로 구현했던 것 같다. static을 이용하면 new를 쓰지 않고 가져다 쓸 수 있다는 것도 신기했다. 과제 제출하고, 시험이 끝난 후에 static에 대해서 찾아봤는데 이렇게 짜는 게 아니었구나 하고 생각했다. 무조건 안 쓰는 게 좋다! 이런 건 아니지만 안 써도 될 곳에 쓰고 그랬어서 지금 읽어봐도 왜 이렇게 짰지 싶은 정도(ㅋㅋㅋ)

 

 2주 차 과제에 대해서는 적을 게 없는 것이, 자동차 모듈을 분리했다는 것 말고는 1주 차와 크게 차이가 없었다. 결국 객체지향에 관한 개념을 찾아본 것도 과제 제출 직전이고, 예외사항이 계속 나와버리는 바람에 그거 고치느라 구조를 손 볼 시간이 없었다. 비록 변명이긴 하지만, 그랬다. 그리고 화요일 과제 제출 후 수요일 시험이라서 학교 시험공부를 하는데 시간을 더 썼던 것 같기도 하다. 조금 더 일찍 공부했다면, 구조를 손 보고 제출할 수 있었다면 하는 후회가 남는 과제였다. 그래도 덕분에 모듈, 객체 그리고 서비스의 구조에 대해서 생각해 볼 수 있었던 과제였다.

난이도 급 상승, 3주 차 '지하철 노션도 미션'

이때 작성했던 플래너. 정말 정신 없는 하루를 보냈던 것 같다.

 이때부터였을까요... 기말을 던질까 고민한게. 1, 2주차 미션 난이도는 크게 어려운 편이 아니었다. 근데 웬걸 3주 차 과제가 진짜 너무어려웠다. 처음 과제가 나왔을 때 부터 당황했었던 기억이 선명하다. 이때 커밋만 100개를 넘게 했다. 이때 시도 해 본것은 MVC 패턴을 적용해 보는 것이었다. 3주차 미션이 시작 한 날, '인간 컴퓨터 상호작용'이라는 강의의 기말고사가 나왔는데, 공부하다 보니 MVC 패턴에 대한 내용을 공부하게 되어서 아 한번 적용해봐도 좋겠다 하고 사용했었던 것 같다. 물론 아직도 이렇게 쓰는 게 맞는지는 잘 모르겠다. 혼자 공부하고 3주 차는 전체 피드백도 없었다 보니 이게 맞는지 아닌지를 잘 모르겠어서 이때 코드 리뷰의 필요성을 느꼈다. 혹시 나라도 합격해서 현직자 분들에게 리뷰를 받을 수 있다면 좋겠다는 생각이 들었다. 

 

 그래도 덕분에 이것저것을 배울 수 있었는데, 그중 와 이거 정말 궁금했는데 싶었던 것도 있었다. local storage와 data 속성에 관한 것인데, 이전 학교 과제를 진행하면서 사용자가 입력한 정보를 어떻게 저장하지 하면서 별도의 Json 파일로 저장해서 사용하려다가 CORS 에러에 가로막혀서 결국 그 부분은 완성하지 못하고 냈었다. 3주 차 과제를 구현하면서 아 그때 했던 과제를 다시 구현해 봐야겠다는 생각이 들었다. 많이 아쉬워했던 과제였는데 덕분에 제대로 완성할 수 있을 것 같다. 아 근데 이거 굳이 local storage 안 쓰고 export를 이용해서 json 형식이 아니라 js 파일로 둬서 이용해도 되는 문제였더라.. 이건 또 시험 보다가 알았다.

 

 진짜 이때에는 하루에 5-6시간씩 이것만 구현했다. 근데 또 덕분에 아 나 이거 재밌어하는구나를 깨달았다. 완전 백지에서 시작해서 기능을 구현해가는 것도, 데이터 구조를 어떻게 해야 이용하기 더 편할까, 각 모듈들이 어떤 연관 관계를 가지고 있어야 할까 등을 고민하는 과정 과정이 재미있었다. 이때 처음으로 우 테코 떨어져도 후회는 안 하겠다, 다행이다 하는 생각을 했던 것 같다. 합격 불합격과는 상관없이 아 이 분야를 더 많이 공부해 봐야겠다는 의욕이 생겼다. 기말고사 보고 개발하고 보고 개발하고 하면서 정신없는 한 주였지만 힘들다기보다는 즐거운 한 주였던 것 같기도..?

마지막 시험

 내가 우아한 테크 코스의 프리코스에 참여하면서 가진 목표는 단 하나였다. 마지막 시험에서 스스로 후회하지 않을 결과를 내기. 합격과 불합격보다는 내 실력이 향상되었고, 그 결과를 스스로 만족하고 싶었다. 다행히도? 시험을 보는 5시간 동안 최선을 다 했고, 기능 구현을 했고, 내가 처리할 수 있다고/처리해야 한다고 생각되는 예외사항은 전부 처리했다. 아직도 뭐가 좋은 구조인지는 모르겠다. 그래도 첫 주보다는 많이 발전했다고 느낄 수 있었다. 와중에 변수를 초기화하는 법 등은 또 새로 배운 것도 재미있었다. 그냥 하루짜리 과제를 한 느낌.. 즐거웠다.

| 후기

 참여하는 내내 잘 설계된 과정이라는 생각이 들었다. 매주 과제 요구사항과 함께 이 과제를 하기 위해서 필요한 개념을 제시하고, 스스로 공부할 수 있도록 해준다. 덕분에 혼자서 학습해야 하는 시간이었지만, 작은 길잡이와 함께 앞으로 잘 나아갈 수 있었다. 하나 아쉬운 것은 3주 차와 시험 피드백이 없다는 것이었는데, 1, 2 주차에 비록 전체 피드백이었지만, 해당 피드백이 도움이 되었기에 가장 어려웠던 과제들에 대한 피드백이 없는 것이 조금은 아쉬웠다. 

 

 3주간 많이 발전했다고 생각한다. 아직 많이 부족하지만 앞으로 내 진로에 대해서 어떻게 해야 할지, 공부는 어떻게 하는 것이 좋을지, 내가 어떤 부분이 부족한지 등을 되돌아보고 생각해 볼 수 있던 시간이었다. 이전에 다양한 프로젝트들을 진행하면서도 이게 맞는 건가 싶은 의구심이 들었었는데, 그런 부분들에 대한 고민이 어느 정도 해결되기도 했다. 후기라고 적는 칸에 말이 이렇게 적은 건 위에 이미 다 적어서인 것 같다. 

 

 운 좋게도 본 과정에 합격해서 현재는 시작하기 전에 쉬는 시간을 가지고 있다. 밀린 42 과제도 해야 하고, 진행하던 프로젝트들도 잘 마무리하고 싶다. 요즘 CS 도 다시 공부해보고 있는데 시간에 쫓긴다는 느낌 없이 스스로 공부하고, 프로젝트나 과제를 진행하면서 느꼈던 의문점이 해결되기도 하면서 흥미로운 시간을 보내고 있다. 시간이 없어 읽지 못했던 책들도 차근차근 하나씩 볼 생각. 집 정리도 좀 하고. 막 의욕이 넘치는 건 아닌데 그냥 내 주변을 돌아보고 정리하는 시간을 가지고 있다. 2월이 시작되면 또 바빠질 텐데, 어떻게 대비하는 것이 좋을지도 고민 중이다. 암튼 더 헛소리 하기 전에 그만 해야지. 10개월 동안의 여정 내내 함께 할 동료들이 좋은 사람이길, 내가 그분들에게 좋은 사람이 될 수 있길 바라본다.