우연히 NDC 초대권을 얻게 되어서 좋은 세션들을 들어볼 기회가 생겼습니다. 그 중 제가 들었던 세션들의 대략적인 내용과 저의 감상을 적어보겠습니다. 가벼운 마음으로 읽어주세요.

세션 1 - 실시간 HTTP 양방향 통신


제가 들었던 유일한 기술 세션이었습니다. 아무래도 회사에서 주로 웹 개발 업무를 하다 보니 http로 실시간 양 방향 통신이 가능한지 그리고 어떠한 방법이 있을까가 궁금하던 차였는데, 이 세션을 들으면서 양 방향 통신을 가능하게 하는 기술들에 대해서 접해볼 좋은 기회가 되었습니다.

간단하게 양 방향 통신을 사용한 서비스의 예로 페이스북의 메신져, 구글의 구글톡 등을 언급하셨습니다. 기존의 http 통신의 명세에서는 서버에서 발생한 이벤트를 브라우저에 전달할 방법이 없었는데 양 방향 통신을 가능하게 하는 기법을 쓰면 실시간으로 이벤트를 전달할 방법이 생기게 되는 것이지요. 하지만 명세에는 쓰이지 않은 방법이기 때문에 매우 꼼수같은 방법이라는 말도 덧붙이셨습니다.

크게 두 가지 방법(Polling, Long Polling)을 소개해주셨는데 WebSocket같은 기술도 설명하셨지만, 제한적인 브라우저를 지원하기 때문에 범용적으로 쓰기엔 어려워 보였습니다. 특히 IE9 같은 최신 브라우저에서도 지원되지 않는다는 것이 너무 큰 단점으로 다가왔습니다. 이러한 실시간 통신 기술들을 통틀어 Comet이라고 부른다고 하는데 관련 정보를 찾기 위해서 Comet 키워드를 사용하면 좋을듯하네요. 참고로 이 기사에서 구현 방식에 대한 힌트를 얻을 수 있습니다.

두 가지 방법을 정리해보면 폴링 방식은 계속해서 클라이언트에서 서버에 새로운 이벤트가 발생했는지를 요청하는 방식으로 가장 단순히 구현할 수 있는 방식이고 효율이 낮지 않은 방식이지만 정말로 실시간이라고 부르기 어렵고(요청 보내는 시간 동안 기다려야 함) 또한 그 간극을 줄이려고 요청을 보내는 시간의 간격을 줄인다면 많은 트래픽과 서버부하를 예기할 수 있는 것이 단점인 방법입니다. 하지만 구현하기 쉽고 많은 동시접속자를 예상하지 않는다면 좋은 방식이라고 덧붙이셨습니다.

롱 폴링은 폴링과 비슷하지만, 클라이언트에서 서버에 요청을 보내고 서버에서는 이벤트가 발생할 때까지 기다렸다가 이벤트가 발생할 시에만 응답을 발생시키는 방식으로 돌아가는데, 클라이언트에서 여러 요청을 보내지 않도록 한다는 점에서 앞서 소개한 폴링보다 좀 더 진보된 방식이고 발표자분도 이 방식을 이용하여 개인 프로젝트를 진행하셨다고 소개해주셨습니다.

또한, 이러한 양 방향 통신을 쉽게 이용할 수 있도록 자동화해주는 미들웨어들도 소개해주셨습니다.

Socket.IO

Socket.IOnodejs기반 모듈로 실시간 웹 기술을 적용하기 쉽게 만들어주는 node 확장 모듈입니다. Socket.IO를 쓰면 Comet 구현을 위한 여러 기술 등을 종합하여 추상화된 인터페이스로 제공해주기 때문에 여러 번 구현해야 하는 골치 아픈 일을 막을 수 있다고 하는군요. 최근에도 활발하게 업데이트되고 있어 주목해보면 좋을 미들웨어 같습니다.

Orbited2

Orbited도 Socket.IO와 비슷한 기능을 제공하지만, 검색 결과 문서 자료도 별로 없고 외국 포럼들을 살펴봐도 그다지 좋은 반응을 얻지 못하는 것 같아서 실제 프로덕트에 쓰라고 조언해주기는 어려운 솔루션 같았습니다.

제 생각에는 nodejs가 요즘 큰 인기를 끌고 있으니 nodejs를 공부하면서 Socket.IO를 같이 써보면 재미있는 결과물을 만들 수 있지 않을까 하는 생각이 들었습니다. 발표자분이 Orbited를 써서 개인 프로젝트를 진행하려고 했는데 하필 그 시점에 Orbited서버에 들어가 지지 않아서 직접 구현하게 되었다는 슬픈 이야기를 들려주셨습니다.

발표자분께서는 실시간 양 방향 통신을 이용해서 구현해볼 만한 것을 찾던 도중 IRC 채팅을 웹에서 할 수 있게 도와주는 WebIRC를 개발하셨다고 합니다. 결과물도 중간에 보여주셨는데 취미로 개발하기가 쉽지 않은 점을 고려하면 계속해서 자기계발에 노력하시면서 무언가를 만들어 가는 모습이 보기에 좋았습니다.

정리


발표시간이 짧아 더 깊숙한 이야기를 듣지는 못했습니다만, 어디서부터 시작해야 할지에 대한 키워드를 얻을 수 있어 뜻깊은 강연이었습니다.

세션 2 - 게임과 SNS 연동 이야기


이 세션은 넥슨 게임들과 넥슨홈의 연동 과정에 관한 내용이 주를 이루었습니다. 게임과 SNS가 잘 연동한 예로 월드오브워크래프트의 전투정보실, 거래소 등을 언급하셨는데 자신이 게임에서 육성하던 캐릭터의 모습을 웹에서 3D뷰어로 볼 수 있고 게임에서 이룬 업적따위를 기록해 놓을수도 있으며 게임의 장터에 웹에서 접근하여 거래를 이룰 수 있다는 점, 즉 실제 게임에서 이루어졌던 일들이 바로 웹 페이지에서도 연동할 수 있다는 점이 인상적이었습니다.

발표자분께서 게임과 SNS의 연동 목적으로 5가지 정도를 제시하셨는데 저는 3가지가 와 닿았습니다. 그 내용을 적어보면,

1. 재미와 체류 시간의 증가

SNS를 통해서 게임에서는 할 수 없는 다른 활동(가령 커뮤니티 활동) 등을 할 수 있고 이러한 활동이 게임과 다른 재미를 줄 수 있다는 점, 즉 새로운 재미를 찾을 수 있다는 점이 큰 장점이라고 말씀하셨습니다. 또한 게임이 끝난 이후에 SNS를 하게 되면 실제로 게임에 체류하는 시간이 길어지는 것과 비슷한 부수효과를 주는 것 또한 장점임을 언급하셨습니다.

2. 새로운 기회

또한 서비스 제공자들도 서로 공생의 관계를 맺어가면서 윈윈할 수 있음에 관하여 얘기하셨는데요. 최근에 Zynga와 Facebook의 관계를 예로 드셨습니다. Zynga는 여러 소셜 게임을 어필할 수 있도록 하기 위해 Facebook의 회원 정보와 그 친구들의 관계를 이용해야 했고 Facebook은 새로운 사용자들의 유입과 트래픽의 증가를 위해 Zynga의 소셜 게임의 득을 볼 수 있었죠. 이러한 기회를 통해 새로운 가치를 만들 수 있음이 중요함을 말씀하셨습니다.

3. 확산 (Viral)

SNS를 통해서 가장 큰 효과를 보고 싶은 부분이 바로 확산인데요. 페이스북 담벼락이나 트위터에 올리게 됨으로써 여러 사람이 보게 되어 홍보 효과에 도움이 된다고 하셨습니다.

이러한 장점과 함께 본격적으로 넥슨 게임과 넥슨홈을 연동하려고 한 노력에 대해서 얘기해주셨는데 트레이딩 카드 게임에서 쓰이는 게임 카드의 형식을 빌려와서 캐릭터의 정보를 전시할 수 있도록 해놨습니다. 사람들이 자신의 기록이나 캐릭터를 자랑하고 싶은 심리를 자극하고 싶은 것이 기획 의도였다고 하셨고 또한 넥슨에서 서비스하는 게임들이 많기 때문에 카드를 보면서 타 게임을 하는 사람들을 유인할 수 있는 유인책이 되길 바랐다고 하네요. 그 외에 카드에 재미있는 요소를 부여하는 방법이 무엇이 있을까 고민을 많이 하셨다고 회고하셨습니다.

넥슨에서 서비스하는 마영전은 굉장히 인기가 많은 게임인데요. 이 게임을 넥슨홈과 연동하기가 매우 어려우셨다고 합니다. 왜냐하면, 게임을 하는 사람들이 연동 같은 소소한 문제(?)에는 신경을 쓰지 않았기 때문이라고 하셨는데요, 할 수 없이 게임 UI에 SNS 연동 관련된 인터렉션을 집어넣는 방법을 통해서 게임 스샷과 소감을 공유하도록 유도하는 데 성공하셨다고 합니다, 지금은 마영전에서 공유되는 포스팅들이 매우 많다는 말을 덧붙이셨습니다.

연동하기에 앞서서 생각해봐야 할 고민거리에 관해서도 이야기를 해주셨습니다.

먼저 진입 장벽을 낮추는 것의 중요성에 관해서 얘기하셨습니다. SNS와 소통할수 있는 방법을 편리하게 함으로써 게임안에 녹아드는 연동을 강조하셨습니다. 이렇게 하기 위해서 개발 초기부터 SNS연동 방안에 대해서 생각해보길 주문하셨고, 반응이 가장 많을 만한 컨텐츠가 무엇이 있을까에 대해서 고민해보라고 하셨습니다. 힌트를 약간 주셨는데 마영전의 경우 무기 강화의 성공과 실패에 관련된 포스팅이 가장 큰 인기를 끈다고 하네요, 성공은 부러움에 관한 이야기가 실패는 위로에 관한 이야기가 나온다고 합니다.

또한 사용자 친화적인 센스를 강조하셨습니다. 가령 사용자들은 숫자에 친숙하지 않기 때문에 10,000,000 포인트 달성 같은 딱딱한 말보다 좀 더 쉽고 직관적일 수 있는 단어를 넣어서 설명하는 것이 낫다. 이런 이야기를 들려주셨네요.

전체적으로 일반적인 얘기들이 주를 이루긴 했지만, 다시 한 번 SNS 연동에서 생각해봐야 할 점을 상기할 수 있는 세션이었습니다.

세션 3 - 제발 한판만 해주세요. 게임제작동아리의 신규 유저 길들이기


이 세션은 카이스트의 게임 제작 동아리인 ‘하제’에서 게임 개발을 하시고 계시는 이준희님이 발표해주셨습니다. 개인적으로는 처음에 기대한 것에 비해 아주 많은 깨달음을 얻을 수 있었던 세션이었습니다.

게임을 개발하시면서 가장 어려웠던 점이 개발보다도 사용자들로 하여금 그 게임에 쉽게 적응하도록 하고 재미를 느끼게 하는 과정이었다는 이야기를 하셨는데요, 저도 서비스를 만드는 처지이다 보니 그 어려움에 대한 동질감을 느꼈습니다.

동아리에서 개발하던 슈팅 게임 ‘코스모스’를 만들던 과정에서 그 어려움을 타파하기 위해 어떠한 노력을 하셨는지를 공유해주셨습니다.

디폴트

먼저 디폴트에 관해서 얘기하셨는데, 처음에 너무 많은 선택권을 사용자에게 주자 혼란스러워 하더라는 점을 지적하셨습니다. 게임 시작할 때 비행기와 무기를 고르게 하였는데 무기가 너무 많고 골라야 할 비행기도 많다 보니 사용자들이 무엇을 선택해야 할지 혼란스러워했던 것이죠.

문제를 해결하기 위해 일단 디폴트로 적당한 기체와 무기를 선택해주게 하고 선택할 수 있는 옵션을 미리 몇 개 제작해두었더니 사용자의 혼란이 많이 줄어들었다고 말씀하셨습니다. 저는 안 좋은 디폴트의 예(ex: 알툴바)만 많이 접했는데, 이러한 디폴트 옵션은 환영할만할 듯합니다.

해금 시스템

특정 목표를 이루었을 때 다음 목표나 미션이 풀리는 것을 해금시스템이라고 하는데 주로 리듬 액션 게임에서 이런 접근을 많이 시도 합니다. 코스모스 개발 시에도 이러한 시스템을 도입하여 적절한 자극을 줄 수 있었다고 하셨습니다.

앵그리버드나 컷 더 로프같은 게임에서도 특정 아이템을 모으거나 일정량의 미션을 클리어하게 되면 다음 스테이지로 넘어갈 수 있게 하는데 이러한 방식을 도입하여 사용자들에게 도전 정신을 불러일으킬 수 있었다고 하셨습니다. 하지만 그 시기가 중요하다고 하셨는데요, 해금 되는 시점에 너무 빠르거나 너무 늦거나 하지 않고 적당히 지루해지지 않을 시점에 해금이 이루어지도록 하는 것이 중요하다고 강조하셨습니다.

튜토리얼

제작한 게임이 조작법이 어렵다보니 사람들이 금방 좌절을 느끼고 떠나가는 문제가 있었다고 말씀하시고 그에 따라서 튜토리얼을 만들었는데 오히려 튜토리얼을 하던 사람들이 튜토리얼이 너무 어려워서 다 떠나가더란 이야기를 하셨습니다.

이미 개발하는 과정에서 본인들이 게임에 익숙해졌기 때문에 어려움의 기준이 한 참 높아져 버린 오류에 빠진 것인데요. 테스트 집단을 전혀 게임을 해보지 않았던 사람들로 바꾸고 나서야 문제에 제대로 접근할 수 있었다고 하네요. 그래서 튜토리얼 난도가 대폭 낮아지게 되어 사용자들이 떠나가는 문제가 많이 줄었다고 말씀하셨습니다.

발표를 듣던 중에 한편으로는 과연 튜토리얼이 필요할까? 라는 생각도 들었습니다. 최근의 게임들을 보면 내용은 튜토리얼이지만 마치 게임의 일부분인 것 마냥 잘 녹아들게 시스템을 디자인한 예를 볼 수 있는데(ex: 어쌔신 크리드) 물론 많은 노력이 필요하지만, 인위적으로 튜토리얼을 만들지 않고도 자연스럽게 학습되도록 녹아들게 하는 방법도 분명히 있으며 그것이 가능할 땐 더 자연스러운 방식을 택하는 것이 옳다고 생각되었습니다.

도전 과제

하지만 대부분의 사람과는 다른 뉴타입(?)같은 사람들을 배려해야 할 상황도 생겼다고 회고하시며 상위 1%의 경험을 원하는 사용자들을 위해 진입 장벽이 높은 미션들이나 도전과제를 남겨두는 센스도 발휘하셨습니다. 이러한 접근방법은 대부분의 콘솔 게임들에서 많이 써먹는 방식이지요.

정리


세션 내용은 전반에 걸쳐 인디 게임 개발과 그 고충에 관한 이야기였습니다만 서비스를 만드는 사람 처지에서도 도움이 될만한 이야기였습니다. 특히 사용자들의 서비스 진입 장벽에 대한 고민이 많으신 분들에게 큰 도움이 됐을 세션이었습니다.

마무리하며


이 정도 규모의 개발자 행사에는 처음 가봤는데, 유용한 내용을 접할 수 있어서 좋은 경험이었습니다. 또한 저 스스로의 모습과 발전 방향에 대해서 다시 한 번 생각해 볼 기회를 접할 수 있어서 좋았습니다. 혹시 본인들이 생각했던 경험들이 있다면 댓글로 공유해주세요~ 듣지 못한 다른 세션들에 대한 후기도 좋습니다!

슬라이드 페이지에서 발표된 슬라이드들을 볼 수 있다고 하니 관심 있으신 분은 들어가 보세요~

스포카에서는 프론트엔드 프로그래머, 시니어 풀스택 프로그래머를 채용 중입니다! 웹 프론트엔드에 관심을 가지고 공부하는 디자이너, 뛰어난 서버 개발자 등 각자의 분야에서 전문적인 사람들이 능력있는 분들과 함께 일하기를 기대하고 있습니다. 채용 정보 페이지를 확인해주세요!