시작
우아한 테크코스는 약 10개월 동안 B2C 서비스 개발자의 역량을 양성하는 것을 목표로
하는 교육 프로그램이다. 절차는 서류접수
(지원서), 온라인 코딩테스트
를 거쳐 1자 합격자를 발표하고,
1차 합격자를 대상으로 프리코스
를 3주간 진행한 후에 최종 오프라인 코딩 테스트
(이번엔 코로나 때문에 온라인이었다)를 본 후,
최종 선발자를 대상으로 내년(2021.02.02~
)부터 본격적인 우테코 3기 과정을 시작한다.
자세한 내용은 여기에서도 볼 수 있다.
과정
졸업까지 23학점 정도만을 남겨놨지만, 전공 학점이 부족한 관계로..(하지만 소수과라 전공은 쉽게 열리지 않는다..^_ㅠ) 15학점만 듣게 되었다.
중간고사까지는 꽤 널널해서 모바일 게임(원신)만 주구장창 하다가 뭐라도 해야겠다 싶어서 이것저것 넣어보았다.사실 우테코를 알게된 것은 그리 오래되지 않았다. 전공 학생회에서 추천 대외활동이라고 전체톡방에 올려줘서 그 떄서야 알았다.(사보 1기 최고) 그리고 서치하면 할수록, 하고 싶다는 마음이 많이 들어서 많은 고민 끝에 지원하게 되었다.
사실 집에서 취업 압박이 조금 있어서 걱정이다.
이제 4학년 시작했는데, 누구는 딸이 얼마씩 준다, 이제 일 안하고 쉬고 싶다 면접 컨설팅 받아야 하는 거 아니냐.. 오픽 학원을 알아봐야 하는 것 아니냐.. 등등.. 요새 취준시장에서 여자 나이 27이 사기업 신입 마지노선이니 그 떄 부턴 공기업이나 고시 공부 해야한다는 말(진짜인진 모르겠다)들과 함께.. 많은 고민들이 생기는 것 같다.친구(사실 한 살 아래지만 별 상관 안 한다)한테 이런 이야기를 했더니, 언니가 이상한 데에 시간 쓰는 것도 아니고 자기계발인데 무슨 문제냐는 말을 들었다.
반대로 내 친구가 이런 고민을 하면 나는 뭐라고 말 할지 생각해보니까 나도 비슷한 말을 할 것 같다.합격할 보장도 없지만, 이런 경험없이 신입 입사하면 그게 더 힘들지 않을까? 내가 지금 아니면 어떻게 이런 경험을 할까?하는 고민과 함께 지원했던 것 같다.
1차 합격
지원서
지원서 자소서 문항은 우아한 테크코스 홈페이지에서 미리 생각해 볼 질문들
와 거의 똑같은 내용이었다. 사실 미리 생각해 볼 질문들에 대해서 많이 생각해 본 후여서
개인적으로 그렇게 어렵지는 않았다.
문제 수에 비해 문항 당 글자수가 많은 것(사실 최소 글자수가 아니라 몇 자 이내였지만, 거의 비슷하게 맞추는 게 좋으니…) 같았지만, 사실 내가
쓸 내용이 많은 항목은 오히려 뭘 뺴야하나 싶기도 했다.
글을 쓰면서 옛날 티스토리 블로그에 들어가 보았다. 문득 저 때는 뭐가 저렇게 좋아서 제대로 이해도 못하면서
해킹 공부를 열심히 했을까..라는 생각이 들었다.
그냥 그 때는 그게 재밌었다.. 지금은 어떤 기법들은 기억도 제대로 안 나고 블로그에 있는 내 글들을 보면서도 어떻게 이런 생각을 했을까 싶다.
아무튼 작년 2기 글을 서치해봤었을 때엔 1차 합격에 관한 피드백 전체메일에서, 코딩 테스트는 일정 기준 이상만 되면 되고, 지원서에 더 많은 비중을 두셨다고 한다. 이번에도 그런지는 모르겠지만, 비슷했을 것 같다.
온라인 코딩 테스트
기억 상 7문제 정도였고, 4시간 정도 진행되었다. 원래 백준보다 UI가 개인적으로 편해서 프로그래머스를 더 좋아하는데, 프로그래머스에서 진행되어서 조금 안심이었다. 난이도는 프로그래머스 1~2단계 정도?인 것 같다. 참고로 나는 코테용 언어로 Python을 자주 사용하는데, 온라인 코테는 Python도 지원하였다.
그치만 코테 준비를 하나도 안하고 저번 코테(2020년 1월…) 이후로 처음 풀어보는 거라 생각보다 너무 못 풀었다.. 5개는 다른 테스트케이스도 통과 가능할 정도로 풀었던 것 같은데, 나머지 2개는 기본 테스트 케이스도 다 통과못했다. 하나는 뒷 부분만 손대면 됬었고, 나머지 하나는 풀다가 완전 잘못 생각해서 시간 내에 다 못 풀었다.
그래도 이틀 정도 준비할 것 그랬다.. 후기를 찾아보니 거의 다 풀어야 합격 가능하다는 얘기가 있어서 별 기대도 안하고 '아 방학땐 알고리즘 좀 해야지'
라고 느꼈다.
그래도 이번 방학 때 알고리즘 공부를 좀 하긴 해야겠다.ㅠㅠ
프리코스
1주차
코드는 여기에서 볼 수 있습니다.
지금 생각해보면 1주차는 참 그지같이 별 생각없이 했던 것 같다.
일단 최근에 개발은 맨날 웹 쪽만 해봤어서 '어ㅓ...? 자바 프로그램 세팅을...어떻게 하더라?'
하는 생각이 먼저 들었다.
생각해보니 순수 자바 콘솔 프로그램을 intelliJ로 해본 적은 없어서 그랬던 것 같다. 뭐 크게 문제 되지는 않았다.
과제 자체는 크게 어렵지 않았다. 다른 사람들 코드를 보면 괜히 참고하게 될까봐 아예 제출 후에 봤었는데
다들 너무 대단했다..
함수 분리를 하라길래 함수 분리만 해서 냈는데, 다들 클래스 분리도 열심히 하고..내 클래스는 120줄이고.. 심지어 어떤 분은
테스트 코드도 쓰셨길래 와 나도 썼어야 했나.. README.md 나만 너무 심플한가.. 하는 온갖 생각이 들다가 그냥 '제출했는데 어쩌겠어..'
하고 꺼버렸다.
1주차 전체 피드백 중 나한테 해당되는 것 같은 내용은,
- 일단 처음에 세운 계획을 바꾸지 말아얀 생각으로
README.md
를 너무 간단하게만 쓴 게 문제였고, README.md
를 좀 더 상세히 작성하지만, 너무 세세히 작성하지 않아야 하는데.. 이게 참 어렵다.- 이미 생성되어 있는
Scanner
를 다시 생성한 것도 코드 중복이 되어 문제였다. - 또한 변수나 함수 이름에 충분히 의도가 드러나면 주석을 달지 않아도 되며,
- 하드 코딩 문제는 항상 실수하는 것 같다.
과제를 하면서 내가 제일 어려워 하는 점이 변수 네이밍..과 커밋 메시지 쓰기라고 느꼈다.
피드백에서 변수 네이밍에 시간을 투자하라는 문구가 마음에 들었다. (나만 힘든게 아니구나..)
이후 오프라인 코딩에서도 구글링으로 변수 이름을 일일이 번역해보면서 했다.
그리고 1주차에서 AngularJS Git Convention
을 알게 되었고, 정~말 많은 도움이 되었다.
항상 커밋 메시지를 쓰면서, '아 이거 제대로 쓰는 거 맞나? 이런식으로 써도 되나?'
싶은 부분들이 많았는데, 이런 게 있을 줄 몰랐다. 진작 찾아볼 걸 그랬다^^
2주차
코드는 여기에서 볼 수 있습니다.
2주차는 과제 과정은 잘 기억이 안 나지만, 1주차에서 느꼈던 점들을 바탕 + 피드백 받은 내용으로 꽤 열심히 했던 것 같다.
2주차 전체 피드백 중 나한테 해당되는 것 같은 내용은,
- 다른 분들은 너무
README.md
를 상세히 작성해서 문제였던 것 같은데, 나는 좀 더 상세할 필요가 있다고 생각했다. - 값을 하드코딩하는 부분이 두 군데가 있었는데, 한 부분만 상수 처리했었다.
- 내가 사용하고 싶은
api
가 있는java collection
을 사용하는 것이 좋다. (ex :ArrayList.cotains(Object)
같은 것들) getter
를 사용하기 보다 객체에 메시지를 보내는 것이 좋다.- 비즈니스 로직과 UI 로직을 분리해야 한다(단일 책임 원칙,
toString()
도 이용하는 것이 좋다. ))
피드백을 보고 개인적으로 굳이 한 메소드를 위해서 이미 있는 필드를 따로 ArrayList로 만들어야 할까 해서 그냥 전체 검사로 중복 체크를 했었는데,
가독성 및 에러방지를 위해 java collection
을 적극적으로 활용해야 겠다는 생각을 했다.
그리고 개인적으로 객체에 메시지를 보내는 것이 좋다는 피드백이 가장 와닿았다. 생각지도 못했던 부분이었다.
3주차
코드는 여기에서 볼 수 있습니다.
맨 처음에 프리코스 문제들은 하루 1~2시간 투자하면 되는 문제라고 하셔서, 오프라인 코딩을 위해서는 4시간 안에 과제를 끝내야 하지 않을까 싶어
타임어택에 도전해 보았다.
당일 기말고사 시험이 끝난 이후 바로 시작했었던 것 같은데, 그 이전에 먼저 시작했어야 했다… 결국 시간내에 다 구현하지 못했었고,
일단 11시 59분에 급하게 냈다.
이후 새벽에 계속 하다가 예시 에러문구 출력 부분을 미처 파악하지 못한 걸 깨닫고(ㅎ아 throw하면 안되네.. 처음부터 다시할까…ㅎ), 엎고 다음날 일어나서 다 끝냈던 것 같다.
사실 너무 죄송해서..그냥 내지 말까 싶었는데, 시간 관리를 못한 내 탓인데, 아예 안 내는 게 더 성의없어 보일 것 같았다. 그래서 그냥 구현한 부분까지 하고 냈다.
에러문구 출력 부분을 잘못 파악한 걸 꺠달았을 때 그냥 끝까지 구현하지 말까 싶었는데, 재밌기도 하고, 이렇게 인풋 아웃풋이 정해져 있는 문제를 또 언제 풀겠나 싶어
끝까지 마쳤다. 사실 오프라인 코딩 문제가 이와 비슷했어서 다음날 끝까지 끝냈던 걸 잘한 것 같다.
다 내고 확인했을 때 다른 사람들의 코드를 살펴보니, 다들 또 엄청 잘하셨길래 놀라고, 많은 자극도 받았던 것 같다. 나는 아직도 클래스 분리가 익숙하지 않고, 특히 패키지를 생성하는 것에 뭔가 거부감이 들고 있다는 것이 확연히 느껴졌다.
그래서 제출 이후에 view
분리도 해보고 errorCase
클래스도 만들고, golang
에서 많이 쓰는 zap logger
느낌의 Logger
클래스도 만들어보았다.
음.. 그래도 아직 커밋을 좀 더 자주 해야할 것 같도 README.md
도 더 자주 업데이트 해야할 것 같았다.
오프라인(실시간 ZOOM) 코딩 테스트
테스트 이전
3주차는 피드백이 없었지만, 미션을 모두 구현하지 못했어도 좌절하지 말라는 따뜻한 위로와, 최종 테스트에 대한 내용이었다.
3주차 미션 공유 떄 이미 오프라인 코딩 테스트가 코로나로 인한 사회적 거리두기 방침에 따라 온라인 실시간으로 진행된다고 했었다. (사실 서울에 살지 않아 약간 부담이었어서 기뻐했다.)
오프라인? 헷갈리니까 최종 코딩 테스트라고 쓰겠다.
최종 코딩 테스트를 위해 저번 미션을 마저 구현해 보라는 말씀이 있었는데, 이미 그 다음날 해서 뭘할까 하다가(그냥 쉬라고 하셨지만 온라인 코테 때 기억이..)
작년 오프라인 코딩 테스트도 깃에 공개 되어있길래 그걸로 4시간동안 타임어택을 해보았다.
자바 버전이 조금 안맞아서 약간 수정이 필요했지만, build
부분만 고치면 되서 금방 시작할 수 있었다.
과제 내용을 보니 조금 놀랐다. 학교에서 데이터베이스 수업을 들을 떄와 내용이 똑같았다.
그래서 3주차 미션은 뭔가 CRUD
에서 U
를 뺀 느낌이 강했는데, 이번엔 새 객체를 따로 만들어서 다른 객체에 포함시키는 느낌이 강했던 것 같다.(물론 주관적인 의견이다)
또한 올해 프리코스는 main
에서 Scanner
를 생성하는 것이 고정조건이어서 main
에서 input
이 필요한 클래스나 메소드에 모두 전달해주는 방식이었는데,
작년 오프라인 코딩 테스트 코드에서는 view
패키지가 따로 조금 구현되어 있었고, 이쪽 클래스에서 Scanner
를 생성하는 것 같았다.
3주차에서 view
를 분리한다고 분리했는데, 클래스로만 분리했어서 이렇게 패키지로 분리하는 것이 훨씬 좋아보였고
실제 테스트에서도 적용해 볼 수 있어서 미리 해보길 잘했다고 생각한다.
그리고 여기서도 에러를 throw
하지 않고 지속적으로 서비스가 되도록 구현하는 것 같아서 그런 연습들도 해보았다.
그래도 당일날은 어떻게 나올지 모르니 무엇보다 문제를 정확히 파악하는 게 가장 중요하다는 것을 느꼈다.
테스트 당일
코드는 여기에서 볼 수 있습니다.
실시간 ZOOM은 꽤 어수선했다. 스피커를 꺼도 된다고 해서 미리 꺼놓을까 했는데, 그러면 신분증 검사 때 호명하는 걸 못 들었을 것이다.
혹시 몰라서 노트북 줌으로도 들어갔는데, 줌을 꺼도 메시지가 오면 화면에 보이는 기능이 있는지 몰랐다. ㅎㅎ
덕분에 중간에 아웃풋 예시가 바뀐 것을 더 빨리 파악할 수 있었다.(사실 큰 문제는 아니었다. 그냥 앞의 예시와 조금 안 맞을 뿐이었음)
몰랐는데, 같은 백엔드에 우리과 사람이 있었고 너무 반가웠다.. 사실 그렇게 친하지는 않지만, 나중에 한 번 얘기해 보고 싶다ㅠㅠ..
문제 자체는 그렇게 어렵지 않았지만, 처음보는 라이브러리를 이용해야 해서 혼란스러웠던 것 같다.
3주차 미션과 비슷한 내용이지만, 로직부분은 CRUD 느낌이 전혀 아니었다.
전날 풀었던 작년 문제처럼 객체에 다른 객체 리스트 필드를 추가시켜서 풀다가 두 시간 전에 이렇게 하면 엄청난 오류가 생길 수 있음을 꺠달았다.
아..어떡하지 하다가 일단 3시간이나 남았고, 충분히 할 수 있을 것 같아서 코드를 수정했다.
수정하면서 커밋 메시지는 뭐라고 써야하지? 했지만 그냥 fix bug..같은 느낌으로 적으면서 했던 것 같다.
수정하면서 왜 예시 코드를 MultiWeight
로 주신 건지도 그 때서야 이해가 되었다.
README.md
도 더 자세히 쓴다고 썼는데, ㅎㅎ.. 잘 모르겠다.
init
부분도 하드코딩 안 하고 싶었는데, 시간이 남으면 하드코딩 부분도 수정하려고 했는데, 거기까진 못 했던 것 같다.
아무튼 후회없이 했던 것 같다.
느낀점
이렇게 쓰고 보니 1주차에 비해 나에게 정말 많은 도움이 되었고, 스스로도 어떤 부분을 잘 못하고, 어떤 부분은 잘하고 있는지 느낄 수 있는 경험이었다.
이미 얻어간 게 너무 많아서 떨어져도 별 후회는 안할 것 같다.ㅎㅎ
생각보다 굉장히 신경을 많이 써주시고 배려를 많이 해주신다는 느낌을 엄청나게 받았다. 합격 통보가 미뤄지면 미뤄진다고 메일이 오는것도, 다음 메일이 언제 있을지도, 미션에 수정된 내용이 있다면 메일 보내주시고..ㅎㅎ.. 정말 놀랐다. 눈물 줄줄…
과제 제출을 위한 방법이나 가이드라인도 굉장이 정리가 잘 되어있고 보기가 편했다.
코드 리뷰나 피드백을 한 명씩 해주시진 않았지만, 항상 화요일 자정(수요일 0시)까지 제출하고 수요일 오후 2시쯤에 피드백이 오니,
그 시간내에 백엔드만 150?명 정도의 인원을 모두 일일이 피드백 하는 건 쉽지 않은 일이니 충분히 이해할 수 있었다.
오히려 3주차 미션을 일주일 내에 모두 구현하지 못한 내가 너무 죄송했다. 그런데, 전체메일로 기말고사 기간이랑 겹쳐서 그런 것 같다며, 괜찮다고 하시고..쏘스윗..^_ㅠ
그리고 사실 포비님께서, 선발 과정이나 프리코스, 오프라인 코딩 테스트에도 직접 관여하실 줄은 몰랐다. 오프라인 코딩 테스트 때에도 직접 응원 영상도 찍어서 올려주시고, 떨지 말고 모두 구현하지 못해도 된다고 하시는 것도 감동이었고, 제출 시간 이후에도 그래도 5시간 동안 했으니 제출 하라며 대신 감점은 있을 거라고 하시는 말씀들이 되게 좋았다.
아직 어떻게 될지는 모르겠지만 정말 좋은 경험이었다고 생각한다.