지난 10월, 드디어 우아한 형제들의 기술블로그에 '우아한 테크코스 - 웹 백엔드' 2기를 모집한다는 글이 올라왔습니다! 우아아!! 우아아!! 개발자로의 전직을 꿈꾸며 SSAFY, SEOUL42 등 각종 교육을 호시탐탐 노리던 저였기에, 일말의 주저함도 없이 바로 지원서를 작성하기 시작했습니다.
그리고 감사하게도, 아래의 과정을 거쳐 3주동안 진행되는 프리코스에 참여하게 되었습니다.
- 10월 25일 ~ 11월 5일 : 서류 지원
- 11월 9일 : 온라인 코딩 테스트
- 11월 20일 : 1차 합격자 발표
- 11월 27일 ~ 12월 18일 : 대망의 프리코스!!!
무려 3주...
프리코스가 뭔가요?
아래는 프리코스를 만드신 자바지기 박재성님의 설명입니다.
프리코스는 본 과정을 미리 경험해 보는 단계로 3주 동안 온라인으로 진행합니다. 본 과정과 같이 매주 미션을 하나씩 구현하고 제출하는 방식으로 진행합니다. 이 과정을 통해 지원자는 본 과정을 미리 경험해 보면서 교육의 참여 여부를 결정할 수 있고, 저희는 본 과정을 소화하는 데 어려움이 없는지 판단할 수 있는 기간이 될 수 있을 것 같아요.
사실 선발과정 치고는 기간이 꽤 긴편인데요. 프리코스는 자바지기 박재성님의 교육철학을 녹여낸 과정이라고 볼 수 있습니다. 이에 대한 보다 자세한 설명은 아래 박재성님의 글 목적의식 있는 연습을 통한 효과적인 학습을 참고하시면 됩니다.
그래서 뭘 배웠나요?
어젯밤 12시를 기점으로 프리코스가 종료되었습니다. 배달의 민족에서 만든 교육과정답게 제출 시간을 정확히 준수할 것을 강조했습니다.
저도 3번째 미션을 마무리한 뒤, 지난 3주간의 프리코스 과정을 되돌아 봤는데요. 올해들어 가장 치열했지만 가장 즐거웠고 가장 빠르게 흘러간 시간이 아니었나 싶습니다. 정말 많은 걸 배웠지만, 그 중에서도 머리를 '띵!'하게 했던 몇가지 깨달음들을 적어 보겠습니다.
코드 수정, 이제 무섭지 않아!
미션에 전반적으로 주어졌던 함수의 인덴트와 길이에 대한 제한 덕분에 함수를 작게 만드는 훈련을 할 수 있었습니다. 함수를 작게 만드는 것은 함수가 한 가지 일만 하도록 기능 단위로 작게 나누기 위함인데, 다소 추상적일 수 있는 한 가지 일이라는 제약조건 대신 인덴트와 길이의 제한 덕분에 보다 쉽게 연습할 수 있었습니다.
'그러면 왜 함수를 기능 단위로 작게 만들어야 할까?'라고 생각하던 중, 마침 미션의 룰을 잘못 이해해서 로직을 바꿔야했던 순간이 있었습니다. 그런데 2시간 정도 걸릴 줄 알았던 변경 작업이 30분도 안되서 끝나자!!! 정말 깊은 깨달음을 얻었습니다.ㅎㅎ
나중에 봐도 이해가 되는 코드
프리코스를 시작하기 전과 후의 가장 큰 차이점은 바로 '제가 만든 코드를 나중에 다시 봐도 이해할 수 있다.'입니다. 사실 프리코스 이전에는 기능 구현 자체에만 치중했기 때문에, 제가 쓴 코드임에도 나중에 다시 보면 이해가 안되서 다시 분석해야하는 일이 많았습니다.(때문에 코드를 수정하는 것은 정말 두려운 일이었습니다.) 그러나 이제는 저의 지난 코드를 보는 것이 더이상 두렵지 않습니다. 게다가 지난 코드를 분석하느라 낭비하던 시간을 새로운 코드 작성에 더 투자할 수 있게 되었습니다.
큰 그림의 중요성
두번째 미션의 피드백에서 '비지니스로직과 UI로직을 분리해라'라는 내용이 있었는데요. 처음에는 단순히 별도의 클래스로 분리하기만 했습니다. 하지만 도메인클래스에서 UI클래스를 너무 자주 호출해서 이 둘을 완전히 분리할 수 없을까 고민했습니다. 그러다가 도메인 클래스와 UI클래스의 사이를 연결해주는 Controller클래스를 별도로 만들고, 제가 만든 패키지 구조가 적절한지 검색해 보았는데요. MVC패턴과 MVP패턴 등등에 대해서 알게 되었지만, 사실 아직도 전반적인 소프트웨어 아키텍처에 대한 이해는 부족한 것 같습니다. 하지만 이 과정에서 소프트웨어 아키텍처와 같은 큰 그림이 매우 중요하다는 것은 확실하게 알았습니다!ㅎㅎ
나는야, 함수 작명 전문가
프리코스를 시작하기 전까지는 한번도 한 적이 없었지만, 프리코스를 하는 3주동안 항상 했던 고민이 있습니다. 바로 함수의 이름입니다. 처음에는 함수가 하는 기능만 제대로 표현하면 될 것이라 생각했습니다. 하지만 점점 클래스와 함수들의 수가 많아지면서, 전체적인 맥락과 단어의 통일 등등 고려해야 할 것들이 너무 많았습니다.
로버트 C. 마틴의 저서 '클린 코드'에서 함수명은 동사로 짓는 것이 좋다했지만, 가끔 동사로 지으면 호출되는 곳에서 읽었을 때 함수의 역할이 제대로 전달되지 않는 경우도 있었습니다. 제 영어 실력의 부족인지, 경험의 부족인지, 지식의 부족인지 모르겠지만, 함수의 작명은 참으로 어려운 것 같습니다. ㅠㅠ 아마도 함수의 이름은 코드를 작성하고 사용하는 회사와 팀의 컨벤션을 따르는 것이 가장 중요하지 않을까... 하고 조심스럽게 추측해봅니다.
헛, IntelliJ에 이런 기능이?!
첫번째 미션에 대한 피드백 중 개발 도구의 'code format 기능을 활용해라'는 정말 유용했습니다. 첫번째 미션에 대한 요구사항이 Java 코드 컨벤션을 준수할 것이였는데, 이 기능을 알기 전에는 일일이 모든 함수들을 확인해야 했습니다. 한 칸의 공백도 코드 컨벤션에 속하기 때문에 이를 사람의 눈으로 모두 찾아내기는 여간 어려운 것이 아니었습니다. 이 기능 덕분에 이제는 단축키 하나면 코드 컨벤션에 맞는지를 확인할 수 있습니다.
이 외에도 제가 모르는 유용한 기능들이 있을 것 같아, 개인적으로 더 찾아보았습니다. 코드를 편집할 때 사용하는 코드를 한줄 복사해서 다음줄로 이동하기나, 코드 변동없이 다음줄로 이동하기 등 여러가지 기능들을 새로 알게되었지만, method나 variable을 추출하는 기능이 아주 인상적이었습니다. 특히 프리코스 미션을 하면서 코드 길이 제한 때문에 일부분을 별도의 함수로 분리하는 작업을 많이 했는데, 이 기능을 알고난 뒤로는 일일이 수작업하지 않고 간단히 메소드를 분리할 수 있었습니다.
프리코스를 마치며
이외에도 정말 많은 것들을 배울 수 있었던 값진 시간이었습니다. 미션에서 주어진 프로그래밍 제약사항과 피드백들을 단순히 따르기 보다는, 왜 그렇게 해야되는지를 고민하고 알아보려 노력하다보니 자연스럽게 더 많은 내용들을 공부할 수 있었던 것 같습니다. 이 과정에서 계속 혼자서 고민하다보니, 함께 의견을 나누고 또 조언을 구할 수 있었으면...하는 아쉬움 또한 더 크게 느껴진 것도 사실입니다. 사실 교육과정이 아니라 교육생 선발 과정인데, 자꾸 새로운 걸 배우고 깨닫다보니 그 사실을 자꾸 잊어버리는 것 같습니다. ㅠㅠ ㅎㅎ
좋은 과정을 준비해주신 우테코 팀에게 다시 한 번 감사드립니다!ㅎㅎ
'우아한테크코스' 카테고리의 다른 글
[우아한테크코스] 레벨1 - 자동차 경주게임에서 인터페이스를 통해 테스트 가능한 코드 만들기 (0) | 2020.04.16 |
---|---|
[우아한테크코스] 레벨 1 - 1, 2주차 회고 (0) | 2020.02.21 |