작성
·
352
0
현재 제 코드는 이 상태입니다.
빨간색 체크를 해놓은 것만 테스트를 진행했을 때 정상적으로 예외가 발생합니다.
최대 인원수를 초과해서 예외가 터지는데요,
밑에있는 동시성으로 하면 service 시작부터 문제가 발생합니다.
이러한 에러가 왜 발생하는지 모르겠습니다.
executorService를 제가 잘못 사용하고 있는 건가요?
답변 2
0
진짜 잘하고싶다 님 안녕하세요.
현재 올려주신 코드는 제가 강의로 진행했던 예제코드와는 많이 다른것으로 보입니다.
저 부분만을 보고 에러원인을 예측하기는 힘들 것 같습니다.
다만 에러메세지로만 본다면 유저데이터가 제대로 입력되지 않아서 발생하는 것으로 보이네요.
진짜 잘하고싶다 님 안녕하세요.
질문주신 내용을 정확하게 답변 해드리기에는 정보가 너무 적은 것 같습니다.
어떤 상황이시고 어떤 에러가 발생하는지 잘 모르겠습니다.
올려주신 코드는 제가 강의로 진행했던 코드가 아니기때문에 코드의 구조와 로직을 제가 알 수 없습니다.
한정된 정보안에서 유추해서 답변을 드리자면 @Transactional 어노테이션이 붙어있기 때문에 메소드가 종료되기 전까지는 데이터가 데이터베이스 commit 되지 않습니다.
그로 인하여 User 데이터가 데이터베이스에 들어가지 않았고, 그로인하여 발생하는 문제로 보입니다.
0
안녕하세요, 인프런 AI 인턴이에요. 질문에 대해서 답변해드릴게요.
executorService를 사용하면 동시에 실행되는 작업의 개수나 처리 속도를 조절할 수 있습니다. 현재 코드에서 예외가 발생하는 이유는 최대 인원수를 초과해서 executorService에 작업을 제출하기 때문입니다. executorService에는 저장할 수 있는 작업의 개수에 제한이 있기 때문에 초과되는 작업은 예외가 발생하게 됩니다.
예외를 방지하기 위해서는 작업을 제출하기 전에 executorService가 현재 작업 중인지 확인하는 것이 좋습니다. 예를 들어, executorService.isShutdown()
메소드를 사용해 현재 작업 중이지 않을 때만 작업을 제출하도록 처리할 수 있습니다. 또한, executorService.submit()
대신에 executorService.execute()
메소드를 사용하는 것도 고려해볼 만합니다.
만약에 이 조치들로도 문제가 해결되지 않는다면, executorService의 다른 설정 값(스레드 개수, 큐 크기 등)을 확인해보시는 것도 좋습니다.
물론, 제가 답변드린 내용은 예상에 가까우며, 정확한 원인 파악을 위해서는 더 많은 코드와 상세한 정보가 필요합니다. 예외 발생에 대한 토대로 더 자세한 도움을 드리기 어렵습니다. 개발자 커뮤니티에 질문을 게시하시거나 구글링을 통해 관련된 자료를 찾아보시는 것도 도움이 될 수 있어요.
더 도움을 드릴 수 있는 정보가 필요하시다면 자세한 코드와 함께 질문 내용을 보내주시면 더욱 정확하고 구체적인 답변을 드릴 수 있을 것입니다. 수고하세요요.
테스트 클래스 자체에 @Transaction을 붙이니까 발생하는 문제더라구요
왜 그런지에 대해 대충 설명해주실 수 있나요?