ApplicationRunner를 사용하여 더미데이터 적재하기

2024. 7. 6. 11:58TIL

✔오늘 배운 중요한 🔑 point

  • 더미데이터를 적재 할 때 실제 운영 환경에서는 보통 데이터베이스 스크립트나 초기화 파일을 사용하거나 데이터베이스 관리 도구를 통해 데이터를 관리한다.
  • ApplicationRunner를 사용하여 더미데이터를 적재하는 방법은 매우 간단하지만 어플리케이션의 성능과 데이터의 일관성, 안정성 측면에서는 좋지 않을 수 있으니 잘 고려를 해서 판단해야한다.

🎯 오늘 배운 내용

 

현재 프로젝트에서 사용되는  키워드에 대한 검색어 기능 api가 소수의 게시글에 대해서는 빠르게 조회가 되고 검색이 되지만 과연 100개, 1000개 혹은 10000개가 넘는 게시글이 존재할 때도 똑같이 빠르게 검색이 가능할까?

이를 테스트 하기 위해서 Dummy Data를 적재하여 많은 데이터가 존재할때의 성능에 대해서 테스트를 해봐야한다.

MySQL Procedure를 이용하거나 다른 여러 방법이 있지만 오늘은 정말 간단하게 Spring Boot 어플리케이션 내에서 더미데이터를 적재하는 방법을 사용할 것이다.

 

package com.teamsparta.withdog

import com.teamsparta.withdog.domain.post.model.Post
import com.teamsparta.withdog.domain.post.repository.PostRepository
import com.teamsparta.withdog.domain.user.model.User
import com.teamsparta.withdog.domain.user.model.UserProfile
import com.teamsparta.withdog.domain.user.repository.UserRepository
import org.slf4j.LoggerFactory
import org.springframework.boot.ApplicationRunner
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import org.springframework.cache.annotation.EnableCaching
import org.springframework.context.annotation.Bean
import org.springframework.data.repository.findByIdOrNull
import org.springframework.scheduling.annotation.EnableScheduling

@EnableCaching
@EnableScheduling
@SpringBootApplication
class WithDogApplication {

    private val logger = LoggerFactory.getLogger(WithDogApplication::class.java)

    @Bean
    fun applicationRunner(
        postRepository: PostRepository,
        userRepository: UserRepository
    ): ApplicationRunner {
        return ApplicationRunner {
            val breedNames = listOf("BreedA", "BreedB", "BreedC", "BreedD")



            val posts = (1..100).map { // 요기에 10000개를 넣으면 10000개 생성함
                Post(
                    breedName = breedNames.random(),
                    title = "더미데이터",
                    content = "더미데이터 테스트용",
                    user =userRepository.findByIdOrNull(11)!!
                    )
            }

            postRepository.saveAll(posts)
            logger.info(" 100개의 더미데이터 적재 테스트")
        }
    }
}

fun main(args: Array<String>) {
    runApplication<WithDogApplication>(*args)
}

해당 코드에서는 100개의 더미데이터를 적재한 상태이며 견종 이름만 랜덤으로 들어가도록 설정이 되어있다.

 

어플리케이션을 실행하게 되면

더미데이터가 insert되는 쿼리가 발생하게 되고 (100개의 더미데이터니 100개의 쿼리가 발생할 것이다)

 

실제 DB에도 100개의 더미데이터가 INSERT된것을 확인할 수있다.

 

이제 100개의 더미데이터가 적재된 상황에서 검색어 기능이나 다른 기능을 테스트해 볼 수 있다.

 

테스트가 끝난 후에는 더미데이터를 삭제하기 위해서

더미데이터 삭제 API를 따로 만들어주고

 

더미데이터가 삭제되는 쿼리문이 정상적으로 잘 작동하는것을 볼 수 있다.

 

ApplicationRunner를 통해 더미 데이터를 적재하는 방식은 Spring Boot 애플리케이션에서 쉽게 설정할 수 있는 방법 중 하나이지만,  실제 운영 환경에서는 보통 데이터베이스 스크립트나 초기화 파일을 사용하거나 데이터베이스 관리 도구를 통해 데이터를 관리한다고 한다.

🤔 어떻게 활용할까?

내가 진행하는 프로젝트의 환경에 따라서  더미데이터를 적재할때 어떤 방법을 사용하느냐에 따라서 어플리케이션의 성능과 안정성에 중요한 영향을 미치므로 신중하게 고려하는 것이 필요하다.

📓 오늘의 한줄

"The foolish man seeks happiness in the distance, the wise grows it under his feet."

- James Oppenheim -

 

 

'TIL' 카테고리의 다른 글

ngrinder 기본 설정  (0) 2024.07.08
import와 @Import의 차이  (0) 2024.07.07
Cache를 이용하면서 조회수 업데이트하기  (0) 2024.07.05
Cache을 이용한 성능개선 프로젝트 (3일차)  (0) 2024.07.04
Redis Insight 사용법  (0) 2024.07.03