개발 생활 - 6

  1. 개발 생활 - 1 : PDF 문서 생성 서버
  2. 개발 생활 - 2 : 연산된 데이터 수집 작업자
  3. 개발 생활 - 3 : 전자우편 알림 서버
  4. 개발 생활 - 4 : Python과 Django 강의
  5. 개발 생활 - 5 : 공부 자료
  6. 개발 생활 - 6 : 앞으로 계획

5. 앞으로 계획

개요

지난 6~7개월 동안 학습과 실무가 겹친 개발 생활을 보냈다. 내가 뭘 할 수 있고, 하고 싶은 건 무엇인지, 재밌다고 여기는 건 무엇이며, 앞으로 뭘 할 것인지를 찾는 시간이었다.

다음 단계는 현재 내가 맡고 있는 분야와 관심 갖고 있는 분야에 대한 기초와 기본부터 계발하여 제대로 이해한 기술로 구현하려 한다.

프로그래밍 언어는 Python을 주력으로 사용하고, Go 비중을 높여갈 계획이다. 추후엔 주 Go를 주로 사용하고 Python을 특정 목적용으로 사용할 것으로 예상한다. Julia, Nim가 재밌어 보이고, Scala, Java, C++은 별로 끌리진 않지만 공부할 필요성을 느낀다. 하지만 현재 진행하고 있거나 계획한 공부 대상으로도 벅차서 Scala, Java, C++은 당분간 공부하진 않을 것이다.

테스트 케이스, 문서화, 배포/배치 등 여러 부분을 자동화하고 있고 더 많이 자동화 할 예정이다. 맡은 프로젝트가 늘어나고 각 프로젝트 구현단이 확장되면서 개발과 운영 복잡도가 증가하다 보니 자연스레 기존 자동화 도구나 방법이 필요한 이유를 이해하여 필요로 하게 됐다.

PDF 문서 생성 서버

현재(2015년 3월 기준) PDF 문서 생성 서버를 리팩토링하고 있으며, 리팩토링 후 신규 버전을 개발할 예정이다. 신규 버전은 다음 내용을 목표로 한다.

  • 메모리 사용량 줄이기 (lazy evaluation)
  • PDF 생성을 병렬로 처리
  • Python 3 지원
  • 캐쉬(cache) 강화
  • 전자우편 알림 서버(postman) 연동
  • 통계 기능 추가
  • Sentry 연동

편의점 프로젝트 (연산된 데이터 수집 작업자)

4월 이후에 리팩토링을 한 후 소소한 업그레이드를 계획하고 있다. 회사 개발 일정이나 계획에 따로 잡은 건 아니어서 짬짬히 시간 내어 해결할 범위로 구상하고 있다.

  • PyPy로 이전
  • 통계 기능 추가
  • Sentry 연동
  • CEP(Complex Event Processing) 적용

전자우편 알림 서버

현재 새로운 알림 조건을 추가하고 있으며, 4월 이후 개인화 된 소식지(newsletter) 기능을 준비한다.

  • 전자우편 발송부를 Go 언어로 이전
  • 애플리케이션 서버들 간 통신 방법 변경
  • 알림 조건 종류 확장
  • 모바일 푸시 알림 기능 추가 (mqtt)
  • 개인화 된 소식지 기능 추가 (data processing, batch)

공부

공부할 게 많은데, 책을 기준으로 나열하면 다음과 같다.

  • 동시성, 병렬성
    • 입문자를 위한 병렬 프로그래밍 (ISBN : 9791185890159)
    • Pattern-Oriented Software Architecture, Volume 2: Patterns for Concurrent and Networked Objects (ISBN : 0471606956)
  • 프로그래밍
    • 클린 코드 (ISBN : 9788966260959)
    • 프로그램 디자인, 어떻게 할 것인가 (ISBN : 9788991268975)
    • Pattern-Oriented Software Architecture, Volume 1: A System of Patterns (ISBN : 9780471958697)
  • 시스템
    • 리눅스 시스템 프로그래밍 (ISBN : 9788968481482)
    • 컴퓨터 구조 및 설계 (ISBN : 9788996276531)
  • 네트워크
    • 트위스티드 (ISBN : 9788966261154)
    • 컴퓨터 네트워킹 하향식 접근 (ISBN : 9788945006585)
  • 언어
    • Programming in Go (ISBN : 9780321774637)
    • The Go Programming Language (ISBN : 9780134190440. 2015년 8월 출간 예정)
  • 데이터, 통계 관련
    • 파이썬을 활용한 베이지안 통계 (ISBN : 9788968481147)
    • 파이썬 라이브러리를 활용한 데이터 분석 (ISBN : 9788968480478)
    • Building Machine Learning Systems with Python (ISBN : 9788960775367)
  • 알고리즘
    • 알고리즘 기초 (ISBN : 9791156000129)
    • 문제로 풀어보는 알고리즘 (ISBN : 9788966260461)
    • 알고리즘 문제 해결 전략 (ISBN : 9788966260546)
  • 수학
    • 수학독본 (ISBN : 9788935640379)
    • 착한 수학 (ISBN : 9788993827866)

현재(2015년 3월 기준) 보고 있는 책은 따로 표시했으며, 이외엔 다음에 읽거나 틈틈히 부분 참고하며 읽을 책들이다.

잉여

잉여 시간이 나면 Lego mindstorm과 Arduino를 갖고 놀며, DockerOpen stack을 구현 관점에서 분석할 계획이다.

집필

Python과 Django를 도구로 삼은 입문서를 준비하고 있다. 함께 논의하고 있는 편집자가 믿음직스러워서 정말 출간할 수 있겠다는 기대감이 든다. 학습하고, 개발하고, 가르치는 경험을 잘 녹여내어 올해 안에 출간하고 싶다.

개발 환경

대개는 문서를 markdown으로 작성하는데, Python과 Django 강의 이후로 IPython을 사용하는 빈도가 늘고 있다. 최근엔 Python 뿐만 아니라 다른 프로그래밍 언어도 지원하는 Jupyter를 사용하고 있다. 앞으로 많은 문서를 Jupyter를 이용할 생각이다.

코드 편집기는 Sublime text 3를 주로 사용하며, PyCharm 등 JetBrains사의 도구를 사용하려 몇 번 시도했으나 좀처럼 적응하지 못하고 있다. 마음에 드는 기능이 많은데, 미묘하게 느린 화면 반응을 견디기 힘들다. SourceTree도 답답해서 터미널에서 git을 콘솔로 쓰고 있으니, 당분간 IDE에 적응하는 데 적지않은 노력을 들이거나 결국 포기할 것 같다.

마치며

전업 프로그래머가 된 이후로도 사업 개발이나 기획 업무를 맡아달라는 제안을 받고 있지만, 현재 내가 참여하는 조직들(?)에서는 전부 프로그래밍 관련 일만 하고 있다. 이 조직들 모두 내게 권한과 기회를 위임하고 지원해주는 덕분에 힘든 시기를 즐겁게 보냈다.

미숙해서 문제를 푸느라 고생하는 상황에 처했을 때, 누군가에게 물어봐서 문제를 빨리 해결하고 싶은 충동을 많이 느꼈다. 이 문제 좀 풀어주세요, 라는 말이 목까지 치밀어 올라온 문제도 몇 개 있었다. 하지만, 내가 부딪힌 문제 대부분은 스스로 해결해야 의미있는 단계라는 걸 알고 있었고, 거의 모두 스스로 해결했다1.

지인이 (프로그래밍으로)개발하는 생활을 만족하느냐고 물었다. 재밌고 만족한다고 답했는데, 아직은 혼자 고민하여 스스로 문제를 해결하는 데 들이는 노력이 크지 않은 단계여서 재밌다고 여기는 것일 것이다. 여태껏 겪어 온 문제보다 더 어려운 난관에 부딪히면 그 재미는 (아마도) 줄어들 것이고, 끝내 내 능력으로 풀어내지 못해 좌절할 지도 모른다.

괜찮다. 프로그래머 생활을 만족하는 이유는 난관을 극복하며 성장하는 즐거움 뿐만 아니라 내 생각을 표현하는 방법으로써 매력과 재미를 느끼기 때문이다. 가령, 요리나 춤, 노래, 대화는 취미나 관심사로 재밌을지 몰라도 직업으로 내 생각을 표현할 방법으로 삼을만큼 재밌지도 매력있게 느껴지지도 않는다.

지난 6~8개월 동안 겪은 개발 생활은 즐거웠다. 더 재밌고 즐겁고 만족스러운 개발 생활을 보내기 위해 계속 노력하려 한다.


  1. 편의점 프로젝트에서 SQL Query를 짜는 문제 하나는 결국 동료가 해결해 주었다.