현재 제가 겪고 있는 상황인데 조언 부탁드립니다.
548
4 câu hỏi đã được viết
SpringBoot 에서 멀티 스레드로 크롤러가 돌아가는 프로젝트 입니다.
junit 테스트 코드를 통해 크롤러가 10개 정도 게시판 페이지를 정상적으로 가져오는지 확인하려고 하는데요.
현재 작성된 테스트 케이스는 아래와 같습니다.
@Test
void crawlerTest() {
// 크롤링 시작
crawlerRun();
while(스레드풀 작업 종료됐나??) {
// 작업이 안끝났으면
Thread.sleep(5000);
}
}
while 문이 있으면 정상적으로 10개의 게시판 페이지를 크롤링한 이후 DB에 적재됩니다.
다만 강의를 보면서 while 문이 없어도 되지 않을까 생각해서 삭제하거나 주석처리하면 올바르게 동작하지 않습니다.
[while 문 제거 후]
디버깅을 통해 값이 제대로 들어오는지 확인하면서
테스트 케이스를 돌리면 4~5 개정도만 DB 에 크롤링한 데이터가 저장되고 갑자기 오류도 없이 테스트가 종료됩니다.
디버깅없이 그냥 실행시키면 6개 정도 DB에 저장되고 테스트가 종료됩니다.
crawlerTest() 라는 테스트 코드가 Main Thread 라고 쳤을 때 다른 Thread 들은 정상적으로 동작 중이어야 하지 않나요..?
아니면 Spring 환경이라서 이런 문제가 발생하는 것인지
junit 테스트 코드라서 이런 문제가 발생하는건지 궁금합니다!
( Daemon Thread 는 아닙니다! )
Câu trả lời 2
1
저도 예전에 비슷한 상황을 마주친 적이 있어서 질문을 올렸고,
스스로 답을 찾은 적이 있습니다. 해당 질문 링크를 공유합니다.
https://www.inflearn.com/questions/567543
추가적으로 이런 일정 시간 대기 또는 비동기 동작에 대한 Junit 테스트를 하고 싶다면
을 알아보시면 좋을 거 같습니다.
1
음..
이 부분은 테스트 스레드에서 수행하는 메카니즘과 메인 스레드에서 수행하는 메카니즘이 다르거나 여러 내부적인 연결고리가 있을 수 있습니다.
당장 메인 스레드에서 테스트 했을 때 그런 현상이 발생하지 않는다면 말이죠..
사실 JVM 이 테스트 스레드가 수행중인 메서드가 종료되었을 때 다른 유저 스레드를 강제로 종료시키지는 않습니다.
이 부분은 저도 정확한 원인을 좀 더 찾아 봐야 겠지만 테스트 스레드가 일반적으로 우리가 알고 있는 유저 스레드의 흐름에 좀 더 특수성을 가지도록 설계되어 있을 수도 있습니다.
좀 더 서치가 필요할 것 같습니다.
멀티스레드 단일스레드
0
58
0
new Condition 부분 질문
0
87
1
13:00 강의 내용 이해 질문
0
99
1
강의 출시 질문 있습니다.
0
119
1
InterruptedExceptionThreadStopExample 질문입니다.
0
95
2
instance.getMyField()의 값이 왜 다른가요?
0
117
1
해당 강의 내용 무단 도용 신고
0
212
2
Thread Waiting 상태 관련 질문 드립니다.
0
187
1
단일연산변수 api
0
126
0
synchronized 블럭과 메인메모리 반영
0
148
0
실무에서 자바가 제공하는 락을 사용하는 경우
1
244
1
뮤텍스나 세마포어는 busy waiting이 없는 게 맞을까요?
0
161
1
16:50부분에서 타입락 질문드립니다.
0
111
2
16분 7초 뮤텍스 코드 관련해 질문드립니다.
0
161
2
동기화가 보장된다고 하더라도 스레드간 데이터 불일치가 발생할 수 있지 않나요??
0
204
2
리액티브-part2
0
180
2
문자열 풀 값을 이용한 String 변수
0
208
2
스레드 라이브러리는 커널과 같은 역할을 하지 못하나요?
0
174
1
자식 프로세스를 쓰는 이유
0
189
1
커널 모드 전환시 질문이 있습니다!
0
147
1
[공유] setName 시 threadName이 1부터 시작하는 이유
0
180
1
synchronized = 모니터
0
290
2
Thread의 Context Switching 문의드립니다.
1
261
1
동기 & 논블록킹 질문 드립니다.
0
234
2

