인프런에서 답변이 잘 달려있네요. 아래 공식 사이트에서 자세한 설명을 알 수 있습니다. https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-controller/ann-methods/requestparam.html 다양한 annotation 들은 https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-controller/ann-methods.html 에 모두 나와있습니다.
위 에러는 item 테이블이 존재하지 않아서 발생합니다. h2 console (웹브라우저) 에서 item table 을 먼저 만들고 쿼리를 수행하면 될듯합니다. 좀 더 자세한 해결책을 원하시면, 어디까지 성공했고 어느 부분에서 에러가난다. 와 같이 나름대로 확인한 과정을 상세히 남겨주셔야 좋겠습니다. (남겨주신 github 로 접속하면 404 에러가 납니다. )
예외가 발생한것 같은데, 예외발생시점의 intellj 의 console 에 찍힌 stacktrace 를 보면 에러난 코드 및 라인을 알 수 있습니다. 한번 봐보세요. 예상되는 원인은... DB 에 1 이라는 id 값으로 된 데이터가 없는데, 이걸 읽으려다가 null pointer exception 이 발생할 수 있습니다. 코드를 보면 select 만 이고 insert 문은 없는데, DB 에 값은 수동으로 쿼리문으로 입력했나요? 보다 정확한 원인은 stacktrace 를 보면 알 수 있습니다. :)
좋은 질문이네요. SimpleAsyncTaskExecutor를 아래처럼 spring 에서 제공하는 builder 를 이용하지 않고 직접 만들면 virtual thread 를 사용하지 않습니다. @Bean public SimpleAsyncTaskExecutor taskExecutor(SimpleAsyncTaskExecutorBuilder builder) { return new SimpleAsyncTaskExecutor(); // return builder.build(); } 아래처럼 virtual thread factory 를 설정해서 bean 을 만들었다면 virtual thread 로 동작합니다. new SimpleAsyncTaskExecutor(factory); 결국, SimpleAsyncTaskExecutor 자체는 virtual thread 를 사용할수도 있고, 아닐수도 있습니다. 해당 객체를 생성할 때 어떤 설정을 했냐에 따라 달라지는 것이죠. yml 에 virtual thread 를 사용하겠다고 설정을 해두었기에, spring 에서 만든 thread pool 관련 builder bean 들은 virtual thread 사용하는 설정이 되어 있어서, builder 를 통해 만들면 항상 virtual thread 를 사용합니다. ThreadPoolTaskExecutor 의 경우에도 아래처럼 spring 이 만든 builder 를 통해 만든다면 virtual thread 를 사용합니다. @Bean public ThreadPoolTaskExecutor threadPoolTaskExecutor(ThreadPoolTaskExecutorBuilder builder) { return builder.build(); } 도움이 되셨길 바랍니다. :) *주의할점은 task scheduler 도 내부적으로 thread pool 을 사용하므로 ,TaskExecutor 공부할때는 TaskScheduler 는 disable 해두고 공부하는게 좋습니다. ( 특정 상황에서 @Async 에서TaskExecutor 가 아닌 taskScheduler 의 thread pool 을 사용할 수 도 있는데 , 이 경우 처음 공부하는 입장에서는 상당히 혼란스럽게 느껴집니다.)
1) mybatisX 플러그인 설치시 mapper xml 이동이 잘 되나요? 2) yml 에 xml 파일의 위치를 정확히 설정했나요? 오타등등 3) xml 의 namespace 부분에 java package + class name 에 오타가 없나요? 4) 위 에러 코드를 보면 firstStart 가 아니라 fitstStart 라고 오타가 있는데, java, xml 모두 동일한 단어를 썼나요? 위 체크를 해도 여전히 알수 없으면 github 에 전체 코드 push 한 후 알려주시면 확인해보겠습니다.
https://docs.oracle.com/en/java/javase/21/core/virtual-threads.html#GUID-2BCFC2DD-7D84-4B0C-9222-97F9C7C6C521 위 oracle guide 에는 명확히 적혀있지 않아서 저도 잘 몰랐네요. 제보 감사합니다.
네 맞습니다. 500개로 늘리면 둘다 성능이 비슷하게 나올겁니다. 그러나 500개가 아니라 1만개 처럼 숫자가 너무 커져버리면 virtual thread 가 훨씬 빨라집니다. 제일 처음나오는 성능 비교영상은 intro 성격이라서 자세한 설명을 생략한것이고, 뒤쪽 강의 다 보시면 특정 갯수 이상의 platform thread 생성은 성능 한계가 있는걸 알 수 있을겁니다. :)
2000바퀴라는건 platform thread pool size도 2000개로 설정했을것 같습니다. 너무 많은 platform thread 를 생성했기에 그 자체만으로 thread 생성비용 및 context switching 비용이 많이 들어서 오히려 느려진것 같습니다. 2000개가 아닌 100개, 300개 정도 적정(?)수준의 thread pool 에서는 platform thread 가 더 빠르게 나올겁니다.