2018년 회고 / 2019년 계획
30 Dec 2018작년에 처음으로 회고 글을 썼었는데 반응이 좋아서 올해도 써보려고 한다.
올해는 작년보다 많은 일이 있어서 꽤 길어질 거 같지만, 하나씩 정리해 보자.
회사에서의 업무
어느덧 넥슨에 다닌지 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점은 줄 수 있는 사람이 되었으면 좋겠다.