티스토리 뷰

아래 글은 2019년 4월 11일에 작성, 4월 22일에 추가 작성한 글이며, 블로그를 이전하는 과정에서 현재 날짜에 재작성한 글입니다.


우아한 테크코스

 

배달의 민족 우아한 형제들에서 올해부터 새롭게 개발자 양성 학교를 만들었습니다.
50명 정도의 인원을 선발하여 2019년 5월부터 12월까지 약 8개월 간의 시간 동안 집중적으로 프로그래밍에 대해 교육을 받게 됩니다. 코스의 이름은 우아한 테크코스인데요, 테크코스에서 지향하는 목표는 다음과 같습니다.

 

  • 일반 사용자용 서비스를 개발하는 회사가 필요로하는 역량을 키우는 것에 집중함으로써 재교육없이 현장의 업무를 바로 시작할 수 있도록 하는 것
  • 자기주도적인 학습 역량을 키우는 것
  • 다른 사람들과 소통하고 협업하면서 같이 성장할 수 있는 인재를 키우는 것

더 자세한 설명은 우아한 형제들 기술블로그에서 보실 수 있습니다.


프리코스

2월에 모집을 시작해서, 3월에 지원서를 받고 1차 온라인 코딩 테스트를 치뤘습니다. 저는 감사하게도 1차 테스트를 통과하여, 현재 2차 테스트 전 테크코스의 본 과정을 미리 경험해보는 '프리코스'를 마무리하는 시점에 있습니다.

 

 

테크코스의 본 과정에서는 미션 수행 - 오프라인 강의 - 피드백 / 코드리뷰 의 세 단계가 순환하면서 코스가 진행될 예정인데요. 프리코스는 그 방식을 미리 체험해보는 시간입니다.

 

프리코스는 3주라는 시간 동안 매주 1개의 과제가 온라인으로 주어집니다. 다만 오프라인 강의와, 개별 피드백은 없는 상태에서 진행됩니다. 주어진 미션을 수행해서 github에 Pull Request(PR)로 제출하면, 참여자들의 전체적인 종합 피드백과 함께 다음 미션을 받는 형식입니다.


프리코스 후기

한 마디로 정리해보자면, 재밌다! 였습니다.

 

3주동안 주어진 미션은, 자바 프로그래밍 언어만을 사용하여 콘솔에서 진행되는 미니게임 등을 구현해 보는 것이었습니다. 자바라는 언어의 특성과 철학에 맞게, 또 클린 코드를 만들기 위한 훈련 과정에 맞게, 1주차에는 함수를 분리해보는 경험, 2주차에는 클래스를 분리해보는 경험, 3주차에는 여러 개의 클래스를 분리한 후 서로 관계를 맺어 하나의 프로그램을 완성하는 경험 을 하는 것이 각각의 미션의 목표였습니다.

 

3주라는 짧은 시간 동안 생각했던 것보다 정말 많이 배우고, 많은 것을 느꼈는데요. 과정을 진행하면서 스스로 공부하며 배워나간 것들을 간단하게 정리해보면 다음과 같습니다.

Java Code Convention

1주차 미션을 시작하면서 가장 먼저 맞닥뜨렸던 것은 자바의 코드 컨벤션이었습니다. 클린 코드를 구현하고자 하는 마음이 가득한데 왜 진작 컨벤션을 공부해 볼 생각은 하지 못했을까... 의문이 들었네요. 미션과 함께 첨부해 주신 링크를 공부하고 포스팅도 해가면서 여러 번 정독했습니다. 공백, 들여쓰기, 상수 처리 등과 같이 인지하지 못하고 코딩하던 버릇들을 바로잡는 데에 많은 도움을 받았습니다.

기능 별로 계획한 후 단위 Commit

미션에서 요구되는 조건들 중 하나는 구현을 무작정 시작하지 말고, 프로젝트의 얼굴(?)인 README.md에 미리 구현할 기능 목록들을 정리한 후에 구현하면서 기능 별로 commit을 찍는 것이었습니다.

 

보통은 구현해야 할 과제가 주어지면 일단 프로그램의 진입점에서부터 코딩을 해나가기 시작하면서, 생각나는대로 그때그때 흐름을 잡아가면서 프로그램을 짰었습니다. 그래서 키보드에 손을 대기 전에 미리 이 프로그램에서 필요한 기능들에는 어떠한 것들이 있지...? 라고 자문하면서 접근하는 것이 생각보다 간단하지는 않았습니다.

 

그래도 막상 클래스 관계도를 손으로 직접 그려가면서 막연하게 짐작하고 있던 클래스별 관계와 기능별 목록들을 좀 더 명확히 하자, 코딩을 시작한 이후에는 확연히 작업 속도가 빨랐습니다.
작업 중반 이후에 리팩토링이나 방향성을 변경해야 할 경우가 생겼을 때에도, 기존 경험에 대비했을 때보다 확실히 기존에 내가 생각했던 흐름을 정리해놓은 참고 문서가 있었기 때문에 접근하기가 훨씬 수월했습니다.

 

다만 개인적으로 완벽주의를 추구한 나머지 완벽한 문서를 한번에 만들어서 박제하려다가 너무 시간을 많이 썼던 것 같네요. 개발을 진행하다보면 얼마든지 바뀔 수 있는 문서인데...ㅋㅋ 전체 피드백 중에 죽은 문서가 아니라 살아있는 문서를 만들기 위해 노력한다.라는 뜨끔한 피드백도 있었습니다. :o

사용자 입력은 항상 예민하게!

미션이 거듭될수록 사용자 입력을 받는 부분이 점차 많아졌는데요, 내가 모르는 누군가에게 데이터를 받는다는 것은 정말 경계하면서 예민하게 받아쳐야 할 부분이라는 생각을 더욱 확고하게 가지게 되었습니다.

 

예를 들어 내가 원하는 데이터가 콤마(,)로 구분된 1부터 20까지의 중복되지 않는 정수 6개라고 가정했을 때, 이 입력 과정에서 개발자가 예민하게 반응해야 하는 주안점은 다음과 같이 두 가지라고 생각합니다.

1. 내가 원하는 데이터가 무엇인지 위와 같이 정확한 모든 조건을 넣어서 정의하는 것
2. 사용자가 올바른 데이터 형식으로 넣어주지 않을 모든 경우의 수를 생각해 방어적으로 코딩하는 것

개발 과정에서 미처 내가 원하는 데이터의 조건을 전부 다 캐치하지 못할 가능성도 있고, 또 사용자의 입력이 천차만별일 경우 생각하지 못한 에러가 나지 않도록 신경을 써주어야 한다는 생각이 들었습니다.

 

위 예시만 하더라도 입력이 콤마로 잘 구분되었는지, 1부터 20 사이의 숫자인지, 중복되지는 않는지, 숫자 개수가 모자라거나 넘치지는 않은지, 심지어 숫자를 원하는데 문자가 입력되지는 않았는지...! 까지 전부 생각해주어야 합니다.

 

더불어 어떻게 해야 자바 언어의 API를 잘 활용하면서 효율적으로 유효성 검사를 할 수 있을까에 대한 고민을 정말 많이 해볼 수 있었던 것 같습니다. 제 코드보다 더 좋은 Best Practice를 보면서 공부해보고 싶네요.

함수형 프로그래밍 (Functional Programming)

코드를 작성하고 고치고 리팩토링하면서 들었던 주된 고민과 궁금증 중에 하나는, 함수형 프로그래밍에 대한 것이었습니다. 이 글을 매번 찾아서 읽어봤던 것 같습니다. 클린 코드를 위해 길고 복잡한 로직에서 기능을 도도독 떼어내 함수를 분리하는 것 까진 좋은데, 이 한 가지 기능을 갖고 있는 함수를 어떻게 표현해줄 것인가? 의 문제였습니다. 거기에 자바라는 언어의 특성 상 모든 함수는 클래스 내에 있는데, Class Field에 어떤 값을 세팅해주고, 메소드의 파라미터와 반환형에는 어떤 값을 둘 것인가? 라는 고민이 늘 따라붙었습니다.

 

결과적으로 여러가지 도움을 받아 내린 결론들을 정리해보자면, 함수의 이름과 파라미터, 반환형에 그 함수가 할 행동이 확실하게 드러난다면, 그 함수가 사용할 데이터가 field에 있어도 괜찮다. 다만 field에 있는 데이터는 그 클래스가 마땅히 가지고 있어야 할 것들로만 구성되어야 한다.라고 할 수 있겠습니다. 어떻게 짜도 side effect가 있을 수 있기에 100% 정답은 없겠지만, 더 나은 답은 항상 존재하는 것 같습니다.

 

함수의 이름을 짓고, 파라미터와 반환형을 결정하는 문제는 제가 제 삶에서 더 이상 코드를 작성하지 않을 순간까지 따라붙는 고민거리겠지요. 조만간 로버트 C. 마틴 선생님의 클린 코드 책을 읽으면서 공부해 볼 계획입니다.

그 외에도

위에 정리한 것들 외에도, 사용자에게 데이터를 어떻게 하면 더 효율적으로 표현해 줄 수 있을지, (OOP로 잘 짜여진) 객체 간의 관계가 유기적인 코드에 대한 고민, 자바의 Enum 클래스와 Exception의 상속을 이용한 예외 처리, 람다와 stream을 사용해서 함수형 프로그래밍 적용하기 등 공부하고 배운 것들이 참 많았습니다.

 

실제로 (비약일 수도 있겠습니다만) 치열하게 3주를 보내고 나니 3주 전과는 다르게 코드를 보는 눈이 많이 달라졌습니다. 명확하게 더 알게 된 부분과, 더 공부해야 할, 혹은 더 공부하고 싶은 부분들이 눈에 띄기 시작했습니다.

재밌다!

어찌 됐건 모든 과정들이 한 마디로 재밌었습니다! 최근 김창준 선생님의 함께 자라기 - 애자일로 가는 길이라는 책을 읽고 있는데요, 프리코스의 과정이, 테크코스가 지향하는 과정이 정말 애자일한 성장을 가져다 줄 수 있는 코스라는 생각이 들었습니다. 그리고 애자일한 성장이 너무 고프고, 많이 원했던 제 자신도 발견할 수 있었네요. 아직 2차 테스트를 치루기 전인데, 모쪼록 좋은 결과 있었으면 좋겠다는 바람입니다.

 

여담인데, 실제로 최근의 저의 상태를 지켜보던 여자친구가 했던 말입니다.

 

세상에 취업 준비를 이렇게 즐거워하면서 하는 사람이 어디있어!

 

ㅋㅋㅋㅋㅋ맞아요. 이런 부분에서 즐겁고, 즐거워 할 줄 아는 성향이 정말 감사한 일인 것 같습니다. 진로를 이 길로 가기로 굳게 마음 먹은 이상, 즐거워하는 마음도 평생 이어졌으면 좋겠습니다.


19.04.22 추가

감사하게도 우아한 테크코스에 합격했습니다! 좋은 환경에서 좋은 분들과 공부하게 되어 기쁘네요. 8개월 동안 겸손하고 치열하게 공부하겠습니다. :)

댓글
댓글쓰기 폼