Spring/MongoDB

스프링에 MongoDB 연결하고 데이터 입력하는 서비스 만들어보기

Dev.Cho 2024. 4. 16. 07:34

스프링에 MongoDB 연결하기

스프링 MongoDB 의존성 추가하기

스프링 부트 프로젝트에 MongoDB를 연결하기 위해서는 build.gradle.kts 파일에 MongoDB 라이브러리에 대한 의존성을 추가해야 한다. 다음과 같이 의존성을 추가하자.

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-data-mongodb")
    ...
}

 

이후 프로젝트를 다시 빌드해 라이브러리를 다운로드한다. 

 

application.properties에 MongoDB 정보 추가하기

application.properties 파일에는 실행 중인 MongoDB의 정보 세 가지를 추가해야 한다. spring.data.mongodb.host에는 MongoDB가 실행 중인 호스트 이름을 쓰고(여기서는 localhost를 사용), spring.data.mongodb.port에는 포트 정보를 쓴다. 만약 MongoDB에 별도로 설정을 하지 않았으면 기본 포트 번호는 27017 번이다. spring.data.mongodb.database에는 데이터베이스 이름을 쓴다. 여기서는 mydatabase를 사용한다.

spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=mydatabase

 

최종 완성된 application.properties의 모양은 다음과 같다.

 

그림1. application.properties파일

 

여기까지 스프링에 MongoDB 연결이 완료됐다.

 

MongoDB 사용해 데이터 입력하는 서비스 만들어보기

Document 만들기

다음은 MongoDB에서 사용할 Document를 만들어야 한다. 이곳에서는 유저의 정보를 저장하는 User 클래스를 Document로 만들었다. 이 클래스는 이제 MongoDB의 users 컬렉션에 저장될 것이다. 

@Document(collection = "users")
data class User(
    @Id
    val id: String? = null,
    val username: String,
    val email: String
)

 

그림2. User Document

 

Repository 만들기

다음에는 Document에 대한 CRUD연산을 실행하는 Repository를 만들어야 한다. 이곳에서는 MongoRepository를 상속 받는 UserRepository를 다음과 같이 만든다.

interface UserRepository : MongoRepository<User, String>

 

MongoRepository를 상속 받는 UserRepository 인터페이스는, 아까 추가한 MongoDB에 대한 의존성을 통해 스프링 프레임웍 단에서 자동으로 구현체가 만들어진다. 만들어진 구현체의 인스턴스가 자동으로 빈으로 등록되기 때문에 더 이상 아무것도 작성하지 않아도 된다.

그림3. UserRepository

 

* 물론 만약 추가적인 함수를 작성하면 되지만, 여기서는 기본으로 구현되는 것으로 충분하기 때문에 여기까지만 작성한다.

 

Service 만들기

이제 앞서 만든 UserRepository를 사용하는 UserService를 다음과 같이 만들어보자. 이 서비스에는 현재는 유저의 정보를 데이터 베이스에 저장하는 saveUser만 존재하지만, 필요에 따라 삭제, 업데이트 함수 등을 넣을 수 있다.

@Service
class UserService(private val userRepository: UserRepository) {
    fun saveUser(user: User): User {
        return userRepository.save(user)
    }
    ...
}

 

이제 모든 준비가 완료됐다.

 

컨트롤러 만들기

테스트를 위해 다음과 같이 생긴 컨트롤러를 만들어보자. 이 컨트롤러는 /user/create으로 HTTP 요청을 받았을 때 body에 있는 값을 읽어 저장 연산을 실행한다.

@Controller
class UserController(
    private val userService: UserService
) {
    @PostMapping("user/create")
    fun postUser(
        @RequestBody user: User
    ): ResponseEntity<User> {
        userService.saveUser(user)
        return ResponseEntity.ok(user)
    }
}

 

여기까지 클라이언트로부터 요청을 받아 User 정보를 MongoDB에 저장할 준비가 모두 완료됐다. 이제 우리가 만든 서비스를 테스트 해보자.

 

만든 서비스 테스트하기

이제 스프링 애플리케이션을 실행하고 다음과 같은 HTTP 요청을 날려보자. 

POST http://localhost:8081/user/create
Content-Type: application/json

{
  "id": 456,
  "username": "Seyoung",
  "email": "seyoungcho2@gmail.com"
}

 

그러면 MongoDB의 Users Document에 입력한 값이 추가된 것을 확인할 수 있다. 

그림4. MongoDB에 입력된 값

 

반응형