2020년 회고 / 2021년 계획

2019년 회고글을 쓴 지가 얼마 되지 않은 거 같은데, 어느새 2020년도 마무리되고 있다.

특히나 올해는 COVID-19로 인해 여러 변화가 있었는데 하나씩 정리해 보자.

C++ Korea

C++ Korea는 2013년 11월에 개설해 현재 약 5,500명의 회원과 함께 세미나, 스터디 등 다양한 활동을 하고 있다. 올해 C++ Korea에서는 밋업 1회, 스터디 1회, 세미나 1회를 개최했다. 이외에도 파일럿 프로그램인 C++ Korea 팟캐스트를 시작했으며 정기적으로 운영진 회의를 하며 내년에 진행할 다양한 행사를 준비하고 있다. 올해 C++ Korea에서 진행했던 행사 및 프로그램과 관련된 자료는 다음 링크에서 찾아볼 수 있다.

C++ Korea 운영진들은 매주 회의를 통해 내년에 진행할 일들을 준비하고 있다. 지금까지 C++ Korea는 여러 스터디와 세미나를 준비해오면서 조금은 어설프지 않았나 생각한다. 각자 업무를 분담하기 보다는 특정 몇 명에게 업무가 과도하게 몰려 원활하게 운영하지 못했다. 그래서 체계적인 시스템을 갖추기 위해 분주히 노력하고 있다. 사단법인 설립 준비, CoC 가이드라인 작성, 제8회 세미나 준비, C++ Korea 컨퍼런스 준비 등 여러 주제를 가지고 논의하고 발전시키고 있다. 내년에 힘차게 날아오르기 위해 준비하고 있는 과정이라 생각해주시고 지켜봐주시면 감사하겠다.

Microsoft MVP

2015년 7월, C++ Korea 활동을 계기로 처음 Microsoft MVP에 선정되었다. 올해도 Microsoft MVP로 선정되어 MVP 6년차가 되었다.

microsoft_mvp

MVP 덕분에 알게 된 사람도 많고, 나의 시야도 정말로 넓어지게 되었다. 나에게 많은 변화를 준 계기이기도 하다. 넥슨 입사, 첫 Microsoft MVP 선정 모두 2015년이다 보니 나에게는 더욱 값지게 다가온다. 앞으로도 C++ 관련 지식을 많은 사람들에게 공유하고 널리 전파할 수 있는 전문가가 될 수 있도록 최선을 다하겠다.

RL 논문 리뷰 스터디

강화학습은 공부할 게 많은 분야다. 논문이 수없이 많이 나오다 보니 봐야할 논문은 많은데 볼 시간은 턱없이 부족하다. 혼자서 공부하는 데 한계가 있다고 느끼던 도중 나와 같은 생각을 하는 분들이 더 있을 거라고 생각해 같이 스터디 그룹을 만들어 서로 논문을 정리해 발표하면 봐야 할 논문 수를 줄일 수 있을 거라 예상했다. 그래서 4월에 RL 논문 리뷰 스터디라는 이름으로 인원을 모으기 시작해 5월부터 스터디를 시작했다. 이전 경험으로 비춰볼 때 스터디 기간이 너무 길면 안된다는 생각이 들어 2달 내외로 진행하기로 했다.

첫 스터디 때는 DQN, A3C, DDPG 등 RL에서 기반이 되는 논문들 위주로 살펴봤다. 논문 발표를 준비하면서 이해가 되지 않는 부분들은 중간 중간에 질문/답변을 통해 서로 이야기하면서 메꿀 수 있었다. 큰 문제 없이 첫 스터디를 마치고 1달 정도 휴식 기간을 가진 뒤 스터디 2기를 진행했다. 그리고 이번주까지 해서 스터디 3기를 마친 상태다.

rl_paper_study

이렇게 자료들이 쌓이다 보니 리뷰한 논문 수가 30개가 넘었다. 그래서 지금까지 발표한 자료들을 저장소에 올려뒀다. 많은 분들에게 도움이 되었으면 좋겠다. 내년에 스터디 4기를 진행할 예정인데 기존 스터디와 조금 다른 방향으로 진행할 생각이다. 지금까지 스터디가 단순히 논문을 정리해 발표하는 스터디였다면 내년에는 논문 리뷰와 함께 코드도 직접 구현해 보는 스터디를 진행할 생각이다. 자세한 내용은 내년 초에 따로 글을 올릴 예정이니 참고하기 바란다.

집필 및 번역

번역 - C++ Crash Course

cpp_crash_course

2019년 7월, 번역서 “C++ 최적화”를 출간한 이후 휴식이 필요하다고 느껴서 당분간 번역을 하지 않기로 했었다. 그러다가 7월에 메일 한 통을 받았는데 C++17 관련 도서 번역이 가능한지 문의하는 내용이었다. 책 내용을 살펴보니 마음에 들어서 편집자 분과 만나 이런저런 이야기를 나눈 뒤 계약을 진행했다.

번역할 책은 “C++ Crash Course”로 C++17을 기반으로 한 입문서이다. C++ 기초 개념부터 시작해 라이브러리, 프레임워크 등을 소개하는 책으로 약 700페이지이다. 내년 1/4분기까지 1차 번역을 완료하는 게 목표다. 11월부터 12월 초까지 회사 성수기 작업으로 인해 번역을 하지 못해서 매일 열심히 번역하고 있다. 내년 상반기에 출간을 목표로 열심히 작업해야겠다. 필요하다면 C++20 표준 관련 내용도 부록으로 실을 생각이다.

집필 - TBA

writing_book

IT 전문서 번역은 몇 권 진행했지만, 집필은 늘 두려움의 대상이었다. 혹시나 독자들에게 잘못된 지식을 전달할까봐 망설여졌다. 과거에 몇 번 시도했었지만 제대로 진행하지 못하고 포기했었다. 그리고 다시 시도해보려고 한다. 여전히 두렵지만, 자꾸 부딪혀보면 언젠가 극복하지 않을까 싶어서…

아직 주제를 공개할 수는 없지만 집필을 본격적으로 시작하지는 않았고, 목차를 구성한 뒤 예제 코드를 만들고 있다. 내년 상반기까지 1차 원고 작업을 완료하는 게 1차 목표다. 지금 주제 말고도 C++20 표준을 기반으로 한 책을 써보고 싶기도 해서 그건 내년 상반기에 구상해 하반기부터 집필을 시작해 볼 생각이다.

동아리 멘토 활동

강화학습에 관심을 갖게 되어 공부를 한 지도 몇 년이 되었다. 그러다 보니 몇몇 동아리에서 RL 분야 멘토로 참여해 줄 수 있겠냐는 부탁이 왔었다. 평소에 학생들과 이야기를 많이 하고 관심을 갖고 있던 나는 흔쾌히 수락했다. 그렇게 올해는 두 학교의 동아리에 RL 멘토 역할을 하게 되었다.

  • 한국디지털미디어고등학교 AI 동아리 - Rendezvous
  • 한양대학교 AI 스터디 그룹 - HAI

일정을 잡아 특강을 진행하기도 했고 프로젝트를 도와주기도 했지만 뭔가 많이 아쉬었다. 아무래도 COVID-19 여파로 인해 오프라인으로 만나지 못하고 온라인으로 진행하는 부분도 있었겠지만, RL 특강을 지속적으로 하지 못한 부분과 프로젝트 마무리가 깔끔하지 못했던 점 등이 아쉽다. 내가 좀 더 관심을 갖고 참여했으면 좋지 않았을까 하는 생각이 든다. 내년에 어떻게 될 지는 모르지만 혹시나 멘토 활동을 하게 된다면 앞에서 말했던 부분들을 개선해서 좀 더 좋은 멘토 역할을 해야겠다.

외부 활동

올해는 COVID-19로 인해 외부 활동을 많이 하지 못했었다. 그래도 알게 모르게 조금 했는데 정리하면 다음과 같다.

  • 국민대 2020년 OSS 개발자 포럼 SW 겨울 캠프
  • 2020 오픈소스 컨트리뷰톤
  • 전북과학고등학교 특강
  • SW 마이스터고 토크 콘서트
  • KAIST 진로 콘서트
  • 대구SW고등학교 번개 미팅
  • GitHub in DevOps Meetup 2020
  • 2020 공개 SW 페스티벌

모든 발표 및 특강을 이야기하기엔 너무 길어질 거 같아 이 중 기억에 많이 남은 발표 및 특강 몇 개를 이야기하려고 한다.

국민대 2020년 OSS 개발자 포럼 SW 겨울 캠프

지난해 진행했던 OSS 개발자포럼 SW 여름 캠프에서의 학생들의 반응이 좋았는지(?) 덕분에 겨울에도 강의를 부탁받았다. 지난 캠프에서는 “강화학습 기초”를 주제로 강의했었는데 예상보다 학생들이 잘 따라와서 고마웠다. 그래서 주제를 고민하다가 자신감을 얻어 한 걸음 더 나아가보기로 했다.

처음에는 AlphaZero를 이용해 바둑 AI 만들기를 하려고 했는데 학습하는 데 너무 오랜 시간이 걸릴 거 같아 오목으로 변경했다. 여름 캠프 때 조교로 도와줬던 학생들과 함께 겨울 캠프 준비를 했다. 강의 자료와 예제 코드를 만들고 학생들이 만든 AI로 대전을 할 수 있도록 서버도 준비했다.

이번 주제가 지난 캠프보다 난도가 더 높은 주제라 어떻게 설명하면 좋을 지, 그리고 어떻게 학생들이 흥미를 갖게 할 지 고민을 많이 했다. 저번처럼 학생들이 이해가 안되는 부분이 있을 때는 다시 설명하고, 필요하다면 저녁에 보충 설명도 별더로 할 생각이었다.

oss_camp

이번에도 학생들은 잘 따라와줬다. 훨씬 더 어려운 주제라 따라오기 쉽지 않았을텐데 너무 고마웠다. 마지막 날에는 첫번째 과제였던 커스텀 에이전트 만들기와 두번째 과제였던 사목 AI 만들기에서 제출한 코드로 토너먼트 대전을 펼쳤고 중계를 하며 모두 재밌는 시간을 보냈다. 그렇게 해피 엔딩으로 캠프는 끝이 났다.

이번 캠프에서는 학생들에게 알파고와 같은 인공지능을 구현할 수 있다는 능력을 배양하고 캠프가 끝난 이후에도 스스로 나아갈 수 있다는 자신감을 주자는 목표를 세웠었다. 이를 위해 캠프에서 사용했던 강의 자료와 코드는 모두 오픈 소스로 공개해뒀으니 언제라도 다시 봤으면 좋겠다. 어려운 주제더라도 학생들에게 눈높이를 맞추고 목소리에 귀를 기울여주면 같이 헤쳐나갈 수 있다는 점을 배웠다. 덕분에 모두 결과물을 만들어낼 수 있었다.

그리고 2일차에 나 대신 조교 학생이 강의를 진행했다. 평소 AlphaZero와 관련된 연구를 하고 있어서 학생들에게 잘 가르칠 수 있겠다는 판단이 들어서 제안을 했고 흔쾌히 수락했다. 나는 학생들에게 더 잘 알려줄 수 있는 사람이 가르쳐야 한다고 생각한다. 이번 캠프는 나와 조교 두 명이서 각자 잘하는 부분들을 나눠서 잘 해냈다고 생각한다. 다음에는 조교들이 캠프에서 강의해도 좋겠다는 생각이 들었다.

배우느라 고생한 학생들, 같이 자료 만들고 질문 받느라 수고해준 조교들, 행사 전반을 기획하고 운영하느라 고생한 운영진 분들께 모두 감사드린다는 말씀을 드리고 싶다. 다음 캠프에도 뭔가를 하게 될 지는 모르겠다. 그건 다음에 생각해 보기로…

2020 오픈소스 컨트리뷰톤

작년에 오픈소스 컨트리뷰톤에 멘토로 참가해달라는 부탁을 받은 적이 있었다. 그 때도 신청할까 말까 고민했었지만, 아직은 준비가 필요하다는 생각했고 다른 할 일이 많았기에 정중히 거절했었다. 그리고 1년이 지난 올해, 오픈소스 컨트리뷰톤에 멘토로 참가해달라는 부탁을 다시 받았다. 이번에는 작년과 다르게 여유가 있어 어떤 프로젝트로 참가하는 게 좋을까 고민했었다. 최종적으로 RosettaStone과 CubbyFlow를 두고 고민했는데, 도메인 지식이 많이 필요한 CubbyFlow보다는 RosettaStone이 접근하기 쉽겠다는 생각이 들어 최종적으로 RosettaStone으로 참가하기로 결정했다.

contributhon1

몇 일이 지났을까… 다행히 컨트리뷰톤 프로젝트에 선정되었다.

contributhon2

컨트리뷰톤에서 같이 작업할 멘티분들을 위한 가이드라인 문서도 만들고, 참가자 모집 유형도 적었다.

contributhon3

이후 멘티 모집을 위한 접수를 받기 시작했다. 접수 기간이 끝나고 멘토가 직접 멘티를 선발해야 하는 시간이 찾아왔다. 나름대로 여러 기준을 두고 선발하려고 했는데 뽑으려고 하니 생각보다 쉽지 않았다. 마음같아서는 모두 선발해서 같이 작업하면 좋겠지만 선발 인원수가 정해져 있다 보니 어쩔 수가 없었다. 최종적으로 16명의 인원을 선발하게 되었다. 어느덧 8월 1일이 되고 발대식을 개최하게 되었다.

contributhon4

컨트리뷰톤 기간 동안 멘티분들과 서로 대화를 나눌 디스코드 채널을 개설하고 개발과 관련된 질문/답변, 코드 리뷰 등 다양한 이야기를 주고 나눴다. 그리고 발대식을 마치고 멘티분들의 컴퓨터에 개발 환경을 설정해드리는 걸 도와드렸다. 덕분에 빠르게 개발 작업에 착수할 수 있었고 컨트리뷰톤 기간 동안 14명의 멘티분들께서 72장의 카드를 구현해주셨고 여러 버그들을 해결해주셨다.

contributhon5

contributhon6

contributhon7

길다면 길고 짧다면 짧은 6주였지만, 많은 보람을 느낄 수 있었고 뿌듯한 시간이었다. 멘티분들에게도 그런 시간이었길 바란다. 이번 컨트리뷰톤을 하면서 아쉬웠던 점들을 보완해 내년에도 멘토로 지원할 수 있으면 좋겠다. RosettaStone을 해도 좋고, 아니면 다른 프로젝트로 해도 좋겠다. 이 자리를 빌어 나와 같이 컨트리뷰톤을 함께 해준 멘티분들과 운영사무국분들께 감사의 인사를 드린다.

전북과학고등학교 특강

올해 CubbyFlow랑 PokeMaster 프로젝트를 진행하면서 친하게 지내는 승우랑 이야기를 하다가 모교인 전북과학고등학교에서 특강을 해보면 좋겠다는 생각을 했었다. 그런데 그게 현실이 되어버렸다. 그래서 8월 13일 오전에 건강검진을 마치고 오후 기차로 전북 익산까지 이동해 전북과학고등학교에서 컴퓨터 과학/공학 분야에 관심이 있는 학생들에게 강화학습이 무엇인지 소개하는 시간을 가졌다.

참고 : KF94 마스크를 착용한 채로 특강을 진행했다.

깊은 내용을 다루기 보다는 흥미를 이끌어낼 수 있도록 제가 만들고 있는 강화학습 환경들을 소개했고 익숙한 게임들을 예시로 들어가며 설명했다. 덕분에 학생들이 관심을 갖고 많은 질문들을 해서 재밌는 시간을 보낼 수 있었다. 2시간 정도 특강을 진행한 뒤 정보부 선생님과 여러 대화를 나누며 다음을 기약했다.

지방에 있는 학생들은 최신 정보를 접할 기회가 많이 부족하다. 그래서 이번 방문이 한 번에 그치는 게 아니라 정기적인 방문으로 이어졌으면 좋겠다는 생각을 했다.

사이드 프로젝트

RosettaStone

RosettaStone은 2017년 말에 시작한 프로젝트로 C++로 하스스톤 게임을 구현하고 강화 학습을 통해 여러 가지 의미있는 연구를 하기 위한 프로젝트다. 어느새 이 프로젝트를 시작한 지도 3년이 되었다. 작년 말에 작성했던 로드맵을 살펴 보며 올해 얼마나 달성했나 살펴봤는데 지금 와서 생각해 보면 사용할 수 있는 시간에 비해 목표를 너무 과하게 잡았지 않았나 생각한다. 물론 로드맵 중에서는 기능 구현을 완료한 기능도 있지만 전부 완료하지는 못해 아쉽다. 그리고 올해는 팀원들이 많이 바빠 대부분의 작업을 혼자서 진행하게 되었다. 그래서 협업을 한다는 느낌보다 혼자서 진행하는 사이드 프로젝트라는 느낌을 많이 받았다.

alone

하지만 아쉬웠던 게 있다면 좋았던 게 있기 마련이다. 위에서 언급했던 2020 오픈소스 컨트리뷰톤 덕분에 짧게나마 다른 사람들에게 도움을 주며 협업해 볼 수 있는 시간을 가졌다. 그리고 가끔 작업을 진행하거나 버그를 고치면서 개발 글을 올릴 때가 있는데 응원해주시는 분들이 있어서 에너지를 얻고, 프로젝트와 관련해서 문의가 올 때 보람을 느끼기도 한다. 이 자리를 통해 감사하다는 말씀을 드리고 싶다.

fighting

올해는 전장(Battlegrounds) 구현, 수백 장의 카드 로직 구현, 로직 버그 수정, 메모리 릭 수정 등 다양한 작업을 했다. 확장팩이 나올 때마다 새로운 카드들이 추가되기 때문에 카드 로직 구현 작업만 해도 꽤 벅찬 일이지만 여전히 열정은 불타오르고 있고 정해둔 목표가 있기 때문에 포기하지 않고 계속 나아갈 생각이다. 내년에도 많은 작업을 할 예정이니 기대해주셨으면 한다. 언젠가는 멋진 AI로 찾아뵐 날이 있기를 바란다.

CubbyFlow

CubbyFlow는 복셀 기반의 유체역학 시뮬레이션 엔진이다. 실시간 게임에 사용하기 위한 목표를 두고 작업하고 있다.

작년까지 혼자 작업하다가 다른 분야에 관심을 갖게 되어 한동안 중단되었다. 그러다가 올해 초 개발을 재개해서 새로운 기능을 지원해야겠다는 생각이 들어 팀원을 공개 모집하게 되었고 관심을 주신 몇 분들과 함께 회의를 하며 작업하기 시작했다. 올해는 새로운 기능을 지원하기 보다는 기존 코드에 있던 버그들을 수정하고 코드 품질을 향상시키는 작업 위주로 진행했다. 연말에는 Material Point Method(MPM) 기능을 지원하기 위한 Solver 구현 작업에 들어갔다. 그 외에 다른 팀원분께서 렌더링 기능을 구현하는 작업을 꾸준히 진행하고 계신다. 올해는 팀원분들과 회의하면서 기반 지식을 다지고 잠시 숨고르기를 하는 시간이었다면, 내년에는 쌓은 기반 지식을 토대로 여러 기능을 구현하는 시간이 되지 않을까 싶다. 내년에 멋진 회고로 찾아뵐 수 있기를 기원한다.

baba-is-auto

baba-is-autoBaba Is You 게임을 구현하고 강화 학습을 통해 여러 가지 의미있는 연구를 하기 위한 프로젝트다.

나는 강화학습 환경을 만들기 전에 게임 제작자에게 메일을 보내 혹시나 저작권과 관련한 이슈가 없는지 확인하고 있다. baba-is-auto 역시 작업을 시작하기 전에 제작자인 Arvi Teikari에게 메일을 보내 답변을 받고 개발을 진행하게 되었다.

baba-is-auto1

baba-is-auto2

1월부터 개발을 시작해 3월에 개발을 완료했다. 저장소에 가면 몇 개의 RL 환경을 직접 사용해 볼 수 있다.

baba-is-auto3

baba-is-auto4

baba-is-auto를 만들고 나서 메일이나 트위터를 통해 문의하는 경우가 종종 있었다. 이렇게 프로젝트에 관심을 가져줄 때마다 보람을 많이 느낀다. 내년에는 더 많은 RL 환경을 제공할 생각이고 레벨 에디터 프로그램도 만들 예정이다.

Ray Tracing Series

리얼 타임 레이트레이싱(Real-time raytracing) 기술이 발표되면서 레이트레이싱에 관심을 갖고는 있었지만 기반 지식도 부족하고 무언가를 만들어본 적이 없었다. 그러다가 “Ray Tracing in One Weekend”라는 사이트를 보고 한 번 직접 만들어 보자는 생각이 들었다. 이 시리즈는 총 3개로 되어 있는데 하나씩 따라해보면서 결과물이 나오니 상당히 흥미로웠고 배울 수 있는 게 많았다. 다음은 작업하면서 얻은 결과물 중 일부다.

ray_tracing1

ray_tracing2

ray_tracing3

이를 기반으로 내년에는 기존 코드에 CPU/GPU 병렬 지원 기능을 추가하거나 성능을 최적화하고 DirectX나 OpenGL로도 작업해 볼 수 있으면 좋겠다.

구현한 코드는 다음 저장소에서 확인할 수 있다.

운동 - 링피트

나는 운동하는 걸 좋아하지 않는다. 하루의 대부분을 컴퓨터 앞에서 보내며 운동이라고 한다면 잠깐 일어나서 스트레칭을 하거나 외출을 할 때 판교역까지 산책을 걷는 정도가 전부라고 할 수 있다. 그나마 평소에 사람들을 자주 만나기에 많이 움직였는데 COVID-19로 인해 장보기 등을 제외하면 대부분 집에서 생활하고 있는 상태다.

건강은 점점 더 안좋아졌고 몸상태도 많이 망가졌다. 그러던 중 민천이의 추천으로 링피트라는 게임에 관심을 갖게 되었다. 링피트는 닌텐도의 피트니스 게임으로 닌텐도 스위치로 게임과 운동을 동시에 즐길 수 있다. 평소 운동을 좋아하지 않았던 나였기에 이 게임이 나에게 흥미를 줄 수 있는지 체험해보고 싶었다. 먼저 링피트를 하고 있었던 민천이가 잠깐 빌려줘서 집에서 몇 일 동안 체험판으로 해보게 되었다.

몇 일 해보니 게임이랑 운동을 동시에 즐길 수 있어서 그런지 나한테도 잘 맞는 거 같았다. 그래서 운동할 때 사용할 대형 매트와 링피트를 함께 파는 세트를 구입해 본격적으로 운동하기 시작했다. 한 번에 많이 하기 보다는 매일 1시간 내외로 하면서 꾸준하게 할 수 있도록 노력했다. 1주일에 4~5일은 링피트를 하는 걸 목표로 말이다.

4월부터 시작해 지금까지 꾸준히 하고 있다. 중간에 회사 일로 바빠서 2~3달을 쉰 적도 있지만 특별한 일이 없을 때는 약속을 지키려고 했다. 그 결과 9월에 1회차를 클리어할 수 있었다. 30시간 29분 36초 동안 운동했으며, 95.50km를 달렸고, 10157.81kcal를 소비했다.

ring_fit

중요한 건 링피트를 해서 몸에 변화가 생겼다는 거다. 링피트를 하기 전에 인바디를 재고 1회차를 클리어하고 나서 인바디를 쟀더니 몸무게는 그대로인데 근육량은 늘었고 지방량은 그만큼 줄었다. 물론 운동과 더불어 식습관 관리도 해야겠지만 꾸준한 습관이 변화를 만든다는 걸 몸소 경험할 수 있었다.

현재는 2회차를 하고 있으며, 어느덧 운동 100일차를 앞두고 있다. 최근에 야근으로 인해 운동을 쉬는 동안 몸이 망가졌는데 다시 예전 몸상태를 되찾고 더 건강해지고 싶다. 내년에도 열심히 해야겠다.

2020년 계획 리마인드

내년 계획을 세우기 전에 2020년에 계획했던 일들을 리마인드하는 시간을 가져보려고 한다.

  • C++20 책 집필하기 (박동하 님과 함께 작업) → 연기

여러 C++ 책들을 번역하면서 언젠가는 나도 C++ 책을 써보고 싶다는 생각이 있었다. 하지만 C++ 책을 쓰기엔 아직 준비가 되어있지 않다고 느꼈고 다른 사람에게 잘못된 지식을 전달할 수도 있다는 걱정과 두려움에 진행하지 못했다. 올해 하반기에 여러 사람들과 이야기를 나누며 조금씩 힘을 얻어 C++이 아닌 다른 분야로 우선 책을 써보기로 했다. 현재 진행중인 집필을 큰 문제 없이 끝낼 수 있다면 내년에는 C++ 책 집필도 계약해서 도전해보지 않을까 싶다.

  • RL 환경 구축 관련 논문 쓰기 → 연기

RosettaStone 프로젝트를 진행하면서 RL 환경 구축과 관련된 논문을 써보면 좋겠다는 생각이 있었다. 실제로 몇몇 학회에 논문을 제출하려고 내용을 조금씩 쓰고 있었는데, GIST에서 RL을 연구하시는 교수님과 온라인 및 오프라인으로 이야기를 나누고 나서 생각을 다시 하게 되었다. RL 환경 구축만으로는 학회에서 Accept을 받기 쉽지 않다는 걸 알게 되었고 프로젝트를 완성시켜 결과까지 얻고 나서 쓰는 게 좋겠다는 결론에 이르렀다.

  • RosettaStone 외 여러 RL 환경을 구축하기 위한 프로젝트 작업 진행 → 진행중 & 완료

올해 새로운 RL 환경을 구축하기 위한 프로젝트를 몇 개 만들었다. baba-is-auto 게임 “Baba Is You”, PokeMaster는 게임 “Pokemon Sword/Shield”의 포켓몬 배틀, HellSolver는 게임 “Helltaker”, YahtzeeMaster는 게임 “Yahtzee”, Runeterra는 게임 “Legends of Runeterra”를 위한 RL 환경이다. 완성된 프로젝트도 있고 이제 막 시작한 프로젝트도 있는데 내년에 작업해서 결실을 맺었으면 좋겠다.

  • 국민대 2020년 OSS 개발자 포럼 SW 겨울 캠프 - 알파제로를 이용한 오목 AI 만들기 → 완료

위에서 자세하게 이야기했으니 여기서는 생략하겠다. 목표를 달성했다.

  • 모두의연구소 LAB 개설 → 중단

2019년 말에 모두의 연구소 컨퍼런스(MODUCON)를 다녀와서 내년에 LAB을 개설해보고 싶다는 생각이 들었다. 오프라인으로 하면 좋았겠지만 COVID-19 여파로 모든 스터디들이 온라인으로 진행하게 되었다. 온라인으로 진행할 거라면 굳이 모두의연구소에서 LAB을 따로 열어서 할 필요까지는 없겠다는 생각을 하게 되어 중단했다. 대신 온라인 스터디를 하나 만들어서 진행했다.

  • C++ Korea 스터디, 세미나 및 밋업 진행 → 완료

위에서 이야기했지만 올해는 스터디, 세미나, 밋업을 1번씩 진행했다. 목표를 달성했다.

  • MVP Summit 2020 참석 → 완료

MVP Summit도 COVID-19 여파로 오프라인 행사가 취소되고 온라인으로 전환되었다. 덕분에 휴가를 아끼게 되었지만 MVP Summit 행사가 주로 한국 시간으로 새벽에 진행되었기 때문에 실시간으로 참가하기에는 한계가 있었다. 물론 생활 패턴을 미국으로 맞추셔서 적응한 뒤에 참가하시는 분도 계셨지만 나는 그러지는 않았고 낮에 새벽에 했던 행사들을 녹음한 파일로 대신했다. 1주일 정도 미국에서 생활하며 마이크로소프트 본사에도 방문하고 전세계 MVP들과 만나면서 C++과 관련된 다양한 이야기를 나누면 좋았을텐데 아쉽다.

  • TEDxUNIST 강연 → 중단

COVID-19 여파로 행사가 잠정 연기되었다. 언젠가는 괜찮아져서 강연할 수 있는 날이 오겠지…?

기타 이야기

  • 1월에 하스스톤 “위대한 제피로스”의 카드 디자이너인 Chadd Nervig와 트위터로 이야기를 나눈 적이 있다.

personal1

personal2

  • PokeMaster 프로젝트를 만들고 나서 T1의 박세준 선수와 트위터로 이야기를 나눈 적이 있다.

personal3

  • 5년 만에 새 컴퓨터를 사게 되었다. 성능은 다음과 같다.

personal4

personal5

  • COVID-19로 집에 있는 시간이 많아지다 보니 요리를 하기 시작했다. 일단은 스테이크 정도만…

  • 식도염이 자주 재발해 결국 커피를 끊어버렸다. 더불어 녹차도 잘 마시지 않게 되었다.

  • 연말에 공기청정기를 구매했다. 큰 차이를 느끼진 못하는데 아무튼 좋아진거겠지…?

2021년 계획

2021년에 계획하고 있는 일들은 다음과 같다.

  • C++20 책 집필하기
  • C++20 온라인 강의 만들기
  • RL 환경 구축 관련 책 집필 마무리 및 출간하기
  • 자연어 처리(NLP) 공부해보기
  • C++ Korea 사단법인 출범
  • C++ Korea 세미나 및 컨퍼런스 진행
  • 사이드 프로젝트 잘 진행하기
    • RosettaStone
    • CubbyFlow
    • RustyFlow
    • PokeMaster
    • Runeterra
  • 건강 관리하기
    • 식단 조절
    • 꾸준한 운동
    • 체중 감량
  • 다양한 요리 해보기

정리

summary

올해는 COVID-19로 인해 삶에 많은 변화가 있었다. 평소 같으면 오프라인으로 진행했을 행사들이 모두 온라인으로 전환되었고 자주 있던 약속도 모두 없어졌으며 대부분 집에서 재택 근무를 하며 생활하게 되었다. 덕분에 안좋아진 부분들도 있지만 위기를 기회로 삼으며 좋아진 부분들도 있었다. 지금 상황으로 봤을 때 내년 상반기까지는 지금과 같은 생활을 지속할 거 같지만, 빠른 시일 내로 상황이 좋아져 예전과 같은 생활로 되돌아가길 바란다.

마지막에 무슨 말을 넣을까 고민하다가 이 문장으로 마무리하려고 한다.

우리는 뭔가를 배우거나 결정할 때 실수할 수 있다. 처음부터 잘하기는 굉장히 어렵다. 다만 결정할 때까지 충분히 기다려 줄 수 있는 환경, 배우려고 할 때 포기하지 않게끔 도와줄 수 있는 조력자, 실패하더라도 다시 일어설 수 있다는 격려, 마지막으로 말하기 전에 먼저 들어주는 자세가 필요하다.

2021년 새해 복 많이 받으시고, 원하는 목표 다 이루는 한 해가 되었으면 합니다! 끝까지 읽어주셔서 감사합니다.

2019년 회고 / 2020년 계획

2019년도 몇 일 남지 않았다. 그 말은 올해를 마무리하기 위한 회고글을 쓸 때가 되었다는 뜻이다.

올해도 작년처럼 여러 활동을 했는데 하나씩 정리해 보도록 하자.

C++ Korea

C++ Korea는 2013년 11월에 개설해 현재 약 5,000명의 회원과 함께 세미나, 스터디 등 다양한 활동을 하고 있다. 올해 C++ Korea에서는 일정 상의 이유로 스터디는 잠시 쉬어가기로 하고 상반기와 하반기에 세미나를 개최했다. 작년에 제4회 세미나 때 아쉬웠던 부분들을 보완하기 위해 여러 의견을 나눴고 결과적으로 큰 문제 없이 진행할 수 있었다. 하나씩 살펴보며 좀 더 자세한 이야기를 해보자.

제5회 세미나

4월 6일, 한국마이크로소프트에서 C++ Korea 제5회 세미나 - “종합 선물 세트”를 개최했다.

이번 세미나에서는 ‘종합 선물 세트’라는 제목에 맞춰 다양한 주제를 준비하려고 했다. C++ Korea 운영진은 연사자를 섭외하기 전에 제4회 세미나에서 아쉬웠던 부분들을 점검하고 어떻게 개선하면 좋을지 논의했다.

제4회 세미나에서 아쉬웠던 부분은 다음과 같다.

  • 생각보다 많은 참석자를 받아 공간이 많이 혼잡했다는 점
  • 세미나 진행 순서를 확인할 시간표가 없었다는 점
  • 세미나 준비를 미흡하게 한 점 (마이크 및 발표 자료 등)

생각보다 많은 참석자를 받아 공간이 많이 혼잡했던 점은 세미나 참석자 수를 180명에서 160명으로 줄이기로 했다. 그리고 세미나 진행 순서를 확인할 시간표가 없었다는 점은 시간표를 확인할 수 있는 안내 종이를 만들어 출석 확인을 할 때 배부하기로 했다. 마지막으로 세미나 준비를 미흡하게 한 점은 연사자를 직접 섭외하고 마이크 및 프로젝터 상태를 미리 확인하기로 했다. 또한 제4회 세미나에서 발표하기로 했으나 취소했던 문제를 해결하기 위해 발표 자료를 미리 준비했다.

2트랙으로 진행했던 제4회 세미나와 달리 다시 1트랙으로 줄이고 연사자는 이미 발표한 경험이 있는 분들 위주로 부탁드렸다. 위험 부담을 줄이고 세미나를 원활하게 진행하기 위한 선택이었다.

세미나 당일 전까지는 큰 문제없이 진행되었다. 문제는 세미나 당일이었다. 세미나 장소에 도착했는데 공간이 분리되어 있어 하나로 합치려고 하니 기계를 작동하는 데 필요한 열쇠가 없었던 것이다. 열쇠가 있을 만한 곳은 전부 뒤져봤지만 찾을 수 없었다. 그래서 담당자에게 전화를 했는데 자신도 왜 열쇠가 없는지 잘 모르겠다고 하시더라. 세미나 시간은 다가오고 사람들은 오는데 계속 안절부절했다. 그러던 도중 전날 행사를 진행하셨던 분이 열쇠를 자신의 집으로 들고 가셨고 지금 부랴부랴 달려오고 계시다는 소식을 듣게 되었다. 그 분이 도착하기에는 시간이 부족해 참석하신 분들께 양해를 구하고 약 20분 늦게 세미나를 시작할 수 있었다.

이를 통해 당연하다고 생각했던 부분에 문제가 생길 수 있으니 다음 세미나 때에는 모든 사항을 한 번 더 확인하자는 교훈을 얻었다.

세미나 발표 자료는 여기에서 확인할 수 있다.

제6회 세미나

9월 29일, 한국마이크로소프트에서 C++ Korea 제6회 세미나 - “종합 선물 세트 제2호”를 개최했다.

제5회 세미나 때 아쉬웠던 부분들을 많이 보완했기에 제6회 세미나에서는 또 다시 도전을 해보기로 했다.

  • 발표자 공개 모집 및 블라인드 투표
  • 트랙 수를 1개가 아닌 2개로 진행
  • 케이터링이 아닌 도시락 제공
  • 강연 영상 녹화 및 편집

우선 발표자 공개 모집에 대한 이야기를 해보자. 제4회 세미나에서도 발표자를 공개 모집했었다. 하지만 모든 발표자를 모셨던 제4회 세미나와는 달리 이번 세미나에서는 블라인드 투표를 진행해 기준선을 두고자 했다. 블라인드 투표란 발표자 정보는 공개하지 않고 발표 주제와 내용, 발표 시간과 난이도만 보고 투표하는 방식을 말한다.

Meeting C++에서 쓰는 방식을 차용했으며 점수에 따른 가중치도 동일하게 적용했다. 투표 결과를 토대로 난이도에 따라 2개의 트랙을 설정하고 각 트랙마다 5개의 세션을 배치해 총 10개의 발표 주제를 선정했다.

이번 세미나는 각 트랙의 세션 개수가 5개였기 때문에 오전부터 세션을 시작해야 했다. 이로 인해 그동안 제공했던 케이터링 대신 참석자 수 만큼 도시락을 주문했다. 세미나 비용을 30,000원 받았는데 도시락 비용으로 22,000원이 들어갔다.

케이터링에서 도시락으로 바꾼 결과는 아쉬웠다. 크게 두 가지가 문제였다. 첫번째는 남는 도시락을 처리하는 문제다. 그동안은 항상 토요일에 세미나를 진행했었는데 이번 세미나는 장소 대관 문제로 일요일에 진행해야 했다. 유료로 진행하는 세미나였지만 토요일에 비해 노쇼 비율이 높아지면서 남는 도시락이 생겼다. 두번쨰는 케이터링은 뒷처리하기가 편한 반면 도시락은 음식물을 따로 버려야 하다 보니 주변이 지저분해지는 문제다. 세미나를 하는 도중에도 음식물 쓰레기와 분리수거로 인해 운영진들이 고생이 많았다. 이러한 이유로 다음 세미나부터는 도시락보다는 케이터링을 요청하는 게 낫다고 판단했다.

또한 제4회 세미나 때 제대로 하지 못했던 영상 녹화도 다시 진행했다. 녹화 및 편집에 유능한 지인을 섭외해 진행했으며 녹화를 허용한 세션은 모두 유튜브에 영상이 올라간 상태다. 다음에도 기회가 된다면 영상 녹화 및 편집을 부탁할 생각이다.

세미나 발표 자료는 여기, 발표 영상은 여기에서 확인할 수 있다.

Optimized C++ (C++ 최적화) 번역서 출간

작년부터 작업했던 “Optimized C++”의 번역서 “C++ 최적화”가 7월 5일, 한빛미디어를 통해 출간되었다.

이리저리 바쁜 일정으로 인해 생각보다 번역하는 데 많은 시간이 걸렸다. 번역 검수 및 편집 과정에서 여러모로 애써주신 한빛미디어 관계자분들께 감사의 말씀을 전하고 싶다. 번역서 출간 이후 여러 리뷰를 살펴봤는데 검수도 여러 번 진행하고 감수도 거쳐서 그런지 평가가 좋다.

다음에 또 좋은 책을 번역할 기회가 있다면 도전해보고 싶다. 현재는 휴식을 위해 잠시 쉬고 있다.

Microsoft MVP

2015년 7월, C++ Korea 활동을 계기로 처음 Microsoft MVP에 선정되었다.

MVP 덕분에 알게 된 사람도 많고, 나의 시야도 정말로 넓어지게 되었다. 나에게 많은 변화를 준 계기이기도 하다. 올해도 무사히 Microsoft MVP로 선정되어 MVP 5년차가 되었다. 5년차가 되면 특별한 링을 주는데 받고 나니 감회가 새롭다. 다음 링은 10년차가 되어야 받을 수 있는데 그 때까지 열심히 달려볼 생각이다.

국민대 2019년 OSS 개발자 포럼 SW 여름 캠프

3월에 OSS 개발자 포럼 관계자 분께서 만나자고 연락을 해오셨다. 그래서 흔쾌히 만났는데 여름에 국민대에서 개최하는 캠프에서 강의를 할 수 있겠냐고 부탁하셨다. 작년인가 재작년에 부탁을 받아 캠프에서 1시간 가량 특강을 진행한 적은 있었지만 3일 과정으로 진행하는 강의는 처음이었다. 일단 해보고 싶은 마음에 수락은 했지만 무엇을 주제로 할까 고민이 많아졌다. 지인 몇 분과 의견을 주고 받은 끝에 강화학습으로 결정하게 되었다.

하지만 결정과 동시에 ‘2일 동안 10시간에 고등학생들이 잘 따라올 수 있을까…?’라는 걱정이 들기 시작했다. 주변 분들도 걱정을 많이 해주셨다. 그래서 강의를 시작하기 전 발표 자료를 만들면서 이 점을 계속 생각하며 더 쉽게 설명할 수 있게 바꾸고 비유나 예시를 많이 들어야겠다고 다짐했다.

그렇다고 목표를 크게 바꾸진 않았다. 적어도 DQN이 무엇인지는 알게 해주고 싶었고 CartPole이나 LunarLander 예제는 실행할 수 있게 만들어 주고 싶었다. 그래서 꼭 필요한 내용은 포기하지 않고 모두 넣었다. 분량이 많았지만 조교들과 함께 새벽까지 할 일을 나눠서 자료를 하나씩 만들어나갔다.

막상 2일 동안 진행하고 나니 괜한 걱정을 한 거 같았다. 학생들이 열정적으로 수업을 들어줬기에 나와 조교들도 열심히 보답해주기 위해 노력했다. 학생들이 이해가 안되는 부분이 있을 때는 다시 설명해주고, 질문이 있으면 답변을 해주고 필요하다면 저녁에 실습 시간에 별도의 보충 수업까지 했다.

둘째날 수업 시간에 CartPole-v1 예제로 DQN을 설명한 뒤 저녁에 LunarLander-v2 예제를 풀어보는 시간을 가졌는데 목표를 달성하기 위해 필요한 에피소드 수를 줄이려고 서로 정보를 공유하고 질문을 하는 모습을 보며 나는 열심히 해주는 학생들이 너무 고마웠다. 오히려 미안하기까지 했다.

나의 목표는 학생들에게 강화학습이 무엇이고 이런 것들을 배운다 정도를 알려주면 좋겠다고 생각했는데 생각 이상으로 훌륭하게 해줬다. 어려운 주제더라도 학생들에게 눈높이를 맞추고 목소리에 귀를 기울여주면 같이 헤쳐나갈 수 있다는 점을 배웠다. 덕분에 모두 결과물을 만들어낼 수 있었다.

다음에는 좀 더 잘하겠다는 마음을 가지며 일정을 끝냈다. 배우느라 고생한 학생들, 같이 자료 만들고 질문 받느라 수고해준 조교들, 행사 전반을 기획하고 운영하느라 고생한 운영진 분들께 모두 감사드린다는 말씀을 드리고 싶다.

강의가 끝나고 몇 일 뒤, OSS 캠프에 참가했던 고등학생이 메일을 보내왔다.

이 메일 한 통으로 강의했던 보람을 느낄 수 있었다. 덕분에 겨울 캠프도 강의를 맡게 되었다. 겨울 캠프는 내년 1월 초에 열릴 예정이므로 자세한 이야기는 내년 회고 때 하려고 한다.

캠프에서 사용했던 강의 자료는 여기에서 확인할 수 있다.

NDC 2019 : 하스스톤 강화학습 환경 개발기

NDC는 Nexon Developer Conference의 약자로 국내에 개최되는 게임 컨퍼런스 중 가장 큰 규모로 개최된다. 3일 간의 공개 세션을 통해 다양한 직군의 개발자들이 개발 경험, 지식 등을 아낌없이 나누는 행사라고 할 수 있다.

작년 NDC에서 “유체역학 엔진 개발기 - 게임에서 물리 기반의 유체를 구현하기 위한 고군분투”라는 주제로 발표를 했었기에 올해는 다른 주제로 발표하고 싶었다. 고민하다가 2017년 말부터 열심히 구현하고 있던 하스스톤 RL 환경을 만드는 프로젝트에 관한 이야기를 하면 좋겠다 싶어 마감 10분을 남기고 신청했다.

발표자 선정 결과를 기다리던 도중 NDC 운영 사무국에서 연락이 왔다. 아무래도 “하스스톤”과 관련된 발표이다 보니 블리자드에 발표를 해도 되는지 문의를 해보라는 것이었다. 이런 문의를 어디에 해야 할 지 막막해 하던 도중 작년 NDC를 통해 알게된 전이삭 님이 생각났다. 전이삭 님께 사정을 말씀드렸고 다행히 블리자드 코리아 내 담당자에게 바로 메일을 보낼 수 있었다. 이자리를 빌어 전이삭 님께 감사하다는 말씀을 드리고 싶다. 3주 간의 검토 이후 몇 가지 수정을 조건으로 허락을 받을 수 있었고 덕분에 발표자로 선정되었다.

왜 하스스톤 강화학습에 관심을 가지게 되었는지부터 시작해 하스스톤이 어떤 구조로 이뤄져 있고 각 기능을 어떻게 구현했는지, 그리고 앞으로의 계획은 어떻게 되는지를 정리해서 발표했다. “하스스톤”이라는 게임 덕분인지 작년에 비해 엄청나게 많은 분들이 참석해주셨다. 게임 웹진 기자분들이 참석하셔서 발표 내용을 잘 정리해주셨다. 발표 내용이 궁금하다면 다음 링크를 참고하길 바란다.

아직 개발 중인 프로젝트라 강화학습과 관련된 내용을 많이 설명드리지 못했지만 지금도 꾸준히 작업하고 있고 결과물이 조금씩 나오고 있는 상태다. 기회가 된다면 내년에 Part 2로 시연하는 모습을 보여드리면 좋겠다. 그리고 이 발표 덕분에 하스스톤 프로게이머 몇 분과 연락을 하게 되었다. 현재보다 미래가 더욱 기대된다.

NDC 발표 자료는 여기, 녹화 영상은 여기에서 확인할 수 있다.

사이드 프로젝트 - RosettaStone

RosettaStone은 2017년 말에 시작한 프로젝트로 C++로 하스스톤 게임을 구현하고 강화 학습을 통해 여러 가지 의미있는 연구를 하기 위한 프로젝트다. 이 프로젝트를 시작하게 된 계기는 아주 단순하다. 하루는 하스스톤을 하고 있는데 여관 주인의 플레이가 너무 답답했다. 플레이어라면 하지 않은 플레이를 하길래 ‘아, 여관 주인의 뇌를 바꿔야겠다.’라고 느껴 시작하게 되었다. 올해도 많은 팀원들이 새로 들어왔고 함께 여러 작업을 했다. 오리지널 카드를 전부 구현했으며 RL 환경을 위해 MCTS를 구현하고 PyTorch C++ API와 연결해 강화 학습을 하기 위한 준비를 마쳤다. 올해에도 나와 같이 구현 작업하느라 고생한 팀원들에게 고맙다는 말을 전하고 싶다. 내년에는 같이 논문도 쓰고 프로게이머와의 대전도 진행하려고 한다.

최근에 2020년 로드맵을 작성했는데 다음과 같다.

  • Implement all standard cards
    • Rise of Shadows
    • Saviors of Uldum
    • Descent of Dragons
  • Implement programs for playing game
    • Console-based
    • GUI-based
    • Web-based
  • Prepare “Hearthstone pro gamer” vs AI match-up
  • Implement “Hearthstone Battlegrounds”
  • Support various deep-learning framework for RL environment
    • Tensorflow
    • PyTorch
  • Fully support Python API
  • Write a paper on Hearthstone’s RL environment
  • Make architecture documents for contributors
  • Make tutorials for programs

저장소는 여기에서 확인할 수 있다.

개인 이야기

  • 가끔 식도염이 재발해 고생할 떄가 있지만 작년에 비해 건강은 많이 회복했다.
  • 식사량을 조금 줄였는데 효과가 있는 거 같다. 또한 주말에는 1~2끼만 먹고 있다.
  • 돈을 너무 아끼지 않고 써서 감당이 안될 때가 있다. 돈을 아끼는 생활을 해야겠다.
  • 한꺼번에 너무 많은 일을 하다 보니 일정에 치여서 포기해야 되는 경우가 많았다. 고쳐야 한다.

2020년 계획

2020년에 계획하고 있는 일들은 다음과 같다.

  • C++20 책 집필하기 (박동하 님과 함께 작업)
  • RL 환경 구축 관련 책 집필하기
  • RL 환경 구축 관련 논문 쓰기
  • RosettaStone 외 여러 RL 환경을 구축하기 위한 프로젝트 작업 진행
  • 국민대 2020년 OSS 개발자 포럼 SW 겨울 캠프 - 알파제로를 이용한 오목 AI 만들기
  • 모두의연구소 LAB 개설
  • C++ Korea 스터디, 세미나 및 밋업 진행
  • MVP Summit 2020 참석
  • TEDxUNIST 강연

정리

올해도 참 많은 일들을 하며 보냈다. 특히 7월은 여러 일들이 겹쳐서 정신없이 보냈다. 여전히 나는 게으르다고 생각한다. 늘 의욕만 앞서고 실천으로 옮기지 못하는 나 자신이 미더울 때가 많다. ‘작년보다 올해는 좀 더 나았을까’라고 스스로에게 물어보자면 100점 만점에 70점 정도는 줄 수 있을 것 같다. 내년에는 내가 갖고 있는 능력을 좀 더 효율적으로 사용해 적어도 80점은 줄 수 있는 사람이 되었으면 좋겠다.

2018년 회고 / 2019년 계획

작년에 처음으로 회고 글을 썼었는데 반응이 좋아서 올해도 써보려고 한다.

올해는 작년보다 많은 일이 있어서 꽤 길어질 거 같지만, 하나씩 정리해 보자.

회사에서의 업무

어느덧 넥슨에 다닌지 3년이 되었다. 전문연구요원으로 입사한 지가 엊그제 같은데 벌써 4년차라니 시간이 어디로 증발했는지 모르겠다.

처음 회사에 입사했을 때는 대학원에서 경험하지 못했던 대규모의 코드에 당황해 적응하기 힘들었다.

하지만 1년이 지나자 어느 정도 익숙해지기 시작했고 지금은 1명의 몫을 할 수 있는 프로그래머가 되었다.

어떤 업무를 맡으면 정해진 일정 내에 시간을 조절해가며 완료할 수 있고 스스로 코드를 개선하거나 버그를 찾아 고치고 있다.

현재 맡고 있는 업무는 말할 수 없지만 굉장히 어렵다. 하지만 디버깅과 검색을 통해 조금씩 극복하며 해결하고 있다.

지금 하고 있는 일이 내년에는 결과로 보여줄 수 있기를 바라고 있다. 그만큼 더 열심히 연구하겠다고 다짐한다.

레이드 작업 - 마하

온라인 게임 개발을 할 때 다양한 작업을 맡게 되지만 그 중에 꽃이 있다면 바로 신규 캐릭터 개발과 레이드 전투 개발 작업일 것이다.

두 작업은 성수기 업데이트에서 가장 핵심이 되는 부분이다. 그만큼 중요한 작업이기 때문에 아무에게나 맡기지 않는다.

보통 입사 3-4년차가 되면 기회가 찾아오게 되는데 이번 여름 성수기에 운이 좋게도 레이드 작업을 맡게 되었다.

내가 맡은 레이드 작업은 시즌 3를 마무리하는 보스 ‘마하’였다.

‘마하’는 4월부터 개발하기 시작했으며 7월 12일 정식 서버에 업데이트되었다.

기존 전투에는 없던 새로운 패턴들을 구현하면서 어려움이 많았다. 자세한 이야기를 하긴 어렵지만 매우 까다로운 작업이었다.

그래도 팀원들의 도움으로 하나씩 해결해나갈 수 있었고 다른 툴에 있던 버그도 수정하면서 아티스트분들의 작업 효율을 개선할 수 있었다.

컨텐츠 작업을 위주로 하던 나에게는 새로운 도전이었고 구현하는 과정에서 많이 배우면서 성장할 수 있었다.

내년에는 미처 살펴보지 못했던 로직들을 보며 고대 버그를 재현하고 고치는데 시간을 투자할 생각이다.

마지막으로 게임 개발자에게 가장 뿌듯한 순간은 다음이 아닐까 싶다. (내가 여기에 이름을 올리는 날이 오다니…)

C++ Korea

C++ Korea는 나의 인생을 바꿔준 정말 고마운 그룹이다. 대학생 때 만들어 20명으로 시작했던 그룹이 여기까지 성장할 줄은 몰랐다.

현재 C++ Korea는 약 4,500명의 회원 분들과 함께하고 있으며 정기적으로 스터디, 세미나 및 가이드라인 문서 번역 작업을 진행중이다.

올해 C++ Korea에서는 어떤 활동들을 했을까? 제4회 세미나를 개최했고 여름방학 때 자료구조, 시스템 프로그래밍 특강을 열었다.

1월부터 7월까지는 C++ 템플릿 스터디를 진행했고 현재는 모던 C++ 챌린지 스터디를 진행하고 있다.

올해는 각 활동마다 좋았던 점보다는 아쉬운 점이 많았다고 생각한다. 하나씩 이야기해보도록 하자.

세미나

8월 4일, 한국마이크로소프트에서 C++ Korea 제4회 세미나 - “C++ 프로젝트 ~ 처음 만난 세계”를 개최했다.

이번 세미나에서는 C++ 프로젝트를 진행하면서 겪었던 경험담이나 유용하게 사용했던 라이브러리, 팁을 공유하는 자리를 만들어보려고 했다.

그동안 우리는 세미나를 개최할 때 다양한 분들의 도움을 받아 무사히 진행할 수 있었다. 이 자리를 빌어 감사의 말씀을 드린다.

하지만 C++ Korea 운영진은 회의를 통해 이번 세미나에서 지금까지 하지 않았던 새로운 도전들을 해보기로 했다.

  • 최초로 유료 세미나 개최 (청소년 1만원, 성인 2만원)
  • 최초로 케이터링 업체와 계약한 뒤 음식 준비
  • 최초로 운영진들이 행사의 모든 업무를 담당
  • 최초로 트랙 수를 1개가 아닌 2개로 진행
  • 최초로 강연 영상 녹화

우선 Festa를 통해 세미나 금액 결제 및 참가자 체크를 진행했고 월향에 연락해 케이터링을 부탁드렸다.

그리고 발표자를 공개적으로 모집한 뒤 발표 주제와 난도에 맞게 두 개의 트랙으로 배치했다.

강연 영상은 알고 있던 분들께 개인적으로 연락해 부탁드리고 비용 합의 후 진행했다.

세미나 당일에는 참석 가능한 운영진 분들과 함께 업무를 분배한 뒤 세미나를 진행했다.

도움을 받다가 우리가 직접 해보니 생각보다 준비해야 될 게 엄청 많았고 실제 상황에 맞춰 대응하느라 정신없이 시간이 흘러갔다.

세미나를 개최하고 나서 몇 일 뒤에 후기를 살펴보고 주위 분들에게 세미나가 어땠는지 여쭤봤다.

일단 케이터링 음식이 맛있었다는 평이 많았다. 이 점은 잘 준비했다고 생각했다. (믿고 보는 월향! 다음에도 부탁해요~)

하지만 개선했으면 좋겠다는 평도 많았다. 몇 가지 정리해보면 다음과 같다.

  • 생각보다 많은 참석자를 받아 공간이 많이 혼잡했다는 점
  • 세미나 진행 순서를 확인할 시간표가 없었다는 점
  • 세미나 준비를 미흡하게 한 점 (마이크 및 발표 자료 등)

그리고 나에게도 잘못이 크다. 처음에는 운영과 발표를 동시에 할 수 있다고 판단해 발표를 할 생각이었다.

하지만 실제로 세미나를 준비하면서 발표에 신경쓸 시간이 없었다. 나의 자만이었다. 결국 발표를 취소할 수 밖에 없었다.

이 자리를 빌어 세미나에 참석하신 분들께 다시 한 번 죄송하다는 말씀을 드린다.

피드백을 바탕으로 다음 세미나에서는 좀 더 완성도있게 준비해야겠다는 생각을 했다.

세미나 발표 자료는 여기에서 확인할 수 있다.

스터디

C++ Korea는 2018년에 두 번의 스터디와 한 번의 특강을 진행했다.

  • C++ 템플릿 스터디 : 2018년 1월 ~ 7월
  • 자료구조 / 시스템 프로그래밍 특강 : 2018년 7월 ~ 8월
  • 모던 C++ 챌린지 스터디 : 2018년 10월 ~ 현재

C++ 템플릿 스터디는 작년에 새롭게 개정된 ‘C++ Templates: The Complete Guide (2nd Edition)’을 공부하는 스터디다.

이 스터디를 통해 모던 C++에서 새롭게 추가 및 변경된 템플릿 기능을 자세하게 알 수 있었다.

이 스터디는 기존 스터디처럼 매 주 돌아가며 발표 자료를 준비한 뒤 발표하는 방식으로 진행했다.

그래서 큰 문제 없이 높은 참석률을 유지하며 스터디를 마무리할 수 있었다.

C++ 템플릿 스터디 발표 자료는 여기에서 확인할 수 있다.

자료구조 / 시스템 프로그래밍 특강은 여름 방학을 맞아 학생들을 대상으로 짧게나마 6주 동안 진행한 스터디다.

운영진 회의를 통해 무슨 과목을 진행하면 좋을지 논의했고 그 결과 자료구조와 시스템 프로그래밍이 선정되었다.

나는 자료구조 특강을 진행했는데 좋았던 점보단 전반적으로 아쉬움이 많았던 스터디다.

먼저 미리 자료를 준비하지 않고 특강을 진행하다 보니 시간에 쫓겨 제대로 준비하지 못했다.

그러다 보니 참석한 분들에게 지식을 허겁지겁 전달하는 경우가 허다했다.

또한 이론적인 설명은 했지만 코드를 구현하는 시간이 턱없이 부족했다.

다음에 특강을 다시 진행하게 된다면 미리 자료를 준비해서 학생들에게 양질의 강의를 제공하겠다고 생각했다.

자료구조 특강 자료는 여기, 시스템 프로그래밍 특강 자료는 여기에서 확인할 수 있다.

모던 C++ 챌린지 스터디는 모던 C++를 사용해 ‘The Modern C++ Challenge’에 나오는 다양한 문제를 풀어보는 스터디다.

지금까지는 각자 발표할 부분을 미리 읽고 정리한 뒤 발표하는 방식을 사용했지만 이번 스터디에는 새로운 방식을 사용하기로 했다.

바로 책에 나오는 문제를 각자 미리 풀어온 뒤 스터디 때 각자의 코드를 리뷰하며 좀 더 나은 해결책을 찾아보는 방식이다.

이 방식은 장단점이 존재한다. 구성원들이 각자 문제를 잘 풀어오면 활발히 토론할 수 있지만 반대의 경우에는 할 이야기가 없다.

아직 진행중인 스터디라 내년 회고 때 자세한 이야기를 할 예정이지만 지금까진 아쉬움이 많은 스터디다.

모던 C++ 챌린지 스터디 자료는 여기에서 확인할 수 있다.

C++ 핵심 가이드라인

C++ 핵심 가이드라인은 C++ 표준 위원회의 ‘C++ Core Guidelines’를 한국어로 번역하는 작업이다.

‘C++ Core Guidelines’ 문서가 처음 나왔을 때 읽어봤는데 알아두면 도움이 될 내용으로 가득했다.

마치 여러군데 흩어져 있던 팁과 충고들을 모아 한 권의 책으로 엮은 것 같았다.

이 내용을 한국어로 번역해 국내의 C++ 개발자분들에게 널리 알릴 수 있다면 좋겠다는 생각으로 시작하게 되었다.

번역 작업 초기에는 자발적으로 참여해 주신 분들이 많아 큰 문제없이 진행할 수 있었다.

하지만 문제가 있었다. ‘C++ Core Guidelines’의 문서가 자주 갱신되어 번역 속도를 맞추기가 힘들었다.

그렇게 진행하던 번역 작업이 어느 순간부터 느려지기 시작하더니 결국 중단되고 말았다.

한동안 중단되었던 번역 작업에 최근 다시 불을 지피게 되었다.

C++ Korea 운영진 회의 때 중단되었던 번역 작업을 재개했으면 좋겠다는 의견이 있었던 것이다.

박동하님을 중심으로 번역 작업을 재개했고 현재 ‘C++ Core Guidelines’의 최신 문서를 기준으로 활발히 진행중이다.

지금 속도를 유지한다면 내년 초에 번역 작업을 마무리할 수 있을거라 예상하고 있다.

이후에는 PDF 문서화 및 추가 교정 작업, 그리고 원본 문서와의 동기화 작업을 진행할 생각이다.

이 자리를 빌어 번역 작업에 힘써주고 계시는 박동하님께 감사의 인사를 드린다.

C++ 핵심 가이드라인 문서는 여기에서 확인할 수 있다.

Microsoft MVP

2015년 7월, C++ Korea 활동 덕분에 처음 Microsoft MVP로 선정되었다.

올해도 무사히 Microsoft MVP로 선정되어 어느덧 MVP도 4년차가 되었다.

MVP 덕분에 알게 된 사람도 많고, 나의 시야도 정말로 넓어지게 되었다. 나에게 많은 변화를 준 계기이기도 하다.

지금도 Visual Studio에 버그가 생길 때마다 내부 메일을 통해 제보를 하고 있으며 C++ 관련 발표도 꾸준히 하고 있다.

앞으로도 지금처럼 활발하게 C++ 기술을 전파하고 커뮤니티에서 활동해 5년, 10년차 MVP로 이어갔으면 좋겠다.

KSCY

KSCY는 한국 청소년 학술 대회로 4회 때부터 컴퓨터 공학 세션 멘토로 활동해 지금까지 계속 함께하고 있다.

처음에는 대학교 시절 학과 사무실에서 친하게 지내던 선생님의 부탁으로 얼떨결에 시작하게 되었다.

논문 연구를 발표하던 학생은 어느덧 퍼실리테이터가 되었고 조금만 더 있으면 나를 대신해 멘토를 하게 될 날도 올 것이라 생각한다.

내가 KSCY에 매 번 참석하는 이유는 2가지이다.

  • 학생들이 발표하는 논문에서 색다른 관점과 아이디어를 제시하기 때문에 나에게 새로운 영감을 불어넣어 준다.
  • 하루의 만남 이후에 누군가와 지속적으로 연락이 이어져 같이 연구를 하게 되는 새로운 인적 네트워크를 형성해준다.

나를 자만하지 않게 만들어 줬던, 주는, 그리고 줄 모든 학생분들에게 이 자리를 빌어 감사드린다.

올해 여름에 참가했던 10회 KSCY에서 감사패를 받게 되었다. 오랫동안 함께해서 고맙다는 감사의 마음이라고 생각한다.

앞으로 멘토를 할 수 있을 때까지는 계속 하고 싶다. 물론 평생 멘토를 할 수는 없을 것이다.

언젠간 박수칠 때 떠나야 할 것이다. 그건 그 때가서 생각해 보자. 아직까지 그럴 생각은 없다.

발표 및 특강

올해도 외부에서 많은 발표와 특강을 했다. 정리하면 다음과 같다.

  • 17회 해킹캠프
  • NDC 2018
  • 멜팅콘 2018
  • 파이콘 한국 2018 스프린트 세션
  • 청강대 특강
  • 부산게임아카데미 특강
  • 디미고 특강

모든 발표 및 특강을 이야기하기엔 너무 길어질 거 같아 이 중 기억에 많이 남은 발표 및 특강 몇 개를 이야기하려고 한다.

NDC 2018

NDC는 Nexon Developer Conference의 약자로 국내에 개최되는 게임 컨퍼런스 중 가장 큰 규모로 개최된다.

3일 간의 공개 세션을 통해 다양한 직군의 개발자들이 개발 경험, 지식 등을 아낌없이 나누는 행사라고 할 수 있다.

나는 지난 2번 발표자로 신청했다가 떨어졌었다. 한 번은 눈 시뮬레이션이었고 다른 한 번은 모던 C++ 최적화였다.

아마 발표자 경쟁이 치열하고 발표 내용을 자세하게 적지 않은 이유이지 않을까 생각했었다.

그래서 올해는 지난 1년 동안 작업했던 유체 시뮬레이션 개발 과정을 주제로 발표자 신청을 했다.

무엇을 이야기하고 싶은지, 그리고 어떤 목적으로 발표를 하게 되었는지를 자세하게 적어서 냈다.

노력이 통한 것일까, 드디어 3번의 시도 끝에 NDC 발표자에 선발되어 발표를 할 수 있게 되었다.

기초 군사 훈련으로 인해 발표를 준비하는 시간이 짧았지만 휴가를 써가며 무엇을 전달할까 많은 시간 고민했다.

  • 유체역학을 잘 모르는 분들을 위해 깊은 지식은 다루지 않고 개발기 위주로 가볍게 이야기하기
  • 유체역학 관련 지식을 이야기하고 코드를 어떻게 구현했는지 설명하기

이 두 부분 사이에서 끊임없이 고민했는데 학생들도 많이 참관한다는 이야기를 듣고 전자를 선택하게 되었다.

그렇게 몇 일 동안 수면 시간을 줄여가며 발표 자료를 만든 결과 슬라이드 200여장을 완성했다.

50분에 슬라이드 200장을 발표하기엔 너무 많아 보여서 필요없는 부분을 부록으로 뺀 결과 160장이 되었다. (그래도 많은데…)

발표 당일에 참석자가 너무 없을까 걱정했다. 주제가 어려웠기 때문이다. 하지만 생각보다 많은 분들이 참석해주셔서 다행이었다.

발표는 50분에 딱 맞춰서 마무리해 큰 문제없이 마칠 수 있었다. 발표 경험이 이제 좀 되었는데도 떨리는 건 마찬가지인 듯 하다.

NDC 2018에는 게임 웹진 기자분들이 참석하셔서 발표 내용을 정리해주신다. 발표 내용이 궁금하다면 여기를 참고하면 된다.

아무래도 유체역학이라는 주제로 인해 정리하기 힘드셨을텐데 잘 정리해주셔서 감사드린다.

이후 6월 쯤에 NDC 발표 응답 내용을 받았는데, 부정적인 의견은 발표 전에 예상했던 의견과 거의 일치했다.

아무래도 깊은 내용을 다루지 않고 가볍게 이야기해서 나온 의견이었다고 생각한다. 모두를 만족시키기는 발표를 하는 건 쉽지 않은 거 같다.

내년을 목표로 세부 구현을 설명하는 보충 자료를 만들고 있다. 나중에 공개했을 때 의견주셨던 분들에게 많은 도움이 되었으면 좋겠다.

이 자리를 빌어 NDC 때 발표를 들어주셨던 모든 분들에게 다시 한 번 감사하다는 말씀을 드리고 싶다.

NDC 발표 자료는 여기, 녹화 영상은 여기에서 확인할 수 있다.

파이콘 한국 2018 스프린트 세션

파이콘 한국 2018 스프린트 세션에 Hearthstone++ 프로젝트가 참가하게 되었다.

스프린트에 참가하게 된 이유는 하스스톤 프로젝트에서 핵심이 되는 카드 로직 구현 때문이었다.

하스스톤이라는 게임 특성 상 구현해야 할 카드가 많고 확장팩을 통해 새로운 카드가 주기적으로 계속 추가된다.

이 프로젝트는 아직 초기 단계였기 때문에 구현한 카드가 거의 전무한 상황이었다. 그래서 스프린트를 통해 카드 구현을 같이 해보면 좋지 않을까 생각했다.

막상 파이콘 스프린트 세션에 신청했을 때는 기대보다 걱정이 많았다. 물론 스프린트 세션에서는 파이썬 뿐만 아니라 모든 언어를 사용할 수 있었다.

하지만 파이썬이 메인인 컨퍼런스에 C++ 언어로 스프린트를 했을 때 과연 사람들이 관심을 갖고 참석할 것인지 의문이었다.

거기다가 구조가 복잡한 이 프로젝트에 사람들이 작업해 머지 요청을 할 수 있을지 걱정이 이만저만 아니었다.

그렇게 기대 반 걱정 반인 마음을 가진 채 스프린트 세션 당일이 되었다. (우린 과연 잘 할 수 있을까?)

하지만 막상 스프린트를 시작하니 그런 걱정은 괜히 했다는 것을 알게되었다. 예상보다 많은 분들이 참석해주셨고 열심히 작업해주셨다.

스프린트 세션을 진행하는 동안 질문도 많았고 분위기도 엄청 뜨거웠다. 덕분에 풀 리퀘가 쌓여 집에 가서 새벽까지 코드 리뷰를 하는 진풍경이 펼쳐졌다.

카드 로직 구현 작업을 같이 작업해주신 모든 분들에게 이 자리를 빌어 감사드린다.

사실 하스스톤 프로젝트를 1년 동안 작업해보면서 조금씩 지쳐가고 있었다. 작업할 코드가 너무나 많았기 때문이다.

하지만 이번 스프린트를 통해 지금까지 개발한 팀원들도 많이 놀랐고 계속 작업할 에너지와 추진력을 얻을 수 있었다.

내년 스프린트 세션에도 하스스톤 또는 다른 프로젝트로 참가할 수 있으면 좋겠다. 올해 있었던 행사 중에 가장 기억에 남는 행사였다.

청강대 특강

청강대에서 발표 제안을 받게 되고 어떤 주제로 발표할 지 많이 고민했다. 여러 후보 주제를 두고 고심하다가 문득 회사에 입사했을 때 기억이 났다.

나는 입사하고 나서 처음에 적응하는데 고생을 많이 했다. 그동안 제대로 된 협업을 해보지 못했었는데 여러 프로그래머들과 함께 작업을 해야 했다.

코드 규모는 엄청나게 컸으며 코드 리뷰, 테스트 등 나에게는 너무나 낯선 환경이었다.

지금은 3년이 되었으니 익숙하지만 대학생 때 이런 경험을 한 번 쯤 했더라면 더 빨리 적응할 수 있지 않았을까 하는 아쉬움이 있었다.

그래서 학생들에게 프로젝트를 체계적으로 하는 방법을 구축하고 경험해 볼 수 있도록 정리해서 알려주면 좋겠다는 생각이 들었다.

각 부분별로 자세하게 설명하기 보다는 전체적인 그림을 그릴 수 있도록 만들었다. 발표 제목은 ‘프로젝트 제대로 해보기’로 정했다.

청강대에서 발표하고 난 뒤 학생들의 후기가 매우 좋았다고 들었다. 준비한 나도 뿌듯했다.

부디 보고 들은 것으로 끝나지 않고 직접 경험해봤으면 좋겠다. 한 명에게라도 의도가 제대로 전달되었다면 그것으로 됐다.

청강대 특강 발표 자료는 여기에서 확인할 수 있다.

디미고 특강

디미고에서 발표 제안을 받게 되었다. 언젠가 한 번 발표하고 싶은 학교였는데 정말 운이 좋게 기회가 찾아왔다.

고등학생들에게 어떤 발표를 하면 좋을까 고민했는데 지난 5년 동안 학생들과 함께하면서 겪었던 경험 및 시행착오들을 정리해서 발표하면 좋지 않을까 생각했다.

그래서 ‘개발을 시작하려는 여러분에게 ~ 학생들과 함께했던 지난 5년간의 기록’이라는 주제로 만들기 시작했다.

주로 내가 대학생 때 경험했던 내용으로 채웠는데 몇 가지 정리해보자면 다음과 같다.

  • ‘내가 하고 싶은 것’을 찾아 보자
  • ‘다양한 활동’을 해보자
  • 함께할 수 있는 좋은 ‘팀원’을 구하자
  • 인간은 ‘성취감’을 먹고 사는 동물
  • ‘목표’를 단계별로 나눠서 세우자 : 만다르트 기법
  • ‘우물 안 개구리’에서 탈출하자
  • ‘상대적인 스펙트럼’에 갇히지 말자
  • 내가 이겨야 할 사람은 ‘어제의 나’
  • ‘실력’과 ‘열정’은 서로 채워주는 관계
  • ‘본업’과 ‘취미’ 사이
  • ‘본업’을 생각한다면 ‘포트폴리오’는 필수
  • ‘공부’를 안해도 된다는 착각에 빠지지 말자
  • 꿈은 ‘명사’가 아니라 ‘동사’여야 한다

발표가 끝나고 나서 학생들에게 질문을 받는 시간이 있었다. 여러 학교에 특강을 하다 보면 학생들이 하는 질문은 대개 비슷하다는 걸 깨닫게 된다.

그런데 지금까지 한 번도 들어보지 못한 질문을 하는 학생이 한 명 있었다.

“요즘은 로우 레벨로 밑에서부터 위로 쌓아 올리는 패러다임에서 하이 레벨 API를 사용해 실제 문제를 푸는 패러다임으로 변하고 있다고 느낍니다. 연사님께서는 이렇게 패러다임에 대해서 어떻게 생각하시는지 궁금합니다. 정말 더 이상 로우 레벨을 배울 필요는 없는 것인가요?”

이 질문을 듣고 바로 대답하지 못했다. 5초 정도 ‘와, 이런 질문을 한단 말이야?’라고 감탄한 뒤 어떻게 대답할 지 생각했다. 그리곤 이렇게 답했다.

“네, 패러다임이 그렇게 바뀌고 있는 건 사실입니다. 하지만 누군가는 하이 레벨 API를 제공하기 위해 로우 레벨을 해야됩니다. 패러다임이 바뀐다고 해서 로우 레벨이 안중요해지는 것은 아닙니다. 여전히 중요합니다. 그러니 본인이 하고 싶은 것에 흔들리지 마시고 쭉 달려나가세요.”

특강을 마치고 몇 일이 지나도 이 학생의 질문이 머릿속에 계속 남았다. 그래서 아는 후배를 통해 연락처를 알 수 있는지 부탁했다.

현재는 연락이 닿아 서로 개발 이야기를 하고 있다. 기회가 된다면 같이 개발하고 싶다. 이런 학생과 개발하고 싶었다.

디미고 특강 발표 자료는 여기에서 확인할 수 있다.

번역 - C++ 최적화

‘모던 C++ 입문’ 번역이 끝난 뒤, 현재는 Optimized C++을 번역하고 있다.

내년 초를 목표로 작업하고 있으며 번역서의 이름은 ‘C++ 최적화’가 되지 않을까 싶다.

이 책은 모던 C++(C++11/14)를 기준으로 C++과 관련된 최적화 기법들을 제시하고 있다.

나는 번역서를 작업할 때마다 내가 번역을 잘못하고 있었다는 사실을 깨닫고 개선하려고 노력하는데 이번 책이 특히 그랬다.

편집자 분께서 내가 번역한 문장을 굉장히 까다롭게 봐주셨다. 덕분에 내가 얼마나 잘못하고 있었는지 알게 되었다.

문장을 잘못 이해해서 완전히 원문과 반대로 번역한 적도 있었고 굳이 필요하지 않은 단어도 번역해 혼동을 준 적도 있었다.

내가 번역할 문장을 제대로 이해하지 않고서 번역했을 때 독자에게 얼마나 피해를 주는지 알게 되었다.

지금은 문장을 이해하고 나서 어떻게 잘 전달할 수 있을까 고민한 뒤 적절한 문장으로 바꿔 번역하고 있다.

이 자리를 빌어 나를 바로 잡아준 편집자 분께 감사드린다. 내년 초에 출간 소식으로 찾아뵐 수 있으면 좋겠다.

프로젝트

올해는 어느 때보다 오픈 소스 프로젝트에 많은 시간을 투자했다. 수많은 프로젝트를 진행했지만, 기억에 남는 몇 개만 소개하고자 한다.

game-developer-roadmap

game-developer-roadmap은 2017년 초에 화제가 되었던 웹 개발자 로드맵에 영감을 얻어 시작한 프로젝트다.

게임 개발자를 희망하는 사람은 많지만, 막상 무엇을 배워야 할 지 정리되어 있는 자료는 없어서 답답한 경우가 많다고 생각했다.

그래서 클라이언트 프로그래머는 나의 경험을 기반으로 작성했고, 서버 프로그래머는 허린님이 많은 부분을 도와주셨다.

작년에는 Star 수가 500이 넘었었는데 올해도 꾸준히 증가해 현재는 1200에 육박하고 있다. 그만큼 많은 사랑을 받았다.

그리고 codeburst.io에서 내 저장소를 소개해줬다.

2018년 버전에 맞춰 내용을 갱신하려고 생각은 많이 했지만 결국은 다른 일들에 치여서 하지 못했다. 내 잘못이며 매우 아쉽다.

2019년에는 자세한 설명을 추가하고 추천 도서 및 참고 자료를 추가해 좀 더 완성도 있는 모습을 보여드릴 수 있도록 해야겠다.

저장소는 여기에서 확인할 수 있다.

Hearthstone++

Hearhstone++은 C++로 하스스톤 게임을 구현하고 강화 학습을 통해 여러 가지 의미있는 연구를 하기 위한 프로젝트다.

이 프로젝트를 시작하게 된 계기는 아주 단순하다. 하루는 하스스톤을 하고 있는데 여관 주인의 플레이가 너무 답답했다.

플레이어라면 하지 않은 플레이를 하길래 ‘아, 여관 주인의 뇌를 바꿔야겠다.’라고 느껴 시작하게 되었다.

작년부터 개발을 시작했는데 진행 속도가 많이 느렸었다. 올해는 팀원들과 함께 활발히 개발을 진행했다.

현재 기본 구조는 다 갖춰진 상태고 여름부터는 리팩토링을 하며 카드 로직을 구현중이다.

연말부터는 PyTorch C++ API를 붙여 강화학습을 하기 위한 환경 구성 작업에 착수하기 시작했다.

올해는 TFCon 2018 포스터 세션과 파이콘 한국 2018 스프린트 세션에 참가했다.

스프린트 세션 이후로 꾸준한 사랑을 받아 지금은 Star 수가 170이 되었다. 현재 팀원은 6명이다.

마지막으로 DMCA Takedown 이슈가 있어서 2주 동안 저장소가 닫혔던 적이 있는데 현재 이 문제는 해결된 상태다.

이 이야기는 여기서 다루기엔 너무 길어질 것 같아 다른 글에서 자세하게 설명할 생각이다.

한 해 동안 구현 작업하느라 고생한 Hearthstone++ 팀원들에게 고맙다는 말을 전하고 싶다. 내년에도 열심히!

저장소는 여기에서 확인할 수 있다.

Civilization++

Civilization++은 C++로 문명 게임을 구현하고 강화 학습을 통해 여러 가지 의미있는 연구를 하기 위한 프로젝트다.

이 프로젝트를 시작하게 된 계기는 승리 조건이 하나가 아닌 여러 가지이기 때문이다.

승리 조건이 하나가 아닌 게임에서 AI는 특정 조건에서 어떤 판단 기준으로 승리 조건을 달성하려고 할 것인지가 궁금했다.

아직은 많은 작업을 하지 못해 개발 초기 단계에 있으며 팀원은 3명이다.

이 프로젝트는 올해 내가 많은 신경을 쓰지 않아 진행이 더딘 거 같아 너무 미안하다.

현재 내가 작업해야 될 부분은 헥사 타일에서 맵을 생성할 수 있는 프로그램을 만드는 것이다.

내년에는 좀 더 활발하게 프로젝트를 진행할 수 있도록 노력해야겠다.

저장소는 여기에서 확인할 수 있다.

CubbyFlow-v0

CubbyFlow-v0는 복셀 기반의 유체역학 시뮬레이션 엔진이다. 실시간 게임에 사용하기 위한 목표를 두고 작업하고 있다.

김도엽님이 집필하신 Fluid Engine Development라는 책을 보고, Jet 프레임워크를 기반으로 처음부터 만들게 되었다.

대학원 때 유체역학과 관련한 논문을 많이 읽게 되었는데, 그 때부터 흥미를 느껴 만들어 보고 싶었지만 막상 하기 쉽지 않았다.

그러던 도중 좋은 책이 나와 용기를 내 작업하기 시작했으며 작년까지 어느 정도 궤도에 올라왔다고 생각했다.

그래서 올해 NDC 2018을 통해 그동안 엔진을 만들면서 겪었던 이슈를 정리해 발표하게 되었다.

그 이후 놀라운 일이 벌어졌다. 김도엽님께서 Jet 프레임워크를 같이 개발해보면 어떻겠냐고 제안해주셨다.

그리고 현재 만들고 있던 CubbyFlow는 Jet 프레임워크를 기반으로 실시간 게임에 사용하기 위한 목적으로 특화하면 좋겠다고 말씀하셨다.

CubbyFlow의 기반이 된 Jet 프레임워크를 같이 만들 수 있다니 이보다 큰 영광이 어딨을까 싶었다. 그래서 흔쾌히 승낙했다.

CubbyFlow에 있던 기존 코드는 CubbyFlow-v0에 옮긴 뒤 기존 코드는 정리해 둔 상태다.

이후 Jet 프레임워크에 여러 기능 개선에 기여하게 되었고 김도엽님의 코드도 리뷰하게 되었다. 아직도 꿈만 같은 일이다.

올해는 CPU 병렬 지원 기능을 추가해 Intel TBB/OpenMP/HPX 등을 사용할 수 있게 되었고 기존에 사용하던 툴들을 개선하는 작업을 했다.

현재는 CUDA 지원을 하기 위한 작업을 하고 있다. 또한 OpenGL이나 Vulkan에서 렌더링할 수 있도록 시각화 기능을 준비중이다.

혼자 개발하고 있으며 작년에 비해서 많은 작업을 하지 못했지만 내년에는 올해보다 좀 더 활발하게 작업할 수 있도록 해야겠다.

저장소는 여기에서 확인할 수 있다.

CubbyDNN

CubbyDNN은 C++ 언어로 구현한 딥러닝/강화학습 프레임워크다.

이 프로젝트를 시작하게 된 이유는 Hearthstone++ 프로젝트 때문이다.

하스스톤에 강화학습을 하기 위한 환경을 구성하려고 많이 사용하는 딥러닝 프레임워크들을 조사한 적이 있다.

그런데 C++ API를 찾아보니 대부분은 구조가 좋지 않거나 아직 지원하지 않는 상태였다.

기존에 C++ 진영에서 유명한 프레임워크들은 더 이상 유지보수하는 팀원이 없어 개발이 중단된 상태였다.

그러던 중 tiny-dnn에서 유지보수 할 개발자를 찾고 있다는 문구를 발견하고 연락하게 되었다.

메일 몇 통을 주고 받은 뒤 tiny-dnn을 기반으로 C++17을 사용한 딥러닝/강화학습 프레임워크를 만들어보기로 했다.

프로젝트에 관심있는 사람을 몇 명 모은 후 작업을 시작하게 되었다. 현재 팀원은 총 4명이고 아직 개발 초기 단계다.

최근에 만나서 첫 코드 작업의 코드 리뷰를 진행했고 구조를 리팩토링하기로 했다. 올해보단 내년이 더 기대되는 프로젝트다.

저장소는 여기에서 확인할 수 있다.

CubbyRender

CubbyRender는 크로스 플랫폼에서 다양한 렌더링 라이브러리를 쉽게 사용할 수 있는 프레임워크다.

평소에 렌더링 엔진에 관심이 많았는데 플랫폼마다 다른 라이브러리를 사용해야 한다는 것에 불편함을 느끼고 있었다.

이번 기회에 Vulkan, DirectX 12 등을 공부해 두면 좋을 것 같아 시작하게 되었다.

각 라이브러리를 구현해 줄 사람들을 찾아 팀을 구성했으며 현재는 6명의 팀원이 함께하고 있다.

현재 플랫폼마다 적합한 라이브러리를 선택할 수 있는 코드는 구현해 둔 상태며 내년 초부터 본격적인 작업에 착수할 예정이다.

내년에는 각 라이브러리에서 동작하는 예제를 여러개 만들어서 오픈 소스 프레임워크의 모습을 갖출 수 있도록 해야겠다.

저장소는 여기에서 확인할 수 있다.

건강 - 잦은 병치레 그리고 심장 검사

올해는 유독 병치레가 많았다. 기초 군사 훈련 때는 멀쩡하던 통풍 발작이 훈련 다 끝나고 나서 재발해 고생했었다.

그리고 몇 달마다 간간히 발에 있는 힘줄이 늘어나기도 했고 목이랑 어깨가 많이 뭉쳐 도수 치료를 받기 시작했다.

9월에는 갑자기 심장이 불규칙적으로 두근거려서 병원에 갔더니 부정맥이 의심된다고 대학 병원에 검사받으라고 해서 놀란 적이 있다.

덕분에 삼성서울병원에서 24시간 심전도 검사, 심장 초음파 검사, 운동 부하 검사 등을 받게 되었다.

검사 결과를 기다리는 동안 계속 불안했다. ‘혹시 결과가 좋지 않으면 어떻게 하나’라는 생각이 들었다. 부모님도 많이 걱정하셨다.

1달 동안의 기다림 끝에 검사 결과를 들으러 갔다. 다행히 심장에는 전혀 문제가 없으니 다시 증상이 나타나면 방문하라고 하셨다.

부모님께서도 결과를 듣고 나서야 마음을 놓으셨다. 검사하는데 적지 않은 돈이 들어갔지만 크게 개의치 않았다.

그동안 운동을 하지 않았던 것은 아니지만 식단 관리도 좀 더 철저하게 해서 건강해져야겠다는 다짐을 했다.

2019년 계획

다사다난한 2018년도 이제 하루 밖에 남지 않았다. 이제는 내년을 준비해야 할 때이다.

내년에는 어떤 계획을 세워볼까 고민하다가 몇 가지만 정리해서 적어보기로 한다.

건강 챙기기

건강을 챙겨야겠다는 생각은 늘 하고 있었지만 올해 유독 병치레가 많았고 심장 검사까지 하는 일이 생겨서 더욱 결심하게 되었다.

이미 2주 전부터 식단을 관리하기 시작했다. 아침에는 반숙란 2개, 유기농 요구르트, 배 등을 먹으며 가볍게 하루를 시작하고 있다.

점심에는 회사에서 중식을 먹으며 평상시처럼 먹고 저녁에는 반숙란 2개와 시리얼 약간으로 대체하고 있다.

운동도 근육 운동 중심에서 유산소 운동 중심으로 바꿔서 진행하고 있다. 짧은 기간이지만 근육량은 늘고 지방량은 감소하는 효과를 봤다.

2019년에도 지금처럼 운동과 식단을 조절하면서 건강을 되찾길 기대하고 있다. 하루하루 꾸준히 유지하면서 지켜 나가야겠다.

C++ 컨퍼런스 개최

C++ 컨퍼런스는 올해를 목표로 했지만 여러 사정으로 인해 진행하지 못했다. 그리고 너무 갑작스럽게 규모를 키운다는 생각도 들었다.

그래서 올해에는 세미나를 직접 운영해보면서 우리가 무엇이 부족한지 알게 되었다. 컨퍼런스부터 개최했다면 큰일날 뻔 했다.

내년 초에 세미나를 한 번 더 개최해 부족한 부분을 보완한 뒤 가을을 목표로 C++ 컨퍼런스를 열 계획을 하고 있다.

좀 더 큰 장소에서, 좀 더 많은 사람들과, 좀 더 전문적인 세션으로 함께하고 싶은 마음이다.

아직 어떻게 한다고 확정된 건 없으며, 앞으로 운영진 분들과 함께 구체적인 계획을 세울 것이다.

내년에 좀 더 자세한 내용으로 인사드릴 예정이니 조금만 기다려주시길 바란다.

모던 C++ 도서 집필

Optimized C++ 번역이 끝나면 그동안 미뤄왔던 모던 C++ 도서 집필 작업을 시작할까 한다.

그동안 몇 번 계획한 적은 있지만 집필 작업에 시간을 내려고 해도 일이 너무 많아 진행하지 못했다.

그렇지만 언젠가 한 번 해보고 싶었던 일이다. 번역서 작업이 끝나면 그 시간에 집필 작업을 진행하려고 한다.

일단은 C++20 표준을 목표로 모던 C++ 입문서를 집필하고 그 뒤에 자세한 내용을 설명하는 중급서를 집필할 생각이다.

어떻게 하면 집필을 잘 할 수 있을까 고민이 많긴 하다. 집필하다가 아닌 거 같아서 지운 적이 많았기에 더욱 그렇다.

그래서 일단은 C++ 기능들을 하나씩 정리하면서 예제를 만들어 볼 생각이다. 그리고 하나로 이어 붙여서 완성해 보도록 할 것이다.

모던 C++ 입문서의 내용은 여기에서 확인할 수 있다.

새로 진행할 프로젝트

현재 진행하는 프로젝트도 많지만 내년에 새로 시작할 예정인 프로젝트도 많다. 몇 가지만 정리해 봤다.

  • CubbyCity : 지리 데이터를 받아 도시를 모델링하고 도시 공학적 시뮬레이션을 하기 위한 프로젝트.

  • cpp-developer-roadmap : C++을 공부하기 위해서 무엇을 알아야 하는지를 로드맵으로 정리하기 위한 프로젝트.

  • CubbyGAN : 여러 GAN을 PyTorch C++로 구현하기 위한 프로젝트.

  • CubbyCalc : C++을 사용해 계산기를 구현하기 위한 프로젝트. 현재는 사칙연산 및 삼각 함수, 미지수 등을 지원한다.

  • CubbyMUD : Haskell을 사용해 콘솔 기반 MUD를 구현하기 위한 프로젝트.

  • Dolphin : Go를 사용해 게임 엔진을 구현하기 위한 프로젝트.

  • Falcon : C++ 패키지 매니저를 구현하기 위한 프로젝트.

감사의 말

올해도 여러 일로 감사한 분들이 참 많다.

우선 CubbyFlow 프로젝트에 많은 도움을 주신 김도엽님께 감사의 말씀을 드린다.

집필하신 ‘Fluid Engine Development’ 책이 없었더라면 유체역학 시뮬레이션 엔진을 제작해 볼 엄두도 내지 못했을 것이다.

엔진을 제작하면서 막히는 부분이 있었는데 메일로 문의했을 때 친절히 답변해주셔서 무사히 완성할 수 있었다.

그리고 저와 함께 C++ Korea 그룹을 관리해주시는 운영진 분들께 감사의 말씀을 드린다.

  • 박동하님
  • 정은식님
  • 강인철님
  • 김승현님
  • 방기연님
  • 유기현님
  • 이상훈님
  • 정승호님

세미나와 스터디, 그리고 C++ 핵심 가이드라인 번역 작업에 많은 도움을 주고 계신다.

‘Optimized C++’를 번역하는 과정에서 많은 피드백과 가르침을 주신 한빛미디어 이상복님께도 감사의 말씀을 드린다.

그동안 얼마나 번역을 잘못하고 있었는지, 어떻게 해야 올바른 번역을 할 수 있는지 깨닫게 해주셨다.

Hearthstone++ 프로젝트를 함께해 준 팀원들에게 감사의 말씀을 드린다.

  • 김영중님
  • 전승현님
  • 김형찬님
  • 김성현님
  • 박유한님

여러분 덕분에 여러 행사에 참가하고 개발 작업을 계속 이어나갈 수 있었다. 앞으로도 서로 힘냈으면 좋겠다.

Civilization++ 프로젝트를 함께해 준 팀원들에게 감사의 말씀을 드린다.

  • 서준호님
  • 하원호님

올해는 많은 작업을 함께하지 못했지만 내년에는 좀 더 함께하고 싶다. 내가 먼저 솔선수범 할 수 있도록 하겠다.

CubbyDNN 프로젝트를 함께해 준 김재우님께 감사의 말씀을 드린다.

먼저 나서서 작업을 주도하고 구현까지 해줘서 너무 고마웠다. 열심히 리팩토링 작업을 할 수 있도록 하겠다.

CubbyRender 프로젝트를 함께해 준 팀원들에게 감사의 말씀을 드린다.

  • 양교원님
  • 전민혁님
  • 강지원님
  • 박범수님
  • 박현준님

올해에는 기반 작업을 하느라 팀원들이 작업할 기회가 적었는데 내년에는 다 같이 작업할 수 있을꺼라 생각한다.

이외에도 개인적으로 감사의 인사를 전하고 싶은 분들이 정말 많지만 글이 너무 길어질 거 같아 따로 인사의 말씀을 드리려고 한다.

정리

올해도 참 다사다난했다. 이렇게 적고 나니 마냥 놀지는 않았다고 생각했다. 작년보다 어쩌면 더 많은 일을 했을 수도 있다.

여전히 나 자신이 게으르다고 생각한다. 생산성이 낮아 일이 미뤄질 때가 부지기수다.

그리고 멈춰놓은 오픈 소스 프로젝트도 너무 많다. 늘 의욕만 앞서고 실천으로 옮기지 못하는 나 자신이 미더울 때가 많다.

‘작년보다 올해는 좀 더 나았을까’라고 스스로에게 물어보자면 100점 만점에 70점 정도는 줄 수 있을 것 같다.

내년에는 내가 갖고 있는 능력을 좀 더 효율적으로 사용해 적어도 80점은 줄 수 있는 사람이 되었으면 좋겠다.