기본 콘텐츠로 건너뛰기

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

로그라이크 게임의 변형들

로그-라이크(Rogue-Like)게임이란 이름 그대로 1980년에 등장한 'Rogue'라는 아스키 코드를 이용한 게임과 그 게임 형식을 이어받은 게임들을 의미합니다. 'Rogue'게임 화면 보통 로그라이크게임의 특징이라 하면 영구적 죽음이라는 것이 있습니다. 플레이어가 게임 오버 되면 저장되는 데이터가 없이 모든 것이 끝나는 것입니다. 그 때문에 플레이어들은 게임을 플레이 하면서 선택 하나하나에 큰 중요성이 있고, 그에 따라 매우 신중하게 게임을 하게 됩니다. 그래서 로그라이크 게임만의 긴장감, 선택의 신중함 등이 있기 때문에 팬층이 매우 두터운 장르이기도 합니다. 역사가 매우 오래된 장르이기도 하기 때문에 'Dungeon Crawl', 'Net Hack'등 정통적인 로그라이크 게임에서 벗어나 여러가지 변형된 로그라이크 게임들도 생겨났습니다. 이런 게임들은 보통 로그라이크의 '영구적인 죽음'이라는 개념을 채용하여 긴장감을 유발시킨 게임들이 많습니다. 최근 얼리 엑세스로 후속작이 나온 'Risk of Rain'이라는 게임은 그런 점을 잘 활용했습니다. 플레이어의 캐릭터가 죽으면 그대로 게임이 끝이기 때문에 플레이어는 매우 신중하게 플레이 해야하지만, 수 없이 몰려오는 적들과 시간이 지날 수록 난이도는 점점 높아지기 때문에 빨리 탈출해야 하지만 그만큼 보상은 줄어드는 등의 시스템들이 서로 어우러져 플레이어를 정신 없게 만듭니다. 'Rogue Legacy'에서 영감을 받아 국내의 대학생들이 개발한 것으로 유명해진 'Dungreed'라는 게임 역시 비슷하지만 로그라이크 게임이 점점 변형되어 로그 레거시와 이 게임에선 '영구적인 죽음'과는 다른 점이 있습니다. 캐릭터가 죽어도 얻었던 보상으로 캐릭터나 마을을 업그레드 할 수 있다는 점입니다. 그렇기 때문에 플레이어들은 죽