[사내메신저] MongoDB Error: tailable cursor requested on non capped collection

엘렐레로·2024년 4월 9일
0
post-thumbnail


유튜브 "메타코딩" 님의 스프링부트5.0 채팅서버 만들기
강의를 통해 만든 채팅서버를 구현하던 와중 에러가 발생하였다.

Sort: {}
Proj: {}
 tailable cursor requested on non capped collection' on server localhost:27017. The full response is {"ok": 0.0, "errmsg": "error processing query: ns=messenger.chat batchSize=256Tree: roomNum $eq \"100\"\nSort: {}\nProj: {}\n tailable cursor requested on non capped collection", "code": 2, "codeName": "BadValue"}] with root cause

com.mongodb.MongoQueryException: Command failed with error 2 (BadValue): 'error processing query: ns=messenger.chat batchSize=256Tree: roomNum $eq "100"
Sort: {}
Proj: {}
 tailable cursor requested on non capped collection' on server localhost:27017. The full response is {"ok": 0.0, "errmsg": "error processing query: ns=messenger.chat batchSize=256Tree: roomNum $eq \"100\"\nSort: {}\nProj: {}\n tailable cursor requested on non capped collection", "code": 2, "codeName": "BadValue"}
	at com.mongodb.internal.operation.FindOperation.lambda$exceptionTransformingCallback$6(FindOperation.java:364) ~[mongodb-driver-core-4.11.1.jar:na]
	at com.mongodb.internal.operation.AsyncOperationHelper.lambda$transformingReadCallback$19(AsyncOperationHelper.java:433) ~[mongodb-driver-core-4.11.1.jar:na]
..(중략)

📌 몽고DB - chat Collection 정보 조회 실패 Error:500

Room번호가 "100"인 채팅방에 조회하기 위한 url 👇 을 요청했는데.. 원하는 응답 데이터가 오지 않고..

// 예시
http://localhost:8080/chat/roomNum/100

아래 그림과 같이 에러만 발생했다.

해당 문제를 검색해본 결과 아래의 블로그에서 문제 원인과 해결방법을 찾을 수 있었다.
출처 - bw1611.log



📌문제 원인

// java console 에러 메세지
tailable cursor requested on non capped collection ...(중략)

tailable cursor(테일러 커서)는 capped collection(고정된 컬렉션)에서만 사용가능한데

😢 내가 요청한 chat 컬렉션은 tailable cursor(테일러커서)를 사용하지 못하는 non capped collection(고정되지 않은 컬렉션)이였기 때문에 위와 같은 에러가 발생했던 것이다.



📌문제 해결방법

문제 원인을 파악했으니... 문제 해결만 남았다.
문제 해결은 다음과 같다.

1. mongoDB Shell 설치

2. 설치된 폴더 > bin > mongosh.exe 실행

3. mongosh shell에 명령어 입력

3-1. 몽고DB 접속

mongodb://localhost:27017

3-2. 접근할 DB 목록 조회

show dbs
   내가 접근할 DB는 "messenger" DB 이다.

3-3. 원하는 DB 접근

use 원하는 DB명

3-4. 해당 DB 내의 Collection(컬렉션) 상태 확인

db.확인할 컬렉션명.stats()

위의 그림에서 볼 수 있듯이 chat 컬렉션의 capped 여부가 false
=> 즉, non capped 상태인 것을 확인할 수 있다.

3-5. Collection(컬렉션) - capped 유뮤 & 사이즈 변경

db.runCommand({converToCapped: '변경할 컬렉션명', size:8192})
ok면 변경에 성공했다는 의미이다. 그래도 혹시 모르니 다시 상태를 확인해보면...! 변경이 완료된 것을 완벽하게 확인할 수 있다.



✌️다시 한번 url 요청을 하면 에러없이 정상적으로 작동한다.

profile
꾸준히 열심히

0개의 댓글