[MongoDB]스프링부트 프로젝트에 MongoDB 간단 적용(배포환경/Docker)

LeeYulhee·2023년 8월 22일
0

👉 도커에서 MongoDB 실행


docker run --name mongodb -v ~/data:/data/db -d -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=root mongo 

📌 명령어 설명

  • -v : 볼륨 폴더 설정
  • -d : Daemon 모드로 실행(백그라운드에서 실행)
  • -p : 포트 설정
    • MongoDB는 기본이 27017 포트
  • -e MONGO_INITDB_ROOT_USERNAME : ROOT 계정의 ID
  • -e MONGO_INITDB_ROOT_PASSWORD : ROOT 계정의 PASSWORD



👉 MongoDB ROOT 계정이 잘 만들어졌는지 확인하는 방법


  • docker exec -it mongodb /bin/bash
    • mongodb bash에 접속
  • mongosh -u root -p
    • 해당 명령어를 치면 비밀번호를 치라고 나옴 → 입력하면 접속
  • 접속 성공 확인
    • 기본 collection이 test라 test가 뜸



👉 MongoDB에 별도 권한을 가진 계정 생성


  • use chat

    • 사용할 DB로 이동
  • 계정 생성

    db.createUser(
       {
         user: "계정 ID",
         pwd: "계정 비밀번호",
         roles: [ { role: "readWrite", db: "사용DB" } ]
       }
    )
    • user에 계정 ID와 pwd에 계정 비밀번호를 입력하고, rolse에 권한과 사용 db를 입력
    • role(권한)은 MongoDB에서 내장 역할 제공(일부 기재)
      • ➕ Database-specific roles : 각각의 데이터베이스에 대한 역할
        • read : 데이터를 읽을 수 있는 권한을 부여
        • readWrite : 데이터를 읽고 쓸 수 있는 권한을 부여
        • dbAdmin : 데이터베이스 관리 작업에 필요한 권한을 부여
        • userAdmin : 데이터베이스 사용자 관리 권한을 부여
        • dbOwner : readWrite, dbAdmin, userAdmin의 모든 권한을 부여
      • ➕ All-database roles : 모든 데이터베이스에 대한 역할
        • readAnyDatabase : 모든 데이터베이스에 대한 읽기 권한을 부여
        • readWriteAnyDatabase : 모든 데이터베이스에 대한 읽기 및 쓰기 권한을 부여
        • userAdminAnyDatabase : 모든 데이터베이스의 사용자 관리 권한을 부여
        • dbAdminAnyDatabase : 모든 데이터베이스의 관리 권한을 부여


👉 권한 부여한 계정이 잘 생성되었는지 확인


  • mongosh -u 계정ID -p 계정 비밀번호 --authenticationDatabase 사용DB
    • --authenticationDatabase: 인증 데이터베이스를 지정


👉 스프링부트 프로젝트에 설정


  • application.yml
    spring:
      data:
        mongodb:
          host: 172.17.0.1
          port: 27017
          database: 생성할 DB 이름
          username: 계정 ID
          password: 계정 비밀번호
          authentication-database: 사용 DB(계정에 권한이 있는)
    • host의 주소는 Docker의 기본 브리지 네트워크에 대한 기본 게이트웨이 IP
      • 별도로 Docker의 IP를 다르게 설정했다면 해당 IP로 변경
profile
공부 중인 신입 백엔드 개발자입니다

0개의 댓글