기본 콘텐츠로 건너뛰기

4월, 2020의 게시물 표시

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

사람들이 동물의 숲에 열광하는 이유 (1)

지난 3월 20일, 사람들에게 큰 기대를 받으며 출시한 한 게임이 있습니다. 닌텐도의 주요 프랜차이즈 중 하나인 동물의 숲 시리즈의 신작 '모여봐요 동물의 숲'이란 게임입니다. 이 게임은 다른 게임들과는 많이 다릅니다. 3월 20일에 함께 출시한 게임 '둠 : 이터널'과도 정말 다른 게임이죠. 많은 사람들이 플레이 하는 자극적이고 폭력적인 게임들은 정말 많습니다. 당장에 흔히들 얘기하는 국내 PC방 순위를 보면 싸우고, 또 싸우는 게임들이 대부분입니다. 하지만 이 게임에선 싸움도, 갈등도, 재촉도 없습니다. 그저 정해진 공간에서 살아갈 뿐입니다. 사람들이 좋아하는 자극적인 컨텐츠도 없이 어떻게 이 게임은 사람들에게 매력적인 게임으로 다가왔을까요? (제가 생각하는) 첫 번째 이유는 모든 컨텐츠에 피로도가 없다는 점입니다. 제가 플레이 했던 게임 중에 동물의 숲과 그나마 유사한 게임이 있다면 '스타듀 밸리'란 게임입니다. 스타듀 밸리 또한 동물의 숲과 마찬가지로, 전투 등 자극적인 컨텐츠는 거의 없고, 농사를 짓고, 낚시를 하며 하루하루를 보내는 게임입니다. 하지만 이 게임에는 '피로도'라는 시스템이 있습니다. 오른쪽 하단의 피로도, 출처 그래서 제가 스타듀 밸리를 플레이 했던 경험과 동물의 숲을 플레이 했던 경험은 매우 달랐습니다. 스타듀 밸리를 플레이 하는 저는 정해진 피로도 속에서 어떻게 더 효율적으로 플레이 할 수 있을까 고민하고, 실수로 물을 뿌린 곳에 또 물을 뿌리면 아차, 하고 아쉬워 하기도 했습니다. 이 정해진 피로도 속에서 효율적으로 플레이 해야한다는 생각이 계속 되다 보니, 스타듀 밸리를 플레이 하는 저는 힐링을 하러 온 기분 보다 부자가 되기 위해 노력하는 기분이 들게 된것 같았습니다. 물론 두 게임이 추구하는 방향이 다르고, 다른 재미가 있는 것입니다. 물론 피로도를 채울 수 있지만, 그 피로도를 채우는