묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 데이터 JPA
Slice 방식에서의 엔티티를 DTO 로 변환
Page 방식에서 api response 를 줄 때 엔티티-> DTO 변환은 Page 인터페이스에서 지원하는 map 을 이용하는 것이라고 이해했습니다.Slice 인터페이스의 스펙에는 map 함수가 없던데 Slice 를 사용할 때 엔티티-> DTO 변환은 어떻게 해야 하나요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
IDENTITY Batch Insert 쿼리
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요 강사님 덕분에 JPA를 재밌게 공부하고 있는 취준생입니다. Mysql에 Batch INSERT 쿼리에 대해 여쭤보고 싶습니다. Mysql은 시퀀스를 지원하지 않아 @GeneratedValue를 IDENTITY로 할 경우 PK때문에 INSERT가 한건씩 나가게 됩니다. 그동안 네이티브 쿼리를 사용했을 때는 배열 같은 형태로 여러 Row를 한 개의 INSERT로 처리하였는데 이 경우에도네이티브 쿼리가 실용적인 대안이 될 수 있을까요??Mysql에서 SEQUENCE 전략을 사용하면 PK 테이블을 생성 -> SELECT pk (비관적 락) -> UPDATE pk순으로 실행 되어 조금 더 찾아보니 allocateSize처럼 seq(pk) 뭉치로 가져 오는 방법이 있긴 한데 대부분의 경우 Native 쿼리로 푸는게 더 효율적이란 생각이 듭니다.혹시 이 밖에 더 괜찮은 방안이 있을까요?? 감사합니다!!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
H2 설치 후 실행관련 (윈도우 환경)
설치 후 실행하면 이렇게 되는데, 뭐로 실행해야 하나요?강의내용 보니 브라우저 환경에서 콘솔이 실행된 것 같은데 막상 해당 파일은 크롬에서 실행하는것도 아닌듯 한데요..
-
해결됨자바 코딩테스트 - it 대기업 유제
청소 관련 문제 질문
안녕하세요. 강의 잘 보고 있습니다.다름이 아니라 제가 코드를 작성해보다가if(nx < 0 || ny < 0 || nx >= n || ny >= n || board[nx][ny] == 1){ d=(d+1)%4; continue; }이 부분을 다르게 작성했더니 범위를 벗어났다는 오류가 떴습니다.오류가 뜬 코드는 다음(아래 코드블럭)과 같습니다.if(board[nx][ny] == 1|| nx < 0 || ny < 0 || nx >= n || ny >= n ){ d = (d + 1) % 4; continue; }오류 내용은 이렇습니다.Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5 at Solution2.solution(Solution2.java:13) at Solution2.main(Solution2.java:32) 요약하면 다른 모든 게 같아도, if문 안의 순서로 결과가 다르게 나온 것인데,여기에 질문이 있습니다.왜 board[nx][ny] == 1 부분을 맨 앞으로 보냈더니 오류가 뜨는 걸까요?or연산에서 조건1 or 조건2일 때 조건1이 참이라면 조건2는 확인하지 않는 것과 연관이 있는 걸까요? 검색이나 고민해봐도 잘 모르겠습니다. 답변부탁드립니다!
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
MAX 크기가 왜 1000000인가요?
정점의 수 N은 100,000개 까지인데이를 담는 배열의 최대 크기인 MAX가 왜1,000,000로 잡았는지 궁금합니다(+ 10은 연산 때문에 그렇다고 하셨던것같고)
-
미해결이펙티브 자바 완벽 공략 1부
Elvis, IElvis 질문이 있습니다.
ConcertTest에서 Elvis의 인스턴스를 가져와서 매번 노래를 부르게 하면 리소스를 지속적으로 사용하여 낭비 하는것도 이해하였습니다.그래서 Elvis를 인터페이스화 하여 MockElvis를 만들고 Elvis 인스턴스를 대체해서 Concert의 테스트를 좀 더 유연하게 한다는 것도 이해하였습니다.하지만, 인터페이스화 하지않고, 아래와 같이 BDDMockito.mock을 통해 해당 클래스를 mocking하게 되면 위와 무슨차이가 있는지 궁금합니다. class ConcertTest { @Test void perform() { Concert concert = new Concert(BDDMockito.mock(Elvis.class)); concert.perform(); assertTrue(concert.isLightsOn()); assertTrue(concert.isMainStateOpen()); } }
-
미해결스프링 시큐리티 OAuth2
HttpServletRequest.getHader("Authorization") 값 null
안녕하세요 강사님, 외람되지만 강의부분 살짝 외 부분을 질문 드립니다.(계속 인터넷 서칭을 하면서 고쳐도 해결되지 않아 죄송함을 무릅쓰고 질문 드립니다.)OAuth2.0 + JWT를 합쳐서 구현했습니다.JwtAuthenticationFilter를 구현하고 클라이언트로부터 받은 request의 Header의 Authorizaiton을 가져오는 로직에서 계속 null로 들어오는데 혹시 어떤 문제가 있는지 알 수 있을까요?public class JwtAuthenticationFilter extends OncePerRequestFilter { private final JwtTokenProvider jwtTokenProvider; private final Logger LOGGER = LoggerFactory.getLogger(JwtAuthenticationFilter.class); @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { String token = parseBearerToken(request); // Validation Access Token if (StringUtils.hasText(token) && jwtTokenProvider.validateToken(token)) { Authentication authentication = jwtTokenProvider.getAuthentication(token); SecurityContextHolder.getContext().setAuthentication(authentication); LOGGER.info(authentication.getName() + "의 인증정보 저장"); } else { LOGGER.info("유효한 JWT 토큰이 없습니다."); } filterChain.doFilter(request, response); } private String parseBearerToken(HttpServletRequest request) { String bearerToken = request.getHeader("Authorization"); System.out.println(request.getHeader("Authorization")); if (bearerToken != null && bearerToken.startsWith("Bearer")) { return bearerToken.substring(7); } return null; }
-
해결됨스프링 시큐리티 OAuth2
디폴트 로그인페이지인 /login 페이지에 대해 질문있습니다.
안녕하세요 강사님. 13분 20 초쯤 보시면 디폴트 로그인 페이지에서 href 걸려있는 oauth2-client-app이라는 링크를 누르게 되면 인가서버의 로그인페이지로 이동하는 것을 보실 수 있습니다. 여기서 제가 궁금한 것은 oauth2-client-app 이라는 링크를 누르는 순간 /oauth2/authorization/keycloak 경로의 요청이 Client 로 보내지게 되고, Client 에서 해당 경로로 요청이 들어오길 기다리고있던OAuth2AuthorizationRequestRedirectFilter 가 내부적으로 권한부여 요청을 보낼 수 있는 uri 인 authorization-uri 로 Redirection 시키게되어 현재 로그인페이지로 이동한것인가요? 보다 정확하게 알고싶어 이렇게 질문드립니다!! 아 그리고 강의 너무나도 잘듣고있습니다!
-
해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
코드를 이렇게 작성하면 문제가 될까요?
public class GetMinimumDistance { public static void main(String[] args) { Scanner in = new Scanner(System.in); String str = in.next(); char ch = in.next().charAt(0); System.out.println(getMinimumDistance(str, ch)); return; } public static String getMinimumDistance(String str, char ch) { List<Integer> distanceList = new ArrayList<Integer>(); for(int i = 0; i < str.length(); i++) { String beforeStr = str.substring(0, i); StringBuilder sb = new StringBuilder(beforeStr); beforeStr = sb.reverse().toString(); String afterStr = str.substring(i); int beforeDistance = beforeStr.indexOf(ch) + 1; int afterDistance = afterStr.indexOf(ch); if(beforeStr.length() == 0 || beforeDistance == 0) beforeDistance = Integer.MAX_VALUE; if(afterStr.length() == 0 || afterDistance == -1) afterDistance = Integer.MAX_VALUE; distanceList.add(beforeDistance < afterDistance ? beforeDistance : afterDistance); } String answer = ""; for (int dis : distanceList) { answer += Integer.toString(dis) + " "; } return answer.substring(0, answer.length() - 1); } } 혹시 이렇게 작성하면 답은 맞는데 고쳐야 할 부분이라든가 있을까 고수님들 확인 부탁드립니다 ㅠㅠ너무 비효율적으로 짠거 같아서요 ㅠㅠ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
java.lang.IllegalStateException: Failed to load ApplicationContext 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.[질문 내용]MemberRepositoryTest에서 계속 오류가 발생합니다.강사님이 진행 하시는 대로 똑같이 쳤고 강의 자료에서 하라는 것 까지 다 해보고 이것저것 몇시간을 해봤는데 계속 오류가 나요...근데 특이한 점은 다른 분들은 처음부터 안된다고 하시는데 저는 처음에 h2 DB파일 생성한 다음 localhost모드로 바꿔서 들어가고 나서 Test를 돌리면 성공을 합니다.실제로 테이블도 생성되구요.근데 그 다음부터 두번째 부터는 계속 Failed to load ApplicationContext 오류가 발생합니다...membermemberRepositorymemberRepositoryTestdb 첫 생성시에는 성공 이후로 계속 오류build.gradle파일...부트버전은 3.1.2구요 그래서 junit5를 사용했습니다.application.yml파일 java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@1573e8a5 testClass = jpabook.jpashop.MemberRepositoryTest, locations = [], classes = [jpabook.jpashop.JpashopApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@1b2abca6, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@342c38f8, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@54bff557, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@4dbb42b7, org.springframework.boot.test.context.SpringBootTestAnnotation@4ec067d1], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:143) at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) 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:762) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) at java.base/java.util.Optional.orElseGet(Optional.java:364) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) 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:1511) 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:1511) 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:147) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:127) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:90) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:55) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:102) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:54) 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.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Could not instantiate id generator [entity-name=jpabook.jpashop.Member] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1770) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:598) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1155) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:608) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:436) at org.springframework.boot.SpringApplication.run(SpringApplication.java:312) at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58) at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46) at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1406) at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:187) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:119) ... 72 moreCaused by: jakarta.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Could not instantiate id generator [entity-name=jpabook.jpashop.Member] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:421) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1817) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1766) ... 93 moreCaused by: org.hibernate.MappingException: Could not instantiate id generator [entity-name=jpabook.jpashop.Member] at org.hibernate.id.factory.internal.StandardIdentifierGeneratorFactory.createIdentifierGenerator(StandardIdentifierGeneratorFactory.java:230) at org.hibernate.id.factory.internal.IdentifierGeneratorUtil.createLegacyIdentifierGenerator(IdentifierGeneratorUtil.java:126) at org.hibernate.mapping.SimpleValue.createGenerator(SimpleValue.java:414) at org.hibernate.internal.SessionFactoryImpl.lambda$createGenerators$1(SessionFactoryImpl.java:413) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) at java.base/java.util.HashMap$ValueSpliterator.forEachRemaining(HashMap.java:1779) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) at org.hibernate.internal.SessionFactoryImpl.createGenerators(SessionFactoryImpl.java:412) at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:249) at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:431) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1455) at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:75) at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ... 97 moreCaused by: org.hibernate.HibernateException: Could not fetch the SequenceInformation from the database at org.hibernate.engine.jdbc.env.internal.ExtractedDatabaseMetaDataImpl.sequenceInformationList(ExtractedDatabaseMetaDataImpl.java:307) at org.hibernate.engine.jdbc.env.internal.ExtractedDatabaseMetaDataImpl.getSequenceInformationList(ExtractedDatabaseMetaDataImpl.java:151) at org.hibernate.id.enhanced.SequenceStyleGenerator.getSequenceIncrementValue(SequenceStyleGenerator.java:568) at org.hibernate.id.enhanced.SequenceStyleGenerator.configure(SequenceStyleGenerator.java:216) at org.hibernate.id.factory.internal.StandardIdentifierGeneratorFactory.createIdentifierGenerator(StandardIdentifierGeneratorFactory.java:224) ... 116 moreCaused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "start_value" not found [42122-214] at org.h2.message.DbException.getJdbcSQLException(DbException.java:502) at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) at org.h2.message.DbException.get(DbException.java:223) at org.h2.message.DbException.get(DbException.java:199) at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) at org.h2.jdbc.JdbcResultSet.getLong(JdbcResultSet.java:745) at com.zaxxer.hikari.pool.HikariProxyResultSet.getLong(HikariProxyResultSet.java) at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.resultSetStartValueSize(SequenceInformationExtractorLegacyImpl.java:110) at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.lambda$extractMetadata$0(SequenceInformationExtractorLegacyImpl.java:54) at org.hibernate.tool.schema.extract.spi.ExtractionContext.getQueryResults(ExtractionContext.java:50) at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.extractMetadata(SequenceInformationExtractorLegacyImpl.java:39) at org.hibernate.engine.jdbc.env.internal.ExtractedDatabaseMetaDataImpl.sequenceInformationList(ExtractedDatabaseMetaDataImpl.java:291) ... 120 moreㅜㅜ 진짜 3시간째 이거 잡고있는데 이유를 모르겠어요
-
미해결자바 코딩테스트 - it 대기업 유제
BFS로 풀이
강사님, 안녕하세요. 강의 잘 듣고 있습니다.공굴리기 문제를 간선의 가중치가 모두 1이라고 간주하고,한 칸씩 이동하면서 distance[다음 정점] = distance[현재 정점] + 1 을 해주는 식으로 BFS를 활용해 풀어도 되는지 궁금합니다.다익스트라와 BFS 2 개 방식의 효율성(시간복잡도) 차이는 어떻게 되나요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
1:1맵핑에서 주인이 아닌 객체의 set함수를 처리할 방법이 없을까요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]예를들어Locker와 Member가있다고 하면Member가 주인이라고 했을때 Member에서 연관관계메소드로 settingLocker(Locker locker)이 있다고 하면 해당 함수 내용이this. Locker = locker;locker.setMember(this);가 되는 거잖아요?하지만 저는 mappedby 로 되어있는 Locker에서 set을 해봤자 실제 Db에는 적용되지 않기때문에 다른 개발자가 실수로라도 locker.setMember()함수를 사용하지 못하게 하고싶은데 이런경우에는 어떻게 해야하는지 알 수 있을까요?
-
해결됨Java TPC (생각하고, 표현하고, 코딩하고)
call by reference 관련 자바는 call by value방식만 존재하지 않나요?
엄밀하게 따지면 JAVA는 모두 call by value로 알고 있습니다.call by reference 방식은 실제 메모리의 주소값을 전달하여 원본 자체의 주소가 바뀌는 방식으로 알고있습니다.반면 자바에서 reference type을 메서드로 전달하여 값이 바뀌는건, 메서드내에서 reference type 의 주소를 복사받아. 주소의 변화 없이 값만 조정하는걸로 압니다.즉 메서드 내에서 전달받은 복사된 주소값으로, 해당 객체나 배열의 값을 수정하는거지. 원본 자체의 변화는 없는걸로 학습했는데, 제가 학습한게 맞을까요?
-
미해결스프링 시큐리티 OAuth2
소셜 로그인 관련 질문드립니다!!
안녕하세요 강사님, 강의 정말 잘 듣고 혼자 힘으로 최대한 자료 안보면서 머리 싸매면서 구현해보고 있습니다. 강의 후반부 까지 듣다가 잠시 중단하고 긴가민가 한 부분만 찾아서 다시 듣고 있는 상황입니다. 사진은 ChatGPT 로그인 화면이고 구현하고자 하는 목표입니다.다만, Session 을 사용하지 않으려고 합니다. 거기에 많은 분들이 질문하신 소셜 로그인 이후에 토큰을 가지고 서버에 인가를 요청하는 과정을 구현하고자 합니다.그리고 아래는 제가 이렇게 구현하면 되지 않을까? 생각한 내용이고, 한번 시간내서 봐주시면 정말 감사하겠습니다. (질문시작)AuthorizationRequestRepository<OAuth2AuthorizationRequest>강의에서도 나오지만 OAuth 2.0 가 default 로 Authorization Request 를 Session 에 저장합니다. 이를 그대로 사용하지 않고 Cookie 에 저장하기 위해서 다른 블로그를 참고했습니다.@Override public OAuth2AuthorizationRequest loadAuthorizationRequest(HttpServletRequest request) { return CookieUtil.getCookie(request, OAUTH2_AUTHORIZATION_COOKIE_NAME) .map(cookie -> CookieUtil.deserialize(cookie, OAuth2AuthorizationRequest.class)) .orElse(null); } @Override public void saveAuthorizationRequest(OAuth2AuthorizationRequest authorizationRequest, HttpServletRequest request, HttpServletResponse response) { if(authorizationRequest == null) { CookieUtil.deleteCookie(request, response, OAUTH2_AUTHORIZATION_COOKIE_NAME); CookieUtil.deleteCookie(request, response, REDIRECT_URI_PARAM_COOKIE_NAME); return; } CookieUtil.addCookie(response, OAUTH2_AUTHORIZATION_COOKIE_NAME, CookieUtil.serialize(authorizationRequest), cookieExpireSeconds); String redirectUrlAfterLogin = request.getParameter(REDIRECT_URI_PARAM_COOKIE_NAME); if (StringUtils.isNotBlank(redirectUrlAfterLogin)) { CookieUtil.addCookie(response, REDIRECT_URI_PARAM_COOKIE_NAME, redirectUrlAfterLogin, cookieExpireSeconds); } } @Override public OAuth2AuthorizationRequest removeAuthorizationRequest(HttpServletRequest request, HttpServletResponse response) { return this.loadAuthorizationRequest(request); } public void removeAuthorizationRequestCookies(HttpServletRequest request, HttpServletResponse response) { CookieUtil.deleteCookie(request, response, OAUTH2_AUTHORIZATION_COOKIE_NAME); CookieUtil.deleteCookie(request, response, REDIRECT_URI_PARAM_COOKIE_NAME); } 이후 OAuth 2.0 로그인에 성공 이벤트를 처리할 successfulHandler 를 생성합니다.@Component public class OAuth2AuthenticationSuccessHandler extends SimpleUrlAuthenticationSuccessHandler { // Token 유효성 검사 // Token 생성 // redirect_uri 로 사용자 redirect }여기까지 과정을 간단요약해 보겠습니다.유저가 소셜 로그인 버튼(google, github, kakao) 을 누른다.스프링부트 서버에서 /oauth2/authorization/${provider}?redirect_uri=http://localhost:3000/oauth/redirect 로 인가서버에게 요쳥을 보낸다.인가서버마다 설정된 authorization_code 의 엔드포인트로 redirect 된다.획득한 authorization_code 를 인가서버가 다시 스프링부트 서버로 전송한다.스프링부트 서버에서 다시 authorization_code 를 사용해서 access_token 을 요청한다. 인가서버는 access_token 을 스프링부트 서버로 전송한다. 스프링부트 서버는 access_token 을 이용해서 리소스 서버에 user_info 를 요청한다. 소셜 로그인인 경우, 인가서버와 리소스 서버가 동일하다.스프링부트 서버는 user_info 를 획득한다. 해당 정보를 DB 에 저장한다.그리고 스프링부트 서버에서 access_token 과 refresh_token 을 생성한다.refresh_token 은 수정이 불가능한 cookie 에 저장하고, access_token 은 프론트엔드로 redirect_uri 의 query-string 에 담아서 보낸다. 해당 access_token 은 localStorage 에 저장한다.혹은 refresh_token 은 스프링부트 서버가 가지고 있으며 DB 에 저장하고, access_token 만 cookie 에 담아서 프론트엔드에 보낸다.프론트엔드 서버에서 스프링부트 서버에서 전달받은 토큰을 localStorage 에 저장하고, 다시 스프링부트 서버로 요청을 보낼시 Authorization: Bearer ${access_token} 을 HTTP 헤더에 담아서 보낸다.스프링부트 서버에서 JwtDecoder 를 이용해서 access_token 을 검증한다. 만약 expiration date 가 지났다면 access_token 과 refresh_token 을 모두 재발급한다. (혹은 access_token 만 재발급한다) 출처는 이곳 입니다. (질문1)위의 순서가 합당하다면 강의 내용을 바탕으로 제가 추가적으로 구현할 부분은 스프링부트 서버에서 access_token, refresh_token 을 생성하는 로직(세션을 비활성화하고) 토큰을 cookie 에 담아서 보내는 로직스프링부트 서버에서 access_token 을 검증하고 재발급하는 로직인게 맞는건지 궁금합니다. (질문2)외부 인가서버를 사용하지 않고 OAuth 2.0 Resource Server, Client, Authorization Server 를 사용해서 스프링부트 서버가 모든 인증 & 인가의 책임을 가지게 된다면, 결국 google, github, naver 등의 외부 인가서버를 이용하는 것과 크게 차이가 나지 않는건가요? 어짜피 많은 부분을 OAuth 2.0 라이브러리가 지원해준다면, 외부 인가서버를 도입해서 커플링 시키느니 공공기관 납품하는 경우에는 직접 인가서버, 리소스서버를 구현하는 것이 더 실무에서 자주 일어나는 일인지 궁금합니다.(* 제가 일하던 작은 si 회사에서는 참여했던 프로젝트가 공공기관 프로젝트가 폐쇄망에서만 실행되는 내부 관리자 용이여서 보안 관련된 아주 간단한 설정만을 접해봤습니다.)(그리고 아직 강의 후반부 통합 연동부분을 다 듣지 못했습니다 ㅜ.ㅜ) (질문3)Keycloak, Okta 같은 오픈소스 인가서버를 사용하는 경우 토큰 관리, 세션 관리, 유저 관리 등이 개발자가 뭘 해줄것도 없이 인가서버에서 관리를 해줘서 굉장히 편하다는 것을 이해했습니다. 하지만 검색을 좀 해봐도 관리자가 한땀한땀 인가서버에 등록해주는 것이 아니라 일반적인 사이트에서 처럼 form 요청으로 키클록 서버에 자동으로 User 정보가 등록되는 것이 가능한지 모르겠습니다.보안이 중요한 기관에서 로그인 요청을 보내고, 며칠뒤에 계정이 만들어지는 것이 이런 프로그램을 이용해서인가.. 싶기도 하고 궁금하네요.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
8-1번 합이 같은 부분집합 질문 드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class Main { static int sum = 0; static int n; static int[] arr; static boolean flag = false; static String answer = "NO"; public static void main(String[] args) throws IOException { Scanner kb = new Scanner(System.in); n=kb.nextInt(); arr = new int[n]; for(int i=0; i<n; i++){ arr[i]=kb.nextInt(); sum+=arr[i]; } DFS(0, 0); System.out.println(answer); } static void DFS(int i, int part_sum){ if(flag == true) return; if(i == n){ if(sum == (sum-part_sum)){ flag = true; answer = "YES"; } } else{ DFS(i+1, part_sum + arr[i]); DFS(i+1, part_sum); } } }위와 같이 코드를 짰습니다.주어진 예제도 잘나오는데 채점사이트에 입력하면 계속 오답이라고 나오네요ㅠㅠ 로직도 똑같은데 뭐가 문제일까요..
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
hello.html 404 에러가 나옵니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]개인적인 사정으로 인해 인텔리제이가 아닌 codespace ide를 사용해서 수강중입니다.controller 파일과 hello.html 파일 둘 다 pdf 에서 그대로 복사하여 실행했는데 404에러가 나옵니다.문제가 무엇일까요
-
해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
코딩 테스트 고수가 되고 싶습니다.
안녕하세요.선생님 덕분에 점차 고수의 길로 들어서고 있습니다.강의를 듣던 중 공부 방법에 대해 고민이 생겼습니다.제 머리로 그렇겠지~ 하는 것보다는 선생님의 답변을 듣는 것이 나을 거 같아 질문 드립니다. 1) 강의 듣기 전 문제 도전2) 못풀겠으면 강의를 틀고 선생님께서 주시는 힌트를 약간 받아 다시 도전3) 그래도 안된다면 선생님 강의를 듣고 무릎을 탁 침4) 어떠한 문제로 풀지 못했는지 메모5) 바로 다시 풀어보기 현재는 이런 과정을 거치고 있는데요기존 풀어본 문제도 다시 계속 풀어봐야 하나요?오랜만에 다시 풀어보려니까 전에 풀지 못한 문제는 기억이 나지 않는 것들도 있어서요.. 코딩테스트는 무조건 많이 풀어보는게 중요하다! 는 말을 많이 들어서계속 치고 나가는게 좋을지치고 나가는 속도는 좀 더디더라도 복습을 하면서 치고 나가야할지 선생님의 조언을 기다립니다. 저는 현재 인텔리제이에서 연습하고 있는데 괜찮을까요..?
-
미해결스프링 시큐리티
예외처리 동작과정
안녕하세요 강의 디버깅중에저희가 본 내용은 여기입니다. 그런데 위에 보시면 169라인 exception instanceof AuthenticationException 인증예외도 잡더라구요. 그런데 저부분은 현재 강의에선 이용하지않고 지금 강의는 AuthenticationFailureHandler 를 별도로 상속받아 클래스를 만들어 처리하고 있다고 생각하면 될까요 ?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
값 타입 수정 시, 데이터 삭제 범위
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]값 타입 수정 부분을 공부하던 중 궁금한 점이 생겨 질문드립니다. 값 타입 컬렉션에 변경사항이 발생하면, 주인 엔티티와 연관된 모든 데이터를 삭제하고, 값 타입 컬렉션에 있는 현재 값을 모두 다시 저장한다.위의 말씀으로 ADDRESS 테이블에서 해당 멤버와 관련된 모든 데이터가 삭제되는 것은 이해했습니다. 근데 그렇다면 FAVORITE_FOOD 테이블에서 수정을 할 때도 FOOD_NAME="치킨"인 값을 삭제하면 해당 멤버와 연관된 족발, 피자도 모두 삭제되어야 하는 것 아닌가요?
-
미해결스프링 시큐리티
강의 내용 질문
안녕하세요 강의 너무 최고입니다.질문이 있습니다. !! 첫번째 질문은http.exceptionHandling().authenticationEntryPoint(new AjaxLoginAuthenticationEntryPoint()).accessDeniedHandler(ajaxAccessDeniedHandler());설정하실때 전자는 생성자를 만들고두번째는 왜 같은 방법으로 생성자를 만들지않고 등록을 하는건가요 ?-> .accessDeniedHandler(ajaxAccessDeniedHandler());이걸.accessDeniedHandler(new AjaxAccessDeniedHandler());이렇게 안하시는 이유가 있나요 ? 두번째 질문은 SecurityConfig 에서@Beanpublic AccessDeniedHandler accessDeniedHandler() {CustomAccessDeniedHandler accessDeniedHandler = new CustomAccessDeniedHandler();accessDeniedHandler.setErrorPage("/denied");return accessDeniedHandler;}이 등록되어있는데.exceptionHandling().authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/login")).accessDeniedPage("/denied").accessDeniedHandler(accessDeniedHandler());이 두줄을 추가 하셨습니다. 우선적으로 여기서 첫번째 질문은.accessDeniedPage("/denied")랑accessDeniedHandler.setErrorPage("/denied");이게 같은 역할을 하는것이 아닌가요 ? 그리고 마지막으로.authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/login"))이 내용은 CustomAuthenticationFailureHandler 에 설정된setDefaultFailureUrl("/login?error=true&exception=" +errorMessage);super.onAuthenticationFailure(request,response, exception);이게 이미 처리하고 있던 내용 아닌가요 ? 마지막 질문은 .authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/login")) 이건인가 예외로 생각하고 CustomAuthenticationFailureHandler 에 설정된 내용은 인증 내용이라고 생각하면 될까요 ?