해당 케이스에서는 전체적으로 문제없이 동작함을 알 수 있다.
반복횟수를 증가해도 에러 없이 동작하는걸 확인할 수 있다.
쓰레드를 증가시키니 에러가 발생하는 것을 알 수 있다.
->
쓰레드를 2로 줄여서 진행해 보았다.
-> 여전히 문제가 발생한다.
단일 스레드에는 문제가 없지만 스레드를 증가 시킬때 에러가 발생한다면 동시성문제나 리소스 경합일 가능성이 높다고 한다.
-> 낙관적인 락을 적용한 이후 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;
}
-> 트랜잭션 격리 수준 적용
updateAnswer에 적용
@Transactional(isolation = Isolation.READ_COMMITTED)
** Thread 2, Repeat 500, LocalJmeter -> LocalServer
Mysql로 dB 변경하고 테스트
낙관적인 락 적용하고 테스트
여전히 answer Update와 answer Delete에서 에러 발생