SlideShare a Scribd company logo
Momenti Seminar
5 Years of RosettaStone
Chris Ohk
utilForever@gmail.com
Momenti Seminar
5 Years of RosettaStone
Hearthstone
• 블리자드 엔터테인먼트가 개발한 디지털 카드 수집 게임
• 2013년 3월 페니 아케이드 엑스포에서 처음 발표
• 2014년 3월 13일 PC 버전부터 출시
• 현재까지 11개의 확장팩과 4개의 모험 모드가 추가됨
• 2018년 11월 발표 기준 전세계 이용자수 1억명 돌파
Momenti Seminar
5 Years of RosettaStone
Hearthstone
Momenti Seminar
5 Years of RosettaStone
RosettaStone
• Hearthstone simulator using C++ with some reinforcement learning
(https://github.com/utilForever/RosettaStone)
• 하스스톤 강화학습을 하기 위한 시뮬레이터 구현 프로젝트
(나아가서 실제로 강화학습을 적용해보기 위한 코드도 작성)
• 라이선스 : AGPLv3
• 작성 언어 : C++17, Python
Momenti Seminar
5 Years of RosettaStone
Why?
• 이게 다 알파고 때문이다.
(강화학습에 불타오르기 시작한 시기)
Momenti Seminar
5 Years of RosettaStone
RosettaStone
Momenti Seminar
5 Years of RosettaStone
RosettaStone
Momenti Seminar
5 Years of RosettaStone
RosettaStone
• Architecture
Core Logic
(C++)
C++ API
pybind11
Python API
(Working...)
OpenAI Gym
(To-do)
TensorFlow
PyTorch
Rust API
(To-do)
MCTS
(Reworking...)
Momenti Seminar
5 Years of RosettaStone
During 5 Years...
• 구조를 설계하면서 발생했던 갈등을 해결했던 일
• DMCA Takedown 문제를 경험하고 해결했던 일
• 블리자드에서 코드를 검수받았던 일
• 복잡한 시스템에서의 상호 작용으로 인해 발생했던 일
• 오픈소스 컨트리뷰톤에 참가했던 일
Momenti Seminar
5 Years of RosettaStone
During 5 Years...
• 구조를 설계하면서 발생했던 갈등을 해결했던 일
• 처음 개발할 때 대학생 1명과 협업을 했었다.
카드 게임을 구현하기 위해 구조를 설계하는 작업을 나눠서 맡았다.
• 프로젝트를 더 좋게 만들고 싶은 마음은 팀원들 모두 똑같다.
문제는 ‘어떻게 좋게 만들 것인가’에 대해 갖고 있는 생각이 다르다는 거다.
Momenti Seminar
5 Years of RosettaStone
During 5 Years...
• 구조를 설계하면서 발생했던 갈등을 해결했던 일
• 서로 생각하는게 다르다 보니 어떤 팀원이 다른 브랜치에서 작업하고 나서
main 브랜치에 머지하고 나면 코드 구조가 달라지는 경우가 잦았다.
• 이로 인해 충돌이 자주 발생했고 작업하던 코드를 전부 다시 작성해야 했다.
• 이런 일이 반복되자 팀원들이 서로 지치게 되고 급기야 오해가 생겨 프로젝트에 위기가 찾아왔다.
Momenti Seminar
5 Years of RosettaStone
During 5 Years...
• 구조를 설계하면서 발생했던 갈등을 해결했던 일
• 그래서 위기를 헤쳐나가기 위해 오프라인으로 만났다.
6시간 동안 서로의 생각을 이야기하고 어떻게 설계할 지 논의했다.
• 합의에 도달한 후, 더이상 문제가 발생하지 않았고 작업 진행에도 속도가 붙었다.
• 팀원들과 자주 이야기해 생각을 공유하고 서로의 방향을 맞추기 위해 노력해야 된다는 걸 깨달았다.
Momenti Seminar
5 Years of RosettaStone
During 5 Years...
• DMCA Takedown 문제를 경험하고 해결했던 일
Momenti Seminar
5 Years of RosettaStone
During 5 Years...
• DMCA Takedown 문제를 경험하고 해결했던 일
• 구조를 설계할 때 하스스톤 시뮬레이터 구현체가 여럿 있었는데,
그 중 C# 구현체인 SabberStone의 구조를 참고해서 설계했었다.
• SabberStone의 라이선스는 AGPL이었고, RosettaStone의 라이선스는 MIT였다.
• MIT 라이선스의 프로젝트에 AGPL 라이선스의 코드를 복사하고 수정한 걸로 저작권 침해 신고를 한 것.
• 지인들에게 저작권 침해 여부를 문의했는데, 의견이 서로 달랐었다.
Momenti Seminar
5 Years of RosettaStone
During 5 Years...
• DMCA Takedown 문제를 경험하고 해결했던 일
• Takedown을 당했을 때 고려했었던 대처 방안
• 법원에 정식으로 재판 절차를 밟는다. → 시간이 매우 오래 걸리고 비용이 많이 들며, 피곤해지는 방안
• 저장소를 이대로 포기한다. → 그동안 들였던 시간과 노력이 아까운 방안
• 상호 합의를 통해 저작권 침해 신고를 취하한다. → 가장 합리적인 방안
Momenti Seminar
5 Years of RosettaStone
During 5 Years...
• DMCA Takedown 문제를 경험하고 해결했던 일
• 연구를 위해 진행하고 있는 프로젝트였고, AGPL로 변경한다고 해서 작업에 문제가 생길 부분도 없었다.
• 따라서 다음 사항에 합의하게 되었고 저작권 침해 신고는 취하되었다.
• 라이선스를 MIT에서 AGPL로 변경
• SabberStone의 설계를 참고한 코드에 라이선스 추가
• 3RD-PARTY와 README 파일에 라이선스 전문 추가
Momenti Seminar
5 Years of RosettaStone
During 5 Years...
• DMCA Takedown 문제를 경험하고 해결했던 일
• 오픈 소스의 라이선스, 나아가서 회사의 라이선스에 대해 생각하게 된 좋은 경험이었다.
Momenti Seminar
5 Years of RosettaStone
During 5 Years...
• 블리자드에서 코드를 검수받았던 일
• NDC 19에 “<하스스톤> 강화학습 환경 개발기”라는 주제로 발표를 신청했는데, 선정되었다.
• 얼마 뒤 운영사무국에서 블리자드 PR팀과 협의가 필요하다는 연락을 받았다.
이 이야기를 블리자드에 어떻게 말해야 될 지 고민하다가 본사에서 근무하시는 지인분께 연락을 드렸다.
• 다행이 지인분께서 담당자에게 잘 말씀드려서 발표와 관련된 이야기를 전달드릴 수 있었다.
Momenti Seminar
5 Years of RosettaStone
During 5 Years...
• 블리자드에서 코드를 검수받았던 일
• 약 3주 간의 시간이 지난 뒤 최종 연락을 받을 수 있었다.
• 이전까지는 블리자드의 검토 없이 개인적으로 진행했던 프로젝트였다면,
이제는 블리자드의 검토를 받고 라이선스와 관련된 문제가 없는 프로젝트로 탈바꿈하는 순간이었다.
• 이 일을 계기로 오픈 소스 프로젝트를 할 때 게임 시뮬레이터를 만드는 경우, 라이선스 문의부터 하고 있다.
Momenti Seminar
5 Years of RosettaStone
During 5 Years...
• 복잡한 시스템에서의 상호 작용으로 인해 발생했던 일
• 하스스톤에는 수많은 카드가 존재한다.
프로젝트에서는 카드를 구현할 때마다 동작에 이상이 없는지 테스트 코드를 같이 작업한다.
Momenti Seminar
5 Years of RosettaStone
During 5 Years...
• 복잡한 시스템에서의 상호 작용으로 인해 발생했던 일
• 하지만 여러 장의 카드를 특정 순서대로 사용했을 때 생기는 문제들은 확인하지 못했다.
• 다음과 같은 카드 두 장이 있다고 하자. 어떤 일이 발생할까?
Momenti Seminar
5 Years of RosettaStone
During 5 Years...
• 복잡한 시스템에서의 상호 작용으로 인해 발생했던 일
• 문제를 어떻게 해결할 수 있을까?
Momenti Seminar
5 Years of RosettaStone
During 5 Years...
• 복잡한 시스템에서의 상호 작용으로 인해 발생했던 일
• 모든 카드들을 특정 순서로 사용했을 때 발생할 수 있는 모든 문제를 단번에 파악하긴 어렵다.
하지만 발견할 때마다 방어 코드를 추가하고 관련해서 테스트 케이스도 추가하고 있다.
• 단위 테스트, 모듈 테스트, 통합 테스트 등이 필요한 이유에 대해서도 알게 되었다.
Momenti Seminar
5 Years of RosettaStone
During 5 Years...
• 오픈소스 컨트리뷰톤에 참가했던 일
• 멘토로 참가해달라는 권유가 있어서 신청하게 되었고 프로젝트에 선정되었다.
• 오픈 소스 프로젝트에 처음 기여하시는 분들이 많았기에 여러 준비를 했다.
• 빌드하기 위해 필요한 프로그램 안내
• 소스 코드를 다운로드 받고 빌드하는 방법을 문서로 정리
• 이슈를 작성하는 방법
• 프로젝트의 구조를 설명하는 문서 추가
• 프로젝트에 쉽게 기여할 수 있는 항목들을 정리해 이슈로 등록
• 카드의 동작을 구현하는 방법을 설명하는 문서 추가
Momenti Seminar
5 Years of RosettaStone
During 5 Years...
• 오픈소스 컨트리뷰톤에 참가했던 일
• 많은 분들이 멘티로 신청해주셨고, 나름대로 여러 기준을 두고 고민 끝에 16명을 선정하게 되었다.
• 컨트리뷰톤 기간 동안 멘티분들과 서로 대화를 나눌 디스코드 채널을 개설하고 개발과 관련된 질문/답변,
코드 리뷰 등 다양한 이야기를 주고 나눴다. 그리고 멘티분들의 컴퓨터에 개발 환경을 구축했다.
• 덕분에 빠르게 개발 작업에 착수할 수 있었고 컨트리뷰톤 기간 동안 14명의 멘티분들께서
72장의 카드를 구현해주셨고 여러 버그들을 해결해주셨다.
• 회사에서 새로운 팀원을 온보딩하기 위한 준비도 크게 다르지 않다고 생각한다.
빠르게 적응할 수 있도록 여러 정보들을 취합한 문서를 미리 준비하고, 자주 대화할 채널을 만들자.
Momenti Seminar
5 Years of RosettaStone
Next 5 Years...
• RosettaStone 2.0
• OOP 기반 코드를 ECS 기반 코드로 리팩토링
• GUI 프로그램 구현
• WebAssembly 지원
• 전장, 듀얼 등 다양한 게임 모드 지원
• Rust로 재구현
• …
Thank you!

More Related Content

What's hot

그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기
Yongha Kim
 
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
강 민우
 
RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装
Koji Morikawa
 
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임흥배 최
 
Doozy UI 使おうぜ! #unity_lt
Doozy UI 使おうぜ! #unity_ltDoozy UI 使おうぜ! #unity_lt
Doozy UI 使おうぜ! #unity_lt
torisoup
 
Cinemachineで見下ろし視点のカメラを作る
Cinemachineで見下ろし視点のカメラを作るCinemachineで見下ろし視点のカメラを作る
Cinemachineで見下ろし視点のカメラを作る
Unity Technologies Japan K.K.
 
위대한 게임개발팀의 공통점
위대한 게임개발팀의 공통점위대한 게임개발팀의 공통점
위대한 게임개발팀의 공통점
Ryan Park
 
[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인
[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인
[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인
강 민우
 
【Unity道場】使って覚えるTileMap
【Unity道場】使って覚えるTileMap【Unity道場】使って覚えるTileMap
【Unity道場】使って覚えるTileMap
Unity Technologies Japan K.K.
 
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017devCAT Studio, NEXON
 
[NDC2017] 뛰는 프로그래머 나는 언리얼 엔진 - 언알못에서 커미터까지
[NDC2017] 뛰는 프로그래머 나는 언리얼 엔진 - 언알못에서 커미터까지[NDC2017] 뛰는 프로그래머 나는 언리얼 엔진 - 언알못에서 커미터까지
[NDC2017] 뛰는 프로그래머 나는 언리얼 엔진 - 언알못에서 커미터까지
Minjung Ko
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012devCAT Studio, NEXON
 
UniRx完全に理解した
UniRx完全に理解したUniRx完全に理解した
UniRx完全に理解した
torisoup
 
마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건
강 민우
 
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
Unity Technologies Japan K.K.
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
devCAT Studio, NEXON
 
고대특강 게임 프로그래머의 소양
고대특강   게임 프로그래머의 소양고대특강   게임 프로그래머의 소양
고대특강 게임 프로그래머의 소양Jubok Kim
 
Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用
Takuya Ueda
 
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
Lee Dustin
 
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014devCAT Studio, NEXON
 

What's hot (20)

그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기
 
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
 
RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装
 
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
 
Doozy UI 使おうぜ! #unity_lt
Doozy UI 使おうぜ! #unity_ltDoozy UI 使おうぜ! #unity_lt
Doozy UI 使おうぜ! #unity_lt
 
Cinemachineで見下ろし視点のカメラを作る
Cinemachineで見下ろし視点のカメラを作るCinemachineで見下ろし視点のカメラを作る
Cinemachineで見下ろし視点のカメラを作る
 
위대한 게임개발팀의 공통점
위대한 게임개발팀의 공통점위대한 게임개발팀의 공통점
위대한 게임개발팀의 공통점
 
[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인
[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인
[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인
 
【Unity道場】使って覚えるTileMap
【Unity道場】使って覚えるTileMap【Unity道場】使って覚えるTileMap
【Unity道場】使って覚えるTileMap
 
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
 
[NDC2017] 뛰는 프로그래머 나는 언리얼 엔진 - 언알못에서 커미터까지
[NDC2017] 뛰는 프로그래머 나는 언리얼 엔진 - 언알못에서 커미터까지[NDC2017] 뛰는 프로그래머 나는 언리얼 엔진 - 언알못에서 커미터까지
[NDC2017] 뛰는 프로그래머 나는 언리얼 엔진 - 언알못에서 커미터까지
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
 
UniRx完全に理解した
UniRx完全に理解したUniRx完全に理解した
UniRx完全に理解した
 
마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건
 
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
 
고대특강 게임 프로그래머의 소양
고대특강   게임 프로그래머의 소양고대특강   게임 프로그래머의 소양
고대특강 게임 프로그래머의 소양
 
Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用
 
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
 
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014
 

Similar to Momenti Seminar - 5 Years of RosettaStone

오픈소스 소프트웨어 개발, 어디서부터 시작하는게 좋을까요? @ CNU(충남대)
오픈소스 소프트웨어 개발, 어디서부터 시작하는게 좋을까요? @ CNU(충남대)오픈소스 소프트웨어 개발, 어디서부터 시작하는게 좋을까요? @ CNU(충남대)
오픈소스 소프트웨어 개발, 어디서부터 시작하는게 좋을까요? @ CNU(충남대)
Jaewon Choi
 
커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님
NAVER D2
 
[델리만주] 대학원 캐슬 - 석사에서 게임 프로그래머까지
[델리만주] 대학원 캐슬 - 석사에서 게임 프로그래머까지[델리만주] 대학원 캐슬 - 석사에서 게임 프로그래머까지
[델리만주] 대학원 캐슬 - 석사에서 게임 프로그래머까지
Chris Ohk
 
My Way, Your Way
My Way, Your WayMy Way, Your Way
My Way, Your Way
Chris Ohk
 
The four myths of open source (2013)
The four myths of open source (2013)The four myths of open source (2013)
The four myths of open source (2013)Channy Yun
 
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
지원 정
 
패스트캠퍼스 프론트엔드 강의 오리엔테이션
패스트캠퍼스 프론트엔드 강의 오리엔테이션패스트캠퍼스 프론트엔드 강의 오리엔테이션
패스트캠퍼스 프론트엔드 강의 오리엔테이션
Taegon Kim
 
애자일 스크럼과 JIRA
애자일 스크럼과 JIRA 애자일 스크럼과 JIRA
애자일 스크럼과 JIRA
Terry Cho
 
2013 공개SW데이 발표 - 구름IDE의 발자취와 미래
2013 공개SW데이 발표 - 구름IDE의 발자취와 미래2013 공개SW데이 발표 - 구름IDE의 발자취와 미래
2013 공개SW데이 발표 - 구름IDE의 발자취와 미래Sung-tae Ryu
 
Software engineer가 되기 위한 여정
Software engineer가 되기 위한 여정Software engineer가 되기 위한 여정
Software engineer가 되기 위한 여정
Aree Oh
 
Be Creators
Be CreatorsBe Creators
Be Creators
우현 김
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
devCAT Studio, NEXON
 
학교에선 알려주지 않는 오픈소스이야기 - 박치완님
학교에선 알려주지 않는 오픈소스이야기 - 박치완님학교에선 알려주지 않는 오픈소스이야기 - 박치완님
학교에선 알려주지 않는 오픈소스이야기 - 박치완님
NAVER D2
 
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
NAVER D2
 
Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기
nexusz99
 
스마트워크3 오마이스쿨
스마트워크3 오마이스쿨스마트워크3 오마이스쿨
스마트워크3 오마이스쿨Kim jeehyun
 
오픈소스 프로젝트 따라잡기_공개
오픈소스 프로젝트 따라잡기_공개오픈소스 프로젝트 따라잡기_공개
오픈소스 프로젝트 따라잡기_공개
Hyoungjun Kim
 
청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기
Chris Ohk
 
신입 개발자 생활백서 [개정판]
신입 개발자 생활백서 [개정판]신입 개발자 생활백서 [개정판]
신입 개발자 생활백서 [개정판]
Yurim Jin
 
어쩌다로봇
어쩌다로봇어쩌다로봇
어쩌다로봇
민건 주
 

Similar to Momenti Seminar - 5 Years of RosettaStone (20)

오픈소스 소프트웨어 개발, 어디서부터 시작하는게 좋을까요? @ CNU(충남대)
오픈소스 소프트웨어 개발, 어디서부터 시작하는게 좋을까요? @ CNU(충남대)오픈소스 소프트웨어 개발, 어디서부터 시작하는게 좋을까요? @ CNU(충남대)
오픈소스 소프트웨어 개발, 어디서부터 시작하는게 좋을까요? @ CNU(충남대)
 
커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님
 
[델리만주] 대학원 캐슬 - 석사에서 게임 프로그래머까지
[델리만주] 대학원 캐슬 - 석사에서 게임 프로그래머까지[델리만주] 대학원 캐슬 - 석사에서 게임 프로그래머까지
[델리만주] 대학원 캐슬 - 석사에서 게임 프로그래머까지
 
My Way, Your Way
My Way, Your WayMy Way, Your Way
My Way, Your Way
 
The four myths of open source (2013)
The four myths of open source (2013)The four myths of open source (2013)
The four myths of open source (2013)
 
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
 
패스트캠퍼스 프론트엔드 강의 오리엔테이션
패스트캠퍼스 프론트엔드 강의 오리엔테이션패스트캠퍼스 프론트엔드 강의 오리엔테이션
패스트캠퍼스 프론트엔드 강의 오리엔테이션
 
애자일 스크럼과 JIRA
애자일 스크럼과 JIRA 애자일 스크럼과 JIRA
애자일 스크럼과 JIRA
 
2013 공개SW데이 발표 - 구름IDE의 발자취와 미래
2013 공개SW데이 발표 - 구름IDE의 발자취와 미래2013 공개SW데이 발표 - 구름IDE의 발자취와 미래
2013 공개SW데이 발표 - 구름IDE의 발자취와 미래
 
Software engineer가 되기 위한 여정
Software engineer가 되기 위한 여정Software engineer가 되기 위한 여정
Software engineer가 되기 위한 여정
 
Be Creators
Be CreatorsBe Creators
Be Creators
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
 
학교에선 알려주지 않는 오픈소스이야기 - 박치완님
학교에선 알려주지 않는 오픈소스이야기 - 박치완님학교에선 알려주지 않는 오픈소스이야기 - 박치완님
학교에선 알려주지 않는 오픈소스이야기 - 박치완님
 
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
 
Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기
 
스마트워크3 오마이스쿨
스마트워크3 오마이스쿨스마트워크3 오마이스쿨
스마트워크3 오마이스쿨
 
오픈소스 프로젝트 따라잡기_공개
오픈소스 프로젝트 따라잡기_공개오픈소스 프로젝트 따라잡기_공개
오픈소스 프로젝트 따라잡기_공개
 
청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기
 
신입 개발자 생활백서 [개정판]
신입 개발자 생활백서 [개정판]신입 개발자 생활백서 [개정판]
신입 개발자 생활백서 [개정판]
 
어쩌다로봇
어쩌다로봇어쩌다로봇
어쩌다로봇
 

More from Chris Ohk

선린인터넷고등학교 2021 알고리즘 컨퍼런스 - Rust로 알고리즘 문제 풀어보기
선린인터넷고등학교 2021 알고리즘 컨퍼런스 - Rust로 알고리즘 문제 풀어보기선린인터넷고등학교 2021 알고리즘 컨퍼런스 - Rust로 알고리즘 문제 풀어보기
선린인터넷고등학교 2021 알고리즘 컨퍼런스 - Rust로 알고리즘 문제 풀어보기
Chris Ohk
 
Momenti Seminar - A Tour of Rust, Part 2
Momenti Seminar - A Tour of Rust, Part 2Momenti Seminar - A Tour of Rust, Part 2
Momenti Seminar - A Tour of Rust, Part 2
Chris Ohk
 
Momenti Seminar - A Tour of Rust, Part 1
Momenti Seminar - A Tour of Rust, Part 1Momenti Seminar - A Tour of Rust, Part 1
Momenti Seminar - A Tour of Rust, Part 1
Chris Ohk
 
Evolving Reinforcement Learning Algorithms, JD. Co-Reyes et al, 2021
Evolving Reinforcement Learning Algorithms, JD. Co-Reyes et al, 2021Evolving Reinforcement Learning Algorithms, JD. Co-Reyes et al, 2021
Evolving Reinforcement Learning Algorithms, JD. Co-Reyes et al, 2021
Chris Ohk
 
Adversarially Guided Actor-Critic, Y. Flet-Berliac et al, 2021
Adversarially Guided Actor-Critic, Y. Flet-Berliac et al, 2021Adversarially Guided Actor-Critic, Y. Flet-Berliac et al, 2021
Adversarially Guided Actor-Critic, Y. Flet-Berliac et al, 2021
Chris Ohk
 
Agent57: Outperforming the Atari Human Benchmark, Badia, A. P. et al, 2020
Agent57: Outperforming the Atari Human Benchmark, Badia, A. P. et al, 2020Agent57: Outperforming the Atari Human Benchmark, Badia, A. P. et al, 2020
Agent57: Outperforming the Atari Human Benchmark, Badia, A. P. et al, 2020
Chris Ohk
 
Proximal Policy Optimization Algorithms, Schulman et al, 2017
Proximal Policy Optimization Algorithms, Schulman et al, 2017Proximal Policy Optimization Algorithms, Schulman et al, 2017
Proximal Policy Optimization Algorithms, Schulman et al, 2017
Chris Ohk
 
Trust Region Policy Optimization, Schulman et al, 2015
Trust Region Policy Optimization, Schulman et al, 2015Trust Region Policy Optimization, Schulman et al, 2015
Trust Region Policy Optimization, Schulman et al, 2015
Chris Ohk
 
Continuous Control with Deep Reinforcement Learning, lillicrap et al, 2015
Continuous Control with Deep Reinforcement Learning, lillicrap et al, 2015Continuous Control with Deep Reinforcement Learning, lillicrap et al, 2015
Continuous Control with Deep Reinforcement Learning, lillicrap et al, 2015
Chris Ohk
 
GDG Gwangju DevFest 2019 - <하스스톤> 강화학습 환경 개발기
GDG Gwangju DevFest 2019 - <하스스톤> 강화학습 환경 개발기GDG Gwangju DevFest 2019 - <하스스톤> 강화학습 환경 개발기
GDG Gwangju DevFest 2019 - <하스스톤> 강화학습 환경 개발기
Chris Ohk
 
[RLKorea] <하스스톤> 강화학습 환경 개발기
[RLKorea] <하스스톤> 강화학습 환경 개발기[RLKorea] <하스스톤> 강화학습 환경 개발기
[RLKorea] <하스스톤> 강화학습 환경 개발기
Chris Ohk
 
[NDC 2019] 하스스톤 강화학습 환경 개발기
[NDC 2019] 하스스톤 강화학습 환경 개발기[NDC 2019] 하스스톤 강화학습 환경 개발기
[NDC 2019] 하스스톤 강화학습 환경 개발기
Chris Ohk
 
C++20 Key Features Summary
C++20 Key Features SummaryC++20 Key Features Summary
C++20 Key Features Summary
Chris Ohk
 
디미고 특강 - 개발을 시작하려는 여러분에게
디미고 특강 - 개발을 시작하려는 여러분에게디미고 특강 - 개발을 시작하려는 여러분에게
디미고 특강 - 개발을 시작하려는 여러분에게
Chris Ohk
 
[NDC 2018] 유체역학 엔진 개발기
[NDC 2018] 유체역학 엔진 개발기[NDC 2018] 유체역학 엔진 개발기
[NDC 2018] 유체역학 엔진 개발기
Chris Ohk
 
Re:Zero부터 시작하지 않는 오픈소스 개발
Re:Zero부터 시작하지 않는 오픈소스 개발Re:Zero부터 시작하지 않는 오픈소스 개발
Re:Zero부터 시작하지 않는 오픈소스 개발
Chris Ohk
 
[9XD] Introduction to Computer Graphics
[9XD] Introduction to Computer Graphics[9XD] Introduction to Computer Graphics
[9XD] Introduction to Computer Graphics
Chris Ohk
 
C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2
Chris Ohk
 
[제1회 시나브로 그룹 오프라인 밋업] 개발자의 자존감
[제1회 시나브로 그룹 오프라인 밋업] 개발자의 자존감[제1회 시나브로 그룹 오프라인 밋업] 개발자의 자존감
[제1회 시나브로 그룹 오프라인 밋업] 개발자의 자존감
Chris Ohk
 
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
Chris Ohk
 

More from Chris Ohk (20)

선린인터넷고등학교 2021 알고리즘 컨퍼런스 - Rust로 알고리즘 문제 풀어보기
선린인터넷고등학교 2021 알고리즘 컨퍼런스 - Rust로 알고리즘 문제 풀어보기선린인터넷고등학교 2021 알고리즘 컨퍼런스 - Rust로 알고리즘 문제 풀어보기
선린인터넷고등학교 2021 알고리즘 컨퍼런스 - Rust로 알고리즘 문제 풀어보기
 
Momenti Seminar - A Tour of Rust, Part 2
Momenti Seminar - A Tour of Rust, Part 2Momenti Seminar - A Tour of Rust, Part 2
Momenti Seminar - A Tour of Rust, Part 2
 
Momenti Seminar - A Tour of Rust, Part 1
Momenti Seminar - A Tour of Rust, Part 1Momenti Seminar - A Tour of Rust, Part 1
Momenti Seminar - A Tour of Rust, Part 1
 
Evolving Reinforcement Learning Algorithms, JD. Co-Reyes et al, 2021
Evolving Reinforcement Learning Algorithms, JD. Co-Reyes et al, 2021Evolving Reinforcement Learning Algorithms, JD. Co-Reyes et al, 2021
Evolving Reinforcement Learning Algorithms, JD. Co-Reyes et al, 2021
 
Adversarially Guided Actor-Critic, Y. Flet-Berliac et al, 2021
Adversarially Guided Actor-Critic, Y. Flet-Berliac et al, 2021Adversarially Guided Actor-Critic, Y. Flet-Berliac et al, 2021
Adversarially Guided Actor-Critic, Y. Flet-Berliac et al, 2021
 
Agent57: Outperforming the Atari Human Benchmark, Badia, A. P. et al, 2020
Agent57: Outperforming the Atari Human Benchmark, Badia, A. P. et al, 2020Agent57: Outperforming the Atari Human Benchmark, Badia, A. P. et al, 2020
Agent57: Outperforming the Atari Human Benchmark, Badia, A. P. et al, 2020
 
Proximal Policy Optimization Algorithms, Schulman et al, 2017
Proximal Policy Optimization Algorithms, Schulman et al, 2017Proximal Policy Optimization Algorithms, Schulman et al, 2017
Proximal Policy Optimization Algorithms, Schulman et al, 2017
 
Trust Region Policy Optimization, Schulman et al, 2015
Trust Region Policy Optimization, Schulman et al, 2015Trust Region Policy Optimization, Schulman et al, 2015
Trust Region Policy Optimization, Schulman et al, 2015
 
Continuous Control with Deep Reinforcement Learning, lillicrap et al, 2015
Continuous Control with Deep Reinforcement Learning, lillicrap et al, 2015Continuous Control with Deep Reinforcement Learning, lillicrap et al, 2015
Continuous Control with Deep Reinforcement Learning, lillicrap et al, 2015
 
GDG Gwangju DevFest 2019 - <하스스톤> 강화학습 환경 개발기
GDG Gwangju DevFest 2019 - <하스스톤> 강화학습 환경 개발기GDG Gwangju DevFest 2019 - <하스스톤> 강화학습 환경 개발기
GDG Gwangju DevFest 2019 - <하스스톤> 강화학습 환경 개발기
 
[RLKorea] <하스스톤> 강화학습 환경 개발기
[RLKorea] <하스스톤> 강화학습 환경 개발기[RLKorea] <하스스톤> 강화학습 환경 개발기
[RLKorea] <하스스톤> 강화학습 환경 개발기
 
[NDC 2019] 하스스톤 강화학습 환경 개발기
[NDC 2019] 하스스톤 강화학습 환경 개발기[NDC 2019] 하스스톤 강화학습 환경 개발기
[NDC 2019] 하스스톤 강화학습 환경 개발기
 
C++20 Key Features Summary
C++20 Key Features SummaryC++20 Key Features Summary
C++20 Key Features Summary
 
디미고 특강 - 개발을 시작하려는 여러분에게
디미고 특강 - 개발을 시작하려는 여러분에게디미고 특강 - 개발을 시작하려는 여러분에게
디미고 특강 - 개발을 시작하려는 여러분에게
 
[NDC 2018] 유체역학 엔진 개발기
[NDC 2018] 유체역학 엔진 개발기[NDC 2018] 유체역학 엔진 개발기
[NDC 2018] 유체역학 엔진 개발기
 
Re:Zero부터 시작하지 않는 오픈소스 개발
Re:Zero부터 시작하지 않는 오픈소스 개발Re:Zero부터 시작하지 않는 오픈소스 개발
Re:Zero부터 시작하지 않는 오픈소스 개발
 
[9XD] Introduction to Computer Graphics
[9XD] Introduction to Computer Graphics[9XD] Introduction to Computer Graphics
[9XD] Introduction to Computer Graphics
 
C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2
 
[제1회 시나브로 그룹 오프라인 밋업] 개발자의 자존감
[제1회 시나브로 그룹 오프라인 밋업] 개발자의 자존감[제1회 시나브로 그룹 오프라인 밋업] 개발자의 자존감
[제1회 시나브로 그룹 오프라인 밋업] 개발자의 자존감
 
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
 

Momenti Seminar - 5 Years of RosettaStone

  • 1. Momenti Seminar 5 Years of RosettaStone Chris Ohk utilForever@gmail.com
  • 2. Momenti Seminar 5 Years of RosettaStone Hearthstone • 블리자드 엔터테인먼트가 개발한 디지털 카드 수집 게임 • 2013년 3월 페니 아케이드 엑스포에서 처음 발표 • 2014년 3월 13일 PC 버전부터 출시 • 현재까지 11개의 확장팩과 4개의 모험 모드가 추가됨 • 2018년 11월 발표 기준 전세계 이용자수 1억명 돌파
  • 3. Momenti Seminar 5 Years of RosettaStone Hearthstone
  • 4. Momenti Seminar 5 Years of RosettaStone RosettaStone • Hearthstone simulator using C++ with some reinforcement learning (https://github.com/utilForever/RosettaStone) • 하스스톤 강화학습을 하기 위한 시뮬레이터 구현 프로젝트 (나아가서 실제로 강화학습을 적용해보기 위한 코드도 작성) • 라이선스 : AGPLv3 • 작성 언어 : C++17, Python
  • 5. Momenti Seminar 5 Years of RosettaStone Why? • 이게 다 알파고 때문이다. (강화학습에 불타오르기 시작한 시기)
  • 6. Momenti Seminar 5 Years of RosettaStone RosettaStone
  • 7. Momenti Seminar 5 Years of RosettaStone RosettaStone
  • 8. Momenti Seminar 5 Years of RosettaStone RosettaStone • Architecture Core Logic (C++) C++ API pybind11 Python API (Working...) OpenAI Gym (To-do) TensorFlow PyTorch Rust API (To-do) MCTS (Reworking...)
  • 9. Momenti Seminar 5 Years of RosettaStone During 5 Years... • 구조를 설계하면서 발생했던 갈등을 해결했던 일 • DMCA Takedown 문제를 경험하고 해결했던 일 • 블리자드에서 코드를 검수받았던 일 • 복잡한 시스템에서의 상호 작용으로 인해 발생했던 일 • 오픈소스 컨트리뷰톤에 참가했던 일
  • 10. Momenti Seminar 5 Years of RosettaStone During 5 Years... • 구조를 설계하면서 발생했던 갈등을 해결했던 일 • 처음 개발할 때 대학생 1명과 협업을 했었다. 카드 게임을 구현하기 위해 구조를 설계하는 작업을 나눠서 맡았다. • 프로젝트를 더 좋게 만들고 싶은 마음은 팀원들 모두 똑같다. 문제는 ‘어떻게 좋게 만들 것인가’에 대해 갖고 있는 생각이 다르다는 거다.
  • 11. Momenti Seminar 5 Years of RosettaStone During 5 Years... • 구조를 설계하면서 발생했던 갈등을 해결했던 일 • 서로 생각하는게 다르다 보니 어떤 팀원이 다른 브랜치에서 작업하고 나서 main 브랜치에 머지하고 나면 코드 구조가 달라지는 경우가 잦았다. • 이로 인해 충돌이 자주 발생했고 작업하던 코드를 전부 다시 작성해야 했다. • 이런 일이 반복되자 팀원들이 서로 지치게 되고 급기야 오해가 생겨 프로젝트에 위기가 찾아왔다.
  • 12. Momenti Seminar 5 Years of RosettaStone During 5 Years... • 구조를 설계하면서 발생했던 갈등을 해결했던 일 • 그래서 위기를 헤쳐나가기 위해 오프라인으로 만났다. 6시간 동안 서로의 생각을 이야기하고 어떻게 설계할 지 논의했다. • 합의에 도달한 후, 더이상 문제가 발생하지 않았고 작업 진행에도 속도가 붙었다. • 팀원들과 자주 이야기해 생각을 공유하고 서로의 방향을 맞추기 위해 노력해야 된다는 걸 깨달았다.
  • 13. Momenti Seminar 5 Years of RosettaStone During 5 Years... • DMCA Takedown 문제를 경험하고 해결했던 일
  • 14. Momenti Seminar 5 Years of RosettaStone During 5 Years... • DMCA Takedown 문제를 경험하고 해결했던 일 • 구조를 설계할 때 하스스톤 시뮬레이터 구현체가 여럿 있었는데, 그 중 C# 구현체인 SabberStone의 구조를 참고해서 설계했었다. • SabberStone의 라이선스는 AGPL이었고, RosettaStone의 라이선스는 MIT였다. • MIT 라이선스의 프로젝트에 AGPL 라이선스의 코드를 복사하고 수정한 걸로 저작권 침해 신고를 한 것. • 지인들에게 저작권 침해 여부를 문의했는데, 의견이 서로 달랐었다.
  • 15. Momenti Seminar 5 Years of RosettaStone During 5 Years... • DMCA Takedown 문제를 경험하고 해결했던 일 • Takedown을 당했을 때 고려했었던 대처 방안 • 법원에 정식으로 재판 절차를 밟는다. → 시간이 매우 오래 걸리고 비용이 많이 들며, 피곤해지는 방안 • 저장소를 이대로 포기한다. → 그동안 들였던 시간과 노력이 아까운 방안 • 상호 합의를 통해 저작권 침해 신고를 취하한다. → 가장 합리적인 방안
  • 16. Momenti Seminar 5 Years of RosettaStone During 5 Years... • DMCA Takedown 문제를 경험하고 해결했던 일 • 연구를 위해 진행하고 있는 프로젝트였고, AGPL로 변경한다고 해서 작업에 문제가 생길 부분도 없었다. • 따라서 다음 사항에 합의하게 되었고 저작권 침해 신고는 취하되었다. • 라이선스를 MIT에서 AGPL로 변경 • SabberStone의 설계를 참고한 코드에 라이선스 추가 • 3RD-PARTY와 README 파일에 라이선스 전문 추가
  • 17. Momenti Seminar 5 Years of RosettaStone During 5 Years... • DMCA Takedown 문제를 경험하고 해결했던 일 • 오픈 소스의 라이선스, 나아가서 회사의 라이선스에 대해 생각하게 된 좋은 경험이었다.
  • 18. Momenti Seminar 5 Years of RosettaStone During 5 Years... • 블리자드에서 코드를 검수받았던 일 • NDC 19에 “<하스스톤> 강화학습 환경 개발기”라는 주제로 발표를 신청했는데, 선정되었다. • 얼마 뒤 운영사무국에서 블리자드 PR팀과 협의가 필요하다는 연락을 받았다. 이 이야기를 블리자드에 어떻게 말해야 될 지 고민하다가 본사에서 근무하시는 지인분께 연락을 드렸다. • 다행이 지인분께서 담당자에게 잘 말씀드려서 발표와 관련된 이야기를 전달드릴 수 있었다.
  • 19. Momenti Seminar 5 Years of RosettaStone During 5 Years... • 블리자드에서 코드를 검수받았던 일 • 약 3주 간의 시간이 지난 뒤 최종 연락을 받을 수 있었다. • 이전까지는 블리자드의 검토 없이 개인적으로 진행했던 프로젝트였다면, 이제는 블리자드의 검토를 받고 라이선스와 관련된 문제가 없는 프로젝트로 탈바꿈하는 순간이었다. • 이 일을 계기로 오픈 소스 프로젝트를 할 때 게임 시뮬레이터를 만드는 경우, 라이선스 문의부터 하고 있다.
  • 20. Momenti Seminar 5 Years of RosettaStone During 5 Years... • 복잡한 시스템에서의 상호 작용으로 인해 발생했던 일 • 하스스톤에는 수많은 카드가 존재한다. 프로젝트에서는 카드를 구현할 때마다 동작에 이상이 없는지 테스트 코드를 같이 작업한다.
  • 21. Momenti Seminar 5 Years of RosettaStone During 5 Years... • 복잡한 시스템에서의 상호 작용으로 인해 발생했던 일 • 하지만 여러 장의 카드를 특정 순서대로 사용했을 때 생기는 문제들은 확인하지 못했다. • 다음과 같은 카드 두 장이 있다고 하자. 어떤 일이 발생할까?
  • 22. Momenti Seminar 5 Years of RosettaStone During 5 Years... • 복잡한 시스템에서의 상호 작용으로 인해 발생했던 일 • 문제를 어떻게 해결할 수 있을까?
  • 23. Momenti Seminar 5 Years of RosettaStone During 5 Years... • 복잡한 시스템에서의 상호 작용으로 인해 발생했던 일 • 모든 카드들을 특정 순서로 사용했을 때 발생할 수 있는 모든 문제를 단번에 파악하긴 어렵다. 하지만 발견할 때마다 방어 코드를 추가하고 관련해서 테스트 케이스도 추가하고 있다. • 단위 테스트, 모듈 테스트, 통합 테스트 등이 필요한 이유에 대해서도 알게 되었다.
  • 24. Momenti Seminar 5 Years of RosettaStone During 5 Years... • 오픈소스 컨트리뷰톤에 참가했던 일 • 멘토로 참가해달라는 권유가 있어서 신청하게 되었고 프로젝트에 선정되었다. • 오픈 소스 프로젝트에 처음 기여하시는 분들이 많았기에 여러 준비를 했다. • 빌드하기 위해 필요한 프로그램 안내 • 소스 코드를 다운로드 받고 빌드하는 방법을 문서로 정리 • 이슈를 작성하는 방법 • 프로젝트의 구조를 설명하는 문서 추가 • 프로젝트에 쉽게 기여할 수 있는 항목들을 정리해 이슈로 등록 • 카드의 동작을 구현하는 방법을 설명하는 문서 추가
  • 25. Momenti Seminar 5 Years of RosettaStone During 5 Years... • 오픈소스 컨트리뷰톤에 참가했던 일 • 많은 분들이 멘티로 신청해주셨고, 나름대로 여러 기준을 두고 고민 끝에 16명을 선정하게 되었다. • 컨트리뷰톤 기간 동안 멘티분들과 서로 대화를 나눌 디스코드 채널을 개설하고 개발과 관련된 질문/답변, 코드 리뷰 등 다양한 이야기를 주고 나눴다. 그리고 멘티분들의 컴퓨터에 개발 환경을 구축했다. • 덕분에 빠르게 개발 작업에 착수할 수 있었고 컨트리뷰톤 기간 동안 14명의 멘티분들께서 72장의 카드를 구현해주셨고 여러 버그들을 해결해주셨다. • 회사에서 새로운 팀원을 온보딩하기 위한 준비도 크게 다르지 않다고 생각한다. 빠르게 적응할 수 있도록 여러 정보들을 취합한 문서를 미리 준비하고, 자주 대화할 채널을 만들자.
  • 26. Momenti Seminar 5 Years of RosettaStone Next 5 Years... • RosettaStone 2.0 • OOP 기반 코드를 ECS 기반 코드로 리팩토링 • GUI 프로그램 구현 • WebAssembly 지원 • 전장, 듀얼 등 다양한 게임 모드 지원 • Rust로 재구현 • …