[TIL] Spring Boot에서 Dummy Data를 넣어 테스트해보기

su·2024년 8월 28일
0

TIL

목록 보기
91/93
post-thumbnail

Spring Boot 에 각각 Dummy Data 삽입하기

User Data

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를 생성하여 한 번에 repositorysaveAll()을 해주었다.

일단 실행이 되는지 확인해보기 위해서
위의 코드만 작성해보고 application을 실행해보았다.

그랬더니 원하는 대로 잘 들어가는 모습을 볼 수 있었다 ! (오류없이 실행되다니🥲)

Product & ProductDocument Data

다음으로는 이제 게시글(물품) 데이터를 넣어주어야 하는데,
여기가 문제였다.

데이터를 다 조금씩 다르게 하여 각각 만들어서 저장하려고 했는데,
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처럼 각각 ProductInitializerProductDocumentInitializer 클래스를 만들어 100개의 데이터를 저장하는 코드를 만들었다.

그 후 application을 실행하자, 오류없이 실행되었고
원하는대로 데이터가 잘 들어가있는 모습을 확인할 수 있었다.

JMeter 설치 및 실행

이제 속도 측정을 위한 준비를 해야 한다.
우선 JMeter를 설치해보자.
터미널에 아래의 명령어를 입력하여 설치한다.

brew install jmeter

설치가 완료되었다면, 아래의 명령어를 통해 JMeter를 실행한다.

open /usr/local/bin/jmeter

열린 JMeter에서
Thead Group, HttpRequest 생성을 한 후
Summary Report로 실행한 뒤의 결과까지 확인해주면 된다.

실제 테스트 해본 내용은 다음 글로 이어서 작성하려고 한다 !

참고

profile
(❁´◡`❁)

0개의 댓글