Meta-programming으로 만드는 게임 서버
By SeukWon Kang
지난 2년간 회사에서 개발한 게임서버 개발을 한번 정도 정리 해보고 싶다고 생각 하고 있었습니다만.
몇주전에 golang korea 에 올라온 GDG seoul meetup 발표자 모집 글을 보고 (꽤나 즉흥적으로 ) 신청을 했더니 덜컥 발표자로 등록 되어 버렸습니다.
https://www.facebook.com/groups/golangko/
결국 지난주 토요일 (2017-09-16) “Meta-programming으로 만드는 게임 서버” 라는 주제로 발표를 했습니다. https://www.meetup.com/GDG-Seoul/events/242054608/
https://docs.google.com/presentation/d/1P6wykg33jnbTM0GVB3AwXUJZlkp20yC0i6XcbOfPlG4/edit?usp=sharing
발표 준비를 하면서 “너무 실무적 내용들이고 또 자세한 설명은 생략한다. 식이라 이래도 좋은가?” 라는 걱정을 좀 했는데 다들 열심히 들어 주시고 해서 어떻게 무사히 끝냈습니다.
또 페북에 발표 자료 링크를 올렸더니 생각보다 많은 분들이 “좋아해 - like” 해주셔서 놀라기도 했구요. ( 아마 제 평생 가장 많은 like를 받은 것 같네요. )
이 글은 발표후에 생각났지만 이제와서 발표 자료에 추가 하는 것도 좀 그러니 적어보는 발표후 AS 글 입니다.
실제로 generator를 만들어보면 이런 저런 자잘한 문제 들이 일어나게 됩니다.
만들어진 코드가 아무래도 들여쓰기나 빈줄 들이 이쁘게 만들어 지기 힘든데 이 경우 만든 string( bytes.Buffer )을 저장하기 전에 src, err := format.Source(outdata.Bytes()) 를 해주는 것이 좋습니다. 만들어진 string을 go coding convention에 맞게 정리 해줍니다.
그리고 생성된 코드에서 사용하는 package의 import를 맞춰주는 것이 꽤나 까다로운 경우가 있습니다. ( import code를 생성 하는 시점에 실제 import 해야 할 package를 미리 알수 없는 경우도 많고 ) 이경우는 goimports (https://github.com/golang/tools/tree/master/cmd/goimports) 사용해서
만들어진 파일에 한번 적용해 주면
generation에서 빼먹은 package import 를 잘 채워 줍니다.