Spring Boot에 Dummy Data를 추가하는 방법에는 여러 가지가 있지만,
나는 그 중에서 ApplicationRunner를 사용하는 방법을 선택했다.
동일한 데이터 양을 MySQL과 ElasticSearch에 각각 넣어주어야 해서 고민하던 찰나,
우선 User 데이터를 먼저 넣어보기로 했다.
@Component
@RequiredArgsConstructor
public class UserInitializer implements ApplicationRunner {
private final UserRepository userRepository;
private final PasswordEncoder passwordEncoder;
@Override
public void run(ApplicationArguments args) throws Exception {
String password = passwordEncoder.encode("rawPassword00");
List<User> newUsers = new ArrayList<>();
for (String username: usernameList) {
JoinRequestDto joinRequestDto = new JoinRequestDto();
joinRequestDto.setUsername(username);
joinRequestDto.setNickname(username);
joinRequestDto.setEmail(username + "@gmail.com");
User user = new User(
joinRequestDto, password, UserRoleEnum.USER
);
newUsers.add(user);
}
userRepository.saveAll(newUsers);
} // run
private List<String> usernameList = Arrays.asList(
"username1", "username2", ...
);
}
아래에 따로 usernameList를 만들어두고 run안에서 for문을 돌려서
안에서 User
를 생성하여 한 번에 repository
에 saveAll()
을 해주었다.
일단 실행이 되는지 확인해보기 위해서
위의 코드만 작성해보고 application을 실행해보았다.
그랬더니 원하는 대로 잘 들어가는 모습을 볼 수 있었다 ! (오류없이 실행되다니🥲)
다음으로는 이제 게시글(물품) 데이터를 넣어주어야 하는데,
여기가 문제였다.
데이터를 다 조금씩 다르게 하여 각각 만들어서 저장하려고 했는데,
100개의 데이터를 어떻게 넣어줄까 .. 했다.
어차피 들어가는 내용은 Product 쪽이나 ProductDocument 쪽이나 동일해도 상관없다고 생각하여,
하나의 Enum 을 만들어두고 사용하기로 했다.
public enum ProductData {
TITLES(Desc.titles),
CONTENTS(Desc.contents);
private final Map<Integer, String> desc;
ProductData(Map<Integer, String> desc) {
this.desc = desc;
}
public Map<Integer, String> getProductData() {
return this.desc;
}
public static class Desc {
public static final Map<Integer, String> contents = Map.ofEntries(
Map.entry(1, "이 키링은 사용감이 거의 없으며, 상태가 좋습니다. 중고이지만 거의 새것처럼 깨끗합니다."),
// 중략 ...
Map.entry(100, "상태가 매우 좋은 중고 키링입니다. 거의 새것처럼 보이며 가격이 합리적입니다.")
);
public static final Map<Integer, String> titles = Map.ofEntries(
Map.entry(1, "상태 좋은 키링 판매합니다!"),
// 중략 ...
Map.entry(100, "상태가 매우 좋은 중고 키링입니다.")
);
}
}
안에 들어갈 데이터는 GPT의 도움을 받았다.
몇 번이나 씨름하긴 했는데 결국 100개의 데이터를 다 받아낼 수 있었다
이렇게 Enum을 만들어두고,
User처럼 각각 ProductInitializer
와 ProductDocumentInitializer
클래스를 만들어 100개의 데이터를 저장하는 코드를 만들었다.
그 후 application을 실행하자, 오류없이 실행되었고
원하는대로 데이터가 잘 들어가있는 모습을 확인할 수 있었다.
이제 속도 측정을 위한 준비를 해야 한다.
우선 JMeter를 설치해보자.
터미널에 아래의 명령어를 입력하여 설치한다.
brew install jmeter
설치가 완료되었다면, 아래의 명령어를 통해 JMeter를 실행한다.
open /usr/local/bin/jmeter
열린 JMeter에서
Thead Group, HttpRequest 생성을 한 후
Summary Report로 실행한 뒤의 결과까지 확인해주면 된다.
실제 테스트 해본 내용은 다음 글로 이어서 작성하려고 한다 !
참고