mongoDB 3

[MongoDB] 인증 활성화: DB 사용자 추가 방법 (docker compose)

All your data is a backed up. You must pay 0.01 BTC to 48 hours for recover it. 개발중에 절대 데이터가 날라갈리가 없는데, 데이터가 날라가서 보니 mongodb에 READ_ME라는 DB가 떡하니 생겨있었다. 랜섬웨어인데 지금은 개발도중이라 망정이지 실제 프로덕션에서 데이터가 날라간 상황을 생각하다면 아주 아찔하다. 이런 일을 방지하기 위해서 docker compose 사용시 mongodb 유저를 생성하여 컨테이너를 운용하는 방법을 살펴보도록 하겠다. # MongoDB 사용자(User) 만들기 먼저, mongodb /data/db 볼륨이 마운트되어있다고 가정, mongodb가 돌아가고있는 컨테이너속으로 들어간다. docker exec -it s..

[Next.js] MongoDB 연결하기 (next-connect, typescript)

next-connect는 Next.js에서 미들웨어를 사용할 수 있게 도와주는 라이브러리다. 여기서 말하는 미들웨어는 웹 서버에서의 미들웨어(Middleware)와 의미가 통하는데, 요청과 응답 사이 중간에서 한번 거치면서 수행되는 함수다. 보통 여기서 연결된 DB 객체를 넘겨준다던가 세션 관리를 하게된다. 시작하기 몽고 DB를 설치하자. 귀찮게 몽고DB설정까지는 다루지 않을 것이다. 사실...패키지 설치부터 말하는 것 조차 귀찮지만!ㅋㅋㅋ yarn add mongodb middleware라는 폴더를 생성하고, 그 아래에 database.ts를 추가시켜 주자. 이 파일에서는 연결된 mongodb가 없다면 새로 연결해서 req 객체에 담아 넘겨줄 것이다. src/ ├── pages/ │ └── api/ │..

[MongoDB] upsert시 E11000 duplicate key error 해결

unique index가 걸린 컬렉션에 bulkWrite를 통해서 upsert를 하고 있었는데, E11000 duplicate key error가 떴다. 내가 작성한 코드는 다음과 같았는데, 주목해보면 filter 부분에 내가 집어넣으려는 모든 데이터가 들어있다. tasks.append(UpdateOne(item, {"$set": item}, upsert=True)) Upsert는 다음과 같은 3개의 스텝으로 이루어진다. 1. filter에 따라 식별되는 도큐먼트를 찾는다. 2. 도큐먼트가 존재하면, 해당 도큐먼트를 atomic하게 업데이트한다. 3. 존재하지 않는다면, atomic하게 도큐먼트를 삽입한다. 나는 filter를 제대로 설정하지 않았다. filter에는 중복값을 식별할 수 있을만한 최소의 ..