기본 콘텐츠로 건너뛰기

7월, 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", "

게임 스트리밍 서비스의 미래

2019년 3월 20일에 공개된 구글의 '스타디아'라는 게임 스트리밍 서비로 인해 게임 스트리밍 서비스가 큰 화두가 되었습니다. 게임 스트리밍 서비스란 '클라우드 컴퓨팅'을 이용해 플레이어들이 게임을 따로 설치하지 않고, 기업에서 제공하는 서버가 게임 파일 및 연산 등을 모두 처리합니다. 플레이어의 PC나 플랫폼은 조작에 발생하는 신호 및 화면만 송출하기 때문에 게임의 사양에 관계 없이 게임을 플레이 할 수 있다는 것이 큰 장점입니다. 또한, 불법 복제의 방지, 핵 방지, 설치를 안해도 된다는 점에서 기존의 게임 설치 방식과는 다른 많은 장점이 존재합니다. 'Stadia 공식 Recap 영상' 이런 게임 스트리밍 서비스는 고성능 PC가 충분히 보급되지 않은 대부분의 사람들에게 큰 영향을 끼칠 것으로 보입니다. 또한, NVIDIA나 AMD, INTEL 등 그래픽카드 등의 컴퓨터 부품을 제공하는 업체에도 상당한 영향을 줄 수 있을 것이고, 대부분의 게임 개발 업체에서도 눈 여겨 보고 있을 것입니다. 실제로, 닌텐도, MS, 베데스다 등에서 줄줄히 게임 스트리밍 서비스를 지원하겠다고 발표 하기도 했습니다. 현재 스트리밍 서비스를 제공하는 업체 중 가장 활발한 것이 소니의 'Playstation Now'이기 때문에 PS Now의 예를 한번 보겠습니다. Playstation Now는 현재 한국에선 플레이 할 수 없고 타 주요국에서 제공되고 있는 PS4와 PC에서 제공하는 게임 스트리밍 서비스입니다. PC에서 PS의 독점작들을 플레이 할 수 있다는 점에서 사람들에게 큰 관심을 모았습니다. 또한 저사양 PC에서도 인터넷 회선만 잘 돼있다면 고사양의 게임들을 즐길 수 있고, 생각보다 지연 시간이 적었다는 점에서 많은 호평을 받기도 했습니다. 하지만 PS Now에도 여러가지 단점이 존재 했습니다. 먼저, 720p해상도 고정, PS Now는 1080p이상의 해상도를 지원하지 않

닌텐도가 게임을 제작하는 특별한 방법 (2)

▲이 글의 대부분은 Game Maker's Toolkit의  Nintendo - Putting Play First  영상에서 인용하였습니다. 닌텐도는 'Form follows function' 즉 '기능은 형태를 따른다'는 법칙을 잘 따릅니다. 어떻게 생겼는지가 어떻게 행동하는지를 결정한다는 것 입니다. 부끄부끄가 마리오가 쳐다보면 부끄러워하는 것과 슈퍼 마리오에서 쿼터백 처럼 생긴 적이 마리오를 향해 달려오는 것이 그러한 이유입니다. 이런 기능은 형태를 따른다는 것은 게임의 일부분이 아니라 게임의 전반적인 중심 컨셉을 만들기도 했습니다. 스플래툰은 프로토타입 단계에서 그저 네모난 흰 상자가 물총을 쏘는 게임이었습니다. 잉크를 쏘고 잉크 속으로 들어가는 등의 컨셉을 가장 잘 나타낼 수 있는 캐릭터가 지금 스플래툰의 오징어 캐릭터인 것입니다. 2010년 발매한 털실 커비 이야기에서는 털실로 된 커비가 등장하기 때문에 기존의 별의 커비 시리즈에서는 볼 수 없었던 털실을 이용한 새로운 컨셉들이 만들어지기도 했습니다. 게임의 중심 컨셉을 그 게임의 세계에서 유기적으로 작용하게 만드는 것이 닌텐도가 게임을 재미있게 만드는 힘입니다. 털실 커비 이야기의 특별한 게임 플레이 또한 스프래툰의 잉크 발사는 마치 스프레이를 뿌리는 것과 비슷하다고 여겼기 때문에, 게임에 펑키한 음악과 세계관을 만들었고, 비슷하게 슈퍼 마리오 션샤인에서는 물총을 이용한 게임 플레이가 여름을 생각하게 만들었기 때문에 게임의 배경이 해변과 열대 섬이 되기도 했습니다. 이처럼 게임의 중심적인 기믹을 만들고 그에 알맞는 배경과 음악, 세계관 등을 만들고 반대로 배경에 맞는 중심 컨셉을 만들 수도 있는 이 닌텐도의 '형태는 기능을 따른다'라는 말의 핵심입니다. 펑키한 스타일의 스플래툰 젤다의 전설 시리즈는 닌텐도의 게임 중 가장 다양하고 완성도 높은 시리즈

닌텐도가 게임을 제작하는 특별한 방법 (1)

▲이 글의 대부분은 Game Maker's Toolkit의 Nintendo - Putting Play First 영상에서 인용하였습니다. 게임 제작에 있어서 시작을 어떻게 할 것인지는 굉장히 중요합니다. 어떤 개발사는 게임의 스토리를 먼저 제작하기도 하고, 또 어떤 곳에선 플레이어의 경험, 감정을 중심으로 시작하기도 하며, 기존의 게임에서 어떤 기능들을 추가하면서 시작하기도 합니다. 하지만, 닌텐도의 경우에는 다른 개발사들과는 크게 다른 점이 있습니다. 새로운 마리오 시리즈나 젤다의 전설 등의 게임을 제작할 때 하나의 목표가 있습니다. 바로 게임을 플레이하는 새로운 방법을 만드는 것입니다. 이런 새로운 방법이 그 게임의 사운드, 그래픽, 적과 싸우는 방법 등 모든 것을 결정하게 됩니다. '미야모토 시게루'의 말에 따르면 "That's how we make games at Nintendo, though: we get the fundamentals solid first, then do as much with that core concept as our time and ambition will allow" "우리는 먼저 기본적인 부분을 확실하게 만든 다음, 그 핵심 컨셉을 가지고 시간과 야망이 허락하는 최대한으로 개발합니다." '미야모토 시게루'의 말에서 가장 중요한 것은 'core concept' 즉 핵심 컨셉을 가지고 개발한다는 것 입니다. 닌텐도의 많은 게임들은 메인 캐릭터가 또 어떤 새로운 컨셉과 액션을 어떻게 보여줄지부터 시작합니다. 닌텐도의 가장 유명한 캐릭터인 마리오는 그 예를 가장 잘 보여주고, 최신의 게임에도 많은 부분에서 닌텐도의 개발 철학을 잘 보여주는 캐릭터입니다. 마리오는 오로지 '점프'라는 컨셉을 가지고 만들어진 캐릭터입니다. 그 점프라는 중심적인 컨셉