몽고디비 데이터 중복 판단 문제 발생 :: 트러블 슈팅

2022. 12. 7. 18:19백엔드 Back-end

몽고디비 데이터 중복 판단 문제 :: 트러블 슈팅

 

Nodejs로 만든 API로 Axios를 이용해 POST 요청을 보내 최종 테스트 중인데 자잘한 버그? 약간 치명적일 수도 있는 버그를 발견해 놀라움을 감추지 못하고 있다. 아래 첨부 사진을 보면 무슨 말인지 알것이다.

 

 

문제 상황

/user/signup 으로 데이터를 전송했을 때

성공적으로 데이터 생성 및 성공 코드 반환

이번에는 비슷하지만 중복되지 않는 아이디를 넣고 악시오스 요청을 보내봤다

디비에 중복된 데이터가 없는데도 불구하고 상태코드 400에  '중복된 아이디 입니다' 라는 에러 코드를 반환한다.

몽고디비 자체에서 엄격하게 중복 단어가 들어가면 똑같은 데이터라고 친다고 하자. 그래도 에러 메시지가 들어왔으면 최소 디비에는 값이 들어가면 안되는데 디비에도 값이 들어가있다.

 

해결하기 ::

오류의 원인을 정확이 따지려면 경우의 수를 따져봐야 한다.

 

비교 대상 ::

디비에 들어가 있는 정보는 doodlerrr1234

 

전제 ::

- 디비에 저장 되어있는 아이디는 doodlerrr1234

- 비밀번호는 모두 동일하게 실험 진행

 

경우의 수 :: 

1. doodlerrr, doodler, doodlerr, doodle, doodlee, doodleeee로 가입 시도

✔︎ 가정 :: 

똑같은 문자의 중복이 문제가 될 것이다

✔︎ 시행 ::

같은 문자의 중복이 있을 경우 가입이 되는지 확인

✔︎ 결과 ::

같은 문자열이 들어가 있거나 아이디 문자열 보다 적지만 아무튼 겹치는 문자열이 있을 때는 가입이 잘 된다.

(1) 가입 성공 메시지 반환 : INFO-200 :: 성공

(2) 런타임 평균 : runtime :: 78.985ms, runtime :: 50.405ms, runtime :: 62.27ms, runtime :: 73.176ms, runtime :: 54.563ms, runtime :: 57.427ms

 

2. doodlerrr1234

✔︎ 가정 ::

문자가 같고 숫자도 같은 경우는 당연히 안될 것이다.

✔︎ 시행 ::

완전히 같은 아이디(즉 중복되는 아이디)를 걸러주는 로직은 잘 작동되는지 확인

✔︎ 결과 ::

가정과 맞아떨어지게 잘 작동된다.

(1) 가입 실패 메시지 반환 : ERROR-400 :: 중복된 아이디 입니다

(2) 런타임 평균 :

5분 간격으로 1분기 2분기로 나누어 연속 5번 진행

  1 2 3 4 5 평균
1분기 34.938ms 32.961ms 31.36ms 35.21ms 33.385ms  
2분기            

 

3. 

가정 :: 똑같은 문자열이 있고 거기에 문자로 뒤에 뭔가 추가를 하면 들어가 질까?

 

 

 

 

\API 자체는 중복을 확인하는 몽고 디비 자체에서 거르는 것 같다.

해결

서버 코드에 다음 줄 추가해주니 해결되었다

 

if (password.includes(snsId))
return res
.status(400)
.send({ error: "패스워드에 아이디 값 사용 불가" });