기본 콘텐츠로 건너뛰기

3월, 2019의 게시물 표시

Django-Channels와 HTTP 통합해보기

Django-Channels와 HTTP 통합해보기 프로젝트로 IoT 애플리케이션을 제작하고 있는데, 처음 시도 해보는 부분이라서 어떻게 구축을 시작해야할지 막막한 부분이 많았습니다. 개인적으로 Python을 주로 사용하고 있고, 중앙 서버를 Django로 구축하기로 했기 때문에, Django에 관한 여러 정보들을 찾아보다가 Channels라는 Django 애드온을 알게 되었습니다. Channels를는 주로 채팅 관련 서비스에 사용 되는것 같은데, Django를 웹소켓 서버로 사용할 수 있도록 도와주는 점에서 잘 활용하면 계속 연결이 유지되어야하고, 양방향 통신이 필요한 IoT 서버로 사용할 수 있다고 판단하여 Channels를 사용 해보게 되었습니다. 하지만 어플리케이션과 IoT 서버가 항상 WebSocket으로 연결되어 있진 않을것 같았고... IoT기기와 서버가 웹소켓을 통해 항상 연결되어 있고, 어플리케이션은 해당 웹소켓 연결에 HTTP로 데이터를 던져주는 방향으로 생각을 해보게 되었습니다. Django-Channels 외부 Consumer에서 접근 Django-Channels 공식 문서에 힌트가 될 부분을 찾았습니다. Channels-Layer를 외부 Consumer에서 접근할 수 있는 방법에 대한 설명이었는데, 이 부분을 잘 활용하면 Django api로 웹소켓에 접근이 가능해보였습니다. ⚠️ 여기서 데이터를 받는 Consumer는 WebsocketConsumer를 통해 생성되었습니다. from channels.layers import get_channel_layer channel_layer = get_channel_layer() 먼저 이렇게 get_channel_layer() 함수로 channels를 조작할 수 있는 객체를 받을 수 있었습니다. await channel_layer.group_send( chat_name, {"type": "chat.system_message", "

실패의 위험에서 비롯되는 성취감

지난 ' 게임 조작에서의 즐거움 '이라는 글을 쓸 때 '툼 레이더'에 대한 이야기를 했었습니다.현대의 툼 레이더와는 달리 과거의 툼 레이더는 조작을 할 때 비교적 어렵고 실패할 가능성이 있었습니다. 저는 툼레이더의 변화가 꼭 필요했다고 생각하지만, 그래도 조작의 변화에 따른 플레이어의 생각과 경험이 달라졌다는 것에 아쉬움이 있습니다. 이 글에는 그 '아쉬움'에 대해 다뤄보려고 합니다. 먼저, 제가 전에 적었던 적이 있는 ( Super Mario Bros. 1-1스테이지 레벨 디자인 (1) ) 슈퍼 마리오 브라 더스1의 예시입니다. 위의 예시에서도 볼 수 있듯이 첫 번째 계단은 바닥이 있어서 플레이어가 별 생각 없이 넘어가는 경향 이 있습니다. 하지만 두 번째 계단은 바닥이 없기 때문에 실패할 가능성이 있습니다. 하지만 두 번째 계단은 약간 넓 은 발판이 있기 때문에 쉽게 넘을 수 있고, 그에 따른 성취감도 받을 수 있습니다. 닌텐도는 플레이어에게 안전하게 연습을 시킨 후 실패할 가능성이 있는 문제를 만들어서 플레이어에 게 성취감을 주는 시도를 잘 합니다. 이런 닌텐도의 디자인은 플레이어에게 먼저 연습할 기회를 주기 때문에 실패할 가능성이 적어지고 성 취감을 주기에 쉽습니다. 좋은 게임 디자인을 만들기 위해서는 이렇게 플레이어가 알지 못하게 튜토리얼을 주고, 비교적 어렵 고 실패할 가능성이 있는 문제를 배치시켜 성취감을 주는 요소가 필요합니다. 또한 많은 게임에서 차용하고 있는 난이도 시스템이 있습니다. 이 난이도 시스템은 더 어려운 플레이 경험을 만들고, 비교적 좋은 보상을 주는 경우도 있습니다. 하지만 많은 플레이어들은 그 보상보다는 성취감을 찾기 위해 어려운 난이도를 선택하는 경향이 있습 니다. 최근에 나온 레지던트 이블 RE:2같은 어드벤처 게임들에서 특히 드러나는데, 이런 게임들에서 높은 난이도는 장르 특성상

PC와 모바일 플랫폼의 연동

PC나 다른 콘솔 플랫폼과 모바일의 차이점은 모바일 환경은 장소에 구애받지 않는 것입니다. 모바일 환경은 장소에 구애를 받지 않고 언제 어디서든지 접근할수 있다는 것이 특징이지만 PC에 비해 낮은 성능이나 작은 화면, 조작의 제한 등 여러 이유 때문에 PC나 가정용 콘솔의 게임 환경을 구축하는 것은 불가능합니다. 하지만 모바일 환경의 특성일 이용해 모바일에서 그 게임의 또 다른 컨텐츠를 만들 수 있습니다. 특히 스마트폰은 터치 스크린을 이용한 조작을 하기 때문에 적절하게 최적화된 UI만 있다면 PC나 콘솔에 비해 비교적 직관적이고 편하게 이용할 수 있습니다. 또한 모바일 환경에서는 그 게임의 제한된 기능만을 사용하기 때문에 빠르고 가볍게 여러 간단한 정보나 기능들을 사용할 수 있다. 예를 들어, FIFA시리즈는 모바일과 콘솔 FIFA시리즈를 연동시켜 모바일에서 게임을 할 순 없지만 선수 이적시장을 이용하고, SBC라는 컨텐츠를 이용하는 등 필요한 것만 빠르게 사용할 수 있게 만들었습니다. FIFA19의 모바일 어플 비슷하게 넥슨의 FIFA온라인 또한 'FIFA ONLINE 4 M'이라는 모바일 앱을 개발하여 선수 영입 및 싱글 플레이 등 PC와는 완벽히 똑같은 게임을 즐길 순 없지만 모바일 환경에서 할 수 있는 여러가지 기능들을 사용할 수 있습니다. 훌륭한 예시로 2015년 8월에 종료된 '배틀필드4'의 태블릿 컴퓨터를 이용한 지휘관 시스템이 있습니다. 배틀필드4의 지휘관 시스템은 PC에서도 즐길 수 있지만 특성상 큰 성능이 필요하지 않고 크게 복잡한 조작을 할 필요가 없기 때문에 태블릿 환경에서도 충분히 즐길 수 있었고,  터치 스크린을 이용해 색다른 경험을 줄 수 있었을 뿐만 아니라 배틀필드의 이미지, 컨셉과 잘 맞아 어울렸습니다. '와치독스1' 또한 비슷하게 모바일 앱을 출시했었습니다. '와치독스 동반자'라는 이 어플은 와치독스