묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 시큐리티
SecurityContextHolder.clearContext()
는 최종 응답시 공통으로 실행되는데는모든 정보를 삭제하는게 아니라 현재 사용자의 로컬 쓰레드만 삭제하는것이죠 ?(다른 사용자들의 로그인 인증정보까지 삭제하면 안되니깐)제 생각이 맞는건가요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Failed to load ApplicationContext 오류
TestMemberRepositoryyml오류 java.lang.IllegalStateException: Failed to load ApplicationContext at 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.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) at org.junit.runners.ParentRunner.run(ParentRunner.java:413) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) 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:235) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)Caused by: org.springframework.beans.factory.BeanCreationException: 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] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1804) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) 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.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1157) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:911) 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) ... 27 moreCaused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:284) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:246) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:223) at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:175) at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:295) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:252) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:223) at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:173) at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:127) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1460) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1494) at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) ... 42 moreCaused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:100) at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:54) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:138) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101) at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:272) ... 59 more
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
오류 query did not return a unique result: 4
사용자 목록에서 사용자삭제를 누르는 경우에 발생합니다.다만 이름이 동일한 인원들을 삭제할때만 뜨고신규로 등록한 인원들을 삭제하는 경우에는 오류가 발생하지 않는데어떤식으로 고치면될지 모르겠습니다
-
미해결스프링 시큐리티
SecurityContext
SecurityContext 안에 null 이 저장된 상태라는 것은SecurityContext 안에 Anonymous AuthenticationToken 을 저장했다고 생각하면 일치한가요 ? 이 그림에서 SecurityContext 안에 null 이라는말을Anonymous AuthenticationToken 이 저장되어 있다고 대체가 가능하냐는 질문이였습니다 ! 감사합니다
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
PriorityQueue 클래스를 사용해보고 싶은데 뭐 때문에 오류가 나는지 모르겠어요
테스트 5에서 오류가 나던데 뭐가 문제인지를 못찾겠어요ㅠ import java.util.PriorityQueue;import java.util.Queue;import java.util.Scanner;class Person implements Comparable<Person> {int id;int priority;public Person(int id, int priority) {this.id = id;this.priority = priority;}@Overridepublic int compareTo(Person o) {return o.priority - this.priority;}}public class Main {public static int solution(int n, int m, int[] arr) {int answer = 0;Queue<Person> queue = new PriorityQueue<>();for(int i=0; i<n; i++) {queue.offer(new Person(i, arr[i]));}while(!queue.isEmpty()) {Person tmp = queue.poll();answer++;if(tmp.priority == arr[m] && tmp.id == m) {return answer;}}return answer;}public static void main(String[] args){Scanner in = new Scanner(System.in);int n = in.nextInt();int m = in.nextInt();int[] arr = new int[n];for (int i=0; i<n; i++) {arr[i] = in.nextInt();}System.out.println(solution(n, m, arr));}}
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
TypeNotPresentException
1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예MemberServiceIntegrationTest 에서 회원가입을 run하는 과정중에, 처음에는 NullPointerException 이 뜨다가, 코드수정만 했는데 이제는 아얘 실행조차 안되고 다음과 같이 오류가 뜹니다 __________________위의 오류를 해결하려고 아래와 같이 src/java/main을 소스루트로 지정했습니다 캐쉬삭제도 해보고 이것저것 해봤는데 실행조차 안됩니다 어떻게 고쳐야하나요 ... ㅠㅠ 도와주세요 ..
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
회원가입 오류
회원가입 부분에서 이런 오류가 떠서 찾아봤는데 어떤 객체가 null값이라서 그런 거 같은데, 잘 모르겠어서 질문 남겨봅니다 ㅠㅠ.위 사진들은 혹시나 클래스들이 잘못들어가져 있을 수 도 있어서 남겨봅니다.
-
미해결Do it! 알고리즘 코딩테스트 with JAVA
[그리디 실전 문제] 최솟값을 만드는 괄호 배치 찾기 (백준 1541) - 반례를 못찾겠습니다 ㅠㅠ
안녕하세요!항상 좋은 강의 감사드립니다!덕분에 하루 하루 실력이 느는것이 느껴질 정도로 도움이 많이 되고있습니다! ㅎㅎ다름아니라 문제 36번 에서 같은 원리로 해결한 코드인데 백준에 재출했을 때 2% 에서 오답처리가 되었고,아무리 찾아봐도 잘못된 부분과 반례를 찾을 수 없어서 질문 남기게 되었습니다 ㅠㅠ아래는 제가 만든 코드입니다.항상 감사드립니다 :)import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String N = sc.next(); String[] split = N.split("-"); int result = 0; for (int i = 0; i < split.length; i++) { String[] A = split[i].split("\\+"); int sum = 0; for (int j = 0; j < A.length; j++) { sum += Integer.parseInt(A[j]); } result -= result == 0 ? sum * -1 : sum; } System.out.println(result); } }
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
질문입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 패치 조인은 즉시 로딩을 하는데, 필요한 테이블만 즉시 로딩을 한다고 이해하면 될까요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
DDL 변경후 테스트 질문입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요 DB Connection 설정 테스트 하고나서 해당 영상을 보고 테스트 코드 까지 작성하고나서 Entity와 Repository DDL을 변경하고나서 이전 테이블의 칼럼내용으로 조회가 되서 질문 드립니다.Entity자바 코드 입니다@Entity @Getter @Setter public class Bubjeongdong { @Id private String bubjeongdongCode; private int bubjeongdongLevel; private String bubjeongdongName; private String isClose; }Repository 코드입니다.public Bubjeongdong find(String bubjeongdongCode){ return em.find(Bubjeongdong.class,bubjeongdongCode); } 테스트 코드입니다Bubjeongdong bubjeongdong = bubjeongdongRepository.find("1156011000"); org.assertj.core.api.Assertions.assertThat(bubjeongdong.getBubjeongdongCode()).isEqualTo("1156011000");DDL 전문입니다.CREATE TABLE bubjeongdong (bubjeongdong_level int NOT NULL,bubjeongdong_code varchar(255) NOT NULL,bubjeongdong_name varchar(255) DEFAULT NULL,is_close varchar(255) DEFAULT NULL,PRIMARY KEY (`bubjeongdong_code`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;application.yml 파일 내용입니다.spring: datasource: url: jdbc:mysql://127.0.0.1:3306/estate?serverTimezone=UTC&characterEncoding=UTF-8 username: estate password: driver-class-name: com.mysql.cj.jdbc.Driver jpa: hibernate: ddl-auto: none properties: hibernate: # 해당 설정은 System.out.println을 통해찍는거(권장하지않음) # show_sql: true format_sql: true logging: level: # 로거를 통해찍음. org.hibernate.SQL: debug로그에 조회된 쿼리입니다.select b1_0.bubjeongdong_code, b1_0.bubjeongdong_level, b1_0.bubjeongdong_name, b1_0.is_close from bubjeongdong b1_0 where b1_0.bubjeongdong_code=?
-
해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
j가 속한 for문 순회 질문드립니다.
j 순회에서 0부터 i-1까지 앞에서부터 순회하도록 해도 정답이 됩니다. 뒷 강의 들어보니까, 동전 문제처럼 동전이 무한한 경우는 앞에서부터 순회한다고 하셨고 최대 점수문제처럼 문제가 유한한 경우는 뒤에서부터 순회한다고 하셨습니다.(말씀하신 내용은 강의 10-6 섹션, 8:20쯤에서 나옵니다) 혹시 이 문제도 그거랑 연관이 있어서 강의에서처럼 뒤에서부터 순회하신 풀이로 푸신 건가요?
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
안녕하세요! @Nullable 관련해서 질문이 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.이번 강의에서 플랫폼 타입으로 인해 Java 와 Kotlin 간에 발생할 수 있는 문제점을 설명해주셨는데요.특히, 아래의 코드를 테스트할 때 null 때문에 발생할 수 있는 문제점과 해결할 수 있는 방법을 설명해주셨습니다.assertThat(results[0].age).isNull()Java 클래스의 getter에 @Nullable을 붙여줌으로써 해결할 수 있었는데요.제가 궁금한 것은 롬복의 @Getter가 클래스 레벨에서 적용된 경우에는 어떻게 @Nullable을 붙여줄 수 있느냐가 궁금했습니다.코틀린으로 변환 과정에서 롬복의 @Getter가 만들어주는 게터들을 모두 하드 코딩으로 작성하고 나서 @Nullable 어노테이션을 해당하는 게터에 달아줘야하는건지, 아니면 더 좋은 방법이 있는지 궁금합니다!모든 클래스가 그렇지는 않겠지만 아무래도 기존에 사용하고 있던 자바 클래스 코드들에 @Getter 어노테이션이 달려 있을 것이라고 예상이 되고 이 경우에는 어떻게 테스트 해당 문제를 해결해야하는지 궁금하네요더불어 좋은 강의 감사합니다!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
프로젝트 생성 후 JpashopApplicationTests 파일 어노테이션
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]영한님의 강의에 보면 처음 제공되는 테스트 클래스에 @RunWith(SpringRunner.class) 라는 어노테이션이 붙어 있는데요 제가 스프링부트 2.7, 자바 11 버전으로 생성한 프로젝트입니다. 찾아보니 junit5부터는 @Runwith(SpringRun.class)가 @ExtendWith(SpringExtension.class)로 바뀌었다고 하는데, 제가 생성한 프로젝트에는 아예 어노테이션이 없어서 이유가 뭔지, 어떤 차이가 있는지 궁금합니다.
-
미해결실전! Querydsl
select 절 서브쿼리 결과를 where 절에 조건으로 넣을 수 있나요?
Querydsl로 쿼리를 짜던 중 ExpressionUtils 과 JPAExpressions를 이용해 서브쿼리 작성 후 select 절에서 원하는 데이터를 조회 하는 것은 가능했는데요, 이 조회 된 값을 그대로 where 절에서 조건식으로 사용하고 싶은데, 혹시 해당 상황을 QueryDsl이 제공을 해주나요?찾아보니 쉬이 찾아지지 않아서 골치가 아프네요...예를들면 짜려는 쿼리는 아래와 같습니다.select a.member_name, ( select count(*) from user b where a.member_no = b.member_no) as 'cnt'from member awhere cnt > 1;혹시 방법이 있을까요? (상황상 group by 나 having 절을 사용하긴 어렵습니다..)
-
미해결스프링 시큐리티
ConcurrentSessionFilter 매 요청 시 만료 여부 판단
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.ConcurrentSessionFilter는 매 요청 시 세션 만료 여부 즉 session.isExpired를 판단한다고 하셨습니다. 이 Filter를 설명해주실 때 사용자1, 2를 나눠서 설명해주셨는데 사용자1이 Logout 처리가 된 이후 사용자2가 요청을 보낼 때에도 사용자2의 세션 만료 여부를 체크하는지 궁금합니다.
-
미해결실전! Querydsl
entity onetomany로 가져온 데이터 delete 안되는 문제
예를 들어 Team, Member 엔티티가 있고 일대다 매핑을 했습니다.Team에는 Memberlist라는 필드를 넣어주고 onetomany어노테이션을 달아주고 지연로딩, cascadeAll을 달아줬습니다.질문은 team을 find해서 가져오고 team.getmemgerList로 멤버리스트를 가져온다음에 memger.getId를 해서 id 값을 가져온다음MemgerRepository.deleteById 메서드를 호출해서 멤버를 삭제하려 하였습니다. 그런데 이렇게 하니까 delete문이 나가지 않는 문제가 발생했습니다. 에러는 나지 않는데 말이죠.그렇게 한참 헤메다가 id 값으로 member를 find하고 그 다음 delete하니까 삭제가 되었습니다. 이 문제에 대해서 알고싶습니다 감사합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
h2 데이터베이스 설치
윈도우11에서 h2 데이터베이스 설치해서 cmd에서 h2.bat를 실행했는데 아무창도 뜨지 않습니다. 관리자 권한으로 실행해도 똑같이 아무창도 뜨지 않는데 어떻게 해야 되나요???위와 같이 오류는 나지 않는데 아무창도 뜨지 않습니다.
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
계속해서 데이터가 줄지 않고 100개로 나옵니다.
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended2023-08-02T14:04:15.469+09:00 DEBUG 24388 --- [ main] org.hibernate.SQL : insert into stock (product_id,quantity) values (?,?)Hibernate: insert into stock (product_id,quantity) values (?,?)2023-08-02T14:04:15.723+09:00 DEBUG 24388 --- [ main] org.hibernate.SQL : select s1_0.id,s1_0.product_id,s1_0.quantity from stock s1_0 where s1_0.id=?Hibernate: select s1_0.id,s1_0.product_id,s1_0.quantity from stock s1_0 where s1_0.id=?2023-08-02T14:04:15.788+09:00 DEBUG 24388 --- [ main] org.hibernate.SQL : select s1_0.id,s1_0.product_id,s1_0.quantity from stock s1_0Hibernate: select s1_0.id,s1_0.product_id,s1_0.quantity from stock s1_02023-08-02T14:04:15.802+09:00 DEBUG 24388 --- [ main] org.hibernate.SQL : delete from stock where id=?Hibernate: delete from stock where id=? org.opentest4j.AssertionFailedError: Expected :0Actual :100 이유가 뭔지 잘 모르겠습니다. 코드도 아무리 봐도 같습니다 ㅠㅠ
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
facade 패턴 적용 및 service 에서 락 재흭득 처리 후 문제 질문
facade 패턴 적용에 대한 질문 강의를 듣고 facade 패턴에 대해서 조금 공부해봤습니다.강의에서 facade 패턴을 적용한 이유가 락 흭득 관련한 반복 로직을 service 레이어에서 분리하기 위함이라고 이해했습니다. 현재 service 레이어에는 메서드가 하나라서 facade 에 메서드가 하나인 것인가? 라는 생각이 들었습니다.1. 락 처리(동시성 문제 처리)를 하는 메서드만 facade 로 분리를 해주는 것인가요? 2. 아니면 service 레이어에 있는 모든 메서드에 대해서 facade 패턴으로 분리한 클래스에 메서드 호출을 넣어야하는 것인가요?만약 1번이 맞다면 컨트롤러에서 일반 service layer 와 facade 둘다 컨트롤러에서 의존성을 갖고 있도록 해야할텐데 이는 컨트롤러에에서 락처리를 하는 facade.decrease 와 stockService.decrease 둘다 참조 가능한 것이 이상하다는 생각이 들었습니다.---이와 별개로 facade 를 적용하지않고 service 에서 decrease 에 대해 락 흭득 재흭득 처리를 하면 단순하게 아래 처럼 처리 할 수 있다고 생각했습니다..그랬더니 동시성 문제가 해결되지 않고 테스트를 돌려보니 51 만큼만 감소가 이루어 지더라구요... 이유가 뭔지 궁금합니다.@Service public class OptimisticLockStockService { private final StockRepository stockRepository; public OptimisticLockStockService(StockRepository stockRepository) { this.stockRepository = stockRepository; } @Transactional public void decrease(Long id, Long quantity) throws InterruptedException { while (true) { try { Stock stock = stockRepository.findByIdWithOptimisticLock(id); stock.decrease(quantity); stockRepository.saveAndFlush(stock); } catch (Exception e) { Thread.sleep(50); } } } }
-
해결됨실전! Querydsl
최초 테스트에서 질문있습니다!
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]스프링부트 버전 3.1.2Querydsl 버전 5.0.0테스트 코드에서 질문 드릴 것이 있사옵니다. @Test void contextLoads() { Hello hello = new Hello(); em.persist(hello); JPAQueryFactory query = new JPAQueryFactory(em); QHello qHello = new QHello("h"); System.out.println("========START"); Hello result = query .selectFrom(qHello) .fetchOne(); System.out.println("========END"); assertThat(result).isEqualTo(hello); }같은 트랙잭션에서 영속성 컨텍스트의 데이터를 얻어올 테니 result와 hello가 같은 게 당연한데요. querydsl로 select하는 부분에서 insert와 select query가 나가더라고요. ========START 2023-08-02T13:14:13.697+09:00 DEBUG 2696 --- [ Test worker] org.hibernate.SQL : insert into hello (id) values (?) 2023-08-02T13:14:13.699+09:00 INFO 2696 --- [ Test worker] p6spy : #1690949653699 | took 0ms | statement | connection 4| url jdbc:h2:tcp://localhost/~/datajpa insert into hello (id) values (?) insert into hello (id) values (1); 2023-08-02T13:14:13.717+09:00 DEBUG 2696 --- [ Test worker] org.hibernate.SQL : select h1_0.id from hello h1_0 2023-08-02T13:14:13.718+09:00 INFO 2696 --- [ Test worker] p6spy : #1690949653718 | took 0ms | statement | connection 4| url jdbc:h2:tcp://localhost/~/datajpa select h1_0.id from hello h1_0 select h1_0.id from hello h1_0; ========END1차 캐시에서 데이터를 가져올텐데 굳이 query가 왜 나가는지 궁금합니다. 1차 캐시가 새로 갱신되었을리도 없고 갱신되어서도 안 된다고 생각했습니다.