기본 콘텐츠로 건너뛰기

5월, 2021의 게시물 표시

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

왜 게임 컨트롤러는 A, B, X, Y를 사용할까?

 XBOX나 닌텐도의 컨트롤러를 보면 A, B, X, Y의 알파벳으로 버튼을 구분하는 것을 알 수 있습니다. 근데 왜 하필 ABCD도 1234도 아닌 ABXY일까요? 이 버튼 배열을 처음 시작한 것은 닌텐도의 SNES입니다. SNES에서 처음으로 오른쪽의 버튼들을 4가지로 늘렸는데, 이때 추가된 것이 X와 Y버튼이었습니다. 사실 특별한 이유는 없고 X와 Y버튼이 추가되면서, 기존의 A, B 버튼들과 구분하기 위해 X Y로 만들어졌다는 것이 가장 근거가 있습니다. 아마 처음 SNES를 개발할 때, ABCD는 너무 재미가 없다거나, B,C,D는 비슷하게 생겨서 헷갈릴 수도 있거나,  등의 여러 이유가 함께 작용하지 않았나싶네요. 그리고 또 하나 재미있는 점은 닌텐도와 XBOX의 A, B 버튼의 방향이 반대로 되어 있다는 점 입니다. 닌텐도는 오른쪽이 A이고, XBOX는 왼쪽이 A버튼이죠. 이것도 그렇게 큰 이유는 없습니다. 닌텐도는 일본 기업이기 때문에 처음 NES를 개발할 때, 오른쪽에서 왼쪽으로 A와 B를 만들었습니다. 하지만 미국은 왼쪽부터 읽기 때문에 A, B가 반대로 된 것입니다. 최근에는 VR등 새로운 기술들의 개발과 함께 게임 컨트롤러들 또한 다양한 방향으로 변화하고 있습니다. 이렇게 새롭게 생겨나는 여러 컨트롤러들 또한 A, B, X, Y의 버튼들을 계속 사용하게 될 것인지 궁금해지네용