Skipalong's tistory
240124 TIL - 멀티 쓰레드 테스트(좋아요) 본문
오늘은 그간 골치를 썩였던 100명이 하나의 코스에 좋아요를 동시에 눌렀을 때 메서드가 정상적으로 100개의 좋아요를 누르느냐하는 동시성 문제 테스트에 성공했다. 우선 우리팀의 예상은 '동시성 문제가 생기지 않는다.' 였다.
하지만 우리의 예상이 정답은 아니고 튜터님이 질문을 하신 이유가 있을 것이기 때문에 직접 테스트해볼 필요가 있었다. 그래서 테스트를 해보려고 자료를 찾고 오늘 튜터님에게 테스트 방법과 처리방법에 대해 질문을 했고 내부적으로 테스트 코드를 작성하는 것을 가이드해주셔서 아래와 같이 테스트코를 작성하고 검증해본 결과 실제로 동시성 문제가 생기지 않았다.
우선 내가 작성한 테스트 코드는 이렇다. SpringBootTest 애너테이션과 Autowired 애너테이션으로 LikeService와 LikeRepository를 주입받아오고 100명의 유저가 테스트하는 상황을 만들기 위해 threadCount를 100으로 설정, 테스트할 코스를 지정해주었다. 그리고 DB에는 테스트용 임의 유저를 100개를 만들었다.
그리고 메서드를 실행할 ExecutorService에 ThreadPool 을 100으로 설정해주고 for문을 통해 메서드를 100번을 실행시켜주었다.
이렇게 정상적으로 100개의 Like가 생성된 것을 볼 수 있다. 그리고 1명이 100개의 좋아요를 동시에 눌렀을 때는 동시성 문제가 생겨서 한 유저가 좋아요를 여러개 누르는 상황이 발생했는데 이 문제는 튜터님께 질문드려 본 결과 정상적이지 않은 상황이고 이러한 상황을 생각한다면 모든 메서드에 이런 문제를 해결해줘야해서 굳이 동시성문제를 해결해 줄 필요는 없다고 하셨고 나도 같은 생각이다. 그렇기 때문에 좋아요에 대한 동시성 문제는 따로 처리를 해주지 않아도 된다고 판단을 했다. 이번 문제를 해결하면서 동시성문제와 이를 해결하기위해 필요한 Locking, syncronized등등 여러가지 새로운 개념과 취약점인 테스트코드를 작성해보는 등 성과가 많았던 트러블슈팅이었던 것 같다. 내일부터는 최종프로젝트의 다른 작업을 할 수 있어서 다행인 것 같다. 내일도 열심히 해보아야겠다.
'TIL' 카테고리의 다른 글
240126 TIL - Process, Thread, MultiThread (0) | 2024.01.27 |
---|---|
240125 TIL - Query 최적화, DB로직 최소화 (0) | 2024.01.26 |
240123 TIL - JMeter (0) | 2024.01.23 |
240122 TIL - 최종 프로젝트 중간발표 (0) | 2024.01.23 |
240119 TIL - TDD, OAuth (0) | 2024.01.20 |