2016년 연말정산

Posted on Thursday, 29 Dec 2016 diary end-of-the-year 

슬슬 말도 많고 탈도 많았던 2016년 한 해가 끝나가고 있습니다. 사람들은 이맘때가 되면 연말정산이라고 하며 자신이 올 한 해 동안 무엇을 했는지 정리하고, 지금의 나는 올해 초의 나에 비해 어떻게 달라졌는지 생각해보고는 하지요. 보통 이런 건 그림을 그리시는 분들이 자신의 그림 실력의 변화를 알아보기 위해 하는 거라고 알고 있는데, 프로그래밍이 취미이자 주특기인 저도 어떻게 연말정산을 해볼 수 있을까 고민하다가 이 포스트를 쓰게 되었습니다. 그렇게 거창한 것을 한 것은 아니지만 그래도 제가 올해 진행한 크고 작은 프로젝트들 중 여기에 남길만 한 것들을 추려서 여기서 소개를 해 보고자 합니다.

mine — May 2016

제가 고등학생이었을 때 매일 야자시간에 몰래몰래 공책에 C언어로 지뢰찾기 게임을 코딩했었습니다. 컴퓨터를 쓸 수 있는 시간이 되면 공책에 끄적인 코드를 돌려보고는 했었는데요. 이건 그 프로그램을 C++를 이용해서 다시 만든 것입니다. 사실 C 코드의 대부분을 그대로 가져와서 그렇게 만족스럽지는 않지만요… C++로 포팅을 하면서 ncurses 라이브러리도 이용해서 키보드 입력을 받는 루틴을 개선하고, 리눅스 터미널에서 지원하는 256색도 활용하여 최대한 이쁘게 만들어 봤습니다. 여기에 덧붙여서 플레이 시간 기록과 최고점 저장 기능도 새로 구현을 했구요.

스크린샷

Screenshot of minesweeper 1

Screenshot of minesweeper 2

Screenshot of minesweeper 2


WhoIsTweeting — June 2016

언젠가 트위터 지인 중 한 분이 이런 말을 하시더군요.

내가 팔로우하는 사람들 중 최근 5분동안 새 트윗이 있는 사람은 온라인, 10분은 자리비움, 15분 넘게 새 트윗이 없는 사람은 오프라인으로 표시해주는 프로그램이 있었으면 좋겠다…

이 말을 덥썩 물고 만들게 된 것이 바로 이 프로그램입니다. 그 당시에 제가 알고 있던 프로그래밍 언어들 중 가장 쓸만했던 언어였던 C#으로 작업을 시작했습니다. 개발 초기에는 Windows Forms를 이용해서 프로토타입처럼 만들고, 중간에 WPF를 새로 배워서 UI를 전면 교체 했었는데, 그 당시에 WPF나 관련 디자인 패턴 대해 아무것도 모르던 상태에서 어떻게든 돌아가는 프로그램을 만들려고 여러가지 삽질을 했던 것이 아직도 기억이 나네요.

지금은 필요한 것들을 공부하면서 코드를 많이 고치고 다듬어 놓은 상태이구요, 여기에 덧붙여서 특정 유저에게 멘션이나 메시지를 보내는 기능, 온라인, 자리비움, 오프라인 유저 수의 변화를 그래프로 표시하는 기능 등 여러가지 기능도 추가되어 있습니다.

여러 사람들이 이 프로그램을 보고 트위터 사찰 도구라고 해요 ._.)… 하지만 이 프로그램에 대한 아이디어를 떠올린 분은 지금도 이 프로그램을 이용해서 자신의 타임라인의 시간별 온라인 유저 분포를 바탕으로 나름대로의 마케팅 전략(?)을 구상하시는 등 아주 유용하게 쓰고 계십니다. 그나저나 몇몇 버그나 개선사항이 로컬 리포지토리에 있는데 학교 일이나 다른 여러가지 일에 쫒기느라 아직까지 릴리즈를 못 했네요. 조만간 업데이트를 해야겠어요!

스크린샷

스크린샷은 윈도우로 부팅했을 때 준비해서 올리겠습니다.


Elixir 프로그래밍 언어 공부 시작 — March 2016

사실 이 언어를 배우기 시작한 이유는 별 거 없습니다. 그냥 뜻이 비슷한 사람 셋이 모였는데, 세 명 다 모르는 새로운 언어를 배우고 그걸 공통 언어로 해서 무언가 프로젝트를 해보자… 하는 취지로 Elixir를 선택하고 배우기로 한 거였어요. 만약 저 혼자였다면 이런 언어가 있는 줄도 모르고 대학교 강의실에서 C나 JAVA나 만지고 있었겠죠. 하지만 왠지는 모르겠지만 지금은 저 혼자 Elixir를 파고 있어요. 나쁘다 나빠.

Elixir는 제가 처음으로 배운 함수형 프로그래밍 언어입니다. Erlang VM (BEAM) 위에서 돌아가기 때문에 Erlang의 장점인 병렬 처리, 분산 시스템, Falut-tolerant한 시스템 등을 그대로 누릴 수 있으며, 문법은 Ruby와 비슷해서 저같은 사람이 쉽게 입문할 수 있도록 만들어진 것이 특징입니다. (사실 저는 루비를 써 본 적이 한 번도 없지만요.) Erlang 위에서 돌아가는 언어다보니, 몇가지 주의해야 할 점만 숙지하면 Erlang에서 기본적으로 제공하는 라이브러리나 Erlang용으로 개발된 방대한 양의 서드 파티 라이브러리도 그대로 가져다 쓸 수 있다는 것도 큰 장점이지요.

또한 올해 8월부터 Seoul Elixir Meetup에 매달 참여하여 Elixir나 다른 함수형 프로그래밍 언어에 대한 이야기도 주고받고 멋진 분들의 발표도 듣고 있습니다. 이 아래에 있는 프로젝트에 대한 이야기도 잠깐 했었는데 꽤나 호응이 좋았어요!


basehangul — March 2016

Elixir 프로그래밍 언어를 갓 배우기 시작했을 때, 새로운 언어에 익숙해지고자 뭐라도 만들어보자 하며 만든 것으로, 데이터를 한글 자소 조합으로 인코딩하는 BaseHangul의 Elixir 구현체입니다. 사실 레퍼런스 구현체를 봐 가며 거의 따라 만들다시피 했구요, 그 당시에는 함수형 프로그래밍 언어에 대한 개념이 잘 잡히지 않아서 어떻게든 의도한 대로 돌아가게 만드는 데에만 집중을 해서 그런지 코드가 꽤나 난잡합니다. 요즘은 가끔가다 요놈을 어떻게하면 이쁘게 리팩토링 할 수 있을까 고민하고 있어요. (고민만…)


Elixir School 한국어 번역 참여 — May 2016

Elixir School은 Elixir 원작자 및 공식 웹사이트와는 무관하며, Elixir 공식 가이드에서 제공하는 튜토리얼과 더불어 같이 읽으면 좋은 Elixir 학습 사이트입니다. Elixir 프로그래밍 언어의 주요 요소들이 단계별로 나누어져 읽기 쉽게 서술되어 있으므로 이 언어를 배울 생각이 있으시다면 꼭 한번 방문해 보시는게 좋을 거예요.

이 웹사이트는 전 세계 많은 사람들이 Elixir를 쉽게 접할 수 있도록 번역 기여를 받고 있습니다. 그래서 저를 포함한 다섯 명이 함께 모든 문서를 번역하고 검토하였으며, 지금도 새로운 원문이 추가되거나 원문에서 변경 사항이 발생할 때마다 번역을 업데이트하고 있습니다.

기여자

Dalgona. / devleoper / malkoring / Shia / marocchino


Serum — July 2016

Serum은 Elixir로 구현된 간단한 정적 웹 사이트 생성기이며, 제가 Elixir를 이용해서 본격적으로 진행한 첫 프로젝트이고 지금도 한창 적극적으로 밀고 있는 물건입니다. 마크다운 파일, EEx 형식의 템플릿, 이미지나 스타일시트 등의 애셋만 준비하면 이들을 조합하여 정적 웹 사이트를 완성시켜 줍니다. Serum은 블로그 기능에 특화되어 있으므로 태그를 이용한 포스트의 분류 등의 기능도 지원합니다. 또한, Serum은 Erlang의 초경량 프로세스의 도움을 받아 웹 사이트를 구성하는 모든 페이지를 동시에 병렬 빌드할 수도 있습니다.

Serum에는 테스트용 웹 서버 기능도 내장되어 있습니다. 따라서 웹 사이트를 빌드하고 그자리에서 바로 서버를 실행하여 웹 브라우저에서 결과물을 확인하는 것이 가능하며, 소스 디렉토리를 감시하여 변경 사항이 생길 때마다 자동으로 웹사이트를 빌드해 주기 때문에 아주 간편하고 빠르게 웹 사이트를 수정하고 테스트하는 것을 반복할 수 있습니다.

눈치 채셨나요? 지금 보고 계신 이 웹 사이트와 위에 링크된 Serum의 웹 사이트도 Serum으로 생성된 것입니다. 이 정도면 쓸 만 하죠!

스크린샷

Screenshot of Serum 1

Screenshot of Serum 2

Screenshot of Serum 3

Screenshot of Serum 4


Microscope — December 2016

Microscope는 Elixir로 구현된 간단한 정적 웹 서버입니다. 사실 이것은 앞에서 소개한 Serum의 테스트용 서버의 일부분이었지만, 유지 보수를 용이하게 하기 위해 별도의 프로젝트로 분리해서 탄생한 프로젝트입니다. Serum과 별개의 프로젝트가 되다 보니 기존의 기능을 보강하거나 새로운 기능을 추가하기가 용이해져서 이제 Microscope는 모듈형 뿐만 아니라 독립형으로도 실행될 수 있고 범용으로 사용할 수 있는 정적 웹 서버가 되었습니다.

본래 Microscope는 Serum의 테스트용 웹 서버였으므로 정적 웹 사이트를 테스트하는 임시 서버로 쓰이기에 적합합니다. 하지만 HTTP를 통해서 간단하게 파일을 공유한다거나 하는 용도로 쓰일 수도 있습니다. 이를 위해 요청받은 디렉토리에 index.html이나 index.htm이 없는 경우 404 오류 대신 디렉토리 내에 있는 파일과 하위 디렉토리의 목록을 표시해 주는 기능도 같이 구현했습니다.

Screenshot of Microscope 1

Screenshot of Microscope 2


마치며…

돌이켜 생각해 보면 올 한 해는 저에게도 꽤 많은 일이 있었던 것 같습니다. 나보다 저 멀리 앞서간 내 또래의 사람들과 나를 비교하며 한참동안 자괴감과 절망감에 빠져 아무것도 못했던 시기도 있었구요. 하지만 어느 순간 남들과 비교하는 건 전혀 부질없는 짓이라는 생각이 들더랍니다. 내가 작업하고 있는 물건들에 좋은 반응을 보여주시던 주변 사람들도 눈에 들어오기 시작했구요. 그래서 저는 남들과 비교하는 것을 그만두고 내가 할 수 있는 것을 하며, 그와 동시에 내가 할 수 있는 것을 천천히 넓혀 나가기로 했습니다. 이렇게 다짐하고 다시 일어설 수 있었기에 올 한 해 동안 이런 것들을 이룰 수 있지 않았나 싶습니다.

여러분도 2016년 한 해 동안 여러가지로 수고 많으셨습니다. 그리고 2017년의 제 모습을 많이 기대해 주세요. 저도 내년의 여러분의 모습을 많이 기대할 거니까요!