JMetter Test 에러 분석

song yuheon·2023년 10월 7일
0

Case 1

  • Thread 1, Repeat 100, Jmeter -> LocalServer

해당 케이스에서는 전체적으로 문제없이 동작함을 알 수 있다.

Case 2

  • Thread 1, Repeat 500, LocalJmeter -> LocalServer

반복횟수를 증가해도 에러 없이 동작하는걸 확인할 수 있다.

Case 3

  • Thread 10, Repeat 100, LocalJmeter -> LocalServer

쓰레드를 증가시키니 에러가 발생하는 것을 알 수 있다.

->
쓰레드를 2로 줄여서 진행해 보았다.

Case 4

  • Thread 2, Repeat 100, LocalJmeter -> LocalServer

-> 여전히 문제가 발생한다.

단일 스레드에는 문제가 없지만 스레드를 증가 시킬때 에러가 발생한다면 동시성문제나 리소스 경합일 가능성이 높다고 한다.

Case 5

  • Thread 2, Repeat 100, LocalJmeter -> LocalServer

-> 낙관적인 락을 적용한 이후 25%까지 에러가 축소됬다.

@Entity(name = "users")
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
public class User extends Timestamped{
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "user_id")
    private Long userId;

    @Column(name = "username", nullable = false, unique = true)
    private String username;

    @Column(name = "password",nullable = false)
    private String password;

    @Column(name = "role")
    @Enumerated(EnumType.STRING)
    private UserRoleEnum role;

    @OneToMany(orphanRemoval = true,fetch = FetchType.LAZY,mappedBy = "user")
    private List<Survey> surveys = new ArrayList<>();

    @OneToMany(orphanRemoval = true,fetch = FetchType.LAZY,mappedBy = "user")
    private List<Answer> answers = new ArrayList<>();

    public User(String username, String password, UserRoleEnum role) {
        this.username=username;
        this.password=password;
        this.role=role;
    }

    public void addSurvey(Survey survey) {
        this.surveys.add(survey);
    }


    @Version
    private int version;
}

Case 6

  • Thread 2, Repeat 100, LocalJmeter -> LocalServer

-> 트랜잭션 격리 수준 적용

updateAnswer에 적용

@Transactional(isolation = Isolation.READ_COMMITTED)

Case 7

** Thread 2, Repeat 500, LocalJmeter -> LocalServer

Mysql로 dB 변경하고 테스트

낙관적인 락 적용하고 테스트

여전히 answer Update와 answer Delete에서 에러 발생

profile
backend_Devloper

0개의 댓글