도찐개찐

[SpringBoot] MongoDB 설치 및 MongoTemplate vs MongoRepository 빈등록 관리 본문

JAVA/SpringBoot

[SpringBoot] MongoDB 설치 및 MongoTemplate vs MongoRepository 빈등록 관리

도개진 2023. 7. 21. 10:22
 

[MongoDB] 사용자 계정 생성 및 권한 관리

일반적으로 DB 서버에서 사용하는 계정의 종류는 크게 두 가지로 나눌 수 있습니다. DB 관리자가 사용하는 어드민용 계정과 실제 애플리케이션 서버에서 DB 접근 시 사용하는 사용자(서비스) 계정

blog.dev-truly.dev

1. spring-boot-starter-data-mongodb 의존성 주입

https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-mongodb

상기 경로에서 본인 환경에 맞는 버전의 spring-boot-starter-data-mongodb 의존성을 주입해 줍니다.

# build.gradle

implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-mongodb', version: '2.6.7'

# pom.xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
    <version>2.6.7</version>
</dependency>

2. application.yml, application.properties 커넥션 정보 설정

// application.yml
server:
  port: 8088

spring:
  data:
    mongodb:
      host: localhost
      port: 27017
      authentication-database: admin
      username: montest
      password: montest!@34
      database: montest
      
// application.properties
server.port=8088

spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.authentication-database=admin
spring.data.mongodb.username=montest
spring.data.mongodb.password=montest!@34
spring.data.mongodb.database=montest

mogodb.host -> 접속할 db의 ip 주소

mongodb.port -> 접속할 db의 port 번호

mongodb.authentication-database -> 접속할 계정이 위치한 db의 이름

* authentication-database는 MongoDB에서 인증을 수행할 때 사용하는 데이터베이스를 지정하는 속성입니다.

MongoDB는 사용자 인증에 데이터베이스 별로 다른 사용자 권한을 부여할 수 있습니다. 따라서, 어떤 데이터베이스에 대한 접근 권한이 있는지를 지정할 때, 해당 데이터베이스의 사용자 권한을 확인하려면 해당 데이터베이스에서 인증을 해야 합니다. 그러나 실제로는 많은 경우에 admin 데이터베이스에서 사용자를 관리하며, 다른 데이터베이스에 대한 접근 권한도 여기에서 관리됩니다.
예를 들어, mydb 데이터베이스에 접근 권한을 가진 사용자로 인증하려는데, 사용자 권한이 admin 데이터베이스에 저장되어 있다면 authentication-database 속성에 admin을 설정해야 합니다.

mongodb.database - > 접속할 database 이름

mongodb.username -> 접속할 계정 이름

mongodb.password -> 접속할 계정 비밀번호

 

3. MongoDB Collection 매핑 Document 객체 생성

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Data
@Document(collection = "user")
public class MongoUser {
    @Id
    private String _id;
    private String userId;
    private String userName;
    private String userPwd;
    private String userMobile;
}

4. MongoRepository 생성

MongoRepository 상속받고 직전 생성한 MongoUser Document를 매핑 할수 있게 작성해 줍니다. 

JpaRepository, CrudRepository 작성 방법의 차이는 없습니다.

import com.example.mongotest.documents.MongoUser;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface MongoUserRepository extends MongoRepository <MongoUser, String> {
}

 

5. 실행 플로우 작성(run 파일 수정)

import com.example.mongotest.documents.MongoUser;
import com.example.mongotest.repository.MongoUserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.data.mongodb.core.MongoTemplate;

@SpringBootApplication
public class MongoTestApplication {
    @Autowired
    MongoUserRepository mongoUserRepository;

    @Autowired
    MongoTemplate mongoTemplate;

    public static void main(String[] args) {
        SpringApplication.run(MongoTestApplication.class, args);
    }

    @Bean
    ApplicationRunner applicationRunner() {
        return args -> {
            // MongoRepository 를 이용한 데이터 등록
            MongoUser mongoUser = new MongoUser();
            mongoUser.setUserId("repository");
            mongoUser.setUserName("몽고르포");
            mongoUser.setUserPwd("repository1234");
            mongoUser.setUserMobile("01011111111");
            mongoUserRepository.save(mongoUser);

            // MongoTemplate를 이용한 데이터 등록
            MongoUser mongoUser2 = new MongoUser();
            mongoUser2.setUserId("template");
            mongoUser2.setUserName("몽고템");
            mongoUser2.setUserPwd("template1234");
            mongoUser2.setUserMobile("01022222222");
            mongoTemplate.insert(mongoUser2);
        };
    }
}

 

5. 어플리케이션 실행(정상 등록 확인)

 

728x90
Comments