회고를 시작하며
방금 전 있었던 손 떨리는 일을 얘기하며 회고를 시작하겠다. 일주일 간의 모든 노력이 들어간 코드를 오늘까지 몇 번의 리팩토링을 거치며 정제해 드디어 제출해도 되겠단 마음이 들었다. 제출 후 당연하게 초록불을 기다리던 나한테 뜬 건 테스트 실패 메시지 조차 아닌 빌드 실패 메시지였다. 제출 마감을 3시간 앞두고 벌어진 이 당황스런 사태에 손이 바들바들 떨리기 시작했다.
부끄럽게도 잠시 우테코 사이트가 잘못된 게 아닐까 의심을 했지만, 최대한 침착히 원인을 분석해봤다. 로컬에서도 빌드와 테스트 모두 잘 돌아가던 게 갑자기 빌드 실패가 뜨니 pr 내용이 잘못 된 게 아닐까 싶었다. 따라서 프로젝트를 새로 클론해 와봤다. 아니나 다를까 새로 클론한 곳에서 빌드 실패가 떴다. 그 이유는 몇 번의 리팩토링 과정에서 변경한 클래스명 때문이었다. 클래스명을 변경했는데 이제 함께 바뀐 파일명이 git에는 반영되지 않았던 것이다. 결국 클래스명과 파일명이 달라서 빌드 실패가 떴던 거 였고 드디어 제출 사이트에서 테스트 성공 메시지를 확인할 수 있었다. 첫날 열심히 읽었던 Google Java Style Guide에서 나오는 “소스 파일 이름은 최상위 클래스의 대소문자 구분 이름과 .java 확장자로 구성된다”가 머릿속을 스쳐지나가며 안도의 한숨을 내쉬었다.
생생한 이야기를 시작한 틈을 타, 지난 한 주 간의 프리코스를 경험하며 겪은 기억을 생생히 되돌려 보고자 한다. 사실 내가 소감을 이렇게 마지막에 작성하는 여유를 부릴 수 있었던 건 다름 아닌 매일 TIL을 작성해왔기 때문이다. 나의 TIL을 다시 읽어보며 일주일 간 얻은 것을 되짚어보겠다.
계획을 짰다. 완벽한 계획이었을까?
설레이는 첫 날, OT를 들으며 우테코 교육의 핵심 키워드인 “자기 주도 학습”을 명심하며 앞으로의 계획을 세웠다. 사실 지금까지 항상 강의보단 야생형 성장을 즐겨왔기에 학습 방식에 대해선 큰 걱정은 없었다. 당시 내 계획은 야무졌다. “설계-1일, 구현-3일, 리팩토링-2일”. 하지만, 지금 와서 보면 그저 웃는다. 결론부터 말하자면 실제론 “설계-4일, 구현-2일, 리팩토링-(이틀 밤을 새서 만든)1일”이 되었다. 잘하고 싶은 욕심이 너무 앞서서 설계에 무리수를 뒀기 때문이다. UML, MVC, TDA, SRP, DDD, TDD, 정적 팩토리 메서드 등 커뮤니티와 단톡에서 나오는 여러 패턴과 기법을 서성이며 적용하려 욕심 부렸기 때문이다.
지금 와서 돌이켜보면 물론 도움이 된 부분도 있지만, 프리코스라는 4주간의 과정 속 첫 주차에서 코치님들이 생각하고 마련해둔 학습 효과를 100% 얻어가는 데엔 조금 방해가 된 거 같다. 이를 특히 실감한 건 막상 구현을 시작하니 내가 설계한 것처럼 클래스들까지 다 설계해 둘 필요 없이 말그대로 구현할 기능 목록만 제대로 작성해둬도 오히려 이가 나중에 TDD와 맞물려 도움이 되었겠다 싶었다. 따라서 앞으론 매주 추가되는 미션 요구 사항에 좀 더 집중하고자 한다. 미션에 집중하다 떠올리게 된 키워드 위주로 찾아나가며 프리코스 속 숨겨진 성장 장치들을 온전히 경험할 수 있으리라 기대한다.
Documentation이 좋다. 컨벤션 정리도.
과제가 나오고서 문서 정독과 컨벤션 정리에 많은 시간을 할애했었다. 이 역시 계획한 바는 아니었고 읽다 보니 재밌어서 정리도 하게 되었다. 개발을 하면 할 수록 documentation 보는 게 재밌어지는 거 같다. 예전엔 영어로 되어있고 글자만 수두룩한 공식 문서를 보는 것보단 블로그를 찾아 보는 게 훨씬 쉽고 빠르니 블로그를 잠시 신뢰했던 적이 있다. 하지만 동료들에게 참고 자료를 전달해줄 때나 정보를 재생산할 때도 신뢰도가 급격히 떨어지는 걸 보고 공식 문서를 점점 찾아보게 되었다. 이번 프리코스 1주차 초반에 woowacourse/docs 내용과 Google Java Style Guide를 열심히 읽었다. 이는 후에 미션을 진행하면서도 가이드나 컨벤션이 잘 숙지되어 있어 도움이 많이 되었다.
Too Much 설계러
사실 나는 이전에 학교 소프트웨어 공학 수업에서 배웠던 Use Case/Communication/Class Diagram을 전부 써먹어보고 싶었다. 결론부터 말하자면 나는 ‘Too Much 설계러’였다. 물론, 해당 설계 기법은 훌륭한 설계기법이다. 하지만 프리코스 1주차에 적용하기엔 좀 무리가 있었던 거 같다. 여러 툴들을 사용하며 여러 다이어그램들을 그려봤는데 결국 제대로 사용한 건 없었다. 사실상 삽질이었다. 프리코스 미션 해결도 처음인 상태에서 익숙하지 않은 설계기법을 사용하려하다보니 온 한계 같다. 따라서 프리코스가 익숙해진 후 다시 한 번 적용해보고자 한다. 소프트웨어 개발자로서 나름의 로망이기 때문이다.
삽질 속에 성장한 부분은?
당연한 이야기지만 위에 언급한 커뮤니티와 단톡에서 접한 패턴과 기법들을 첫 주차부터 다 적용하진 못했고, 딱 두 가지 “MVC, TDA”를 지키려 노력했다. 클린한 코드를 짜기 위해 가장 쉽고 효과적으로 적용할 수 있다 생각해서 였다. 그리고 실제로 이를 통해 보다 객체지향적이며 클린한 코드를 짜는 데 도움을 받았다.
MVC부터 이야기해보자면, 이해하는 데에 가장 오랜 시간을 들였다. 기존에 백엔드 api 개발을 할 때 사용한 entity, controller, service의 역할과 혼동해서 좀 더 이해하기 어려웠다. 이틀 정도를 레퍼런스를 찾아보며 이해에만 소요했는데 결국 내가 내린 결론은 다음와 같다.
역할
•
model : 모든 view에게 이벤트로 인해 변경된 데이터 알려줌
•
view : 데이터 변경될 때마다 model로부터 데이터 가져옴
•
controller : view에서 일어나는 이벤트 캐치해서 model에게 알려주고, model에서 변경된 데이터를 view에게 전달해줌
프로세스
view가 이벤트를 감지
→ (controller가 view에서 감지된 이벤트를 model에게 전달해줌)
→ model이 이벤트에 대한 데이터 처리(변경)
→ (controller가 model에서 변경된 데이터를 view에게 전달해줌)
→ view가 변경된 데이터 받음
그리고 이를 숫자 야구 게임 프로세스에도 적용해서 써보고 클래스 설계 시 이를 보고 설계하니 많은 도움이 되었다.
TDA는 사실 예전부터 알고는 있지만 적용을 매번 까먹는 그런 개념이었다. 이번에 숫자 야구 게임에서 최대한 신경쓰며 도메인에서 getter로 내용을 꺼내와 로직을 적용하기보단 어느 정도 로직을 적용한 것을 가져오라 명령하는 함수를 작성하려 노력했고 훨씬 코드가 클린해지는 경험을 할 수 있었다. 예를 들면 getStatus()로 상태 값을 빼와서 end인지 확인하기보단 isEnd() 메서드로 도메인 내부적으로 status 값이 end 인지 확인한 후 true, false만 받게 하는 거다. 묻기 보단 명령하기. 이번 1주차에서 이를 확실하게 이해할 수 있었다.
커뮤니티에서 얻어 가고 싶은 것
우테코 프리코스에서 현재까지 가장 마음에 드는 점을 뽑아보라 한다면 커뮤니티가 너무 잘 활성화되어 있어서 행복을 느꼈던 바를 답하고 싶다. 이번 우테코 프리코스 기간동안 있는 힘껏 성장할 수 있을 거 같다. 내가 아는 것을 나눠서 확실한 지식으로 만들고, 새로운 것을 배워나가길 기대한다. 요즘, 학교도 막학기라 안 다니고 하다 보니 혼자 폐관수련 느낌으로 독서실에서 공부하다 외로움을 느끼고 있었는데 여러 사람과 함께 성장할 수 있는 기회가 생겨 너무나 감사하다. 프리코스를 누구나 참여할 수 있게 되어 이렇게 많은 사람과 함께 할 수 있는데, 등 뒤에 든든한 지원군들이 4500명 생긴 기분이다.
스터디 러버
“다른 사람들이 스스로 할 기회를 박탈하지 말자.” 이 말을 유의해서 스터디를 구했다. 매주 과제가 끝나면 서로 코드를 발표하고 리뷰해주는 “이전 과제 발표 스터디"를 찾아 들어갔다. 이 활동도 무척 기대된다! 일주일동안 “스스로 최대한 성장"하고 과제가 끝난 후 다른 사람들과 배운 것들을 서로 공유해 매주차 과제마다 계속해 성장하고 싶다. 스터디 사람들과만 대화로만 공유하고 끝내지 않고, 우테코 커뮤니티에 대화 중 나온 좋은 내용들을 정리해서 공유해 더 오래토록 기억되게 하고 프리코스 생태계의 선순환에도 기여하고 싶다.
우테코 디스코드에 서로 리뷰하기 채널이 있다. 여기서도 활발히 활동해서 코드리뷰 왕이 될 거당. 이렇게 많은 사람들과 코드리뷰를 할 기회가 또 언제 있겠는가. 사실 스터디 하나 더 들어갔다. 지난 5기 분들이 만든 “201 자바 스터디"에 참여했다. 201 Created 라니 이름부터 너무 매력적이라 생각했다. 또 목적 자체가 너무 마음에 들었다. 나도 이런 201 Created 팀의 정신을 이어 받아 후배 개발자한테 도움을 줄 수 있는 사람이 되고 싶다.
요약해 다음주를 계획하자면
객체지향의 사실과 오해에 이런 말이 있다. “머릿속으로만 구상한 설계는 코드로 구현하는 단계에서 대부분 변경되기에, 설계에 너무 오래 머무르지 말고 최대한 빨리 코드로 구현하여 설계를 점검하고 변경해나가도록 한다”. 다음 주엔 완벽한 설계에 집착하지 말고 구현을 좀더 오래 즐겨보자. 또, 테스트 코드를 많이 짜보자.
요약해 지난주를 정리해보자면
“이 시간이 고통이 아니라 즐거운 시간이기를 기대해 봅니다”. 이 말에 적극 공감하고 싶다. 내가 개발을 처음 시작한 것도 즐거움에서 비롯되었기에 이번 프리코스를 온전히 진심 다해 즐기면서 최대치로 성장하고 싶다!
내가 프리코스 첫 날 벅찬 마음으로 TIL에 적었던 생생한 다짐을 적으며 일주일 간의 회고를 마무리 하겠다.
“프리코스 기간이 끝났을 때 후회 없게끔 이렇게까지 해야 하나 싶을 때 더했어 라고 말할 수 있는 사람이 되고 싶다. 홀로 취준을 하며 코테에서 계속 떨어지고서 개발자란 길에 대한 자존감이 많이 떨어진 요즘이었는데, 다시 한 명의 개발자로서 열정을 불태울 수 있는 프리코스라는 기회가 주어져서 너무나 감사하다.”
요약해 하루씩 정리해보자면
•
1일차 : woowacourse-docs/precourse와 메일 내용 정독, 과제 클론 및 환경설정
•
2일차 : woowacourse-docs/cleancode,styleguide 정리, 커뮤니티 둘러보기
•
3일차 : 설계 삽질 시작
•
4일차 : 온갖 다이어그램 전부 그리기 시작
•
5일차+밤샘 : mvc 패턴 이해 및 클래스 설계, 구현 시작
•
6일차+밤샘 : 구현
•
7일차 : 리팩토링 및 소감 작성