2024. 11. 15. 13:00ㆍ문제해결
사건
내가 하고자 했던 것
=> 내가 만든 로직 프론트랑 테스트하기
내가 만드려는 로직은 ?
=> 채팅을 Redis 캐시로 저장 후 celery가 일정 시간마다 Redis에서 데이터를 가져와 메인 DB에 저장하는 걸 구현하려고 했음...!
사건은 여기서부터 시작됨...!
프론트에서 채팅을 입력시 확인은 되는데 레디스에 확인이 안 됨
-> 채팅이 redis로 안 넘어감 이슈
어라랏? 왜 안 넘어가지...?
웹소켓 연결도 잘 되어있고 도커도 잘 켜져있고... 문제가 되는 것은 없음..!
시도
- 그럼 redis에서 celery 로 넘어갈 땐 잘 되나?
1. redis 컨테이너 접속
docker-compose exec redis bash
redis-cli
2. 직접 데이터 넣기(참고로 난 redis stream을 사용 중이다)
XADD chat_chat_room * user "test_user" message "test_message" topic "test_topic"
3. 조회
XREAD STREAMS chat_room 0
이렇게 하면 데이터는 확인이 됨.
하지만 셀러리 실행시 ? 셀러리는 못 찾음...
나는 보이는데.. 왜 넌 못 찾는거니... 응..?
음. 그럼 레디스에 캐시 저장도 안 되고,
셀러리를 이용해 메인 DB에 저장하는 것도 안 되는 것인가 ..? 하하!
원인 분석
- 아예 프론트에서 채팅이 들어가지 않았다. -> 이건 아님 그랬다면 다른 오류가 생겼어야 함
- 레디스에 연결하는 주소가 잘못 되었나?
시도 2
- 찾아보니, 데이터가 저장되는 키와 찾아오는 키가 달랐음
메시지가 redis stream에 추가 될때 room_group_name으로 메시지 추가
celery가 redis stream에서 메시지를 찾아올 땐 'chat_room'이라는 이름으로 찾아옴
내가 설정한 room_group_name 은?
chat_chat_room .... 하하!
그러니까 결론은... 레디스에다간 chat_chat_room으로 설정해놓고..
celery한테는 chat_room이라는 키값을 주었던 것! 세상에 ...
1차 해결
이후 room_group_name이 chat_room으로 되게끔 변경 했음!
celery가 그 위치는 인식하는 거 같았으나 ... 똑같이 데이터가 없었음.
2차 해결
- 왜 아직도 데이터 없을까? 저장하는 타입이 문제였나 ? -> 데이터 형식 맞춰주기
message, user, topic를 넘겨주는데 topic이 문제가 있나 싶어서 데이터 형식 맞춰주는 작업을 함
topic은 모델 자체를 들고오는 로직이었는데, 다 들고오는 것이 아닌, 모델 안에 있는 text 만 가져다가 저장하는 방식으로 바꿈
음 이렇게 했는데도 잘 안 됐음....
왜 안 되지?
마지막 해결
결론? 다른 곳에 저장이 되고 있었음 ...ㅎ
하하 ㅋㅋㅋㅋㅋ ㅠㅠ
고양이님한테 sos 쳐서 고양이님이 내 코드 하나씩 뜯어보는데 엄청난 걸 발견 해버리심..
막간 지식
redis의 db는 0~15번까지 총 16개로 이루어져있음 redis의 기본 db는 0번임.
내가 redis에 설정해놓은 db는? 1번방...
celery한테 찾으라고 알려준 방 번호는? 0번방...
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
허무 그잡채 ...
계속 프론트에선 1번 방에 데이터를 넣고 있었고, celery는 0번 방에서 데이터를 찾고 있었음
이게 맞나...
이후 db를 0번방으로 통일 해서 해결함...ㅎ
== redis를 제대로 공부하지 않고 플젝을 시작한 자의 최후 ...
괜찮아~ 이러면서 공부하는 거지 뭐!
하....