planplan
[우아한 테크 코스 7기] 프리코스 회고 2024. (10. 15 ~ 12. 09) 본문
목차
1. 지원서 작성
2. 1~4 주차 후기
3. 프리코스 종료 후 ~ 코수타 (코치와 수다 타임)
4. 프리코스 이후 1달 스터디 2024. (11. 11 ~ 12. 09)
5. 최종 후기
6. 여담
# 지원서 작성
- 증빙 자료는 제출하지 않았습니다.
2. 프로그래머가 되려는 이유와 지원 동기 (2000자 이내)
프로그래밍을 단순히 배우고 활용하는 것을 넘어서, 그 과정 자체를 즐기는 사람들은 더 큰 성장을 경험하게 됩니다. 여러분이 프로그래밍을 통해 느꼈던 즐거움은 무엇이었나요? 어떤 계기로 프로그래머가 되기로 결심하게 되었고, 그 과정에서 어떤 목표를 세우게 되었나요? 여러분이 프로그래머가 되어 어떤 가치를 만들고 싶은가요? 또한, 우아한테크코스가 여러분의 여정에 어떻게 이바지할 수 있는지 구체적으로 생각해 보셨나요? 자신이 어떤 사람이며 왜 프로그래머가 되려 하는지, 우아한테크코스에 참여했을 때 어떤 방향으로 나아가고자 하는지를 상세히 알려 주세요.
A: 사람들과 이야하는 것을 좋아하는데, 프로그래밍은 그러한 이야기의 도구로써 이야기의 재미를 증폭시키는 매개체였다고 작성했고, 그 일화로 주변의 취직준비중인 형의 개발면접을 돕기 위해, 형의 꼬리무는 질문을 많이 받았었다. 그런데 알고 있었다고 생각했지만 제대로 대답 못하는 나를 보면서, 아는 것을 명확하게 말할 수 있는 사람이 되고 싶다고 했다. 그리고 이러한 여정을 우테코에서 이어가고 싶다고 작성했었다.
3. 오랜 시간 몰입했던 경험 그리고 도전 (2000자 이내)
진정한 몰입은 즐거움과 동시에 성장을 끌어냅니다. 여러분이 오랜 시간 동안 주도적으로 몰입했던 경험은 무엇이었나요? 그 과정에서 어떤 도전을 마주했고, 이 경험으로 무엇을 배우고 얻었는지 '구체적으로' 이야기해 주세요. 이 도전의 결과가 반드시 성공일 필요는 없습니다. 도전 속에서 실패가 있었으나 이를 극복하기 위한 과정이 있었다면 이를 상세히 알려 주세요. 또한, 반드시 소프트웨어에 대한 경험이 아니어도 괜찮습니다. 만약 몰입한 경험의 결과물을 함께 보여 주실 수 있다면 더 좋습니다.
A: 혼자서 오래 공부한 내가 사실은 성장이 더뎠음을, 위에서 형과 대화하면서 깨닫게 됐었다. 성장하기 위해서는 다른 사람들과 이야기하면서 스스로 모르는 것을 인지해 나가야하는데, 이때 메타인지를 하기 위해서는, 상대의 질문을 헛으로 받아들이지 않고 공감해야 한다고 느꼈었다. 즉, 상대를 존중하고 배려하는 때에 비로소 폐쇄적인 내 생각을 유연하게 바꿀 수 있다는 것을 배웠었다. 이러한 과정을 자세하게 서술했었다. 그리고 이러한 여정을 우테코에서 이어가고 싶다고 작성했었다.
4. 프리코스 목표 설정 (1000자 이내)
4주간의 프리코스 기간은 여러분이 기술적으로 성장할 수 있을 뿐만 아니라, 우아한테크코스를 통해 성장할 수 있는지를 확인해 볼 수 있는 소중한 시간입니다. 이 기간에 어떤 것을 이루고 싶은가요? 그 이유는 무엇인가요? 목표를 설정하고 이를 달성하기 위해 어떻게 학습할 것인지를 고민해 보세요. 구체적인 목표와 함께, 학습 과정에서의 계획과 점검 방법을 함께 작성해 주세요.
A: 우아한테크코스의 핵심 가치 중 하나인 짝 프로그래밍의 정신을 적극적으로 실천하겠다는 포부로 문단의 도입을 알렸다. 그 계획으로 미션의 요구사항을 깊이 있게 이해하고, 이를 다른 참자가들과 공유할 것, 매주 최소 3명의 다른 참가자들과 코드 리뷰 세션을 가질 것, 미션 수행 중 마주치는 도전적인 문제들을 공유하고 함께 해결할 수 있는 방안을 찾아볼 것을 마지막으로 지원서 작성을 마쳤다.
# 1주차 - 문자열 계산기
## 첫 코드 리뷰
난해한 코드 느낌이 많이 드네요. (진짜에요..?)
댓글 달아준 분은 희용님으로, 프리코스 종료 후 친분을 더 쌓게 되신 분이시다. 나중에 댓글 이유를 듣게 됐었는데, 아직 추상화 클래스에 익숙치 않아서 그러셨다고 한다. 하지만 이 댓글을 계기로 내 프리코스 진행 방식의 관점이 수정됐다. 나 혼자만의 개발방식을 유지하는 건 프리코스의 공통 학습 목표를 수행하는데 다른 사람들과의 더 많은 소통의 기회에 방해가 된다고 생각이 들었다. 그리고 좋은 코드리뷰 하는 방법을 배우기 위해서 1주차에서는 거의 다른 사람들의 리뷰 방식을 지켜보기만 했었다.
대충 평가받는 두려움. 내 미션코드의 리뷰요청 시작을 어떻게 하지?
하지만 코드리뷰를 하는 것에 망설임이 존재했다. 어떻게 진행하는지 몰라서, 이상한 코드리뷰가 많이 달리면 답장하느라 지칠 것 같아서, 그리고 개발 시간을 많이 뺏길 것 같아서 대외적으로 많은 사람들과 코드리뷰하기에는 스트레스였다. 처음에는 너무 부담스러워서 손가락에 꼽을 정도로만 코드리뷰를 받고 싶었다. 그래서 우선 내가 먼저 다른분의 미션 코드에 리뷰를 진심을 담아 작성하고 이후에 내 코드리뷰를 부탁하는 전략을 세웠었다. 프리코스 커뮤니티에 자주 등장하시는 분의 코드에 허투로 리뷰를 달지 않고 작성자의 입장을 고려하며 신중하게 리뷰를 보냈었다. 그리고 나서 개인적인 DM을 보내서 내 미션의 코드리뷰 부탁을 정중히 드렸고 수달님의 친절한 답변에 코드리뷰의 긴장감이 덜어졌었다. 이때의 시작을 계기로 다른 사람들에게 내 코드를 보여주는 것에 거부감이 점차 사라지게 되었고, 코드리뷰가 나의 성장에 큰 도움이 된다는 것을 깨닫게 하는 시발점이였었다.
# 2주차 - 자동차 경주
소수만 잘 읽어지는 코드보다는, 다수가 잘 읽어지는 코드를 작성하는 것이 목표
2주차 때는 소수만 잘 읽어지는 코드보다는, 다수가 잘 읽어지는 코드를 작성하는 것이 목표였던 것 같다.이러한 생각은 1주차 때 받았던 코드리뷰 댓글 영향이었다. 그리고 많은 분들의 PR에 소개문을 작성하셨었는데, 이 소개문의 유무에 따라서 코드를 읽는 시간이 단축 됐고, 어떠한 방향으로 코드리뷰를 달아야할지 좁혀진 장점이 있었다. 이점을 배워 나도 PR에 소개문을 작성했고, 리뷰에는 상대방의 의도를 최대한 파악하기 위해 노력했었다.
## PR 소개서 작성하기
## 코드리뷰 받은 것 댓글 달기
2주차가 지났을 때를 되돌아보면 내 코드를 많이 리뷰받는 것보다는, 다른 사람들의 코드를 더 많이 읽었을 때 습득력이 빠른 것 같았다. 그래서 이때부터 나는 대외적으로 내 미션의 코드리뷰를 받기보다는 다른 사람의 미션에서 내 코드와 비교하고 질문해가며 리뷰하는 방식이 어울리는 것을 알게됐었다. 그리고 피드백 받은 내용이나 더 좋았던 코드를 기억해두고 다음 미션에 적용할 것을 기대했던 걸로 기억한다.
# 3주차 - 로또
메서드는 10줄 이내로 작성하자
3주차의 학습 목표는 객체에게 책임을 잘 나누자였고, 잘 나눴다는 평가 기준은 메서드 길이 10줄로 정했었다. 마지막날까지 코딩하여 메서드 10줄이내로 작성한 것을 지킬 수 있었고, 테스트 커버리지율도 거의 99에 가까웠던걸로 기억한다. 대신 아쉽게도 이전 피드백 받는 내용을 온전히 적용할 순 없었다. 우선 10줄로 만들어 놓고 나중에 리팩토링 하는 전략을 세웠다. 하지만 개발을 마치고 나니 시간이 없어서 리팩토링을 못했었다.
미션이 끝나고, 코드리뷰를 잘 하지는 못했다. 3주차 미션에서 시간이 촉박했던 것을 알기에, 바로 4주차 미션 진행 준비를 했었다.
# 4주차 - 편의점
서투른 도메인 설계 및 계산 로직 구현 그리고 죽어있는 기능 목록서
4주차 미션에서는 정적인 데이터를 관리하는 Enum 타입을 적극 활용하여 구현하는 것이 목표였다.
하지만 README.md 파일에서 데이터를 동적으로 읽어와야 한다는 요구사항이 있었고, 이 두 가지를 어떻게 조화롭게 구현할지 많은 고민이 되었다. Enum에 아직 익숙하지 않은 상태였지만, 이전 코드리뷰에서 본 Enum 활용 사례가 인상 깊어서 나도 한번 시도해보고 싶었다. 결국 파일을 읽어 Enum과 매치시키는 방식으로 구현했는데, 다소 억지스러운 느낌이 들었다. 도메인 구조를 여러 번 수정하면서 고민하다 보니 어느새 4일이라는 시간이 흘러있었다. 남은 시간이 얼마 없는 상황에서 계산 로직을 작성하고 수정하는 과정을 반복하다 보니, 결국 구현을 완성하기까지 하루밖에 남지 않은 촉박한 상황에 처하게 되었다.
## 계산 로직 구현
하루안에 나머지 코드들을 다 작성할 수 있을까? 사실 4주차 미션 때는 잠을 잘 못자서 피곤에 찌든 상태였다. 하지만 딱 하루 밖에 안남았었고, 오전 07:00 ~ 오후 22 :30 까지 침대 등받이에 딱 붙어서 화장실 가는 거 빼고, 제자리에서 개발한 결과 다행히 주어진 테스트 코드는 전부 통과할 수 있었다. 하지만 제한된 시간내에 개발해야하는 압박감 때문에 일단 통과하는 것에만 집중하게 됐다. 그러다보니 기능 목록서를 업데이트를 신경 쓰지 못했고, 기능 목록서는 죽어 있는 채로 PR을 날렸었다. 이후 탈진감이 들면서 멍하니 멍만 때렸었다.
종료 1시간 30분전에 기능 완성 성공
## 4주차 미션 제출 당시 내 상태
이렇게 내 프리코스 과정이 끝났다. 1차 합격 발표까지 1달이나 남았다. 남은 기간을 어떻게 보내야 될지 고민이 드는 상태였다.
# 프리코스 종료 후 ~ 코수타 (코치와 수다 타임)
Q 최종 코테를 위해 1달간 공부한다면 어떻게 하는게 좋은지?
A 세뇌해라. 1차합격해서 최종 코테보러 갈거야. 최종 코테기간전까지 복습하고 역량을 쌓으라는 마음을 쌓아라.
- 처음부터 끝까지 전부 구현해보기
- 4개의 미션중 끌리고 다시해봐야지를 더 여유로운 마음을 가지고 해보기
- 미션을 많이 구현해본다고 실력이 올라가지는 않는다, 하나의 미션을 여러번 다양하게 구현해보기
- 함께 스터디 만들기 + 더 추천하는 스터디에서 짝 프로그래밍 암묵지: 검색 잘하는 법, 단축키 잘 쓰는 법, 커밋로그 등
코수타 타임 이후, 프리코스 다른분들과 함께 5시간 미션 풀이 스터디를 1달 동안 진행하게 됐었다.
# 프리코스 이후 1달 스터디 2024. (11. 11 ~ 12. 09)
러키님, 수달님, 고로케님, 팩님과 함께 스터디를 시작했고, 매주 2~3문제와 코드리뷰를 함께 진행했다. 하루에 문제풀이 5시간, 코드리뷰 4~5시간을 합치면 총 10시간 동안 스터디를 했는데, 놀랍게도 모두가 지치지 않고 열정적으로 임했다. 그러다 보니 스터디를 하고 나면 하루가 순식간에 지나가 있었고, 이런 날들이 일상이 되었다. 이 과정에서 나도 성장한게 있었다.
1. View 우선 정의, 단일 Domain 기능 과다 및 직접 노출 금지
한번은 출력 사항에 대한 모든 데이터를 한번에 넘길 수 있으면 편하겠다 라는 생각을 했었다. 생각을 실현하기 위해, 실제로 View를 위한 모든 데이터를 하나의 Domain 모델에 넘겨서 보냈었다. 이것을 데이터 중심 설계라고 한다.
이에 따른 나쁜 결과가 나왔었는데 우선 제한된 5시간 내에 개발에 실패했다:
- 개발 중간에 Domain 모델 클래스의 코드 길이가 길어져서 코드 관리 및 파악에 시간 소모가 컸다
- 하나의 모델에서 다양한 기능들의 흐름을 제어해야해서, 복합적으로 신경을 쓰는 것에 골치가 아팠다
- View에 의존하는 Domain이기 때문에, View가 결정되는 순간 Domain의 상태도 결정되서 설계하기에 편했지만, 직접적으로 의존하기 때문에 유연하게 변경하기 어려웠다
스터디원분들은 제한된 시간내에 해결을 했지만, 나는 그러지 못했다. 그래서 View에 Domain을 직접 노출하지 않고, 하나의 Domain에 모든 기능을 넣지 않는 방법으로:
- View부터 개발한다
- View와 View에 필요한 데이터를 DTO, VO로 정의한다
- Domain의 기능을 책임 분산 시킨다. 나눠진 기능을 서비스에서 응집한다.
이 때의 실패로 무엇을 하면 안되는지 알게 됐고, 미션을 구현할때마다 계속 의식해왔다. 이 일로 미션 실패하게 되는 일은 없었다.
2 . 모든 책임을 Interface로 미리 정의하지 말 것
스터디 중간에 '오브젝트' 책을 읽으면서 '책임 먼저 결정하라'라는 문장을 실현해보고 싶었다. 그래서 기능 목록을 정의하고 그대로 Interface를 활용해 메서드 시그니처를 정의했었다.
- 책임 우선 정의하는 개발방식이 익숙하지 않아서 그랬을 수도 있다. 하지만 책임 기능을 만든 Interface도 신경 써야 하는 자원으로 느껴졌다. 모든 기능들을 Interface로 먼저 정의해놓다 보니 프로젝트의 볼륨이 커졌고, 무엇을 개발하는지 중간에 파악하기 힘들었다.
- 수정하는데 드는 시간비용이 생각보다 컸다.
이때 깨달은 건 완벽한 기능목록이 정의됐을 때는 Interface가 좋지만, 나처럼 기능 목록이 중간중간 수정되는 초보가 개발하기에는 어려운 개발 방식이라는 거였다.
이 때의 실패로 지금의 나는 모든 책임을 깔끔하게 한번에 결정할 수 없다는 것을 느꼈고, Interface 기능 개발방식은 지금의 나에게는 적합하지 않는 방식임을 배웠다. 앞으로 이 일로 미션 실패하게 되는 일은 없었다.
3. 일관된 개발 프로세스를 가질 것
제한된 5시간 개발에 항상 턱걸이를 하거나 실패했었다.
스터디원분들은 잘 해내는 걸 보면서 내 개발방식에 문제가 있다는 걸 깨달았다.
내 개발 방식을 뒤돌아봤지만 잘 모르겠었다. 내가 만든 거라 내 눈에는 안 보였던 것 같다.
그래서 5시간 안에 개발에 성공한 스터디원분들의 개발 과정, 합격자분들의 커밋 기록들을 꼼꼼히 읽고 공통점을 찾아서 내 커밋 기록들과 비교했다. 나는 개발 순서 없이 그날 하고 싶은 기능 구현부터 개발해왔었다. 하지만 성공하신 분들의 공통점은 순차적인 프로세스를 따라가며 일관되게 개발하고 있었다. 특히 순차적이고 일관된 개발의 중요성을 확실히 깨닫게 된 계기가 있었다. 파이썬에서 자바로 막 넘어온 프리코스 동료분이 계셨는데, 무서운 속도로 개발을 마치셨다. 이야기를 나눠보니 그분만의 확실한 개발 순서가 있으셨다. 아, 개발할 때 일관된 과정으로 구현할 수 있도록 연습을 해야겠구나 싶었다.
이때부터 내 개발방식을 의식적으로 바꾸려고 계속 연습했고, 내 개발 프로세스는 다음과 같이 고정됐다:
- Common -> View -> Controller -> Service -> Domain 으로 순차적으로 개발할 것
이 때의 실패로 타임어택을 위해선 일관된 개발 구현 연습이 필요함을 느꼈고, 연습을 할수록 체화가 됐었다. 위에서 말한 챕터 1,2,3 체화가 된 후로는 처음 보는 미션 구현에 있어서 실패하는 일은 거의 없었다.
# 기대
그동안 나는 혼자서 개발해오면서 기능 분석부터 개발까지 주먹구구식으로 해왔었다. 단기간 내에 빠르게 완성하는 코딩 방식에 익숙하지 않아서, 미션을 구현할 때마다 매번 다른 프로세스로 개발했다. 하지만 이런 방식은 제한된 시간 내에 개발해야 하는 요구사항에는 적합하지 않다는 것을 깨달았다. 이번 1달간의 스터디는 마치 또 다른 프리코스 과정 같았다. 스터디의 학습 목표는 명확했다 - 제한된 5시간 내에 개발하기. 이 목표를 달성하기 위해, 나는 스터디원분들 그리고 합격자분들(빠르게 개발하는 사람들)의 커밋 기록들을 분석하며 공통점을 찾아냈고, 이를 체계적으로 정리하여 내 개발 방식에 의식적으로 적용하려 노력했다. 이런 지속적인 연습 덕분에 스터디 막바지에는 나도 제한된 시간 내에 기능 개발을 할 수 있다는 자신감이 생겼다. 그리고 1차 합격 메일만을 기다리기 시작했다.
# 결과
12. 09 월요일 오후 3:00에 합격 발표가 오는 날이었다.
결과를 학교에서 확인해야 했었는데, 너무 떨려서 아무것도 손에 안잡혔었다. 날씨는 좋았던 것 같다.
1차 탈락
# 후기
탈락했구나. 아 탈락 했구나. 그렇구나. 같이 못 가서 아쉽다.
온라인으로 친구를 사귀어본 적이 없었는데, 동물원분들(13명?)과 함께하면서 정이 참 많이 들었다. 프로그래밍에 대한 열정이 넘치고, 마음이 따뜻하며, 서로를 배려할 줄 아는 이런 좋은 분들과 함께할 수 있어서 늘 감사한 마음뿐이었다.
만약 오프라인에서 만난 사이였다면, 지금의 헤어짐도 그저 일시적인 것으로 여겼을 것이다. '친구' 사이니까 나중에 연락하면 언제든 다시 만날 수 있을 테니 이렇게까지 아쉽진 않았을 것 같다. 하지만 시험의 합불이라는 결과에 따라 어쩌면 서로 영영 못 볼 수도 있다는 생각에 마음이 무거워졌다. 오프라인에서 만났더라면 자연스럽게 연락을 주고받는 친구 사이가 되었을 텐데, 현실은 그렇지 않다는 게 참 아쉽기만 했다.
2달간 최선을 다했지만 불합격했다는 개인적인 아쉬움
그리고 함께 하지 못하는 것에 아쉬움
마지막으로 다른 스터디원분들의 불합격 소식에 대한 아쉬움이 아직까지 나를 좌절감 그 외 심리적 압박감에 시달리게 하는 것 같다.
앞으로는?
이러한 좌절감에서 벗어나기 위해 앞으로 어떻게 해나가야 할지 깊이 고민해보았다. 가장 먼저 깨달은 것은 인생에서 코딩이 전부가 되어서는 안 된다는 점이었다. 지금까지 내 생활의 100%가 코딩이다 보니, 코딩 관련 합불 결과에 따라 오랜 기간동안 감정상태가 결정될 것 같다.
이제는 코딩 외에도 새로운 취미와 규칙적인 생활이 필요하다고 느낀다. 예를 들어, 지속 가능한 코딩 생활을 위해 하루 한 끼뿐이던 식사를 의식적으로 두 끼로 늘리거나(몇번 씩 일주일동안 2끼 먹기 운동을 했었지만 실패했었다.), 매일 30분 이상 야외 산책을 하는 시간을 만들거나, 하루를 기분 좋게 시작하기 위해 책상을 깨끗이 정리하고 시작하는 등의 변화가 필요할 것 같다. 이런 일상적인 루틴들이 부정적인 생각으로부터 나를 지키고, 더 건강한 방향으로 나아가는 데 도움이 될 것 같다.
1차 발표 이후 , 다시 한번.. 나는 어떤 개발자가 되고 싶은지 고민해봤다.
지원서 때 작성했던 내용 그대로인 것 같다. 상대방이 고민상담을 할때 가장 먼저 생각나는 그런 개발자가 되고 싶다. 그리고 의지가 되는 개발자가 되고 싶다. 상대방의 발화 의도를 배려심 있게 빠르게 이해할 수 있고, 내가 아는 것을 명확하게 전달할 수 있는 그런 개발자가 되고 싶다. 그래서 더 많은 개발자분들과 어울릴 수 있는 그런 개발자가 되고 싶다.
지금 다시 프리코스 목표를 설정한다면?
위에서 앞으로의? 챕터에서 이야기 했던 내용들을 적을 것 같다. 프리코스의 합불에 영향을 받지 않기 위해, 어떻게든 내 코딩 라이프를 더 잘 이어 나가기 위해 사소한 일상 패턴들을 지키기가 목표가 될 것 같다.( 밥 점심,저녁 꼭 챙겨 먹기) (기분 좋은 시작을 위해, 아침 책상 청소하기) (하루 30분 걷기 운동)
## 고마운 프리코스 동료분들
프리코스를 진행하면서 동물원 채널의 많은 분들과 같이 개발하며 힘을 냈었다.
힘들어도 꾸준히 공부하는 태도로 서로를 응원했던 프리코스 동물원 분들께 정말 감사함을 전합니다.
# 여담
2024 12.28(토)에 동물원 분들과 합불자 상관없이 프리코스 뒷풀이 정모를 하기로 했다.
9분이 참여하시고 파티룸까지 빌리고 단톡방까지 파게 됐다.