NEXTSTEP - TDD, 클린 코드 with Java 과정 모든 미션 완료 후 회고
이것은 혁명...
- 1. NEXTSTEP 의 과정을 신청하게 된 이유
- 2. NEXTSTEP 플레이 그라운드 과정 (6월 ~ 8월)
- 3. NEXTSTEP - TDD, 클린 코드 with Java 15기 (9월 19일 ~ 10월 19일)
최근에 내가 작성한 ‘프로그래머의 길, 멘토에게 묻다’ 라는 책의 리뷰 글처럼,
‘장인 정신’에 대해 많은 생각을 갖게 되었다.
그러한 와중에 자바지기님의 가치관을 듣고 NEXTSTEP 의 과정을 진행하면서 느꼈던 것은,
정말로 그러한 ‘장인 정신’을 추구한다는 것이다.
‘함께 성장하기’, ‘학습 테스트를 통한 실험 정신’, ‘실패를 통한 능동적인 성장 마인드’, ‘수용적인 태도’ 등등
그 무엇하나 ‘장인 정신’과 맞물리지 않는 가치관이 없었다.
이 과정은 ‘개발자가 추구해야 할 방향은 어느 방향인지’, ‘왜 객체지향인지’,
‘객체지향의 참 맛은 어떤 것인지’, ‘TDD 는 무엇이고 왜 필요한지’ 등등
개발자의 ‘장인 정신’ 즉, 개발자가 향해야 할 올바른 방향성을 자연스럽게 깨닫게 해주는 과정이라 생각한다.
1. NEXTSTEP 의 과정을 신청하게 된 이유
국비지원 학원을 다닐 때, 생긴 결핍들이 굉장히 많았다.
- 열정있는 동기 개발자들과 개발에 관한 토론을 하고싶다.
- 그나마 열정이 있는 동기 교육생은, 그 많은 교육생들 중 나를 제외하고 단 한 명 뿐이었다.
- 열정있는 동기 개발자들과 함께 단 하나의 프로젝트라도 제대로 완성해보고 싶다.
- 서비스 회사로 취직할 때 제출할 만한 프로젝트가 아니다. 절대로.
- 메서드 하나에 50줄이 넘어가며 난무하는 하드코딩, 각 계층의 역할을 깡그리 무시한 프로덕션 코드들 등등…
- 프로그래밍 공부의 올바른 방향성을 알고 싶다.
교육생들의 코드가 어떠한 지는 전혀 관심이 없다.
하드코딩을 하더라도 그저 당장의 기능만 돌아간다면 상관없다.
취직을 해본 적은 없지만 이것이 바로 SI 업체들의 미리보기가 아닐까 하는 생각이 든다.
국비지원 출신들의 대부분이 SI 로 진출하기 때문이다.
실제로 검색해보거나 들려오는 말들을 분석해보면 맞는 예측인 것 같다.
국비지원 학원은 그 무엇하나 제대로 충족시켜주지 못했다. 4월에 쓴 회고록에서도 얘기했지만, 개발에 열정이 있는 개발자라면 국비지원 학원은 무조건 손해라는 것을 다시금 인지하게 된다. 그러한 결핍들에 쌓인 상태로 수료하기 전부터 이것저것 알아본 결과, ‘우아한 테크 코스’를 알게 되었고 더 나중에 연쇄적으로 NextStep 까지 알게 되었다.
그러나 이러한 교육 과정들을 알게 되었을 때가 3~5월 쯤이었기에 ‘우아한 테크 코스’를 지원하려면 꽤 많이 기다렸어야 했다. 그래서 NEXTSTEP 의 과정들부터 살펴보기 시작했다.
그 안엔 꽤 많은 코스들이 있었는데, 그 중 가장 눈에 띄는 것이 ‘플레이 그라운드’ 와 ‘TDD, 클린 코드 with Java 15기’ 과정이었다. 이 과정들의 상세 설명과 자바지기님의 유튜브 영상들을 보면서 ‘내가 찾던 프로그래밍 공부의 올바른 방향성이 여기있다.’ 는 생각이 강하게 들었다. 그리고 1대1 피드백 없이 공통 피드백으로만 진행되는 플레이 그라운드부터 시작하게 되었다.
2. NEXTSTEP 플레이 그라운드 과정 (6월 ~ 8월)
확실히 지금까지 공부해왔던 방식과는 차원이 다르다고 느꼈다. NEXTSTEP 은 강사보다 수강생을 힘들게 하는 참교육을 시전하는 곳이다. 각 미션마다 요구사항을 주고 그 요구사항을 기반으로 프로그램을 구현해 나가는 방식이다. 이 과정에서 플레이 그라운드는 공통 피드백만 제공해주며 그 공통 피드백만을 토대로 자신이 스스로 만족할 때까지 계속 구현, 리팩토링을 해나가는 것이다. 물론 슬랙을 통해 질문을 할 수도 있다.
확실한 건, 공통 피드백만으로 진행되는 플레이 그라운드만 해도 엄청난 실력 상승을 경험할 수 있다. 단, 스스로 시간을 많이 내서 그 공통 피드백들을 최대한 수용하고 적용하려는 노력이 있어야 한다.
NEXTSTEP 의 미션들을 진행하다보면 ‘TDD’, ‘객체지향적인 설계’ 는 물론이고 ‘팩토리 메서드 패턴’, ‘상태 패턴’, ‘전략 패턴’ 등등 자연스레 디자인 패턴에 대해서도 공부를 하게 된다. 이러한 패턴들이 실제로 미션에 적용되는 부분이 있기 때문이다. 난 국비지원 학원에선 이러한 부분들을 배워본 적이 없기 때문에, 미션을 진행하면서 이러한 패턴에 대해서도 같이 공부를 하게 되었다.
하지만 역시 공통 피드백 외의 더 세세한 부분들에 대해 피드백을 받을 수 없기에, 분명히 한계는 존재한다. 그리고 내가 지금 공통 피드백을 최대한 적용하면서 구현해나간다고 해도, ‘이것이 정말 맞는 방향인건가??’ 하는 의구심이 들 때도 생긴다. 플레이 그라운드의 ‘3단계 미션 - 좌표 계산기’ 까지 미션 완료 후 ‘4단계 - 블랙잭’ 구현에 들어가기에 앞서 한계에 봉착했다는 생각이 들었다.
처음 이 ‘4단계 - 블랙잭 미션’ 을 설계하려 했을 때, 대체 이 수많은 변수들과 조건들을 어떻게 설계해 나가야 할 지 감조차 잡히지 않았다. 당연히 설계가 안되기 때문에 기능을 작은 단위로 쪼개는 것도 안 되었고, TDD를 시작할 수 없었다. 거의 일주일 가량을 이걸 어디서부터 어떻게 설계해야할 지 고민만 했던 것 같다.
결국 안 되겠다 싶어서 블랙잭의 공통 피드백을 먼저 분석하게 되었다. 거기선 수많은 변수와 조건 처리를 State 인터페이스를 기반으로 해결한 모습을 볼 수 있었다. 처음엔 이게 뭐지 싶었는데, 이것을 검색해본 결과 그제서야 ‘상태 패턴’ 이라는 디자인 패턴이라는 것을 알게 되었다. 이때부터 내가 NEXTSTEP 플레이 그라운드 미션 진행을 잠시 멈추고, 인프런을 통해 ‘함수형 프로그래밍 (람다, 스트림, optional)’, ‘디자인 패턴’ 에 대한 공부를 시작했던 것으로 기억한다. 그 때가 8월 중후반이었다.
3. NEXTSTEP - TDD, 클린 코드 with Java 15기 (9월 19일 ~ 10월 19일)
원래는 2달 과정이지만 이 과정에 많은 시간을 투자해서 몰입하다보니 딱 1달만에 4단계까지 모든 미션을 끝내게 되었다.
이 전에 플레이 그라운드부터 혼자서 공통 피드백을 적용하기 위해 노력했던 것이,
TDD, 클린 코드 with Java 과정에서도 꽤 수월하게 미션들을 진행해 나갈 수 있었던 이유라고 생각한다.
그렇게 8월부터 9월까지 한 달간 ‘함수형 프로그래밍’, ‘디자인 패턴’을 포함한 프로그래밍 관련 다른 공부들을 하다가, 9월 중반에 1대1 리뷰로 미션이 진행되는 ‘TDD, 클린 코드 with Java 15기’ 과정이 열린다고 공지가 떴다. 사실 가격이 꽤 만만치 않았고, 취직을 한 적이 없기에 나에겐 돈이 전혀 없었다. 그래서 부모님께 부탁을 해야만 하는 상황이어서 고민을 정말 많이 했다.
조금 놀랐던 건, 부모님이 생각보다 흔쾌히 허락해 주셨다는 것이다. 물론 우리 집이 못사는 집안은 아니었으나 그래도 가격이 가격인지라 좀 놀랐다. 나중에 이유를 말씀해 주셨다.
“너가 프로그래밍을 시작하면서 즐겁게 열심히 하는 것을 보니 밀어주고 싶었다.”
이러한 부모님의 마음 때문에라도 이 과정에서 뽑아먹을 수 있는 한 최대한 뽑아먹겠다는 신념으로 시작하게 되었다.
결론부터 얘기하자면 이 과정의 참여를 전혀 후회하지 않았다. 처음 이 과정을 시작할 때의 나와 지금의 나를 비교했을 때 객체지향 설계와 TDD 실력의 비약적인 상승이 눈에 띄게 느껴졌다. ‘플레이 그라운드’ 과정은 큰 틀을 잡아주는 느낌이라면, ‘TDD, 클린코드’ 과정은 디테일한 부분부터 큰 틀까지 실시간 혹은 하루 주기로 피드백을 받을 수 있다.
‘도메인과 표현 계층의 예외 검증 분류’, ‘역할과 책임을 어떤 클래스에 설정할 지의 기준’, ‘toString 의 용도’, ‘테스트 가능한 부분 추출’ 등등 지금 기억나는 피드백들만 해도 엄청나게 많다. 이것들 하나하나가 실제로 미션을 구현하면서 나의 좋은 습관으로 체화가 된다. 그리고 시간이 지날수록 이해가 덜 되었던 부분들도 하나씩 이해가 되기 시작한다. 의문스러운점은 언제든지 리뷰어와 1대1 토론을 벌여도 된다 ㄷㄷ…
그리고 사실 리뷰어분들이 굉장히 많이 계신데, 자신과 굉장히 잘 맞는 혹은 잘 안맞는 리뷰어분들이 있다. 미션을 자주해주시는 리뷰어님이 있는 반면, 조금 늦어지는 리뷰어님도 계시다. 꼼꼼하게 해주시는 분이 있는 반면, 큰 틀에서만 해주시는 분도 계시다. 그분들은 전부 바쁜 현직자분들이기에 이해를 해야한다. 그래서 현재 미션을 리뷰신청 해둔 상태로 시간이 많이 지날 것같은 상황에선, 다음 단계의 미션도 같이 병행하는 식으로 진행했다.
그냥 그렇게 남는 시간 전부를 몰입해서 정신없이 구현하고, 리뷰어님 피드백 적용해보고, 그럼에도 의문스러운 점이 생기면 다시 질문하고 토론도 해보면서 지냈다. 그러다보니 나도 모르게 모든 미션을 4주 반만에 15기 사람들 중에서 1등으로 마무리를 하게 되었다.
오늘 격주의 목욜마다 진행하는 라이브 강의에 참석하게 되었는데, 거기서 자바지기님이 하신 말씀이 있었다. 이걸 연습한 뒤 바로 현장의 코드를 리팩토링하면서 적용해봐야 자기 것이 된다고 하셨다. 그러나 난 지금 현직자가 아니다. 무 경력의 취준생이다. 난 내 것으로 만드는 길을 나만의 방법으로 만들어야 할 것이다. 일단 플레이 그라운드에서 포기했던 ‘4단계 - 블랙잭’ 부터 시작할 것이다. 이젠 어떻게 시작해야 할 지 어느정도 감이 잡힌다.