📔Diary

NextStep - TDD, 클린 코드 with Java 18기 후기

한국의 메타몽 2024. 4. 27. 11:40

목차

  1. 수강 시작과 수료 완료
  2. 강의 소개
  3. 강의 장점
  4. 강의 신청시 주의사항
  5. 여담

 
 

0. 수강 시작과 수료 완료

 
2024년 3월 4일 부터 4월 18일까지, 약 1.5개월동안 진행됐던 NextStep의 클린 코드 with Java 18기를 수강했다.
수강 계기는 같은 회사 동기가 함께 하는게 어떻겠냐고 권유했던게 시작이었다.
 
제목 그대로 Java로 TDD를 학습하는, 요약컨데 1.5개월짜리 TDD 온라인 부트캠프였다.
1.5개월 동안 크게 4개의 Section으로 나누어 각 Section마다 주어진 주제를 1대1로 매칭되는 멘토(= 코드 리뷰어)와 함께 진행하는게 대략적인 내용이 되겠다.
 
수강할지 말지 고민을 꽤 많이했는데, 크게 아래 2가지 이유때문에 쉽사리 수강선택을 하지 못했다.
 

  • 1.5개월 온라인 부트캠프이며, 강의 비용이 80만원
  • 이미 현업에서 TDD를 배우고 적용하고 있음

 
비용도 적은 금액이 아니고 무엇보다 1.5개월이라는 단기간동안 내가 몰입을 잘 할수있을지 미지수였다.
보통 NextStep을 수강시 최소 하루 3시간의 투자는 권장하고 있었기 때문에, 판교로 출퇴근하면서 퇴근 후 온전히 공부 시간을 최소 3~4시간을 마련할 수 있을지가 고민됐다.
 
이미 주변에 NextStep의 강의를 최소 1번은 수강했던 친구들이 많아서 그들에게 직접 강의후기를 들었고, 결론적으로 아래 후기가 크게 와닿았다.
 

  • 간혹 복잡한 구조 설계시 도메인 모델을 어떻게 쪼개서 짜면 동료들이 보기에도 좋다는 소리가 나올지 고민되는데, 이런 관점에서 도움이 됨
  • 이미 현업에서 TDD를 하고있지만, 해당 강의를 통해 협업하는 사람들, 내지는 미래에 자신의 코드를 보게될 후배님들이 보기에도 좋은 테스트 코드를 작성할 수 있는 계기가 됨
  • 코드 리뷰어가 1대1로 매칭되기 때문에 물어보고 싶은건 무엇이든 물어볼 수 있음

 
코드는 결국 남들도 보기 좋은 코드가 나에게도 좋은 코드라는게 개인적으로 관철하는 주장이라, 남에게도 좋은 코드를 만드는 방법을 조금이라도 터득하고자 수강하게 되었다.
 
 

1. 강의 소개

내가 진행했던 18기는 1.5개월동안 아래 4개의 Section(= 과제)을 진행했다.
과제 1개당 1명의 전담 멘토(= 코드 리뷰어)가 붙게되고, 세부 과제가 4~5단계로 나누어진다.
 

  • 자동차 경주 (단위 테스트)
    • 자동차 경주 참가자들의 정보를 입력받음 -> 참가자들의 자동차 객체 생성 -> 자동차 경주를 랜덤으로 구축해 우승자를 선발
  • 로또 (TDD)
    • 랜덤, 수동 로또를 구매하는 로직 작성 -> 랜덤, 수동 로또를 생성 -> 당첨 금액을 구하기
  • 사다리 타기 (FP, OOP)
    • 사다리 타기 참가들의 정보를 입력 받음 -> 사다리 타기 구축 -> 참가자별 사다리 타기 우승상을 출력
  • 수강신청 (레거시 코드 리펙터링)
    • 레거시 코드 리펙터링
    • 수강신청 로직을 구현

 
1주일에 한 번씩, 과제와 관련된 강의를 3시간 가량 박재성 개발자 (Click)님이 진행하셨다.
강의 퀄리티도 좋고 다시보기도 제공된다. 또한 멘토님들도 친절하셔서 전반적으로 진행하는데 큰 문제가 없었다.
디테일한 강의 소개는 해당 링크(Click)을 참고하면 상세하게 언급되어있다.
 
만약 교육 기간동안 모든 과제를 이수하지 못했을경우, 강사님이신 박재성 개발자님께서 직접 코드 리뷰를 해주신다. 
 
맨 처음에 자동차 경주 과제를 진행했을때는 어디서부터 도메인을 설계하고 어떤 구조로 만들어가야할지 감이 안잡혔는데, 다행이도 멘토님이 친절하게 이것저것 설명해주셨다.
 
특히 첫 주차의 자동차 경주 강의를 진행할때, '지금도 잘 하고 계시지만 조금 더 욕심을 가졌으면 싶은 마음'으로 1시간이 넘도록 1대1 온라인 강의를 해주신 멘토님은 강의가 종료된 지금도 잊을 수 없다. 아무래도 나는 첫 과제부터 정말 좋은 멘토님과 매칭이 됐던것 같다.
(보고 계신가요 c.....멘토님😭 저의 NextStep 최대 아웃풋은 바로 멘토님입니다...)
 
 

2. 강의 장점

수강대상에 언급된 항목들이 장점이었다.

 
 
현업에서 API를 설계할때, 가끔은 리펙터링의 관점을 고려하지 않고 그저 잘 돌아가고 에러만 안나면 상관없겠지라는 마인드로 API의 단순 개발에만 신경쓸때가 있었다.
강의 수강 이후에는 단순한 API 개발에도 도메인 모델을 OOP와 SOLID에 맞춰서, 다시 말해 수정이 필요한 상황에서도 최소한으로 로직을 건드릴 수 있게끔 개발하는데 관심을 갖게 됐다.
 
Test Code는 기존에도 현업에서 JUnit으로 무난하게 작성하고 있었지만, 강의를 계기로 해당 API를 처음보는 사람이 Test Code를 통해 로직을 어느정도는 이해할 수 있게끔 작성하는게 큰 도움이 되었다.
 
실제로 NextStep 수강 후 선배 개발자님으로부터 단기간동안 코드 퀄리티가 좋아졌다는 칭찬을 받았는데, 이때 강의를 수강한 보람이 있음을 체감할 수 있었다.
 
코드 리뷰어분들의 피드백을 보면 대부분의 리뷰가 이펙티브 자바, 디자인 패턴, 객체지향 프로그래밍 원칙에서 언급된 경우가 많았는데, 수강을 계기로 해당 책들을 다시 복습할 수 있는 기회가 되었다.
 
또한 코드 리뷰가 맞춤형 스타일인점도 좋았다.
예를 들어 초반 과제였던 OOP와 SOLID의 규칙에 맞춰서 개발하는게 쉽지 않았는데, 이때는 OOP와 SOLID, 즉, 원초적인 단계에 초점을 맞춰서 피드백을 제공받았다.
 
후반 과제로 갈수록 OOP와 SOLID 원칙에 익숙해졌고, 코드 리뷰에서 피드백을 받아 고쳐야 되는 부분이 초반에 비해서는 현저히 줄어들었다. 그리고 이때부터는 기본적인 코드리뷰 보다는 조금 더 심도 있는, 이를텐면 강의에는 언급되지 않았던 부분이라던가 이미 잘 구현했지만 이렇게 해도 좋겠다 싶은 추가적은 리뷰를 제공받을 수 있었다. 이러한 리뷰를 PR Comment 뿐만 아니라 슬랙을 통한 1대1 메신저로도 제공받을 수 있었는데, 1대1 과외를 받는 느낌이어서 큰 도움이 됐다.
 

과제를 진행하며 정리하게된 지식 리스트. 캡쳐로 보이는 내용의 4배 정도 키워드를 배우고 정리하게 됐다.

 

 

3. 강의 신청시 주의사항

잘 봐보자. 수강 대상은 '실무 경력 최소 1~3년 이상'의 '자바 개발자'이다.

 
나의 경우 2년 경력의 백엔드 + TDD 개념을 알고 실무에 사용중이었던 덕에 강의의 효과를 볼 수 있었다.
 
하지만 본인이 아래 1~4번 항목 중 최소 2개에 해당될 경우, 수강을 고민해보는것도 좋을것 같다.
 

  1. 실무에서 SpringBoot + Java (또는 Kotlin)을 사용하지 않음
  2. TDD를 모르거나, 개념은 알지만 실무에서 제대로 적용해본적이 없음
  3. 코드 리뷰를 받는것에 오픈 마인드가 아님 || 코드 퀄리티를 높이는데 열정적이지 않음 || 궁금한 것을 물어보는것에 적극적이지 않음
  4. 1.5개월의 강의 기간동안 하루 최소 3시간의 시간 투자가 어려움 (단, 이 점은 본인의 능력에 따라 달라짐)

 
특히 1번이나 2번이 해당되지 않을 경우, 남들보다 더 시간을 들여서 과제를 해야한다. 직장인이 퇴근 후 온전히 하루 3시간을 매일 투자하는것도 쉽지 않을때가 있는데, 이보다 더 시간을 투자해야한다면 선택에 신중한 편이 나을 수 있다.
 
여담이지만 본인의 경우 2번째 과제를 수행하는동안 개인 사정이 생겨 과제에 집중할 수 없었는데, 이때 여러모로 힘들었던것 같다 😅
 
또한 적극적인 자세가 중요한데, 궁금한게 있으면 (예의를 챙겨가며) 적극적으로 물어보고 논의하는 자세가 필요된다.
모르는걸 대충 이해하고 넘어가거나, 코드 리뷰를 받는것에 오픈된 마인드가 아니라면 (= 코드를 고치라고 권유할때 고치기 귀찮거나 싫은 마인드가 있다면) 강의를 수강하는 효과가 반감될 수 있다. 혹시 나처럼 PR Comment에 물어보는게 취향이 아니라면, 하다못해 1대1 슬랙 메신저를 통해서라도 물어보자.
 
스스로 생각하는 자세 없이 무조건적으로 코드 리뷰를 반영하는게 능사는 아니지만, '고치게 만들고 싶으면 너가 날 설득시켜봐'가 아니라 '이 사람은 어떤 관점에서 내 코드를 고치게 권유하는 걸까?'와 같은, 질 좋은 코드를 위해 오픈된 마인드를 가졌을 경우 강의를 수강했을때 얻는 장점이 더 많을 것이다.
 
물론 멘토 바이 멘토라 어떤 멘토님이 당첨될지는 미지수이기는 하지만, 나는 4번에 걸친 멘토들 모두 좋은 멘토님들이 매칭됐다. 80만원이나 하는 강의에 능력이 부족한 사람을 얹힐 일은 없다고 생각한다.
 
여담이지만 만약 내가 멘토였어도 적극적인 자세에 친절한 마인드 셋팅을 가진 사람한테는 1개가 아니라 2개를 알려주고 싶은 마음이 들지 않을까 싶다.
더군다나 강의비도 적은 비용이 아니니, 이왕 비싼 돈을 내고 강의를 수강할거면 활용할 수 있는 부분은 모두 활용하는게 좋을 것이다.
 
 

4. 여담

단점 항목을 따로 적으려했는데, 장점 대비 단점이 그리 크지 않아서 결국 작성하지 않았다.
단점을 굳이 뽑자면 가격대가 비싸다는 단점 정도인데, 코스 완주 후 돌이켜봤을때 수강을 통해 얻은 장점에 비하면 나쁘지 않은 기회비용이라고 생각된다.
 
추가로 개인 사정으로 4개의 과제 진행 중 2개의 과제에서 집중을 못했었는데, 이 점이 크게 아쉽다. 어찌저찌 강의 종료 시기에 비슷하게 맞춰 코스를 완주하긴 했지만, 조금 더 여유가 있었으면 더 높은 퀄리티로 과제를 완주할 수 있지 않았을까 싶은 욕심이 든다.
 
NextStep의 강의는 일부 기업의 신입(또는 경력직) 온보딩 교육에도 활용된다는데, 실무자 입장에서 100번은 좋은 선택인것 같다.
아무것도 모르는 신입을 바로 실무에 투입시키기보다, 1개월 ~ 1.5개월동안 실무대신 NextStep의 교육을 활용하면 신입이 아웃풋을 내는 시기를 단축시킬 수 있겠다는 확신이 들었다.
 
더군다나 강의비도 만만치 않은데, 이걸 온보딩 교육으로 제공해주는 기업은 정말 좋은 기업이 아닐까 싶다 🥲
 
만약 다음에 박재성 강사님께서 SpringBoot나 Kotlin, 또는 DDD로 강의를 진행해주신다면 비싼 수강비를 내더라도 참여를 해보고 싶다.