TIL_2023.06.16

이얏호·2023년 6월 16일
0
post-custom-banner

어제까지 작성했던 프로젝트를 가지고 현재 조원분들 중에 아직 완료가 되지 않으신 분이 계셔서 주말간 완성하신 이후에 코드리뷰를 하기로 했고, 대신 이전 조 사람들과 코드리뷰를 하는 시간을 가졌다.

코드리뷰를 하면서 문제가 되었던 부분에 대해서 이야기를 나누는데, 어제 TIL에 적었던 postId의 Unique 값이 true일 때, comment가 해당되는 post의 postId값을 참조하여 자신의 postId로 삼는 과정에서 둘 다 Unique가 true였다가 comment를 false로 바꿔주었으나 오류가 여전히 발생하는 상황이 있었다고 적었었다.
나는 해당 오류를 스튜디오 3T를 통해서 직접 해당 DB를 삭제하는 방식으로 해결했었는데,
해당 문제를 해결하는 indexDrop방법이 존재했다.


해당 방법을 실험하기 위해서 만들었던 프로젝트를 복사하여 ex_NB라고 rename해주었다.

상황을 재연하기 위해 일단 post와 comment 모두에서 postId Unique 값을 true로 설정해둔 후,
한 번씩 POST 요청을 보냈다.


comment 역시 첫 1회는 저장이 잘 되었으나,
2번째 저장되는 시점에서 Unique가 true이므로 에러가 발생하면서 서버가 다운되었다.

이후 comment의 Unique값을 false로 수정하여도 기존 값때문에 저장이 되지 않는다.

여기서 로컬 환경이어서 3T같이 데이터 베이스의 조작이 간편하다면 해당 테이블을 드랍하거나, db를 드랍하여서 문제를 해결할 수 있지만 EC2를 통해서 서버배포 후에 해당 상황이 발생했다면 조작이 어렵다...

하지만! 해결 방법을 배워왔다.


  1. git bash, cmd 등 터미널을 실행 한 후,
    신 버전 기준으로 mongosh
    구 버전 기준으로 mongo를 입력하여 접속한다.

  2. show databases 명령어를 통해 데이터 베이스 목록에 접근한다.

  3. use (db이름) 명령어를 통해 원하는 db에 접속한다.

  4. show collections 명령어를 통해 Collextions의 내용을 확인한다.

  5. db.(테이블명).getIndexes()으로
    문제가 생긴 테이블의 내용을 확인한다.

  6. 문제되는 부분을 indexDrop한다.

이렇게되면 index값이 drop되고 이후에 Unique false 처리된 comments들이 정상적으로 저장된다.


EC2환경에서 해당 문제가 발생했는데, 특정 정보를 삭제하는 방법을 몰라서 mongoDB 자체를 지웠다가 재설치 한 분도 계셨는데, 해당 방법을 사용하면 지켜야하는 다른 data도 삭제하지 않으면서 문제를 간편하고 빠르게 해결 할 수 있다.

profile
열심히 신나게 화이팅!
post-custom-banner

0개의 댓글