묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 부트 - 핵심 원리와 활용
잘 이해가 안갑니다...
MyContainerInitV1 : ServletContainerInitializer을 implement한 클래스로서 서블릿 컨테이너 초기화를 위해 작성됐다.HelloServlet : HttpServlet을 상속받은 Servlet이다.AppInit : 애플리케이션 초기화를 위한 인터페이스이다.AppInitV1Servlet : AppInit를 implement한 애플리케이션 초기화 클래스 ? onStartup()을 통해 서블릿 컨테이너를 초기화하고 서블릿도 등록한다. MyContainerInitV2: ServletContainerInitializer을 implement한 클래스로서 @HandlesTypes(AppInit.class) 해줌으로써 해당 AppInit의 onStartup()을 통해 서블릿 컨테이너의 ctx를 파라미터로 보내서 AppInit 객체를 생성한다?================================제가 이해한 개념이 맞나요? 뭔가 용어들이 비슷해서 명확하게 이해가 안되는 것 같습니다. ㅠㅠ질문1) 컨테이너 초기화와 애플리케이션 초기화는 다른 건가요? 각각 뭐가 다르고 왜 해주는건지 잘 모르겠습니다. ㅠㅠ 질문2) AppInit과 ServletContainerInitializer은 둘다 onStartup()를 가지고 있던데.. 서로 다른 역할을 하는 각각의 인터페이스죠..? 질문3) AppInitV1Servlet 은 서블릿 컨테이너 초기화하고 서블릿도 등록하고, MyContainerInitV2도 서블릿 컨테이너 초기화와 서블릿 등록을 하게되는데 둘의 차이는 뭔가요?...너무 헷갈려요 ㅠㅠㅠㅠㅠ
-
미해결실전! 스프링 데이터 JPA
모든 쿼리에 같은 where조건이 필요 할 때
예시 상황은 여러 학생이 테이블을 공유해서 사용하여 모든 테이블에 student_id 컬럼이 있고 이를 이용해 데이터 사용자를 구별한다고 했을 때입니다.이럴 때 모든 find, update, delete 절에 where student_id = '1000' 와 같은 조건이 필요하다고 하면 단순히 모든 find문에 findByStudentId 하고 아이디를 넣어주는 수밖에 없을까요?어플리케이션 사용자 학생 아이디는 properties에 적어놓고 가져와 사용할 것이라 프로세스 실행중에 파라미터로 받아오는 경우는 없습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
빌드하기 오류
빌드하고 실행하기 오류가 납니다제 환경은 아래와 같습니다설치한 자바 버전: javac 11.0.19컴퓨터 환경: 윈도우 명령프롬프트자바 경로: C:\Program Files\Java\jdk-11변경후 자바경로: C:\Program Files\Java\jdk-11.0.19hello-spring 경로: C:\Astudy\hello-spring시스템환경변수: C:\Program Files\Java\jdk-11.0.19 라고 설정(이전에 1.8 자바를 설치했던 경험이 있어서 인텔리에서는 모든 환경을 java 11.0.19로 바꿔줌)시스템 변수 path: %JAVA_HOME%\bin 프로젝트 경로로 이동해서 dir에서 gradlew.bat 확인까지는 잘됩니다 오류1: ERROR: JAVA_HOME is set to an invalid directory: C:\Program Files\Java\jdk-11.0.9Please set the JAVA_HOME variable in your environment to match thelocation of your Java installation.라고 떠서 혹시나 환경변수의 자바명과 자바경로의 명이 달라서 그런가 싶어서이번에는 아예 jdk-11를 지우고 폴더명을 jdk-11.0.19로 다시 만들어 설치함그래도 아래와 같은 오류가 뜸 오류2: C:\Astudy\hello-spring>gradlew.batERROR: JAVA_HOME is set to an invalid directory: C:\Program Files\Java\jdk-11.0.9Please set the JAVA_HOME variable in your environment to match thelocation of your Java installation. 여기서 의문인 것은 왜 java 11.0.19가 아니라 11.0.9로 나온건지 모르겠음 명령어는 gradlew build, ./gradlew build, ./gradlew, ./gradlew.bat, gradlew, gradlew.bat다쳐봄 이중에서 뭘로 골라서 쳐야할 지도 헷갈림 제발 도와주세요
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
31강 오류 질문있습니다!ㅠㅠ
2023-07-12 01:18:17.448 ERROR 27420 --- [nio-8080-exec-2] 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:408) ~[na:na] at com.group.libraryapp.service.book.BookService.loanBook(BookService.java:38) ~[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$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) ~[spring-aop-5.3.24.jar:5.3.24] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.24.jar:5.3.24] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) ~[spring-aop-5.3.24.jar:5.3.24] at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) ~[spring-tx-5.3.24.jar:5.3.24] at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) ~[spring-tx-5.3.24.jar:5.3.24] at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-5.3.24.jar:5.3.24] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.24.jar:5.3.24] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) ~[spring-aop-5.3.24.jar:5.3.24] at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) ~[spring-aop-5.3.24.jar:5.3.24] at com.group.libraryapp.service.book.BookService$$EnhancerBySpringCGLIB$$5e9f8aa4.loanBook(<generated>) ~[main/:na] at com.group.libraryapp.controller.book.BookController.loanBook(BookController.java:27) ~[main/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[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:566) ~[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.69.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.69.jar:4.0.FR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.69.jar:9.0.69] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.69.jar:9.0.69] 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.69.jar:9.0.69] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.69.jar:9.0.69] 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.69.jar:9.0.69] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.69.jar:9.0.69] 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.69.jar:9.0.69] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:177) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:891) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1784) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na]안녕하세요! 강의 항상 잘 듣고있습니다! 다름이 아니라 31강수업을 듣다가 오류가 발생했는데 도저히 대출기능이 구현이 안되어서 여쭤봅니다! 살펴보니까 null 때문에 이 오류가 뜨는 것 같은데 DB에 맞는 데이터가 있는 상태에도 계속 뜹니다!ㅠ어디가 잘못 된 것 일까요?ㅠㅠ 코드는 깃허브에 올려놨습니다!(yul9910)
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
http://localhost:8000/hello가 안됩니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]http://localhost:8000은 실행이 되는데 http://localhost:8000/hello는 Error Page가 뜹니다.복사 붙여넣기로 코드를 작성했는데 어디가 잘못되었는지 모르겠습니다 ㅠㅠHelloController가 사용되지 않은 것 같은데 어디를 고쳐야하는지 모르겠습니다..경로는 다 영어 경로로 확인했습니다!
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
@AuthenticationPrincipal 사용이 가능한 이유가
처음에 로그인시 헤더에 jwt 토큰이 저장되고 securityContextholder, 시큐리티 세션에 저장된 loginUser가 stateless 설정에 의해 삭제 되지계좌등록 컨트롤러에 @AuthenticationPrincipal로 세션에 저장된 loginUser를 사용이 가능한 이유가 JwtAuthrizaitionFilte에서 아래 코드로 securityContextholder에 인증이나 권한체크용으로 저장 되기 떄문에 사용이 가능한걸까요? 맞는거같은데 확실해지고자 여쭤봅니다...Authentication authentication = new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities()); //강제로 authentication 객체를 생성 SecurityContextHolder.getContext().setAuthentication(authentication); //강제 로그인
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
정적 컨텐츠 질문입니다.
http://localhost:8080/hello-static이 아닌http://localhost:8080/hello-static.html 으로 뒤에 .html을 붙이는 이유가 해당 파일은 맵핑이 되어있지 않아서 그런건가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Test에서 AfterEach annotation 생성하기 전에 clearStore 메서드 추가하는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요.Test에서 아래 메서드를 추가하여 메모리에 있는 값을 초기화 시키는 것은 이해했습니다.@AfterEach public void afterEach() { repository.clearStore(); } 그런데, 아래 메서드를 추가하기 전에, 왜 MemoryMemberRepository class에서, 아래 메서드를 추가해야 하는지 모르겠습니다!public void clearStore() { store.clear(); }제가 Test 코드를 처음 작성하는데 이해가 되지 않아서 질문드립니다! 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
터미널에 create, drop이 안떠요
영한쌤은 create, drop 이런식으로 나왔는데 저만 안뜨는건가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
jpa부분에서 오류가 났어요...
일단 jpa로 진행하던중 오류가 났습니다..Member.javaMember.javapackage hwang.hwangspring.domain; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity //->JPA가 관리하는 ENTITY라는 의미가 됨 public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; //시스템이 정해줌 private String name; //고객이 회원가입할 때 적는 이름 public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } JpaMemberRepository.java import javax.persistence.EntityManager; import java.util.List; import java.util.Optional; public class JpaMemberRepository implements MemberRepository{ private final EntityManager em; public JpaMemberRepository(EntityManager em) { this.em = em; } @Override public Member save(Member member) { em.persist(member); return member; } @Override public Optional<Member> findById(Long id) { Member member = em.find(Member.class,id); return Optional.ofNullable(member); } @Override public Optional<Member> findByName(String name) { List<Member> result= em.createQuery("select m from Member m where m.name =:name",Member.class) .setParameter("name",name) .getResultList(); return result.stream().findAny(); } @Override public List<Member> findAll() { List<Member> result = em.createQuery("select m from Member m", Member.class).getResultList(); return result; //객체 자체를 return, } } Springconfig.javaimport org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.persistence.Entity; import javax.persistence.EntityManager; import javax.sql.DataSource; @Configuration public class SpringConfig { private final EntityManager em; private final DataSource dataSource; @Autowired public SpringConfig(DataSource dataSource,EntityManager em){ this.dataSource=dataSource; this.em=em; } @Bean public MemberService memberService() { // 이 로직을 등록해서 스프링 빈에 등록을 해줌 return new MemberService((MemoryMemberRepository) memberRepository()); //MemberService()가 스트링빈에 등록됨 } @Bean public MemberRepository memberRepository(){ return new JpaMemberRepository(em); } } MemberIntegrataionTest를 실행할경우package hwang.hwangspring.service; import hwang.hwangspring.domain.Member; import hwang.hwangspring.repository.MemberRepository; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.transaction.annotation.Transactional; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @SpringBootTest @Transactional class MemberServiceIntegrationTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Test public void 회원가입() throws Exception { //Given Member member = new Member(); member.setName("hello"); //When Long saveId = memberService.join(member); //Then Member findMember = memberRepository.findById(saveId).get(); assertEquals(member.getName(), findMember.getName()); } @Test public void 중복_회원_예외() throws Exception { //Given Member member1 = new Member(); member1.setName("spring"); Member member2 = new Member(); member2.setName("spring"); //When memberService.join(member1); IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));//예외가 발생해야 한다. assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); } }아래와 같은 오류가 뜹니다 ㅠㅠ java.lang.IllegalStateException: Failed to load ApplicationContextat org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:98)at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:124)at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:248)at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138)at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$8(ClassBasedTestDescriptor.java:363)at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:368)at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$9(ClassBasedTestDescriptor.java:363)at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:312)at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735)at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734)at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658)at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:362)at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:283)at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:282)at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:272)at java.base/java.util.Optional.orElseGet(Optional.java:369)at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:271)at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31)at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:102)at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:101)at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:66)at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123)at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123)at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90)at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107)at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53)at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57)at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232)at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberController' defined in file [C:\Users\hyk46\hwang-spring\hwang-spring\out\production\classes\hwang\hwangspring\controller\MemberController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'memberService' defined in class path resource [hwang/hwangspring/SpringConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [hwang.hwangspring.service.MemberService]: Factory method 'memberService' threw exception; nested exception is java.lang.ClassCastException: class hwang.hwangspring.repository.JpaMemberRepository cannot be cast to class hwang.hwangspring.repository.MemoryMemberRepository (hwang.hwangspring.repository.JpaMemberRepository and hwang.hwangspring.repository.MemoryMemberRepository are in unnamed module of loader 'app')at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955)at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:920)at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731)at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408)at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:136)at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:141)at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:90)... 71 moreCaused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'memberService' defined in class path resource [hwang/hwangspring/SpringConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [hwang.hwangspring.service.MemberService]: Factory method 'memberService' threw exception; nested exception is java.lang.ClassCastException: class hwang.hwangspring.repository.JpaMemberRepository cannot be cast to class hwang.hwangspring.repository.MemoryMemberRepository (hwang.hwangspring.repository.JpaMemberRepository and hwang.hwangspring.repository.MemoryMemberRepository are in unnamed module of loader 'app')at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:658)at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:486)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)... 89 moreCaused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [hwang.hwangspring.service.MemberService]: Factory method 'memberService' threw exception; nested exception is java.lang.ClassCastException: class hwang.hwangspring.repository.JpaMemberRepository cannot be cast to class hwang.hwangspring.repository.MemoryMemberRepository (hwang.hwangspring.repository.JpaMemberRepository and hwang.hwangspring.repository.MemoryMemberRepository are in unnamed module of loader 'app')at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653)... 103 moreCaused by: java.lang.ClassCastException: class hwang.hwangspring.repository.JpaMemberRepository cannot be cast to class hwang.hwangspring.repository.MemoryMemberRepository (hwang.hwangspring.repository.JpaMemberRepository and hwang.hwangspring.repository.MemoryMemberRepository are in unnamed module of loader 'app')at hwang.hwangspring.SpringConfig.memberService(SpringConfig.java:29)at hwang.hwangspring.SpringConfig$$EnhancerBySpringCGLIB$$f992599.CGLIB$memberService$0(<generated>)at hwang.hwangspring.SpringConfig$$EnhancerBySpringCGLIB$$f992599$$FastClassBySpringCGLIB$$aa36e038.invoke(<generated>)at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331)at hwang.hwangspring.SpringConfig$$EnhancerBySpringCGLIB$$f992599.memberService(<generated>)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.base/java.lang.reflect.Method.invoke(Method.java:566)at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)... 104 more
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
7강 질문있습니다
7강에서 PostMapping과 GetMapping에 URL로 /user을 입력했는데 홈페이지에서 사용자 등록버튼을 누르거나 목록창을 눌러도 url은 전혀 변하지 않습니다. url로 클라이언트가 요청을해서 서버가 응답하는 거라고 알고있는데 어떻게 이렇게 작용하는건가요?url이 바뀌지 않아도 요청을 받아들이는건가요?
-
미해결토비의 스프링 부트 - 이해와 원리
'DataSource 자동 구성 클래스' 강의 중 DataSourceConfig 클래스 설정
안녕하세요. 정말 재밌고 알찬 강의 잘 보고 있습니다. 영상에 추가가 안 된 부분인거 같아 질문 올립니다.DataSource 자동 구성 클래스 강의 중에 'DataSourceConfig' 클래스를 정의하고, com.southouse.config.MyAutoConfiguration.imports에 패키지 이름을 추가해줘야 하는데 이 부분이 영상에서 빠진거 같아서요.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
90149 에러 뜨시는 분 참고하세요
Database "~" not found 떠서 오류 뜨시는분들이렇게 base에 jpashop.mv.db가 생성되지 않아서 생기는 문제같습니다../h2.sh로 h2 실행한 후 맥이든 윈도우든 상단이나 우측하단의 h2아이콘을 클릭한 후 create new database를 생성합니다. 여기서 그냥 넣게되면 h2의 bin폴더에 생성되면서 제대로 실행이 안됩니다.그래서 제가 해결한 방법은 h2폴더의 bin폴더에서를 기준으로 한 절대경로로 base까지 이동한 다음 마지막에 jpashop을 기입한다면 원준님 사진처럼 나옵니다. 그리고 해결됩니다 ex)../../../../jpashop 이런식으로요강의 듣느라 고생많으신데 빨리 해결하고 넘어가시면 좋겠습니다!정리하자면1. ./h2.sh 실행2. h2아이콘에서 create new database3. 절대경로로 h2/bin에서 base경로까지 이동해 jpashop으로 파일이름 넣기4. jdbc:h2:tcp://localhost/~/jpashop 이후 실행되실겁니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
패키지 생성이 안됩니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 1:10 쯤 testcase 를 위한 package 생성을 하는데 제 파일은 패키지가 아닌건지 패키지를 생성할 수 있는 버튼이 뜨지 않습니다. 왜 이럴까요 ㅜㅜ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
DB에 테이블이 생성되지 않습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.Test자바 파일 실행시,"C:\Program Files\Java\jdk-20\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.1.1\lib\idea_rt.jar=57983:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.1.1\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath "C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.1.1\lib\idea_rt.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.1.1\plugins\junit\lib\junit5-rt.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.1.1\plugins\junit\lib\junit-rt.jar;C:\Users\Me\Desktop\김씨꺼\jpashop\out\test\classes;C:\Users\Me\Desktop\김씨꺼\jpashop\out\production\classes;C:\Users\Me\Desktop\김씨꺼\jpashop\out\production\resources;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-data-jpa\3.1.1\f129ea070d7d7152c984189301dc751be45f9a38\spring-boot-starter-data-jpa-3.1.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-thymeleaf\3.1.1\69e351b19ee4fa37ff7cb851354498a880b5a937\spring-boot-starter-thymeleaf-3.1.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-web\3.1.1\f2c2d9e35430e4b4a98ad91780bb9b2d1deec08\spring-boot-starter-web-3.1.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-devtools\3.1.1\fca82661c18f1ca18614d308523c0d404d3753b9\spring-boot-devtools-3.1.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\junit\junit\4.13.1\cdd00374f1fee76b11e2a9d127405aa3f6be5b6a\junit-4.13.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-test\3.1.1\6e69181686ec1c9af137f038ddf6cd1830a2af19\spring-boot-starter-test-3.1.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-aop\3.1.1\f72362878ded668b8c3a12f8465ced98ef3fb188\spring-boot-starter-aop-3.1.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-jdbc\3.1.1\8e6bdc511fc9ade17c09fcc20a0f6a44fa39a876\spring-boot-starter-jdbc-3.1.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.hibernate.orm\hibernate-core\6.2.5.Final\3c0d24dd2f66920aeeee666779ca7391f20bc69c\hibernate-core-6.2.5.Final.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework.data\spring-data-jpa\3.1.1\815665072b1cfa83aa3175228539e3e468db15e0\spring-data-jpa-3.1.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework\spring-aspects\6.0.10\4a6a423ce6fdc474a327f7b7a7818dedc33c504f\spring-aspects-6.0.10.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter\3.1.1\cf74eeaef5a265c75dd89fea829391bf08efdb6c\spring-boot-starter-3.1.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.thymeleaf\thymeleaf-spring6\3.1.1.RELEASE\deb52ef921a4ac5132fedb7ebfc2bc1dad4382b3\thymeleaf-spring6-3.1.1.RELEASE.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-json\3.1.1\8dc99860536a6a858de6caaeb67f84d7af8a30a3\spring-boot-starter-json-3.1.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-tomcat\3.1.1\927f80fb9d8816209420223d1a1a09e730ea78e6\spring-boot-starter-tomcat-3.1.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework\spring-webmvc\6.0.10\af3f040747f4bfbcdb96140f8c9d252d3a6a4ef1\spring-webmvc-6.0.10.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework\spring-web\6.0.10\e61defa7908bf7a499f000dab8ef7691c2aa75c1\spring-web-6.0.10.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-autoconfigure\3.1.1\618ec717eef4ba2ff347c7713150aac8e73fe233\spring-boot-autoconfigure-3.1.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot\3.1.1\f8f80c1453c8fe0e08a6235f983d8daf571d3e3\spring-boot-3.1.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.hamcrest\hamcrest-core\2.2\3f2bd07716a31c395e2837254f37f21f0f0ab24b\hamcrest-core-2.2.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-test-autoconfigure\3.1.1\4d6b05666438577e2fa7a1cbad6f58956bee34d7\spring-boot-test-autoconfigure-3.1.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-test\3.1.1\8481164eedc07955e903cb4442dc23a868eecb8d\spring-boot-test-3.1.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\com.jayway.jsonpath\json-path\2.8.0\b4ab3b7a9e425655a0ca65487bbbd6d7ddb75160\json-path-2.8.0.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\jakarta.xml.bind\jakarta.xml.bind-api\4.0.0\bbb399208d288b15ec101fa4fcfc4bd77cedc97a\jakarta.xml.bind-api-4.0.0.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\net.minidev\json-smart\2.4.11\cc5888f14a5768f254b97bafe8b9fd29b31e872e\json-smart-2.4.11.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.assertj\assertj-core\3.24.2\ebbf338e33f893139459ce5df023115971c2786f\assertj-core-3.24.2.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.hamcrest\hamcrest\2.2\1820c0968dba3a11a1b30669bb1f01978a91dedc\hamcrest-2.2.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.junit.jupiter\junit-jupiter\5.9.3\72e840501e1550e9799c9a5cc9483d7d6b29e0ba\junit-jupiter-5.9.3.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.mockito\mockito-junit-jupiter\5.3.1\d6ac0f6d54addf02def4ba1213f73a15ae6c2308\mockito-junit-jupiter-5.3.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.mockito\mockito-core\5.3.1\7cac313592a29ae5e29c52c22b15c3ae5ab561b2\mockito-core-5.3.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.skyscreamer\jsonassert\1.5.1\6d842d0faf4cf6725c509a5e5347d319ee0431c3\jsonassert-1.5.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework\spring-test\6.0.10\8773ebcd0e6822e2e5a816752cbe2419d7b1b4b4\spring-test-6.0.10.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework\spring-core\6.0.10\889aa214b6607763ddeb6bd391d682cd71681b36\spring-core-6.0.10.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.xmlunit\xmlunit-core\2.9.1\e5833662d9a1279a37da3ef6f62a1da29fcd68c4\xmlunit-core-2.9.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework\spring-aop\6.0.10\cc309a306fa759018b107dea9a208c758af0297\spring-aop-6.0.10.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.aspectj\aspectjweaver\1.9.19\afbffb1210239fbba5cad73093c5b216d515838f\aspectjweaver-1.9.19.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework\spring-jdbc\6.0.10\5179c98c5eba511cdd31852d1f74063aa17bf3da\spring-jdbc-6.0.10.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\com.zaxxer\HikariCP\5.0.1\a74c7f0a37046846e88d54f7cb6ea6d565c65f9c\HikariCP-5.0.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\jakarta.persistence\jakarta.persistence-api\3.1.0\66901fa1c373c6aff65c13791cc11da72060a8d6\jakarta.persistence-api-3.1.0.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\jakarta.transaction\jakarta.transaction-api\2.0.1\51a520e3fae406abb84e2e1148e6746ce3f80a1a\jakarta.transaction-api-2.0.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework\spring-context\6.0.10\e2bd59f05c95647a274b7719d419cf8fde6f25a0\spring-context-6.0.10.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework\spring-orm\6.0.10\321d8f382fad673d8b4d4047b4370176561c5a60\spring-orm-6.0.10.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework.data\spring-data-commons\3.1.1\cfc10ccc41910b7b6e83cf27debaac73229572e0\spring-data-commons-3.1.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework\spring-tx\6.0.10\459698d22aadc881afe425934cca79cc1f6bce91\spring-tx-6.0.10.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework\spring-beans\6.0.10\8fc0684773cc1598edd810660f57d9e9c8ae6055\spring-beans-6.0.10.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.antlr\antlr4-runtime\4.10.1\10839f875928f59c622d675091d51a43ea0dc5f7\antlr4-runtime-4.10.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\jakarta.annotation\jakarta.annotation-api\2.1.1\48b9bda22b091b1f48b13af03fe36db3be6e1ae3\jakarta.annotation-api-2.1.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.slf4j\slf4j-api\2.0.7\41eb7184ea9d556f23e18b5cb99cad1f8581fc00\slf4j-api-2.0.7.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-logging\3.1.1\53bb456e4bf8f751de5a6ce154707b052946fd43\spring-boot-starter-logging-3.1.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.yaml\snakeyaml\1.33\2cd0a87ff7df953f810c344bdf2fe3340b954c69\snakeyaml-1.33.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.thymeleaf\thymeleaf\3.1.1.RELEASE\374a129dfa5e7d7f1a46eacc4d49e594ca0cf26f\thymeleaf-3.1.1.RELEASE.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.datatype\jackson-datatype-jsr310\2.15.2\30d16ec2aef6d8094c5e2dce1d95034ca8b6cb42\jackson-datatype-jsr310-2.15.2.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.module\jackson-module-parameter-names\2.15.2\75f8d2788db20f6c587c7a19e94fb6248c314241\jackson-module-parameter-names-2.15.2.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.datatype\jackson-datatype-jdk8\2.15.2\66a50e089cfd2f93896b9b6f7a734cea7bcf2f31\jackson-datatype-jdk8-2.15.2.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-databind\2.15.2\9353b021f10c307c00328f52090de2bdb4b6ff9c\jackson-databind-2.15.2.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-websocket\10.1.10\10604119402bcaa8490b638698ad177f8df4c50c\tomcat-embed-websocket-10.1.10.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-core\10.1.10\7423236b34aa78d6f36592b2aa294d7c8469f219\tomcat-embed-core-10.1.10.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-el\10.1.10\717033c0417fdc7e794b382c066b7e78f6029268\tomcat-embed-el-10.1.10.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework\spring-expression\6.0.10\bd8c93e473e713fe9150a772487507a8e600d5f1\spring-expression-6.0.10.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\io.micrometer\micrometer-observation\1.11.1\9027a35892c7e08ea8affce87b3662b6ceca122c\micrometer-observation-1.11.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\jakarta.activation\jakarta.activation-api\2.1.2\640c0d5aff45dbff1e1a1bc09673ff3a02b1ba12\jakarta.activation-api-2.1.2.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\net.minidev\accessors-smart\2.4.11\245ceca7bdf3190fbb977045c852d5f3c8efece1\accessors-smart-2.4.11.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\net.bytebuddy\byte-buddy\1.14.5\28a424c0c4f362568e904d992c239c996cf7adc7\byte-buddy-1.14.5.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.junit.jupiter\junit-jupiter-params\5.9.3\9e2a4bf6016a1975f408a73523392875cff7c26f\junit-jupiter-params-5.9.3.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.junit.jupiter\junit-jupiter-api\5.9.3\815818ad6ffcc8d320d8fbdf3d748c753cf83201\junit-jupiter-api-5.9.3.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\net.bytebuddy\byte-buddy-agent\1.14.5\20f4e9b9d0ffb953657bfa4b92c0cceb27907d58\byte-buddy-agent-1.14.5.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\com.vaadin.external.google\android-json\0.0.20131108.vaadin1\fa26d351fe62a6a17f5cda1287c1c6110dec413f\android-json-0.0.20131108.vaadin1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.springframework\spring-jcl\6.0.10\cba44e98dab40a506c50978a0e5f11ceaa90b3ff\spring-jcl-6.0.10.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\ch.qos.logback\logback-classic\1.4.8\f00ba91d993e4d14301b11968d3cacc3be7ef3e1\logback-classic-1.4.8.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j\log4j-to-slf4j\2.20.0\d37f81f8978e2672bc32c82712ab4b3f66624adc\log4j-to-slf4j-2.20.0.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.slf4j\jul-to-slf4j\2.0.7\a48f44aeaa8a5ddc347007298a28173ac1fbbd8b\jul-to-slf4j-2.0.7.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.attoparser\attoparser\2.0.6.RELEASE\8f603f22a18d4f7258f8860ccbb68b069f49904a\attoparser-2.0.6.RELEASE.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.unbescape\unbescape\1.1.6.RELEASE\7b90360afb2b860e09e8347112800d12c12b2a13\unbescape-1.1.6.RELEASE.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-annotations\2.15.2\4724a65ac8e8d156a24898d50fd5dbd3642870b8\jackson-annotations-2.15.2.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-core\2.15.2\a6fe1836469a69b3ff66037c324d75fc66ef137c\jackson-core-2.15.2.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\io.micrometer\micrometer-commons\1.11.1\45bc0f2aa4d6180f1a783f1930f307a4efbb12e8\micrometer-commons-1.11.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.ow2.asm\asm\9.3\8e6300ef51c1d801a7ed62d07cd221aca3a90640\asm-9.3.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.apiguardian\apiguardian-api\1.1.2\a231e0d844d2721b0fa1b238006d15c6ded6842a\apiguardian-api-1.1.2.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.junit.platform\junit-platform-commons\1.9.3\36b2e26a90c41603be7f0094bee80e3f8a2cd4d4\junit-platform-commons-1.9.3.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.opentest4j\opentest4j\1.2.0\28c11eb91f9b6d8e200631d46e20a7f407f2a046\opentest4j-1.2.0.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\ch.qos.logback\logback-core\1.4.8\3fba9c105e0efc5ffdcda701379687917d5286f7\logback-core-1.4.8.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j\log4j-api\2.20.0\1fe6082e660daf07c689a89c94dc0f49c26b44bb\log4j-api-2.20.0.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\com.h2database\h2\2.1.214\d5c2005c9e3279201e12d4776c948578b16bf8b2\h2-2.1.214.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.glassfish.jaxb\jaxb-runtime\4.0.3\93af25be25b2c92c83e0ce61cb8b3ed23568f316\jaxb-runtime-4.0.3.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.jboss.logging\jboss-logging\3.5.1.Final\a5c340a92c6efeaa0d495047ee9aab38a86bb107\jboss-logging-3.5.1.Final.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.hibernate.common\hibernate-commons-annotations\6.0.6.Final\77a5f94b56d49508e0ee334751db5b78e5ccd50c\hibernate-commons-annotations-6.0.6.Final.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\io.smallrye\jandex\3.0.5\c548a4871b552292dbdd65409d3fda145c8925c1\jandex-3.0.5.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\com.fasterxml\classmate\1.5.1\3fe0bed568c62df5e89f4f174c101eab25345b6c\classmate-1.5.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\jakarta.inject\jakarta.inject-api\2.0.1\4c28afe1991a941d7702fe1362c365f0a8641d1e\jakarta.inject-api-2.0.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.junit.jupiter\junit-jupiter-engine\5.9.3\355322b03bf39306a183162cd06626c206f0286b\junit-jupiter-engine-5.9.3.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.objenesis\objenesis\3.3\1049c09f1de4331e8193e579448d0916d75b7631\objenesis-3.3.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.glassfish.jaxb\jaxb-core\4.0.3\e9093b4a82069a1d78ee9a3233ca387bca88861f\jaxb-core-4.0.3.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.junit.platform\junit-platform-engine\1.9.3\8616734a190f8d307376aeb7353dba0a2c037a09\junit-platform-engine-1.9.3.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.eclipse.angus\angus-activation\2.0.1\eaafaf4eb71b400e4136fc3a286f50e34a68ecb7\angus-activation-2.0.1.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\org.glassfish.jaxb\txw2\4.0.3\47b8fe31c6d1a3382203af919400527389e01e9c\txw2-4.0.3.jar;C:\Users\Me\.gradle\caches\modules-2\files-2.1\com.sun.istack\istack-commons-runtime\4.1.2\18ec117c85f3ba0ac65409136afa8e42bc74e739\istack-commons-runtime-4.1.2.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 jpabook.jpashop.MemberRepositoryTest23:14:14.131 [main] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils -- Could not detect default configuration classes for test class [jpabook.jpashop.MemberRepositoryTest]: MemberRepositoryTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration.23:14:14.250 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper -- Found @SpringBootConfiguration jpabook.jpashop.JpashopApplication for test class jpabook.jpashop.MemberRepositoryTest처럼 뜨고 DB에 MEMBER 테이블이 생성되지 않습니다. 무엇이 문제일까요
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티 설계시 주의점에 질문이 있습니다.
엔티티 설계시 주의점 강의13:52/27:32 부분에서 JPA에서 컬렉션을 표현하는 클래스로 지연로딩 전략을 사용할때 PersistentBag을 사용하는걸로 알고 있습니다.컬렉션 필드를 매핑하기위해 toMany 애노테이션인 관계에서는 컬렉션 필드를 PersistentBag으로 관리하는다는데 이걸 set으로 새 컬렉션을 넣는건 예외가 발생할수 있다고 하셨습니다. 그러면 아예 사용할때부터 변경할수 없게final로 지정을 하는건 안되나요?
-
해결됨실습으로 배우는 선착순 이벤트 시스템
카프카 Consumer에 메시지가 정상 도착하지 않습니다.
동시에 여러명이 요청하는 케이스를 카프카로 해결하는 케이스에서 테스트를 실행하였더니 카프카 컨슈머에 아무런 메시지가 전달되지 않아 질문드립니다. 토픽명은 강의와 다르게 "coupon"으로 생성하였습니다.
-
미해결스프링 시큐리티 OAuth2
jwt token의 토큰 검증
안녕하세요강의에서는 resource 서버가 받은 토큰 검증 과정에서 opaqueToken을 사용하고 있는데요.JWT 경우로 질문을 드리고 싶습니다.JWT토큰도 opaqueToken과 마찬가지로 oauth2/revoke api를 호출하면 정상적으로 meta.invalidated 필드가 true로 변경되는 것을 확인했습니다.해당 필드가 true로 변경되었음에도 불과하고 resource 서버에 동일한 토큰으로 요청을 보내도 정상적으로 동작하고 있는 것을 확인했는데요. jwtToken 방식의 경우에는 토큰 검증시 최초에만 jwkSet을 가져오기 위해 한번만 authorization server를 호출하고 이후에는 내부적으로 jwtDecoder를 사용해 검증하는 것으로 보입니다. 결론적으로 jwtToken을 사용할때는 oauth2/revoke를 통해 meta.invalidated 값과 무관하게 토큰 만료 전까지는 지속적으로 접근이 가능한 것으로 보이는데요.제가 이해한 흐름이 맞을까요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
orderItem에 관한 질문입니다.
만약에 JPARepository를 사용하면 orderItemRepository도 따로 만들어서 orderItemRepository.save()를 이용하는게 맞는건가요??
-
미해결스프링 시큐리티 OAuth2
Resources Server 질문
안녕하세요 수원님 ! 강의를 수강하다가 헷갈리는 내용이 생겨 질문드립니다 ! 위와 같은 그림을 설명하실때, 스프링 서버는 Client 의 역할을 하신다고 하셨습니다. 이후 Resource Server 를 강의하시는 파트에서는 스프링 서버가 리소스 서버가 된다고 하셨는데, 이 부분에서 혼동이 발생하여 질문드립니다. 카카오와 같은 소셜 로그인 기능을 구현한다고 가정하겠습니다.스프링 서버가 JWT 의 의존성을 갖고, 프론트에게 토큰을 발행해주는 서비스를 구현한다면, 이때 스프링 서버는 Client 와 Resourse Server 의 역할을 동시에 하는 것일까요??위와 같은 구조에서 토큰을 프론트에 발행할 때, 스프링은 카카오 인가 서버로 부터 토큰을 받고 해당 토큰을 그대로 내려주는 것일까요?? 보안상 문제가 발생하니 발급 받은 토큰을 기반으로 새로운 JWT 생성해서 내려주는 것일까요??소셜 로그인을 연동했다면, issuer-uri 에는 카카오의 인가 서버 Url 을 입력 하면 될까요??