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같은 어드벤처 게임들에서 특히 드러나는데, 이런 게임들에서 높은 난이도는 장르 특성상