아래 화면으로 오류가 뜨는데 java 버전이 잘못돼서 그런걸까요? 인텔리제이를 실행하려면 설정해야하는 환경들이 어떻게 되는지 알 수 있을까요? - Variant 'javadocElements' capability org.springframework.boot:spring-boot-gradle-plugin:3.0.5 declares a runtime of a component, and its dependencies declared externally: - Incompatible because this component declares documentation and the consumer needed a library - Other compatible attributes: - Doesn't say anything about its target Java version (required compatibility with Java 11) - Doesn't say anything about its elements (required them packaged as a jar) - Doesn't say anything about org.gradle.plugin.api-version (required '7.6.1') - Variant 'mavenOptionalApiElements' capability org.springframework.boot:spring-boot-gradle-plugin-maven-optional:3.0.5 declares a library, packaged as a jar, and its dependencies declared externally: - Incompatible because this component declares an API of a component compatible with Java 17 and the consumer needed a runtime of a component compatible with Java 11 - Other compatible attribute: - Doesn't say anything about org.gradle.plugin.api-version (required '7.6.1')
QueryDSL까지 강의를 다 듣고 난 이후에 게시판이나 쇼핑몰 같은 포트폴리오를 만들기전에 자그맣게 배운걸 써보고 싶은데 html,css,js를 모르다보니 view쪽을 처리할 수가 없더라구요. 그래서 혹시 활용1편에 제공되는 HelloShop view단 파일을 사용해도 될지 궁금합니다. 깃허브에 올리려고 하고 백엔드단 코드는 전부 스스로 짤 생각입니다.!
즉시로딩을 사용하면 Member 객체를 불러 올 때 1+N문제가 발생하고 Lazy로딩을 사용하면 Team 객체를 사용할 때 쿼리문이 나가서 즉시로딩이든 지연로딩이든 결국 1+N 문제가 생기는 게 맞나요 ? 이 1+N 문제의 해결방법으로 fetchJoin이 나온 것 같은데 지연 로딩, 즉시 로딩보다 무조건 fetchJoin이 이점이 있는 것 아닌가요? 왜 디폴트값으로 지연로딩으로 설정하고 fetchJoin을 선택해서 사용하는지 궁금합니다. 기본적으로 fetchJoin을 사용하고 연관관계에 있는 객체를 사용하지 않을 것 같은 경우에만 지연로딩을 선택적으로 사용하는게 더 편하지 않나요? 사용하지 않는 객체를 가져오는 fetchJoin의 쿼리문 몇 줄이 성능에 그렇게 큰 영향을 미치나요?
Team teamA = new Team("teamA"); Team teamB = new Team("teamB"); teamRepository.save(teamA); teamRepository.save(teamB); memberRepository.save(new Member("member1", 10, teamA)); memberRepository.save(new Member("member2", 10, teamB)); 강의에서 이렇게 한번에 하려다가 Member를 생성해주고 따로 save를 해주던데 한번에 하면 안되는 이유가 있을까요 ?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 윈도우 cmd에서 gradlew와 gradlew.bat 둘다 해도 똑같이 권한이 없다고 나옵니다.
PageRequest pageRequest = PageRequest.of(0, 3, Sort.by(Direction.DESC, "username")); int age = 10; //when Page<Member> page = memberRepository.findByAge(age, pageRequest); PageRequest.of 코드에서 첫 번째 파라미터가 무엇을 의미하는지 헷갈립니다. PageRequest.of 의 2번째 파라미터는 한 페이지의 element 개수이고(limit), 3번째 파라미터는 정렬 조건이 맞나요? List<Member> content = page.getContent(); assertThat(content.size()).isEqualTo(3); assertThat(page.getTotalElements()).isEqualTo(5); assertThat(page.getNumber()).isEqualTo(0); assertThat(page.getTotalPages()).isEqualTo(2); assertThat(page.isFirst()).isTrue(); assertThat(page.hasNext()).isTrue(); page.getContent()는 현재 페이지의 데이터를 가져오는 메소드인가요? page.getNumber()는 현재 페이지를 가져오는 메소드인가요? Page는 책처럼 0,1,2,3 ... 이렇게 페이지가 있는 거고 Content는 그 Page안에 있는 데이터를 의미하는 건가요? List<List<data>> 와 같은 구조로 되어 있는 것일까요? Page와 Content의 자료 구조가 어떻게 되어있는지가 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 윈도우 콘솔 창에 h2.bat을 입력해도 연결이 되지 않습니다. 참고로 h2.bat 파일을 실행해도 실행되었다가 바로 꺼집니다. 참고로 제 자바 jdk의 버전은 11이고 jre버전은 8입니다. 환경변수까지 11로 설정한 상태입니다. 윈도우 installer와 플랫폼 버전 모두 다운 받아서 시도했는데 안됐습니다.
안녕하세요, 강의 잘 듣고 있는 수강생입니다. 현재 강의를 들으면서 토이프로젝트를 구축 중입니다. https://www.inflearn.com/questions/42102/%EB%8B%A4%EC%A4%91-%EB%B3%B4%EC%95%88-%EC%84%A4%EC%A0%95 위 링크의 질문에서 선생님께서 답변 달아주신 내용인, Admin의 url 에 따른 인증 방식은 Form, User의 url 에 따른 인증 방식은 Rest 방식으로 구분 지으려는 상황입니다. 6.0 버전에 따른 강의는 추후 개정하신다는건 공지를 통해서 알고는 있는데.. 제가 이리저리 뜯어봐도 도저히 인증 방식 다르게 적용하는 부분이 너무나도 안 되서 답답하다보니 질문글을 남기게 됐습니다.. Security 6.0 이상에서 "/api"로 시작하는 url과 "/web"으로 시작하는 url 요청에 따라 다른 인증방식을 적용할 수 있는 간단한 예시를 알려주실 수 있으실까요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (있을 수 있는데 못찾았습니다.) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (아니오) [질문 내용] 안녕하세요..! 테스트 코드 작성하실 때 import static org.assertj.core.api.Assertions.*; 이렇게 스태틱 임포트하시는 이유가 궁금합니다. Assertions.assertThat(bean).isNotNull(); assertThat(bean).isNotNull(); -> 스태틱 임포트 두 코드의 차이가 궁금합니다. 테스트코드인 것과 관련이 있다고 생각하고 있습니다. 하지만 조금 더 구체적인 이유를 알려주시면 감사하겠습니다.
안녕하세요. 강의에서 config-service의 yml 파일 내 uri와 jks 파일의 위치를 바꿔서 docker에서 실행해도 강의에서 나왔던 오류가 발생합니다. bootstrap.yml encrypt: # key: abcdefghijkimnopqrstuvwxz0123456789 key-store: location: file:/apiEncryptionKey.jks password: test1234 alias: apiEncryptionKey jks 파일의 위치를 Dockerfile과 동일한 경로에 복사했습니다. application.yml server: port: 8888 spring: application: name: config-server rabbitmq: host: 127.0.0.1 port: 5672 username: guest password: guest cloud: config: server: native: search-locations: file://C:\work\springcloud\git-local-repo git: uri: https://github.com/mjjunng/spring-cloud-config management: endpoints: web: exposure: include: health, busrefresh docker 실행 로그 해당 에러를 확인해보면, 강의에서 파일의 위치를 변경하지 않았던 에러와 동일한 것으로 생각됩니다. 강의와 마찬가지로 파일 경로를 바꿔도 해당 에러가 발생하는데, 제가 놓친 부분이 있을까요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] db 연결에 대한 정보 입력할때 password 에 0000 이라고 입력을 했을때 Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] 이런 에러가 발생해서 한참 찾아보다 잘못된 부분이 없는것 같아서 비번 값을 '0000' 이렇게 변경했더니 잘 동작했습니다. 원래 그냥 '' 없이 치는게 맞는거 아닌가요? yml 파일에서 '' 나 "" 사용하는걸 본적이 없는데 언제 사용하는 건가요 ?
강사님이 제공하기 파일로 진행하고 있었습니다. .\bin\windows\connect-distributed.bat . \etc\kafka\connect-distributed.properties 위의 명령어로 kafka connect을 실행하려하는데 아래와 같은 에러가 발생합니다. log4j:ERROR Could not read configuration file from URL [file:C:/Work/confluent-7.3.1/config/connect-log4j.properties]. java.io .FileNotFoundException: C:\Work\confluent-7.3.1\config\connect-log4j.properties (지정된 경로를 찾을 수 없습니다) at java.base/java.io.FileInputStream.open0(Native Method) at java.base/java.io.FileInputStream.open( FileInputStream.java:219 ) at java.base/java.io.FileInputStream.<init>( FileInputStream.java:157 ) at java.base/java.io.FileInputStream.<init>( FileInputStream.java:112 ) at java.base/sun.net.www.protocol.file.FileURLConnection.connect( FileURLConnection.java:86 ) at java.base/sun.net.www.protocol.file.FileURLConnection.getInputStream( FileURLConnection.java:184 ) at org.apache.log4j.PropertyConfigurator.doConfigure( PropertyConfigurator.java:557 ) at org.apache.log4j.helpers.OptionConverter.selectAndConfigure( OptionConverter.java:504 ) at org.apache.log4j.LogManager.<clinit>( LogManager.java:119 ) at org.slf4j.impl.Reload4jLoggerFactory.<init>( Reload4jLoggerFactory.java:67 ) at org.slf4j.impl.StaticLoggerBinder.<init>( StaticLoggerBinder.java:72 ) at org.slf4j.impl.StaticLoggerBinder.<clinit>( StaticLoggerBinder.java:45 ) at org.slf4j.LoggerFactory.bind( LoggerFactory.java:150 ) at org.slf4j.LoggerFactory.performInitialization( LoggerFactory.java:124 ) at org.slf4j.LoggerFactory.getILoggerFactory( LoggerFactory.java:417 ) at org.slf4j.LoggerFactory.getLogger( LoggerFactory.java:362 ) at org.slf4j.LoggerFactory.getLogger( LoggerFactory.java:388 ) at org.apache.kafka.connect.cli.ConnectDistributed.<clinit>( ConnectDistributed.java:59 ) log4j:ERROR Ignoring configuration file [file:C:/Work/confluent-7.3.1/config/connect-log4j.properties]. log4j:WARN No appenders could be found for logger (org.apache.kafka.connect.runtime.WorkerInfo). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. log4j 가 없다는거 같은데 어떻게 해결할지 알려주시면 감사하겠습니다..
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
2023-04-29 16:04:35.522 ERROR 19256 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalArgumentException] with root cause java.lang.IllegalArgumentException: null at java.base/java.util.Optional.orElseThrow( Optional.java:403 ) ~[na:na] at com.group.libraryapp.service.book .BookService.loanBook( BookService.java:36 ) ~[main/:na] at com.group.libraryapp.service.book .BookService$$FastClassBySpringCGLIB$$9fdbff4c.invoke(<generated>) ~[main/:na] at org.springframework.cglib.proxy.MethodProxy.invoke( MethodProxy.java:218 ) ~[spring-core-5.3.24.jar:5.3.24] at org.springframework.aop.framework.CglibAopProxy.invokeMethod( CglibAopProxy.java:386 ) ~[spring-aop-5.3.24.jar:5.3.24] at org.springframework.aop.framework.CglibAopProxy.access$000( CglibAopProxy.java:85 ) ~[spring-aop-5.3.24.jar:5.3.24] at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept( CglibAopProxy.java:704 ) ~[spring-aop-5.3.24.jar:5.3.24] at com.group.libraryapp.service.book .BookService$$EnhancerBySpringCGLIB$$fffb0d80.loanBook(<generated>) ~[main/:na] at com.group.libraryapp.controller.book .BookController.loanBook( BookController.java:25 ) ~[main/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke( NativeMethodAccessorImpl.java:78 ) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:43 ) ~[na:na] at java.base/java.lang.reflect.Method.invoke( Method.java:567 ) ~[na:na] at org.springframework.web.method.support .InvocableHandlerMethod.doInvoke( InvocableHandlerMethod.java:205 ) ~[spring-web-5.3.24.jar:5.3.24] at org.springframework.web.method.support .InvocableHandlerMethod.invokeForRequest( InvocableHandlerMethod.java:150 ) ~[spring-web-5.3.24.jar:5.3.24] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle( ServletInvocableHandlerMethod.java:117 ) ~[spring-webmvc-5.3.24.jar:5.3.24] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod( RequestMappingHandlerAdapter.java:895 ) ~[spring-webmvc-5.3.24.jar:5.3.24] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal( RequestMappingHandlerAdapter.java:808 ) ~[spring-webmvc-5.3.24.jar:5.3.24] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle( AbstractHandlerMethodAdapter.java:87 ) ~[spring-webmvc-5.3.24.jar:5.3.24] at org.springframework.web.servlet.DispatcherServlet.doDispatch( DispatcherServlet.java:1071 ) ~[spring-webmvc-5.3.24.jar:5.3.24] at org.springframework.web.servlet.DispatcherServlet.doService( DispatcherServlet.java:964 ) ~[spring-webmvc-5.3.24.jar:5.3.24] at org.springframework.web.servlet.FrameworkServlet.processRequest( FrameworkServlet.java:1006 ) ~[spring-webmvc-5.3.24.jar:5.3.24] at org.springframework.web.servlet.FrameworkServlet.doPost( FrameworkServlet.java:909 ) ~[spring-webmvc-5.3.24.jar:5.3.24] at javax.servlet.http.HttpServlet.service( HttpServlet.java:696 ) ~[tomcat-embed-core-9.0.70.jar: 4.0.FR ] at org.springframework.web.servlet.FrameworkServlet.service( FrameworkServlet.java:883 ) ~[spring-webmvc-5.3.24.jar:5.3.24] at javax.servlet.http.HttpServlet.service( HttpServlet.java:779 ) ~[tomcat-embed-core-9.0.70.jar: 4.0.FR ] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter( ApplicationFilterChain.java:227 ) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.catalina.core.ApplicationFilterChain.doFilter( ApplicationFilterChain.java:162 ) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.tomcat.websocket.server.WsFilter.doFilter( WsFilter.java:53 ) ~[tomcat-embed-websocket-9.0.70.jar:9.0.70] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter( ApplicationFilterChain.java:189 ) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.catalina.core.ApplicationFilterChain.doFilter( ApplicationFilterChain.java:162 ) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.springframework.web.filter.RequestContextFilter.doFilterInternal( RequestContextFilter.java:100 ) ~[spring-web-5.3.24.jar:5.3.24] at org.springframework.web.filter.OncePerRequestFilter.doFilter( OncePerRequestFilter.java:117 ) ~[spring-web-5.3.24.jar:5.3.24] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter( ApplicationFilterChain.java:189 ) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.catalina.core.ApplicationFilterChain.doFilter( ApplicationFilterChain.java:162 ) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.springframework.web.filter.FormContentFilter.doFilterInternal( FormContentFilter.java:93 ) ~[spring-web-5.3.24.jar:5.3.24] at org.springframework.web.filter.OncePerRequestFilter.doFilter( OncePerRequestFilter.java:117 ) ~[spring-web-5.3.24.jar:5.3.24] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter( ApplicationFilterChain.java:189 ) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.catalina.core.ApplicationFilterChain.doFilter( ApplicationFilterChain.java:162 ) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal( CharacterEncodingFilter.java:201 ) ~[spring-web-5.3.24.jar:5.3.24] at org.springframework.web.filter.OncePerRequestFilter.doFilter( OncePerRequestFilter.java:117 ) ~[spring-web-5.3.24.jar:5.3.24] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter( ApplicationFilterChain.java:189 ) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.catalina.core.ApplicationFilterChain.doFilter( ApplicationFilterChain.java:162 ) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.catalina.core.StandardWrapperValve.invoke( StandardWrapperValve.java:177 ) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.catalina.core.StandardContextValve.invoke( StandardContextValve.java:97 ) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.catalina.authenticator.AuthenticatorBase.invoke( AuthenticatorBase.java:541 ) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:135 ) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.catalina.valves.ErrorReportValve.invoke( ErrorReportValve.java:92 ) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.catalina.core.StandardEngineValve.invoke( StandardEngineValve.java:78 ) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.catalina.connector.CoyoteAdapter.service( CoyoteAdapter.java:360 ) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.coyote.http11.Http11Processor.service( Http11Processor.java:399 ) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.coyote.AbstractProcessorLight.process( AbstractProcessorLight.java:65 ) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process( AbstractProtocol.java:891 ) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.tomcat.util.net .NioEndpoint$SocketProcessor.doRun( NioEndpoint.java:1784 ) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.tomcat.util.net.SocketProcessorBase.run ( SocketProcessorBase.java:49 ) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker( ThreadPoolExecutor.java:1191 ) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run( ThreadPoolExecutor.java:659 ) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run( TaskThread.java:61 ) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at java.base/java.lang.Thread.run( Thread.java:831 ) ~[na:na] 항상 좋은 답변해주셔서 감사합니다. 하루동안 오류를 찾아내는데 못 찾겠습니다....ㅠ 도와주세요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.
실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
안녕하세요 강사님, 좋은 강의 제공해주셔서 감사합니다 :) " 9강. 책 관련 기능 테스트 작성하기 " 강의를 듣던 도중 궁금한 점이 생겨 이렇게 질문을 드립니다. 해당 강의에서 @AfterEach()를 사용하며, 아래와 같이 returnBookTest()를 테스트합니다. @AfterEach를 사용했을 경우, 위와 같이 정상적으로 테스트를 통과합니다. 그러나, @AfterEach 대신 @Transacctional을 사용할 경우, 동일한 테스트에서 다음과 같이 실패합니다. @Transactional은 테스트 케이스 종료 후 db를 롤백시킨다고 알고 있습니다. 그러므로 @AfterEach 대신 @Transactional을 사용해도 잘 돌아갈 것으로 예상하고 돌려봤으나, 테스트에 실패한다고 떴습니다. (@Transactional을 사용 시, BookServiceTest class를 open class BookServiceTest로 수정했습니다) 왜 @AfterEach 대신 @Transactional을 사용했을 경우 해당 상황에서 실패하는지 알 수 있을까요?
EntityManger를 주입받는 방법으로 private final EntityManager em; 이렇게 선언하고 @RequiredArgsConstructor로 받을 수도 있고, 이번 강의에서처럼 @PersistenceContext로 받을 수도 있는데 각각의 차이점이 무엇인가요 ? public long count() { return em.createQuery("select count(m) from Member m", Long.class) .getSingleResult(); } 또 여기서 메소드 선언문에는 long 타입을 반환타입으로 설정했는데 createQuery의 2번째 파라미터로는 Long값을 주는데 어떤 이유인지 궁금합니다.