묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 데이터 JPA
벌크성 수정 쿼리도 select를 한 후에 update?
안녕하세요,예시로 team_id가 2인 member를 team_id가 1인 member로 변경하고 싶은 경우가 있다고 가정해보겠습니다. @Modifying @Query("update Member m set m.team.id = 1 where m.team.id = :id") void updateMemberTeamTo1(@Param("id") Long id);위 코드처럼 단순히 team_id 로 수정하면 update 쿼리 한 번으로 변경이 가능합니다.@Modifying @Query("update Member m set m.team = :tobe where m.team = :asis") void updateMemberTeamTo1(@Param("asis") Team asis, @Param("tobe") Team tobe);하지만 team 엔티티를 넘긴다면 team id가 1인 Team과 변경할 team id를 가진 Team을 select 해야하니 쿼리가 총 3번 나갑니다. 단건 update 를 할 때 변경감지를 사용하기 위해 먼저 PK로 select 하고 있습니다. 그런데 여러건을 벌크성 수정 쿼리로 변경을 할 때도 select를 해서 영속성 컨텍스트에 올린 후 변경해야 할까요? 좋은 강의 항상 감사드립니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
에러 해결이 안돼 질문 드립니다ㅠㅠ
본 강의 섹션7. 홈화면과 레이아웃 강의를 듣다가 jpaShopApplication을 실행하면 서버에 연결될 수 없다고 뜨면서 에러가 납니다ㅠㅠ다음은 에러 메세지입니다! 10000자 이하로 작성하라고 해서 부득이하게 사진으로 첨부합니다
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
dto private와 private final의 차이
문제 3번 풀던 중 생긴 오류를 잡으면서 생긴 의문입니다. DTO에 List를 만들어서 JSON 배열을 POST형식의 body로 받는 문제였습니다.아래는 변수를 final로 선언했을 때 생기는 오류입니다.ERROR 8512 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.http.converter.HttpMessageConversionException: Type definition error 선언하는 방식에 문제가 없다고 여겨 수정해보다가 final과 constructor를 지우고 다시 요청을 날려보니 정상적인 값의 출력을 확인했습니다.이 final과 constructor 이 무슨 역할을 하고 있는지, 왜 final로 선언되었을 때는 오류가 났는지, 언제 사용되어야 하는지 등 검색을 해보지만 잘 이해가 되지 않아서 질문 남깁니다.
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
낙관적 락 무한루프 질문
강사님의 강의를 보며 현재 제 프로젝트에 낙관적 락을 적용시켜 보았습니다.구현하고자 하는 서비스는 쿠폰 발급 서비스이며, DB 구조는user 1 : N user_coupon N : 1 coupon 입니다. @Transactional public void issueCoupon(CouponIssueParam param, User user) { // 쿠폰 조회 Coupon coupon = getCoupon(param.getCouponId()); // 쿠폰 발급 UserCoupon userCoupon = UserCoupon.CreateUserCoupon(coupon, user); userCouponQueryService.saveUserCoupon(userCoupon); }public static UserCoupon CreateUserCoupon(Coupon coupon, User user) { // 쿠폰 검증 coupon.validateCoupon(); // 재고 감소 coupon.decreaseQuantity(); return UserCoupon.builder() .coupon(coupon) .user(user) .build(); }위 코드와 같이 유저가 특정 쿠폰 Id 를 통해 쿠폰 발급 요청을 하고, 중간 테이블에 관계가 매핑됨으로써 쿠폰 발급이 이루어집니다. public void validateCoupon() { if(this.stockStatus.equals(StockStatus.OUT_OF_STOCK)) throw new IllegalArgumentException("쿠폰이 매진되었습니다."); if(this.expiredAt.isBefore(LocalDateTime.now())) throw new IllegalArgumentException("쿠폰이 만료되었습니다."); }이때 user_coupon 생성 전 쿠폰의 매진 및 만료 상태에 따라 예외를 던지는 검증 메서드가 존재합니다. public void decreaseQuantity() { this.remainQuantity = this.remainQuantity - 1; if(this.remainQuantity <= 0){ this.stockStatus = StockStatus.OUT_OF_STOCK; } }추가로 쿠폰 내부에 재고가 감소하는 메서드가 존재하며 0에 다다를 경우 상태값을 변경해줍니다. 이때 동시성 이슈가 발생하는 이유는 user_coupon 을 insert 하면서, 부모 테이블인 coupon 의 재고를 update 하는 과정에서 발생하는 것으로 파악했습니다. 이에 쿠폰 발급 초기에 coupon 을 조회할 때 @Lock(LockModeType.OPTIMISTIC) @Query("select c from Coupon c where c.id = :couponId and c.isDeleted = false") Optional<Coupon> findOneCouponByCouponId(@Param("couponId") Long couponId);이처럼 낙관적 락 어노테이션을 달아주었으며 @Component @RequiredArgsConstructor public class OptimisticLockFacade { private final CouponService couponService; public void issueCoupon(CouponIssueParam param, User user) throws InterruptedException { while (true) { try { couponService.issueCoupon(param, user); break; } catch (Exception e) { Thread.sleep(50); // 재시도 전 잠시 대기 } } } }위와 같이 퍼사드 클래스를 생성하였습니다. @Test @DisplayName("쿠폰 여러 명 발급") void 쿠폰_여러_명_발급() throws InterruptedException { int threadCount = 1000; ExecutorService executorService = Executors.newFixedThreadPool(32); CountDownLatch latch = new CountDownLatch(threadCount); for (int i = 0; i < threadCount; i++) { final int threadNumber = i + 1; int key = i; executorService.submit(() -> { try { optimisticLockFacade.issueCoupon(param, users.get(key)); System.out.println("Thread " + threadNumber + " - 성공"); } catch (PessimisticLockingFailureException e) { System.out.println("Thread " + threadNumber + " - 락 충돌 감지"); } catch (Exception e) { System.out.println("Thread " + threadNumber + " - " + e.getMessage()); } finally { latch.countDown(); } }); } latch.await(); executorService.shutdown(); Long count = userCouponRepository.countByCouponId(param.getCouponId()); assertThat(count).isEqualTo(100); } 쿠폰의 재고가 100개며, 1,000 명의 유저가 32개의 스레드 환경에서 쿠폰 발급을 요청할 때 예상되는 발급 쿠폰 수는 100개가 되어야 합니다. 이렇게 낙관적 락을 적용하여 테스트를 수행하니 무한 루프에 빠지게 되었습니다.무한루프로 인해 테스트가 종료되지 않자, 강제적으로 정지 시킨 후 DB 를 확인했는데 쿠폰의 수는 예상한 대로 100개가 생성된 것을 확인할 수 있었습니다. 그런데 왜 메서드가 종료되지 않고 무한루프가 돌아간 것인지 이유를 모르겠습니다. public void issueCoupon(CouponIssueParam param, User user) throws InterruptedException { while (true) { try { couponService.issueCoupon(param, user); break; } catch (IllegalArgumentException e) { System.out.println("쿠폰 발급 실패: " + e.getMessage()); break; } catch (Exception e) { Thread.sleep(50); // 재시도 전 잠시 대기 } } } 혹시나 하여, 쿠폰 발급 로직에 쿠폰이 매진이 될 경우 예외를 던지는 검증 메서드가 존재했고 이에 퍼사드 클래스에서 해당 예외를 잡아내면 루프를 빠져나오게 설정했습니다. 이렇게 구현하니 테스트는 성공적으로 통과하였습니다. 현재 제가 구현한 서비스 구성에서는 이런식으로 접근하는 게 맞는 걸까요 ?
-
미해결스프링 핵심 원리 - 기본편
영상이 안 보입니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 제목 그대로 인데요mac에서 강의를 듣던중에 다음강의로 넘어가니 그이후 강의부터는 영상이 안 보입니다모바일로는 보이는데 pc로 보려면 어떻게 해야할까요?
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
섹션 5의 세션 고정 보호 강의 질문
섹션 5의 세션 고정 보호 강의 실습 부분을 보면, 루트경로(/) 로 요청했을때도 응답에 세션아이디가 저장된 쿠기가 날라왔습니다.즉, 세션 생성 정책이 디폴트(ifRequired ) 인데 서버에 세션이 생성된 것인데, 혹시 세션이 어느부분에서 생성되었는지 알수 있을까요..?? ++ 추가)) 섹션 5의 SessionManagementFilter / ConcurrentSessionFilter - 2 강의를 보니 .maximumSessions() 설정을 해야만 세션관련 작업을 하는 필터들이 정상적으로 등록된다고 설명돼있는데 위의 실습은 이 설정을 하지 않아서 필터들이 등록되지 않은 걸까요..??근데 세션 고정 보호 적용은 어떻게 적용된건지 모르겠네요..ㅠㅠ
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
basic.html 내용을 어디서 복사하는 것인지 알 수 있을까요?
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]basic.html 내용을 어디서 복사하는 것인지 알 수 있을까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
createQuery에서 i와 m의 차이점이 뭔가요? (select i from i / select m from m)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요강의에 나오는return em.createQuery("select i from Item i", Item.class)저 부분이 JPQL?을 만드는 쿼리 문장이라고 기억합니다.근데 저 부분이 예전에는 "select m from m"이라는 식으로 진행 되었던 것에 비해, 이번 강의에서는 "select i from i"식으로 진행이 되길래 이 i와 m은 무엇의 차이인지 궁금합니다.그리고 i와 m이 각각 무엇을 위해 쓰이는지도 궁금합니다긴 글 읽어주셔서 감사합니다!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하세요 public void, public Item, public Member ... 등등 고민입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요!강의 내용에서 메소드를 만들 때 public void + 메소드명public Member + 메소드명public Item + 메소드명이런식으로 붙는데 왜 public void로 통일 되지 않는지 궁금합니다.★1. 왜 public Member 혹은 Item이 붙는지★2. 그 붙은 Member와 Item은 어떤 역할을 하는지★3. 제가 이 부분에 대해 왜 무지한지(자바 혹은 스프링 중 어떤 부분이 제가 부족한 것 인지) --위 부분들에 대하여 궁금합니다!답변 해주시면 정말 감사하겠습니다!긴 글 읽어주셔서 감사합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
localhost:8080/hello 창이 열리지 않습니다.
. ____ _ /\\ / ___'_ __ (_)_ _ \ \ \ \( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.2.5)2024-05-21T15:07:05.718+09:00 INFO 7852 --- [servlet] [ main] hello.servlet.ServletApplication : Starting ServletApplication using Java 21.0.3 with PID 7852 (C:\Study\servlet\servlet\out\production\classes started by wo12l in C:\Study\servlet\servlet)2024-05-21T15:07:05.725+09:00 INFO 7852 --- [servlet] [ main] hello.servlet.ServletApplication : No active profile set, falling back to 1 default profile: "default"2024-05-21T15:07:07.089+09:00 WARN 7852 --- [servlet] [ main] s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'servletComponentRegisteringPostProcessor': Instantiation of supplied bean failed2024-05-21T15:07:07.110+09:00 INFO 7852 --- [servlet] [ main] .s.b.a.l.ConditionEvaluationReportLogger : Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.2024-05-21T15:07:07.176+09:00 ERROR 7852 --- [servlet] [ main] o.s.boot.SpringApplication : Application run failedorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'servletComponentRegisteringPostProcessor': Instantiation of supplied bean failed at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1223) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1161) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:202) ~[spring-context-6.1.6.jar:6.1.6] at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:788) ~[spring-context-6.1.6.jar:6.1.6] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:606) ~[spring-context-6.1.6.jar:6.1.6] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.2.5.jar:3.2.5] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.2.5.jar:3.2.5] at org.springframework.boot.SpringApplication.run(SpringApplication.java:334) ~[spring-boot-3.2.5.jar:3.2.5] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354) ~[spring-boot-3.2.5.jar:3.2.5] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-3.2.5.jar:3.2.5] at hello.servlet.ServletApplication.main(ServletApplication.java:12) ~[classes/:na]Caused by: java.lang.NoClassDefFoundError: jakarta/servlet/annotation/WebServlet at org.springframework.boot.web.servlet.WebServletHandler.<init>(WebServletHandler.java:39) ~[spring-boot-3.2.5.jar:3.2.5] at org.springframework.boot.web.servlet.ServletComponentRegisteringPostProcessor.<clinit>(ServletComponentRegisteringPostProcessor.java:62) ~[spring-boot-3.2.5.jar:3.2.5] at org.springframework.boot.web.servlet.ServletComponentScanRegistrar$ServletComponentRegisteringPostProcessorBeanDefinition.lambda$getInstanceSupplier$0(ServletComponentScanRegistrar.java:94) ~[spring-boot-3.2.5.jar:3.2.5] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainInstanceFromSupplier(AbstractAutowireCapableBeanFactory.java:1257) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.DefaultListableBeanFactory.obtainInstanceFromSupplier(DefaultListableBeanFactory.java:951) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1217) ~[spring-beans-6.1.6.jar:6.1.6] ... 16 common frames omittedCaused by: java.lang.ClassNotFoundException: jakarta.servlet.annotation.WebServlet at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na] at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na] at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) ~[na:na] ... 22 common frames omittedProcess finished with exit code 1코드를 4:32초까지의 강의 내용을 따라적었는데 위 내용과 같이 뜨면서 종료가 됩니다. 해결방법알려주시면 감사하겠습니다.
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
BeanCreationException 에러
안녕하세요 주문 조회 v6에서 어플리케이션 실행시 BeanCreationException 에러가 나는데 어디가 문제일까요? 이렇게 에러가 뜹니다. 도와주세요 Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.2024-05-21T12:38:30.154+09:00 ERROR 67764 --- [ restartedMain] o.s.boot.SpringApplication : Application run failedorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: jakarta/xml/bind/JAXBException at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1786) ~[spring-beans-6.1.4.jar:6.1.4] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) ~[spring-beans-6.1.4.jar:6.1.4] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.4.jar:6.1.4] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) ~[spring-beans-6.1.4.jar:6.1.4] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.4.jar:6.1.4] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) ~[spring-beans-6.1.4.jar:6.1.4] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-6.1.4.jar:6.1.4] at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1231) ~[spring-context-6.1.4.jar:6.1.4] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:949) ~[spring-context-6.1.4.jar:6.1.4] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624) ~[spring-context-6.1.4.jar:6.1.4] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.2.3.jar:3.2.3] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.2.3.jar:3.2.3] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.2.3.jar:3.2.3] at org.springframework.boot.SpringApplication.run(SpringApplication.java:334) ~[spring-boot-3.2.3.jar:3.2.3] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354) ~[spring-boot-3.2.3.jar:3.2.3] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-3.2.3.jar:3.2.3] at jpabook.jpashop.JpashopApplication.main(JpashopApplication.java:13) ~[main/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[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:568) ~[na:na] at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) ~[spring-boot-devtools-3.2.3.jar:3.2.3]Caused by: java.lang.NoClassDefFoundError: jakarta/xml/bind/JAXBException at org.hibernate.boot.spi.XmlMappingBinderAccess.<init>(XmlMappingBinderAccess.java:45) ~[hibernate-core-6.4.4.Final.jar:6.4.4.Final] at org.hibernate.boot.MetadataSources.getXmlMappingBinderAccess(MetadataSources.java:119) ~[hibernate-core-6.4.4.Final.jar:6.4.4.Final] at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.prepare(MetadataBuildingProcess.java:153) ~[hibernate-core-6.4.4.Final.jar:6.4.4.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:296) ~[hibernate-core-6.4.4.Final.jar:6.4.4.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:198) ~[hibernate-core-6.4.4.Final.jar:6.4.4.Final] at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:63) ~[spring-orm-6.1.4.jar:6.1.4] at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:388) ~[spring-orm-6.1.4.jar:6.1.4] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-6.1.4.jar:6.1.4] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-6.1.4.jar:6.1.4] at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:364) ~[spring-orm-6.1.4.jar:6.1.4] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1833) ~[spring-beans-6.1.4.jar:6.1.4] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782) ~[spring-beans-6.1.4.jar:6.1.4] ... 21 common frames omittedCaused by: java.lang.ClassNotFoundException: jakarta.xml.bind.JAXBException at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na] at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na] at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[na:na] ... 33 common frames omitted
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
FilterChain 내 일반 서블릿 필터와 DelegatingFilterproxy의 차이점
안녕하세요, 좋은 강의에 항상 감사드리고 있습니다. 다름이 아니고 수업자료 내 FilterChain 그림에 보면, 그냥 Filter와 DelegatingFilterProxy 가 연결되어 있으며, DelegatingFilterProxy 가 FilterChainProxy에 보안처리를 위임하고 있습니다.한편, 코드 내에서 디버깅을 하면서 확인할 수 있는 필터는 모두 FilterChainProxy 안에 있는 필터들(강의영상에서는 16개)만 확인이 되고, DelegatingFilterProxy가 아닌 보통 서블릿 필터는 확인이 되지 않는 것 같습니다.DelegatingFilterProxy가 Spring에서 Filter을 사용할 수 있도록 하는 역할을 한다고 말씀하신 것으로 보아 다른 Filter 들은 Spring 코드 내에서 어떤 역할(Authentication인지 등..)을 하는 지 확인할 수 없는 것인지요?또한 코드 내에서 확인이 안된다면 Tomcat 등 WAS 자체의 스펙 내에서 확인이 되는 건가요? 감사합니다.
-
미해결Practical Testing: 실용적인 테스트 가이드
access token의 경우 테스트 코드에서 어떻게 처리해야되나요?
안녕하세요. 현재 강의 잘 수강하고 있습니다.현재 거의 모든 controller에서 access token을 받아서 사용하고 있습니다.토큰의 경우 만료시간 등이 있는데 테스트 코드에서 어떻게 처리되는지 궁금합니다.저 같은 경우는 spring security 사용하지 않고, 직접 API로 Token을 발급하였습니다.예시라던지 레퍼런스가 있다면 공유 좀 부탁드려요~감사합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
jpa 콘솔창에서의 오류
.이런 오류가 뜹니다 실행하는데 문제없다고는 하는데 어떻게 없앨수 있을까요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
view - ${} 질문
view 파일에서 ${}는 포맷터가 적용이 안되고,${{}}는 포맷터가 적용이 된다고 말씀해주셨습니다. - 8:12~ 개발자 도구에서 localhost:8080/formatter/edit에서 제출 버튼을 누르면 payload에 문자열 10,000과 2024-05-20 22:47:53이 담겨서 요청되는 것을 확인할 수 있었습니다. 이 값들이 뷰의 ${}에 도달하게 되서, 10000이 된다고 하면이는 포맷터가 적용되어서 요청값 문자열인 10,000이 10000으로 출력되게 되는 것 아닌가요?포맷터가 적용이 안된거라면 요청값 그대로 10,000이 출력되어야한다고 생각됩니다. 혹시 제가 잘못 이해하고 있는 부분이라면 보충설명 부탁드립니다!+ 추가 질문th:field=*{}는 자동 컨버팅이 되지만(중괄호 하나씩)th:text=${}는 자동 컨버팅이 되지 않는 게 맞나요?(중괄호 하나씩)헷갈릴 수 있는 부분 같아서 확인차 여쭤봅니다!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
DataSourceUtils import가 안됩니다....
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]DataSourceUtils import가 안되어서 gradle refresh했더니 다음과 같은 오류가 뜨네요...
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
*sql 파일 생성이 안됩니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]ddl.sql을 만드는데 강사님 처럼 sql 파일이 만들어지지 않고ddl.sql 을 생성하면 *sql 파일은 intellig U 버전에서 지원한다고 되있습니다. 앞에 비슷한 내용을 질문하신분을 봤지만 저랑 상황이 조금 다르시더라구요
-
미해결견고한 결제 시스템 구축
wallet service 구축에서 중복메시지 검증 로직이 필요한지 궁금합니다
enable.idempotence = true 로 설정 시 카프카에 중복 메시지를 발행하는 producer는 없을것 같은데 중복으로 전송하는 producer가 있을 수 있다고 가정하고 작성하는 로직일까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
상품 추가후 저장된 폼이 안떠요... 도와 주세요 ㅜ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.잘 되다가 강의에서 v3 확인하는거 다 확인하다가 안되길레... 어?!? 됬는데ㅠ저장을 누루면이렇게 뜨는데 에러로 뜨는게 2024-05-20T17:12:27.181+09:00 INFO 12336 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2024-05-20T17:12:27.181+09:00 INFO 12336 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2024-05-20T17:12:27.182+09:00 INFO 12336 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms 2024-05-20T17:13:12.633+09:00 ERROR 12336 --- [nio-8081-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.IllegalArgumentException: Name for argument of type [long] not specified, and parameter name information not found in class file either.] with root cause java.lang.IllegalArgumentException: Name for argument of type [long] not specified, and parameter name information not found in class file either. => [long] 형식의 인수 이름이 지정되지 않았으며, 매개 변수 이름 정보도 클래스 파일에 없습니다. 이거라고 하는데 v2 폼도 확인하고 컨트롤 에서도 확인을 해봤는데 도저히... 못 찾을거 같아서.. 혹시나 해서 V2 폼은 자료로 주신 파일이랑 복붙하고 컨트롤은 틀린거 있나 확인했는데 재가 못 찾는거 같기도 하거 안보이는거 같아서 도움을 요청드릴려 올렸습니다https://drive.google.com/file/d/1R9dGZdGZ9-EVdtf57IibhlGBGhfEvTRx/view?usp=sharing
-
미해결스프링 부트 웹 개발 입문 - 따라하며 배우기
log.info가 적용이 안되는 문제
저 log.info 가 안먹히는데 이유가 뭘까요??ㅠㅠ