상세 컨텐츠

본문 제목

[Next Step] TDD, 클린 코드 with Java 16기 과정 후기

후기

by leediz 2023. 6. 18. 16:51

본문

2020년 하반기에 진행했던 클린코드 with java 10기를 수강한 적이 있었다.
이번 2022년 상반기에 진행된 16기 과정은 개인적으로 그 때의 연장선으로 생각하는 만큼 자연스럽게 10기에 대한 후기도 포함하게 되었다. (과정 링크)

 

지난 클린코드 with java 10기 강의 완주 실패

당시에는 4단계 미션 중 마지막 볼링 미션 Step2에서 포기를 했었다.
물론 미션을 모두 하지 못한 점은 아쉽지만 개인적으로는 저정도까지 한것만으로도 잘했다고 생각한다.
지금에서 당시 완주하지 못했던 이유를 생각해보면 환경적 요인실력적 요인으로 나눠볼 수 있다.

 

환경적 요인

과정 시작 일주일 후였던가 병원에 3박 4일정도 입원하는 바람에 과정 초반 기간을 날리기도 했었고, 당시는 커리어 유일하게 지방출장 기간이었는데 수강기간과 90%정도 일치했다.
그래서 그때는 월요일에 경주에 내려가서 금요일에 다시 서울로 올라오는 패턴을 매주 반복했었다.
원래는 한달만 다녀오라는게 3달이 되었고 임시 거처로 아무것도 없는 원룸방 하나에서 생활하다보니 평일에는 참고할 책도 없었고, 모니터는 커녕 변변한 의자와 책상도 없었다.
급하게 앉은뱅이 책상이라도 하나 구매해서 미션을 진행했는데 오래 앉아있기에는 너무 힘들고 불편했다.
그리고 미션 마지막 즈음에는 휴식기간도 없이 갑자기 또 다른 프로젝트 투입준비를 하는 바람에 물리적으로 더 이상 미션을 진행할 여유가 없었다.

 

실력적 요인

당시만 해도 나는 내가 속한 직군이 무슨 직군인지도 몰랐다.
그리고 업무를 잘 하기 위해서나 커리어를 위해서 어떤 것을 공부해야 하는지도 몰랐다.
막연하게 IT직군이니 개발을 잘 해야할것 같다는 생각에 당시 실무에서 개발을 하지는 않았지만 그냥 기계적으로 개발 관련 강의를 수강하고 있었고, 여기저기 찾아보다가 이 과정을 알게 되어 도전했었다.
하지만 실무 개발경험이 없었고 이런 저런 강의들을 찾아보는 과정에서 나도 모르게 잘못 알고있거나 잘못된 습관으로 굳어진 구현방식들이 있었다.
그리고 당시에는 그게 왜 잘못된 것인지도 전혀 이해를 하지 못했었고, 뭘 어떻게 해야하는지도 몰랐다.
그래서 다시 돌이켜보면 사다리 미션까지 통과는 했지만 진정한 의미의 통과는 아니었던것 같다.
준비가 안된 상태에서 난이도가 높아짐에 따라 자연스럽게 포기하게 되었기도 했었다.

 

그럼에도 불구하고 지난 미션에서 얻은 점

여러 가지가 있지만 실무적으로도 가장 도움이 많이 되었던 부분은 '메서드 분리' 부분인것 같다.
다른 부분은 몰라도 메서드 분리만큼은 리뷰어님들이 철저하게 연습을 시켜주신 덕분에 코드를 짤 때 메서드를 최대한 분리하는 습관이 생겼다.
이 덕분인지 이런저런 챌린지 때 코드를 제출하면 코드가 깔끔하다는 평을 받았던것 같다.
그리고 실무에서도 개발은 아니더라도 간혹 코드를 짜야할 일이 있을 때에 함수를 분리하여 가독성을 높이고 유지보수성을 높였다고 개인적으로 생각한다.

 

클린코드 with java 16기에 다시 도전한 계기

신입때만 하더라도 IT 직업군에는 '개발자'만 있는줄 알았다.
하지만 연차가 쌓이며 많은 직업군이 있다는 것을 알았고, 개발을 잘 하면 좋겠지만 각자의 직업군이 맡은 역할에 따라 필요한 역량이 다르기에 꼭 모든 직업군이 개발을 잘 해야만 하는 것은 아니라는 것도 깨달았다.
그리고 내가 속한 직업군에 대해서도 비로소 이해하는 시기가 왔었다.
'개발'과 관련해서는 참 애매했던것 같다. 물론 잘하면 당연히 좋겠지만 잘 하지 않더라도 남들이 개발한 제품들을 잘 사용할줄만 알아도 괜찮겠다는 생각을 했다.
그렇다면 직접 개발할일도 없는데 '개발'에 대한 공부에 시간을 쏟는것보다는 당장 내가 사용하고 나에게 필요한 공부들을 하는게 효율적이라는 판단에 '개발'에 대한 욕심과 끈을 놓아버렸다. (나름 큰 결심이었다.)
그렇게 개발과 이별하는줄 알았는데.. 이게 웬걸? 이직 면접에서 난 분명히 당당하게 '저 개발 할줄 몰라요. 개발 못해요. 저 개발자 아니에요.'라고 했었는데.. 뽑아놓고 개발을 시키다니...! ㄷㄷ
비록 개발해야 하는 언어가 자바는 아니지만 그래도 10기때 나름 발전했던 좋은 기억이 있기에 정말 많은 고민 끝에 다시 도전하기로 결심하고 수강 신청을 했다.

 

다시 도전하며 세운 목표 설정

약 3년만에 다시 도전하기도 하고 강의료도 절대적으로 비싸기 때문에 (그 사이에 10만원 더 비싸졌다) 지난번과 같이 무작정 도전하는 것은 필패라고 생각하고 나름 혼자서 정신무장을 했다.

  1. 무조건 강의 종료일 전에 모든 미션은 완수한다.
  2. 최대한 정시퇴근을 하거나 야근을 줄여서 절대적으로 미션 수행 시간을 확보한다.
  3. 아쉽게도 실무에서 자바개발을 하지 않으므로 대신 "설계"쪽으로 많이 고민해본다.

3가지 모두 의지와는 별개로 잘 되지 않은 부분들이 있었는데, 결과적으로는 미션 완주는 했고 그 과정에서 배우고 얻은 점들이 많기에 만족한다.
과정에서 경험하며 배운 점과 아쉬운 점들은 다시 미션별로 정리하면 아래와 같다.

 

자동차 경주 미션

  • jupiter assertion / assertJ 차이
  • 단위테스트 경험
  • 정적 팩토리 메서드 사용 케이스
  • 주생성자와 부생성자 개념
  • 인터페이스를 활용한 전략 패턴 구현 및 테스트 방법
  • Arrays.asList()와 List.of()의 차이
  • compareTo 사용
  • TDD로 구현해보지는 못했음

리뷰어님과의 dm을 통해서 이런저런 질문을 많이 하며 미션을 진행했다.
두번째 구현임에도 예전에 작성했던 코드가 전혀 기억이 나지 않았지만 리뷰어님께서 미션 목표와 가이드를 잘 제시해주셔서 덕분에 헤매지 않고 구현할 수 있었다.
미션의 목표인 단위 테스트에 대해서 많이 작성해보며 객체지향적으로 코드를 작성해보려 연습했었던 미션이었다.

 

로또 미션

  • Enum 클래스 사용
  • Set, TreeSet 사용
  • CustomException 사용
  • 클래스 분리를 하며 얻는 이점 깨달음
  • 리뷰어님은 final 활용을 강조했지만 제대로 적용하지 못한 점은 아쉬움

로또 미션도 리뷰어님과의 dm을 통해서 이런저런 질문을 많이 하며 미션을 진행했다.
많은 질문을 했음에도 친절하고 세세하게 답변을 잘 해주셔서 미션을 진행하는데 큰 도움이 되었다.
익숙하지 않은 Enum과 처음 사용해보는 TreeSet 자료구조를 사용하는 미션이 되었고, 무엇보다 클래스를 분리하며 얻는 이점에 대해 피드백을 통해 깨달았다.
미션의 주제이기도 했고 이론적으로 클래스를 최대한 분리하라고는 했지만 개인적으로는 크게 와닿지 않아서 극단적으로 분리하지는 않았었다.
그런데 피드백을 반영하며 그 과정에서 클래스를 분리함으로써 얻는 이점을 경험할 수 있었고 그 때 깨달음을 얻은 것이 매우 좋은 기억으로 남아있다.
또한 리뷰어님께서 마지막에 애정깊고 진심어린 조언을 통해 TDD와 관련된 책을 추천해주신 덕분에 바로 다음 미션에서 말로만 듣던 TDD를 도전해볼 수 있었다.

 

사다리타기 미션

  • 생애 최초로 TDD로 구현 시도
  • Random 클래스에 대한 테스트 방법 습득
  • 모든 피드백을 반영하지 못함
  • 리뷰어님과의 커뮤니케이션이 좀 아쉬웠음

사다리타기 미션도 리뷰어님과의 dm을 통해서 이런저런 질문을 많이 하며 미션을 진행했지만 dm 내용도 그렇고 피드백 내용도 온전히 이해하지 못한 내용들이 있었다.
사실 미션을 한번 구현한 뒤 다시 TDD로 구현해보는 등 유독 사다리타기 미션은 최소 3번은 처음부터 다시 구현했던것 같다.
그래서 개인적으로 약간 헤맸던것 같은데 피드백 내용도 잘 이해하지 못해서 이번 과정 미션 중에 유일하게 리뷰어님의 피드백을 반영하지 못했다.
시간 내주셔서 리뷰해주시고 많은 피드백을 주시는 점은 감사하지만 개인적으로는 리뷰이 수준에 맞게끔 잘 피드백을 남겨주시는 것은 리뷰어님의 역할이라 생각한다.
그런 의미에서 물론 내가 많이 부족하기에 피드백을 잘 이해하지 못했지만 어느 정도 내가 이해할수 있도록 이야기해주시려 했으면 어땠을까 하는 아쉬움도 살짝 있다.
그래도 비록 구현은 못했지만 마지막에는 상세한 피드백을 남겨주셨기에 그 피드백을 토대로 하반기에 개인적으로 다시 구현해보려 한다.

 

수강신청 미션

  • DB와 연동할 때 도메인 모델을 구현하는 연습
  • DB 연동 전 테스트 케이스를 만드는 연습
  • service layer를 만들고 테스트를 만드는 연습
  • 리뷰어님이 매우 아쉬웠음

수강신청 미션은 이번 기수에 새롭게 추가된 미션으로 실무 환경과 최대한 비슷하게 설계한 미션이라고 한다.
DB와 연계할 때에도 DB 테이블 기반이 아닌 도메인 객체를 먼저 설계한 후 DB를 적용하는 연습을 할 수 있는 미션이다.
개인적으로는 미리 세팅된 코드들부터 처음보는 코드들이 많았기에 신기했고 나중에 비슷하게 구현할일이 생겼을 때 많은 참고가 될것 같다.
내용과는 별개로 미션 진행이 제대로 되지 않았던 미션이었기에 많은 아쉬움이 있는 미션이기도 하다.
리뷰도 계속 늦어졌고 중간에는 포비님이 대신 리뷰해주시기도 했었지만 리뷰어님의 직접적인 설명이나 사과가 없던 점이 매우 아쉽다.
리뷰 진행방식 때문인지 그나마 해주셨던 3개의 리뷰조차도 제대로된 리뷰였는지 의심이 되고 그냥 미션 하나 날렸다는 생각이 든다.
과정에 다시 도전하며 개인적인 목표로 세웠던 강의종료일 전 미션 완료도 여기서 딜레이가 많이 되어서 종료일 이후에 최종 미션 완료가 되었다.
이 경험 때문인지.. 매우 좋은 과정임에도 불구하고 이런 돌발 상황에 대한 대처 방법이 잘 마련되어있지 않은 점이 매우 아쉽다.
절대적으로 수강료가 저렴한 편도 아닌데 CS적인 측면이 매우 아쉽다는 생각이 들었다.

 

나의 NEXT STEP

미션을 수행하면서 OOP다운 코드를 구현해보려고 노력했고 관련 개념들도 조금 익혔다.
또한 TDD까지는 아니더라도 테스트 케이스 생성에 대해서도 어느 정도 감이 생겼다.
그런데 위 과정은 자바로 진행되었지만 실무에서는 자바를 사용할 일이 없을것 같아 지금까지 배운 부분들이 좀 아깝다는 생각도 든다.
과정을 수강하면서 범용적인 개념들 뿐만 아니라 자바에 대한 테크닉들에 대해서도 피드백을 받고 개선했었는데 과정이 끝나고 몇 주가 지난 지금 벌써 많이 가물가물하다.
비록 실무에서는 다른 언어를 사용하지만 테스트 케이스 생성 등과 같은 부분들은 해당 언어로도 충분히 시도해볼 수 있으므로 나의 상황에 맞게 이 과정에서 배운것들을 잘 적용할 수 있도록 노력해 나갈 것이다.

댓글 영역