Redis를 캐시로 사용하다 보면 반드시 만나게 되는 개념이 TTL(Time To Live) 입니다. TTL은 Redis에 저장된 Key가 얼마 동안 유지될지 지정하는 만료 시간 입니다. 캐시 데이터, 인증 코드, 세션, 임시 데이터처럼 일정 시간이 지나면 자동으로 삭제되어야 하는 데이터에 특히 유용합니다. 이번 글에서는 Redis에서 TTL을 설정하고 확인하는 방법부터 실무에서 주의해야 할 부분까지 정리해보겠습니다. 1. Redis TTL이란? Redis의 TTL(Time To Live)은 특정 Key가 만료되기까지 남은 시간을 의미합니다. 예를 들어 다음과 같은 데이터가 있다고 가정해보겠습니다. SET user:1001 "Alice" 별도의 만료 시간을 설정하지 않았다면 이 Key는 직접 삭제하기 전까지 계속 유지됩니다. 하지만 캐시 데이터라면 일정 시간이 지난 후 자동으로 제거하고 싶을 수 있습니다. 이때 EXPIRE 명령어를 사용할 수 있습니다. EXPIRE user:1001 60 위 명령은 user:1001 Key를 60초 후 만료 하도록 설정합니다. 2. TTL 확인하기 Key의 남은 만료 시간은 TTL 명령어로 확인할 수 있습니다. TTL user:1001 예를 들어 결과가 다음과 같다면, (integer) 42 해당 Key는 약 42초 후 만료된다는 의미입니다. TTL의 특수 반환값 TTL을 확인할 때는 -1 , -2 값을 알아두는 것이 좋습니다. TTL key 결과의 의미는 다음과 같습니다. 반환값 의미 양수 Key가 만료되기까지 남은 시간(초) -1 Key는 존재하지만 만료 시간이 설정되지 않음 -2 Key가 존재하지 않음 예를 들어, SET test "hello" TTL test 만료 시간을 설정하지 않았기 때문에 결과는 다음과 같습니다. (integer) -1 3. SET과 동시에 TTL 설...
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", ...