기본 콘텐츠로 건너뛰기

12월, 2018의 게시물 표시

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스테이지 레벨 디자인 (2)

저번 글에 이어서, 이 네개의 파이프를 보면, 네번째 파이프에 비밀 통로가 있습니다. 이 비밀 통로는 이 게임에 익숙한 플레이어들에게 제공되는것입니다. 이 게임을 처음 플레이하는 사람들은 알 수 없습니다. 닌텐도는 이런 식으로 숙련된 플레이어에게 숏컷같은 길을 만들어 두었습니다. Super Mario Bros. 1-2스테이지나 4-2스테이지의 워프 존 등이 그렇죠. 그리고 플레이어들은 첫번째 난관에 도달합니다. 끝이 없는 절벽입니다. 숙련되지 못한 플레이어들을 위해 보이지 않는 벽돌을 설치했습니다. 절벽에 떨어지게 점프한 플레이어들은 그 벽돌에 부딫혀 살 수 있게 되죠. 그리고 그 벽돌에선 마리오의 생명을 한 개 늘려주는 버섯을 발견하게 됩니다. 하지만 이 버섯이 좋은 버섯인지, 나쁜 버섯인지 플레이어들은 어떻게 알 수 있을까요? 처음 굼바와 버섯이 나왔을 때 이 오브젝트들이 움직이는 방향에 대해 이야기 했었습니다. 독버섯처럼 보이는 이 버섯은 엄청 빠르지만 마리오의 진행 방향과 같습니다. 이것은 플레이어들에게 매우 좋은 보상을 준다는 의미라고 할 수 있습니다. 또한, 이 버섯은 숙련된 플레이어에 대한 보상이기도 합니다. 또한, 이 장소에 보이는 버섯은 슈퍼 마리오 상태일때 꽃이 나오는데, 이것은 파이어 마리오로 변할 수 있습니다. 그리고 여기선 처음으로 굼바가 위에서 아래로 떨어집니다. 이것으로 플레이어들은 굼바에게 어떤 중력 법칙이 적용되는 지 알 수 있습니다. 그리고 플레이어들은 굼바가 떨어지는 곳에 아마 점프를 할 것입니다. 어떤 일이 벌어질까 호기심이 생기기 때문이죠. 그리고 플레이어들은 굼바를 처치하는 새로운 방법을 배우게 됩니다. 그리고 아마 (파이어)마리오는 불을 던지는 능력을 터득했을겁니다. 변한 마리오의 모습에 아무 버튼이나 눌러봤기 때문이죠. 그

Super Mario Bros. 1-1스테이지 레벨 디자인 (1)

닌텐도의 Super Mario Bros.는 한때 가장 많이 팔린 비디오 게임 중 하나이고, 역사상 가장 위대한 게임 중 하나일 것입니다. 닌텐도는 타 게임의 '글로 설명하는 튜토리얼'보다 자연스럽게 알아가는 튜토리얼을 잘 만든다고 생각합니다. 이것은 그 당시 롬파일 용량 때문일 수도 있었겠지만, 그것이 현재의 닌텐도 게임까지 이어지고 있죠. 이러한 튜토리얼 방식은 플레이어들에게 더욱 큰 성취감을 주고, 플레이어들에게 불합리하다는 생각을 버리게 합니다. 이 게임의 1-1스테이지는 자연스러운 튜토리얼을 잘 유도했다고 생각합니다. 플레이어가 게임을 시작하면 이 화면을 보게 될 것입니다. 이 화면을 보시면 마리오가 화면의 왼쪽에 있고, 오른쪽을 바라보는 것을 알게 될겁니다. 또한 Super Mario Bros.는 오른쪽으로 이동하면 다시 왼쪽으로 돌아갈 수 없습니다. 이것은 마리오의 진행 방향이 오른쪽이라는 것을 알려주는 것이죠. 그리고 혼자 떨어져있는 ?가 그려진 박스를 볼 겁니다. 이 박스는 플레이어들이 호기심을 가질 수 있는 형태로 만들어졌습니다. 그리고 플레이어들이 다가가면, 굼바를 발견하게 되죠. 굼바는 마리오의 적입니다. 근데 닌텐도는 이것을 플레이어들이 어떻게 인지하게 만들었을까요? 먼저 굼바의 모습입니다. 굼바의 눈썹은 누가봐도 화나있는 모습이죠. 그리고 굼바는 오른쪽에서 왼쪽으로 움직이고, 마리오와는 반대 방향입니다. 굼바를 피하기 위해 플레이어는 점프라는것을 배우게 됩니다. 굼바를 해치운 마리오는 ?가 그려지고 공중에 떠있는 박스에 점프를 할 것입니다. 왜냐구요? 플레이어에게 주어진건 좌,우 움직임과 점프 뿐이거든요. 그럼 플레이어는 그에 맞는 보상을 받게 되고, ?모양의 박스는 좋은 것이라는 것을 알게 되죠. 그리고