이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017

devCAT Studio, NEXON
devCAT Studio, NEXONdevCAT Studio, NEXON
내가 만든 언어의 개발환경을
Visual Studio Code로 빠르고 쉽게 구축하기
이승재 & 강성훈
넥슨코리아 데브캣스튜디오
Part A 발표자: 이승재
카바티나 스토리
데스크탑 히어로즈
마비노기 2
마비노기 듀얼
실버바인 서버엔진 2
@0xcafea1fa
직전 시간 발표에 이어지는 내용입니다
도메인 언어
“어떤 애플리케이션 프로그램을 제어하거나
환경설정하기 위한 단순한 언어든,
규칙이나 절차를 명시하기 위한 더 복잡한 언어든,
우리는 여러분의 프로젝트를 문제 도메인에 가까운 곳으로
옮길 방법들을 궁리해봐야 한다고 생각한다.
더 높은 추상화 수준에서 작업함으로써
사소한 구현의 세부사항들을 무시하고
도메인의 문제들을 푸는 일에만 정신을 집중할 수 있다.”
- 실용주의 프로그래머 12절 <도메인 언어>
텍스트 기반 도메인 언어
비주얼 스크립팅과 비교해서,
• 작동하는 첫 버전을 빠르게 만들 수 있다.
• 변경을 추적하기 쉽다.
• 대규모 리팩토링을 하기 쉽다.
• 검색이 가능하다.
[시작]
전투중이면 -> 가만서있는다=0.5, [전투중]
!다돌아왔으면 -> 제자리로돌아간다, [돌아가기]
무조건 -> 배회한다=$배회주기
[전투중]
!전투중이면 -> 제자리로돌아간다, [돌아가기]
스킬사용해본다( $스킬_평타 ) -> 시전성공
무조건 -> 가만서있는다=0.1
[돌아가기]
전투중이면 -> 가만서있는다=0.5, [전투중]
다돌아왔으면 -> 가만서있는다=0.5, [시작]
무조건 -> 제자리로돌아간다
FSM카 바 티 나 스 토 리
A I 스 크 립 트
조건식 행동 상태 트랜지션
몬스터 종류마다 달라지는 상수값
상수값을 참고하는 조건식
HFSM
상태 트랜지션
실행 중 일시 정지
변수
초기화
마 비 노 기 2
A I 스 크 립 트
NDC13 - M2 AI코드 개발 생산성 향상 사례 http://lee-seungjae.github.io/CodeHotloadingAndInHouseScriptLanguage.html
Lua데 스 크 탑 히 어 로 즈
던 전 스 크 립 트
복잡한 기능을 가진 부품
일정 시간 지연
트리거 설치
한글 식별자
모두 끝날 때까지 기다림
NDC11 - 온라인 게임 처음부터 끝까지 동적언어로 만들기 http://lee-seungjae.github.io/BuildingOnlineGameEntirelyWithDynamicLanguage.html
어떻게 만드나?
• 구문 분석 = 텍스트의 구조를 파악하기
• 실행 = 동작하게 하기
어떻게 만드나? – 구문 분석
• 라인 중심 형식의 언어로 만든다
• 되부름 하향 구문 분석기(recursive descent parser)를 작성한다
• 파서 생성기를 사용한다
어떻게 만드나? – 실행
• 구문 분석 결과를 트리로 구성해놓고 평가
• 다른 언어로 트랜스파일(번역)
• 바이트코드로 컴파일한 다음 실행
• JIT
※ 바인딩(호스트언어와상호작용)을 어떻게 만들지 고려할 것
구문 분석, 실행
• 선택지가 많다
• 참고자료도 많다
• 학부 때 컴파일러 수업 들었다
일단 이거면 동작하는 초기 구현을 만들 수 있다
Lua같은 언어의 틀 안에서 만들어도 됨
시간이 흐르고…
도메인 언어는 상상 이상으로 강력하다
• 도메인 언어를 사용해서 만든 프로그램이 설계자의 상상을 뛰어넘는 크기로 자라난다
• 기능도 계속 덧붙이게 된다
개발환경에 대한 불만이 쌓인다
• 디버깅이 안되잖아
• 자동완성 됐으면 좋겠는데
• 정의로 바로 가기 안됨?
• 리네임은?
개발환경을 만드는 비용을 예측하기 어렵다
• 텍스트 에디터를 바닥부터 만들 수는 없잖아;;;
• 비용을 예측하기 어려운 설계는 채택하기 꺼려진다
열악한 레거시 개발환경에 그냥 적응해서 살고 있지는 않나?
도메인 언어를 사용하면 좋을 상황을 놓치고 있지는 않나?
Visual Studio Code
• 가볍다, 공짜다
• Visual Studio에 익숙하면 빠르게 적응할 수 있다
• 언어별 확장 만들기가 대단히 쉽다!
이야기할 내용
• 최근에 루아 디버거와 카일루아 언어 지원을 붙여본 경험을 공유합니다
– 비용이 대략 어느 정도인지
– 어떤 걸 주의해서 시행착오를 줄일 수 있을지
디버거 확장 개발하기
Part A
The VS Code Debug Protocol (CDP)
• 디버그 어댑터를 만들어야 한다
– 디버거와 VS Code 사이를 중개한다.
– VS Code에 의해 실행되는 콘솔 프로그램.
– 별도 프로세스로 동작하기 때문에 아무 언어로나 만들어도 된다.
– VS Code와는 stdin/stdout으로 통신함.
The VS Code Debug Protocol (CDP)
https://code.visualstudio.com/docs/extensionAPI/api-debugging
The VS Code Debug Protocol (CDP)
• 요청/응답 메시지 (16)
– Initialize,launch,attach,disconnect,configurationDone
– pause,next,continue,stepIn,stepOut
– stackTrace,scopes,variables,threads
– setBreakpoints
– evaluate
• 이벤트 메시지 (2)
– output
– stopped
잠깐, 디버거를 어떻게 만들지?
• 다른 프로세스의 실행을 제어하고 내부를 들여다볼 수 있어야 한다.
– Windows 디버깅 API는 기계어를 위한 것이다.
– Non-JIT 가상머신을 디버깅하기에는너무 저수준이다.
• 발상의 전환
– 프로세스가 자신을 디버깅할 수 있는 인터페이스를 제공하면 된다.
– TCP 소켓이 가장 만만하다.
즉, 이렇게 만들면 된다
• 디버그 어댑터
– VS Code와 CDP로 통신한다.
– 디버그 대상과 TCP로 통신한다.
– 디버그 대상을 실행하기도 한다.
• 디버그 대상
– TCP를 통해 디버깅 명령을 받는다.
Lua Debugger by devCAT
• 데모
• VS Code 확장 검색창에 devcat을 입력하세요!
디버거 만들기: Lua의 경우
• debug 라이브러리가 있다.
– 이것 자체로 디버거는 아니지만,
– 디버거를 만드는데 충분한 기본 요소들을 제공한다.
디버거 만들기: Lua의 경우
• luasocket을 통해 디버깅 요청을 받고 처리해주는 라이브러리를 Lua만으로 짤 수 있다.
– MobDebug/Zerobrane이먼저 구현함.
– luasocket만 있으면 어떤 환경에도 붙일 수 있다.
Lua Debugger by devCAT
• vscode-debuggee.lua를 require하고 start() 불러주면 디버그 어댑터에 연결된다.
VS Code DebugAdapter.exe Lua
vscode-debuggee.lua
실행
CDP
실행
자체 프로토콜
Lua Debugger by devCAT
• enterDebugLoop()
– continue 명령이 오기 전까지는 계속 디버그 명령어를 처리한다.
– 에러를 만났을 때 이것을 부르면 됨.
• poll()
– 쌓인 디버그 명령어가 있으면 처리하고, 없으면 즉시 리턴한다.
– 로직 코드에서 때때로 불러줘야 함.
– 실행 중에 브레이크포인트 설정하는 데 필요.
얼마나 걸렸나?
• 총 5주
– 루아 VM 패치해서 속도 저하 없는 브레이크포인트 구현하는 데 약 1주
• devcat-studio/lua-5.1.5-op_halt
– Visual Studio Code로 디버깅되게 하는 데 약 3주
– Gideros Player 원격제어에 약 1주
팁 1: 프로토콜 문서를 참고하자
• 존재하는 줄 몰라서 처음에 시간을 낭비했음.
– https://github.com/Microsoft/vscode/blob/master/src/vs/workbench/parts/debug/common/debugProtocol.d.ts
팁 2: 기존 디버거 확장을 클론해서 시작하자
• devcat-studio/VSCodeLuaDebug 추천
– Microsoft/vscode-mono-debug 에서 클론했음.
• 프로토콜 파악하고 구현하는 시간을 크게 아낄 수 있음.
팁 3: 실행기에 디버깅 기능을 포함해도 된다
• Lua는 매우 범용적이고 최소주의적으로 설계된 언어.
– 디버거 없고 디버그 API만 제공.
– 소켓도 기본 기능이 아니고 확장임.
• 한정된 용도의 도메인 언어를 만들면서 굳이 Lua의 설계를 따라갈 필요는 없다.
팁 4: CDP를 디버그 대상이 이해해도 된다
• 디버그 어댑터가 메시지를 번역할 필요 없이 전달하기만 하면 됨.
– Lua Debugger는 초기화/실행 관련 메시지만 인식하고 나머지를 전부 전달하게 했음
• 범용성은 떨어지지만 빨리 만들 수 있다.
1 sur 34

Recommandé

윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018 par
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018devCAT Studio, NEXON
3.4K vues69 diapositives
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018 par
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018devCAT Studio, NEXON
4.6K vues122 diapositives
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017 par
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017devCAT Studio, NEXON
2.7K vues51 diapositives
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018 par
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018devCAT Studio, NEXON
8.3K vues75 diapositives
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019 par
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019devCAT Studio, NEXON
6K vues89 diapositives
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다! par
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!영호 김
5.1K vues81 diapositives

Contenu connexe

Tendances

[D2]pinpoint 개발기 par
[D2]pinpoint 개발기[D2]pinpoint 개발기
[D2]pinpoint 개발기NAVER D2
13.3K vues52 diapositives
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019 par
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
6K vues75 diapositives
NDC2019 - 게임플레이 프로그래머의 역할 par
NDC2019 - 게임플레이 프로그래머의 역할NDC2019 - 게임플레이 프로그래머의 역할
NDC2019 - 게임플레이 프로그래머의 역할Hoyoung Choi
2.5K vues95 diapositives
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출 par
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출 NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출 정주 김
18.6K vues95 diapositives
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012 par
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012devCAT Studio, NEXON
3.5K vues63 diapositives
임태현, MMO 서버 개발 포스트 모템, NDC2012 par
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
6.1K vues141 diapositives

Tendances(20)

[D2]pinpoint 개발기 par NAVER D2
[D2]pinpoint 개발기[D2]pinpoint 개발기
[D2]pinpoint 개발기
NAVER D213.3K vues
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019 par devCAT Studio, NEXON
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
NDC2019 - 게임플레이 프로그래머의 역할 par Hoyoung Choi
NDC2019 - 게임플레이 프로그래머의 역할NDC2019 - 게임플레이 프로그래머의 역할
NDC2019 - 게임플레이 프로그래머의 역할
Hoyoung Choi2.5K vues
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출 par 정주 김
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출 NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
정주 김18.6K vues
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012 par devCAT Studio, NEXON
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012 par devCAT Studio, NEXON
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들 par 영욱 오
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
영욱 오6.8K vues
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013 par devCAT Studio, NEXON
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013 par devCAT Studio, NEXON
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
Kgc2014 삼한제국기 포스트모템 김찬웅 par Chanwoong Kim
Kgc2014 삼한제국기 포스트모템 김찬웅Kgc2014 삼한제국기 포스트모템 김찬웅
Kgc2014 삼한제국기 포스트모템 김찬웅
Chanwoong Kim2.1K vues
깨끗한 코드 (클린 코드, Clean Code) par Jay Park
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)
Jay Park51.7K vues
백승엽, M2프로젝트의 오류보고시스템, NDC2010 par devCAT Studio, NEXON
백승엽, M2프로젝트의 오류보고시스템, NDC2010백승엽, M2프로젝트의 오류보고시스템, NDC2010
백승엽, M2프로젝트의 오류보고시스템, NDC2010
[NDC17] 왓 스튜디오 서비스파트 par Chanwoong Kim
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트
Chanwoong Kim4.6K vues
Pinpoint 도입기 - 2016 신림프로그래머 오픈 세미나 par none
Pinpoint 도입기 - 2016 신림프로그래머 오픈 세미나Pinpoint 도입기 - 2016 신림프로그래머 오픈 세미나
Pinpoint 도입기 - 2016 신림프로그래머 오픈 세미나
none2.6K vues
초고속 웹사이트 개발을 위한 Codeigniter PHP Framework par Inseok Lee
초고속 웹사이트 개발을 위한 Codeigniter PHP Framework초고속 웹사이트 개발을 위한 Codeigniter PHP Framework
초고속 웹사이트 개발을 위한 Codeigniter PHP Framework
Inseok Lee11K vues
서버 개발자가 되기 위한 첫 걸음 par nexusz99
서버 개발자가 되기 위한 첫 걸음서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음
nexusz9936.4K vues
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT par Young D
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDTPHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
Young D9.6K vues
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님) par NAVER D2
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
NAVER D2951 vues
112 deview par NAVER D2
112 deview112 deview
112 deview
NAVER D24.2K vues
이희영, 글로벌 원빌드 모바일 게임 런칭과 라이브 개발, NDC2016 par devCAT Studio, NEXON
이희영, 글로벌 원빌드 모바일 게임 런칭과 라이브 개발, NDC2016이희영, 글로벌 원빌드 모바일 게임 런칭과 라이브 개발, NDC2016
이희영, 글로벌 원빌드 모바일 게임 런칭과 라이브 개발, NDC2016

En vedette

ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템 par
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템Chaeone Son
4.3K vues95 diapositives
NDC 2017 마이크로토크 - 프로그래머가 뉴스 읽는 법 par
NDC 2017 마이크로토크 - 프로그래머가 뉴스 읽는 법NDC 2017 마이크로토크 - 프로그래머가 뉴스 읽는 법
NDC 2017 마이크로토크 - 프로그래머가 뉴스 읽는 법Sumin Byeon
7.5K vues65 diapositives
NDC17 게임 디자이너 커리어 포스트모템: 8년, 3개의 회사, 4개의 게임 par
NDC17 게임 디자이너 커리어 포스트모템: 8년, 3개의 회사, 4개의 게임NDC17 게임 디자이너 커리어 포스트모템: 8년, 3개의 회사, 4개의 게임
NDC17 게임 디자이너 커리어 포스트모템: 8년, 3개의 회사, 4개의 게임Imseong Kang
12.1K vues196 diapositives
[NDC2017 정서연] 몬스터 슈퍼리그 리텐션 15% 개선 리포트 - 숫자보다 매력적인 감성 테라피 par
[NDC2017 정서연] 몬스터 슈퍼리그 리텐션 15% 개선 리포트 - 숫자보다 매력적인 감성 테라피[NDC2017 정서연] 몬스터 슈퍼리그 리텐션 15% 개선 리포트 - 숫자보다 매력적인 감성 테라피
[NDC2017 정서연] 몬스터 슈퍼리그 리텐션 15% 개선 리포트 - 숫자보다 매력적인 감성 테라피Jeong Seoyeon
13K vues59 diapositives
이승재, 일정대로 출시하기 왜 & 어떻게: 개발자를 위한 제작진행개론, NDC2017 par
이승재, 일정대로 출시하기 왜 & 어떻게: 개발자를 위한 제작진행개론, NDC2017이승재, 일정대로 출시하기 왜 & 어떻게: 개발자를 위한 제작진행개론, NDC2017
이승재, 일정대로 출시하기 왜 & 어떻게: 개발자를 위한 제작진행개론, NDC2017devCAT Studio, NEXON
3.7K vues50 diapositives
[NDC2017] 딥러닝으로 게임 콘텐츠 제작하기 - VAE를 이용한 콘텐츠 생성 기법 연구 사례 par
[NDC2017] 딥러닝으로 게임 콘텐츠 제작하기 - VAE를 이용한 콘텐츠 생성 기법 연구 사례[NDC2017] 딥러닝으로 게임 콘텐츠 제작하기 - VAE를 이용한 콘텐츠 생성 기법 연구 사례
[NDC2017] 딥러닝으로 게임 콘텐츠 제작하기 - VAE를 이용한 콘텐츠 생성 기법 연구 사례Hwanhee Kim
14.7K vues118 diapositives

En vedette(20)

ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템 par Chaeone Son
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
Chaeone Son4.3K vues
NDC 2017 마이크로토크 - 프로그래머가 뉴스 읽는 법 par Sumin Byeon
NDC 2017 마이크로토크 - 프로그래머가 뉴스 읽는 법NDC 2017 마이크로토크 - 프로그래머가 뉴스 읽는 법
NDC 2017 마이크로토크 - 프로그래머가 뉴스 읽는 법
Sumin Byeon7.5K vues
NDC17 게임 디자이너 커리어 포스트모템: 8년, 3개의 회사, 4개의 게임 par Imseong Kang
NDC17 게임 디자이너 커리어 포스트모템: 8년, 3개의 회사, 4개의 게임NDC17 게임 디자이너 커리어 포스트모템: 8년, 3개의 회사, 4개의 게임
NDC17 게임 디자이너 커리어 포스트모템: 8년, 3개의 회사, 4개의 게임
Imseong Kang12.1K vues
[NDC2017 정서연] 몬스터 슈퍼리그 리텐션 15% 개선 리포트 - 숫자보다 매력적인 감성 테라피 par Jeong Seoyeon
[NDC2017 정서연] 몬스터 슈퍼리그 리텐션 15% 개선 리포트 - 숫자보다 매력적인 감성 테라피[NDC2017 정서연] 몬스터 슈퍼리그 리텐션 15% 개선 리포트 - 숫자보다 매력적인 감성 테라피
[NDC2017 정서연] 몬스터 슈퍼리그 리텐션 15% 개선 리포트 - 숫자보다 매력적인 감성 테라피
Jeong Seoyeon13K vues
이승재, 일정대로 출시하기 왜 & 어떻게: 개발자를 위한 제작진행개론, NDC2017 par devCAT Studio, NEXON
이승재, 일정대로 출시하기 왜 & 어떻게: 개발자를 위한 제작진행개론, NDC2017이승재, 일정대로 출시하기 왜 & 어떻게: 개발자를 위한 제작진행개론, NDC2017
이승재, 일정대로 출시하기 왜 & 어떻게: 개발자를 위한 제작진행개론, NDC2017
[NDC2017] 딥러닝으로 게임 콘텐츠 제작하기 - VAE를 이용한 콘텐츠 생성 기법 연구 사례 par Hwanhee Kim
[NDC2017] 딥러닝으로 게임 콘텐츠 제작하기 - VAE를 이용한 콘텐츠 생성 기법 연구 사례[NDC2017] 딥러닝으로 게임 콘텐츠 제작하기 - VAE를 이용한 콘텐츠 생성 기법 연구 사례
[NDC2017] 딥러닝으로 게임 콘텐츠 제작하기 - VAE를 이용한 콘텐츠 생성 기법 연구 사례
Hwanhee Kim14.7K vues
이무림, 워크샵 게임 만들기: 부족전쟁, NDC2017 par devCAT Studio, NEXON
이무림, 워크샵 게임 만들기: 부족전쟁, NDC2017이무림, 워크샵 게임 만들기: 부족전쟁, NDC2017
이무림, 워크샵 게임 만들기: 부족전쟁, NDC2017
노기태, 김대우, 모바일 게임 데이터에 입각한 머신러닝 예측 분석 도입 및 삽질 후기, NDC2017 par devCAT Studio, NEXON
노기태, 김대우, 모바일 게임 데이터에 입각한 머신러닝 예측 분석 도입 및 삽질 후기, NDC2017노기태, 김대우, 모바일 게임 데이터에 입각한 머신러닝 예측 분석 도입 및 삽질 후기, NDC2017
노기태, 김대우, 모바일 게임 데이터에 입각한 머신러닝 예측 분석 도입 및 삽질 후기, NDC2017
이희영, 온라인 게임에서 모바일 게임으로 이어지는 메타플레이 트렌드, NDC2017 par devCAT Studio, NEXON
이희영, 온라인 게임에서 모바일 게임으로 이어지는 메타플레이 트렌드, NDC2017이희영, 온라인 게임에서 모바일 게임으로 이어지는 메타플레이 트렌드, NDC2017
이희영, 온라인 게임에서 모바일 게임으로 이어지는 메타플레이 트렌드, NDC2017
원격근무 개발자의 자기관리 - 우리는 모두 원격근무자다! par Minwoo Park
원격근무 개발자의 자기관리 - 우리는 모두 원격근무자다!원격근무 개발자의 자기관리 - 우리는 모두 원격근무자다!
원격근무 개발자의 자기관리 - 우리는 모두 원격근무자다!
Minwoo Park8K vues
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017 par devCAT Studio, NEXON
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
NDC 2017 키노트: 이은석 - 다가오는 4차 산업혁명 시대의 게임개발 par Eunseok Yi
NDC 2017 키노트: 이은석 - 다가오는 4차 산업혁명 시대의 게임개발NDC 2017 키노트: 이은석 - 다가오는 4차 산업혁명 시대의 게임개발
NDC 2017 키노트: 이은석 - 다가오는 4차 산업혁명 시대의 게임개발
Eunseok Yi52K vues
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버 par 준철 박
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
준철 박17.4K vues
홍성우, 내가 만든 언어로 게임 만들기, NDC2017 par devCAT Studio, NEXON
홍성우, 내가 만든 언어로 게임 만들기, NDC2017홍성우, 내가 만든 언어로 게임 만들기, NDC2017
홍성우, 내가 만든 언어로 게임 만들기, NDC2017
NDC 2015 이은석 - pay-to-skip: 온라인 게임 속 로봇 경제와 내몰리는 인간 par Eunseok Yi
NDC 2015 이은석 - pay-to-skip: 온라인 게임 속 로봇 경제와 내몰리는 인간NDC 2015 이은석 - pay-to-skip: 온라인 게임 속 로봇 경제와 내몰리는 인간
NDC 2015 이은석 - pay-to-skip: 온라인 게임 속 로봇 경제와 내몰리는 인간
Eunseok Yi24.8K vues
Daum 음성인식 API (김한샘) par Daum DNA
Daum 음성인식 API (김한샘)Daum 음성인식 API (김한샘)
Daum 음성인식 API (김한샘)
Daum DNA10.7K vues
Kgc인삼공사 '심' 2013 spring par samsamstory
Kgc인삼공사 '심' 2013 springKgc인삼공사 '심' 2013 spring
Kgc인삼공사 '심' 2013 spring
samsamstory5K vues
'오래 오래 건강하게' - 2013년 정관장 추석선물 카탈로그 par samsamstory
'오래 오래 건강하게' - 2013년 정관장 추석선물 카탈로그'오래 오래 건강하게' - 2013년 정관장 추석선물 카탈로그
'오래 오래 건강하게' - 2013년 정관장 추석선물 카탈로그
samsamstory11.7K vues
영삼인 정관장 발표(최종) par Hyoung Shin Kim
영삼인 정관장 발표(최종)영삼인 정관장 발표(최종)
영삼인 정관장 발표(최종)
Hyoung Shin Kim1.5K vues
[NDC 2014] 시나리오라이터의 과거와 현재, 그리고 미래 par Hwang Sang Hun
[NDC 2014] 시나리오라이터의 과거와 현재, 그리고 미래 [NDC 2014] 시나리오라이터의 과거와 현재, 그리고 미래
[NDC 2014] 시나리오라이터의 과거와 현재, 그리고 미래
Hwang Sang Hun12K vues

Similaire à 이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017

[17.01.19] docker introduction (Korean Version) par
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)Ildoo Kim
472 vues37 diapositives
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기 par
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기Sumin Byeon
8.9K vues194 diapositives
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day par
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container DayAmazon Web Services Korea
17.9K vues48 diapositives
Docker 로 Linux 없이 Linux 환경에서 개발하기 par
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기iFunFactory Inc.
35.7K vues77 diapositives
웹 Front-End 실무 이야기 par
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기JinKwon Lee
54.3K vues83 diapositives
모바일 크로스플랫폼 비교 - 월간슬라이드 4월 par
모바일 크로스플랫폼 비교 - 월간슬라이드 4월모바일 크로스플랫폼 비교 - 월간슬라이드 4월
모바일 크로스플랫폼 비교 - 월간슬라이드 4월월간 IT 슬라이드
2.3K vues70 diapositives

Similaire à 이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017(20)

[17.01.19] docker introduction (Korean Version) par Ildoo Kim
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)
Ildoo Kim472 vues
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기 par Sumin Byeon
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
Sumin Byeon8.9K vues
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day par Amazon Web Services Korea
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
Docker 로 Linux 없이 Linux 환경에서 개발하기 par iFunFactory Inc.
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기
iFunFactory Inc.35.7K vues
웹 Front-End 실무 이야기 par JinKwon Lee
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기
JinKwon Lee54.3K vues
Docker와 DevOps에서 Serverless와 NoOps로의 여정 par Kyuhyun Byun
Docker와 DevOps에서 Serverless와 NoOps로의 여정Docker와 DevOps에서 Serverless와 NoOps로의 여정
Docker와 DevOps에서 Serverless와 NoOps로의 여정
Kyuhyun Byun716 vues
AngularJS In Production par MooYeol Lee
AngularJS In ProductionAngularJS In Production
AngularJS In Production
MooYeol Lee1.2K vues
aws/docker/rails를 활용한 시스템 구축/운용 - docker편 par negabaro
aws/docker/rails를 활용한 시스템 구축/운용 - docker편aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편
negabaro1.5K vues
[W3C HTML5 2017] Docker & DevOps에서 Serverless & NoOps로의 여정 par 양재동 코드랩
[W3C HTML5 2017] Docker & DevOps에서 Serverless & NoOps로의 여정[W3C HTML5 2017] Docker & DevOps에서 Serverless & NoOps로의 여정
[W3C HTML5 2017] Docker & DevOps에서 Serverless & NoOps로의 여정
Sonatype nexus 로 docker registry 관리하기 par KwangSeob Jeong
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기
KwangSeob Jeong6.8K vues
[123] electron 김성훈 par NAVER D2
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈
NAVER D27.9K vues
131 deview 2013 yobi-채수원 par NAVER D2
131 deview 2013 yobi-채수원131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원
NAVER D214.7K vues
AWS와 함께하는 무중단 배포 파이프라인 개선기 - 황성찬 (AUSG) :: AWS Community Day Online 2021 par AWSKRUG - AWS한국사용자모임
AWS와 함께하는 무중단 배포 파이프라인 개선기 - 황성찬 (AUSG) :: AWS Community Day Online 2021AWS와 함께하는 무중단 배포 파이프라인 개선기 - 황성찬 (AUSG) :: AWS Community Day Online 2021
AWS와 함께하는 무중단 배포 파이프라인 개선기 - 황성찬 (AUSG) :: AWS Community Day Online 2021
[AWS Community Day 2021] AWS와 함께하는 무중단 배포 파이프라인 개선기 par SungChanHwang
[AWS Community Day 2021] AWS와 함께하는 무중단 배포 파이프라인 개선기[AWS Community Day 2021] AWS와 함께하는 무중단 배포 파이프라인 개선기
[AWS Community Day 2021] AWS와 함께하는 무중단 배포 파이프라인 개선기
SungChanHwang288 vues
NRISE 개발스택 par Moon Soo Kim
NRISE 개발스택NRISE 개발스택
NRISE 개발스택
Moon Soo Kim1.3K vues
오래된 프로젝트에 Jenkins 적용해보기 par 용호 최
오래된 프로젝트에 Jenkins 적용해보기오래된 프로젝트에 Jenkins 적용해보기
오래된 프로젝트에 Jenkins 적용해보기
용호 최3.6K vues

Plus de devCAT Studio, NEXON

김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019 par
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019devCAT Studio, NEXON
13.2K vues80 diapositives
이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019 par
이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019
이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019devCAT Studio, NEXON
2.4K vues50 diapositives
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019 par
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019devCAT Studio, NEXON
2.5K vues87 diapositives
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019 par
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019devCAT Studio, NEXON
1.8K vues107 diapositives
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019 par
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019devCAT Studio, NEXON
2.7K vues67 diapositives
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019 par
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019devCAT Studio, NEXON
1.6K vues78 diapositives

Plus de devCAT Studio, NEXON(14)

김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019 par devCAT Studio, NEXON
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019 par devCAT Studio, NEXON
이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019
이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019 par devCAT Studio, NEXON
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019 par devCAT Studio, NEXON
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019 par devCAT Studio, NEXON
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019 par devCAT Studio, NEXON
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019 par devCAT Studio, NEXON
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019 par devCAT Studio, NEXON
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018 par devCAT Studio, NEXON
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018 par devCAT Studio, NEXON
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018
모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018 par devCAT Studio, NEXON
모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018
모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018
백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012 par devCAT Studio, NEXON
백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012
백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012
백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011 par devCAT Studio, NEXON
백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011
백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017 par devCAT Studio, NEXON
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017

이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017

  • 1. 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 이승재 & 강성훈 넥슨코리아 데브캣스튜디오
  • 2. Part A 발표자: 이승재 카바티나 스토리 데스크탑 히어로즈 마비노기 2 마비노기 듀얼 실버바인 서버엔진 2 @0xcafea1fa
  • 3. 직전 시간 발표에 이어지는 내용입니다
  • 4. 도메인 언어 “어떤 애플리케이션 프로그램을 제어하거나 환경설정하기 위한 단순한 언어든, 규칙이나 절차를 명시하기 위한 더 복잡한 언어든, 우리는 여러분의 프로젝트를 문제 도메인에 가까운 곳으로 옮길 방법들을 궁리해봐야 한다고 생각한다. 더 높은 추상화 수준에서 작업함으로써 사소한 구현의 세부사항들을 무시하고 도메인의 문제들을 푸는 일에만 정신을 집중할 수 있다.” - 실용주의 프로그래머 12절 <도메인 언어>
  • 5. 텍스트 기반 도메인 언어 비주얼 스크립팅과 비교해서, • 작동하는 첫 버전을 빠르게 만들 수 있다. • 변경을 추적하기 쉽다. • 대규모 리팩토링을 하기 쉽다. • 검색이 가능하다.
  • 6. [시작] 전투중이면 -> 가만서있는다=0.5, [전투중] !다돌아왔으면 -> 제자리로돌아간다, [돌아가기] 무조건 -> 배회한다=$배회주기 [전투중] !전투중이면 -> 제자리로돌아간다, [돌아가기] 스킬사용해본다( $스킬_평타 ) -> 시전성공 무조건 -> 가만서있는다=0.1 [돌아가기] 전투중이면 -> 가만서있는다=0.5, [전투중] 다돌아왔으면 -> 가만서있는다=0.5, [시작] 무조건 -> 제자리로돌아간다 FSM카 바 티 나 스 토 리 A I 스 크 립 트 조건식 행동 상태 트랜지션 몬스터 종류마다 달라지는 상수값 상수값을 참고하는 조건식
  • 7. HFSM 상태 트랜지션 실행 중 일시 정지 변수 초기화 마 비 노 기 2 A I 스 크 립 트 NDC13 - M2 AI코드 개발 생산성 향상 사례 http://lee-seungjae.github.io/CodeHotloadingAndInHouseScriptLanguage.html
  • 8. Lua데 스 크 탑 히 어 로 즈 던 전 스 크 립 트 복잡한 기능을 가진 부품 일정 시간 지연 트리거 설치 한글 식별자 모두 끝날 때까지 기다림 NDC11 - 온라인 게임 처음부터 끝까지 동적언어로 만들기 http://lee-seungjae.github.io/BuildingOnlineGameEntirelyWithDynamicLanguage.html
  • 9. 어떻게 만드나? • 구문 분석 = 텍스트의 구조를 파악하기 • 실행 = 동작하게 하기
  • 10. 어떻게 만드나? – 구문 분석 • 라인 중심 형식의 언어로 만든다 • 되부름 하향 구문 분석기(recursive descent parser)를 작성한다 • 파서 생성기를 사용한다
  • 11. 어떻게 만드나? – 실행 • 구문 분석 결과를 트리로 구성해놓고 평가 • 다른 언어로 트랜스파일(번역) • 바이트코드로 컴파일한 다음 실행 • JIT ※ 바인딩(호스트언어와상호작용)을 어떻게 만들지 고려할 것
  • 12. 구문 분석, 실행 • 선택지가 많다 • 참고자료도 많다 • 학부 때 컴파일러 수업 들었다 일단 이거면 동작하는 초기 구현을 만들 수 있다 Lua같은 언어의 틀 안에서 만들어도 됨
  • 14. 도메인 언어는 상상 이상으로 강력하다 • 도메인 언어를 사용해서 만든 프로그램이 설계자의 상상을 뛰어넘는 크기로 자라난다 • 기능도 계속 덧붙이게 된다
  • 15. 개발환경에 대한 불만이 쌓인다 • 디버깅이 안되잖아 • 자동완성 됐으면 좋겠는데 • 정의로 바로 가기 안됨? • 리네임은?
  • 16. 개발환경을 만드는 비용을 예측하기 어렵다 • 텍스트 에디터를 바닥부터 만들 수는 없잖아;;; • 비용을 예측하기 어려운 설계는 채택하기 꺼려진다 열악한 레거시 개발환경에 그냥 적응해서 살고 있지는 않나? 도메인 언어를 사용하면 좋을 상황을 놓치고 있지는 않나?
  • 17. Visual Studio Code • 가볍다, 공짜다 • Visual Studio에 익숙하면 빠르게 적응할 수 있다 • 언어별 확장 만들기가 대단히 쉽다!
  • 18. 이야기할 내용 • 최근에 루아 디버거와 카일루아 언어 지원을 붙여본 경험을 공유합니다 – 비용이 대략 어느 정도인지 – 어떤 걸 주의해서 시행착오를 줄일 수 있을지
  • 20. The VS Code Debug Protocol (CDP) • 디버그 어댑터를 만들어야 한다 – 디버거와 VS Code 사이를 중개한다. – VS Code에 의해 실행되는 콘솔 프로그램. – 별도 프로세스로 동작하기 때문에 아무 언어로나 만들어도 된다. – VS Code와는 stdin/stdout으로 통신함.
  • 21. The VS Code Debug Protocol (CDP) https://code.visualstudio.com/docs/extensionAPI/api-debugging
  • 22. The VS Code Debug Protocol (CDP) • 요청/응답 메시지 (16) – Initialize,launch,attach,disconnect,configurationDone – pause,next,continue,stepIn,stepOut – stackTrace,scopes,variables,threads – setBreakpoints – evaluate • 이벤트 메시지 (2) – output – stopped
  • 23. 잠깐, 디버거를 어떻게 만들지? • 다른 프로세스의 실행을 제어하고 내부를 들여다볼 수 있어야 한다. – Windows 디버깅 API는 기계어를 위한 것이다. – Non-JIT 가상머신을 디버깅하기에는너무 저수준이다. • 발상의 전환 – 프로세스가 자신을 디버깅할 수 있는 인터페이스를 제공하면 된다. – TCP 소켓이 가장 만만하다.
  • 24. 즉, 이렇게 만들면 된다 • 디버그 어댑터 – VS Code와 CDP로 통신한다. – 디버그 대상과 TCP로 통신한다. – 디버그 대상을 실행하기도 한다. • 디버그 대상 – TCP를 통해 디버깅 명령을 받는다.
  • 25. Lua Debugger by devCAT • 데모 • VS Code 확장 검색창에 devcat을 입력하세요!
  • 26. 디버거 만들기: Lua의 경우 • debug 라이브러리가 있다. – 이것 자체로 디버거는 아니지만, – 디버거를 만드는데 충분한 기본 요소들을 제공한다.
  • 27. 디버거 만들기: Lua의 경우 • luasocket을 통해 디버깅 요청을 받고 처리해주는 라이브러리를 Lua만으로 짤 수 있다. – MobDebug/Zerobrane이먼저 구현함. – luasocket만 있으면 어떤 환경에도 붙일 수 있다.
  • 28. Lua Debugger by devCAT • vscode-debuggee.lua를 require하고 start() 불러주면 디버그 어댑터에 연결된다. VS Code DebugAdapter.exe Lua vscode-debuggee.lua 실행 CDP 실행 자체 프로토콜
  • 29. Lua Debugger by devCAT • enterDebugLoop() – continue 명령이 오기 전까지는 계속 디버그 명령어를 처리한다. – 에러를 만났을 때 이것을 부르면 됨. • poll() – 쌓인 디버그 명령어가 있으면 처리하고, 없으면 즉시 리턴한다. – 로직 코드에서 때때로 불러줘야 함. – 실행 중에 브레이크포인트 설정하는 데 필요.
  • 30. 얼마나 걸렸나? • 총 5주 – 루아 VM 패치해서 속도 저하 없는 브레이크포인트 구현하는 데 약 1주 • devcat-studio/lua-5.1.5-op_halt – Visual Studio Code로 디버깅되게 하는 데 약 3주 – Gideros Player 원격제어에 약 1주
  • 31. 팁 1: 프로토콜 문서를 참고하자 • 존재하는 줄 몰라서 처음에 시간을 낭비했음. – https://github.com/Microsoft/vscode/blob/master/src/vs/workbench/parts/debug/common/debugProtocol.d.ts
  • 32. 팁 2: 기존 디버거 확장을 클론해서 시작하자 • devcat-studio/VSCodeLuaDebug 추천 – Microsoft/vscode-mono-debug 에서 클론했음. • 프로토콜 파악하고 구현하는 시간을 크게 아낄 수 있음.
  • 33. 팁 3: 실행기에 디버깅 기능을 포함해도 된다 • Lua는 매우 범용적이고 최소주의적으로 설계된 언어. – 디버거 없고 디버그 API만 제공. – 소켓도 기본 기능이 아니고 확장임. • 한정된 용도의 도메인 언어를 만들면서 굳이 Lua의 설계를 따라갈 필요는 없다.
  • 34. 팁 4: CDP를 디버그 대상이 이해해도 된다 • 디버그 어댑터가 메시지를 번역할 필요 없이 전달하기만 하면 됨. – Lua Debugger는 초기화/실행 관련 메시지만 인식하고 나머지를 전부 전달하게 했음 • 범용성은 떨어지지만 빨리 만들 수 있다.