inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

통합 테스트 코드 - 회원가입() 메서드 에러 질문드립니다.

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 16:47초에 실행하시는 통합테스트 코드 - 회원가입() 메서드 실행에서 에러가 납니다.. 에러 내용은 다음과 같습니다. could not prepare statement [Column "M1_0.USERNAME" not found; SQL statement: select m1_0.id,m1_0.username from member m1_0 where m1_0.username=? [42122-214]] [select m1_0.id,m1_0.username from member m1_0 where m1_0.username=?] org.hibernate.exception.SQLGrammarException: could not prepare statement [Column "M1_0.USERNAME" not found; SQL statement: select m1_0.id,m1_0.username from member m1_0 where m1_0.username=? [42122-214]] [select m1_0.id,m1_0.username from member m1_0 where m1_0.username=?] at app//org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert( SQLExceptionTypeDelegate.java:64 ) at app//org.hibernate.exception.internal.StandardSQLExceptionConverter.convert( StandardSQLExceptionConverter.java:56 ) at app//org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert( SqlExceptionHelper.java:108 ) at app//org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement( StatementPreparerImpl.java:187 ) at app//org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareStatement( StatementPreparerImpl.java:76 ) at app//org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.lambda$list$0( JdbcSelectExecutorStandardImpl.java:102 ) at app//org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.executeQuery( DeferredResultSetAccess.java:226 ) at app//org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.getResultSet( DeferredResultSetAccess.java:163 ) at app//org.hibernate.sql.results.jdbc.internal.JdbcValuesResultSetImpl.advanceNext( JdbcValuesResultSetImpl.java:254 ) at app//org.hibernate.sql.results.jdbc.internal.JdbcValuesResultSetImpl.processNext( JdbcValuesResultSetImpl.java:134 ) at app//org.hibernate.sql.results.jdbc.internal.AbstractJdbcValues.next( AbstractJdbcValues.java:19 ) at app//org.hibernate.sql.results.internal.RowProcessingStateStandardImpl.next( RowProcessingStateStandardImpl.java:66 ) at app//org.hibernate.sql.results.spi.ListResultsConsumer.consume( ListResultsConsumer.java:198 ) at app//org.hibernate.sql.results.spi.ListResultsConsumer.consume( ListResultsConsumer.java:33 ) at app//org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.doExecuteQuery( JdbcSelectExecutorStandardImpl.java:361 ) at app//org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.executeQuery( JdbcSelectExecutorStandardImpl.java:168 ) at app//org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.list( JdbcSelectExecutorStandardImpl.java:93 ) at app//org.hibernate.sql.exec.spi.JdbcSelectExecutor.list( JdbcSelectExecutor.java:31 ) at app//org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.lambda$new$0( ConcreteSqmSelectQueryPlan.java:110 ) at app//org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.withCacheableSqmInterpretation( ConcreteSqmSelectQueryPlan.java:303 ) at app//org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.performList( ConcreteSqmSelectQueryPlan.java:244 ) at app//org.hibernate.query.sqm.internal.QuerySqmImpl.doList( QuerySqmImpl.java:518 ) at app//org.hibernate.query.spi.AbstractSelectionQuery.list( AbstractSelectionQuery.java:367 ) at app//org.hibernate.query.Query.getResultList( Query.java:119 ) at app//hello.hellospring.repository.JpaMemberRepository.findByName( JpaMemberRepository.java:33 ) at app//hello.hellospring.service.MemberService.validateDuplicateMember( MemberService.java:33 ) at app//hello.hellospring.service.MemberService.join( MemberService.java:27 ) at java.base@17.0.4.1/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base@17.0.4.1/jdk.internal.reflect.NativeMethodAccessorImpl.invoke( NativeMethodAccessorImpl.java:77 ) at java.base@17.0.4.1/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:43 ) at java.base@17.0.4.1/java.lang.reflect.Method.invoke( Method.java:568 ) at app//org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection( AopUtils.java:343 ) at app//org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint( ReflectiveMethodInvocation.java:196 ) at app//org.springframework.aop.framework.ReflectiveMethodInvocation.proceed( ReflectiveMethodInvocation.java:163 ) at app//org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed( CglibAopProxy.java:756 ) at app//org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation( TransactionInterceptor.java:123 ) at app//org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction( TransactionAspectSupport.java:391 ) at app//org.springframework.transaction.interceptor.TransactionInterceptor.invoke( TransactionInterceptor.java:119 ) at app//org.springframework.aop.framework.ReflectiveMethodInvocation.proceed( ReflectiveMethodInvocation.java:184 ) at app//org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed( CglibAopProxy.java:756 ) at app//org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept( CglibAopProxy.java:708 ) at app//hello.hellospring.service.MemberService$$SpringCGLIB$$0.join(<generated>) at app//hello.hellospring.service.MemberServiceIntegrationTest.회원가입( MemberServiceIntegrationTest.java:28 ) at java.base@17.0.4.1/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base@17.0.4.1/jdk.internal.reflect.NativeMethodAccessorImpl.invoke( NativeMethodAccessorImpl.java:77 ) at java.base@17.0.4.1/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:43 ) at java.base@17.0.4.1/java.lang.reflect.Method.invoke( Method.java:568 ) at app//org.junit.platform.commons.util.ReflectionUtils.invokeMethod( ReflectionUtils.java:727 ) at app//org.junit.jupiter.engine.execution.MethodInvocation.proceed( MethodInvocation.java:60 ) at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed( InvocationInterceptorChain.java:131 ) at app//org.junit.jupiter.engine.extension.TimeoutExtension.intercept( TimeoutExtension.java:156 ) at app//org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod( TimeoutExtension.java:147 ) at app//org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod( TimeoutExtension.java:86 ) at app//org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0( InterceptingExecutableInvoker.java:103 ) at app//org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0( InterceptingExecutableInvoker.java:93 ) at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed( InvocationInterceptorChain.java:106 ) at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed( InvocationInterceptorChain.java:64 ) at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke( InvocationInterceptorChain.java:45 ) at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke( InvocationInterceptorChain.java:37 ) at app//org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke( InterceptingExecutableInvoker.java:92 ) at app//org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke( InterceptingExecutableInvoker.java:86 ) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7( TestMethodTestDescriptor.java:217 ) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod( TestMethodTestDescriptor.java:213 ) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute( TestMethodTestDescriptor.java:138 ) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute( TestMethodTestDescriptor.java:68 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6( NodeTestTask.java:151 ) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8( NodeTestTask.java:141 ) at app//org.junit.platform.engine.support.hierarchical.Node.around( Node.java:137 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9( NodeTestTask.java:139 ) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively( NodeTestTask.java:138 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute( NodeTestTask.java:95 ) at java.base@17.0.4.1/java.util.ArrayList.forEach( ArrayList.java:1511 ) at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll( SameThreadHierarchicalTestExecutorService.java:41 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6( NodeTestTask.java:155 ) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8( NodeTestTask.java:141 ) at app//org.junit.platform.engine.support.hierarchical.Node.around( Node.java:137 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9( NodeTestTask.java:139 ) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively( NodeTestTask.java:138 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute( NodeTestTask.java:95 ) at java.base@17.0.4.1/java.util.ArrayList.forEach( ArrayList.java:1511 ) at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll( SameThreadHierarchicalTestExecutorService.java:41 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6( NodeTestTask.java:155 ) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8( NodeTestTask.java:141 ) at app//org.junit.platform.engine.support.hierarchical.Node.around( Node.java:137 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9( NodeTestTask.java:139 ) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively( NodeTestTask.java:138 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute( NodeTestTask.java:95 ) at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit( SameThreadHierarchicalTestExecutorService.java:35 ) at app//org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute( HierarchicalTestExecutor.java:57 ) at app//org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute( HierarchicalTestEngine.java:54 ) at app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute( EngineExecutionOrchestrator.java:107 ) at app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute( EngineExecutionOrchestrator.java:88 ) at app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0( EngineExecutionOrchestrator.java:54 ) at app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams( EngineExecutionOrchestrator.java:67 ) at app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute( EngineExecutionOrchestrator.java:52 ) at app//org.junit.platform.launcher.core.DefaultLauncher.execute( DefaultLauncher.java:114 ) at app//org.junit.platform.launcher.core.DefaultLauncher.execute( DefaultLauncher.java:86 ) at app//org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute( DefaultLauncherSession.java:86 ) at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses( JUnitPlatformTestClassProcessor.java:110 ) at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000( JUnitPlatformTestClassProcessor.java:90 ) at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop( JUnitPlatformTestClassProcessor.java:85 ) at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop( SuiteTestClassProcessor.java:62 ) at java.base@17.0.4.1/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base@17.0.4.1/jdk.internal.reflect.NativeMethodAccessorImpl.invoke( NativeMethodAccessorImpl.java:77 ) at java.base@17.0.4.1/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:43 ) at java.base@17.0.4.1/java.lang.reflect.Method.invoke( Method.java:568 ) at org.gradle.internal.dispatch.ReflectionDispatch.dispatch( ReflectionDispatch.java:36 ) at org.gradle.internal.dispatch.ReflectionDispatch.dispatch( ReflectionDispatch.java:24 ) at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch( ContextClassLoaderDispatch.java:33 ) at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke( ProxyDispatchAdapter.java:94 ) at jdk.proxy1/jdk.proxy1.$Proxy2.stop(Unknown Source) at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run( TestWorker.java:193 ) at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName( TestWorker.java:129 ) at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute( TestWorker.java:100 ) at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute( TestWorker.java:60 ) at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute( ActionExecutionWorker.java:56 ) at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call ( SystemApplicationClassLoaderWorker.java:113 ) at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call ( SystemApplicationClassLoaderWorker.java:65 ) at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.run( GradleWorkerMain.java:69 ) at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.main( GradleWorkerMain.java:74 ) Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "M1_0.USERNAME" not found; SQL statement: select m1_0.id,m1_0.username from member m1_0 where m1_0.username=? [42122-220] at org.h2.message.DbException.getJdbcSQLException( DbException.java:514 ) at org.h2.message.DbException.getJdbcSQLException( DbException.java:489 ) at org.h2.message.DbException.get( DbException.java:223 ) at org.h2.message.DbException.get( DbException.java:199 ) at org.h2.expression.ExpressionColumn.getColumnException( ExpressionColumn.java:244 ) at org.h2.expression.ExpressionColumn.optimizeOther( ExpressionColumn.java:226 ) at org.h2.expression.ExpressionColumn.optimize( ExpressionColumn.java:213 ) at org.h2.command.query.Select .prepareExpressions( Select.java:1170 ) at org.h2.command.query.Query.prepare( Query.java:218 ) at org.h2.command.Parser.prepareCommand( Parser.java:583 ) at org.h2.engine.SessionLocal.prepareLocal( SessionLocal.java:634 ) at org.h2.server.TcpServerThread.process( TcpServerThread.java:288 ) at org.h2.server.TcpServerThread.run ( TcpServerThread.java:191 ) at java.base/java.lang.Thread.run( Thread.java:833 ) at app//org.h2.message.DbException.getJdbcSQLException( DbException.java:502 ) at app//org.h2.engine.SessionRemote.readException( SessionRemote.java:637 ) at app//org.h2.engine.SessionRemote.done( SessionRemote.java:606 ) at app//org.h2.command.CommandRemote.prepare( CommandRemote.java:78 ) at app//org.h2.command.CommandRemote.<init>( CommandRemote.java:50 ) at app//org.h2.engine.SessionRemote.prepareCommand( SessionRemote.java:480 ) at app//org.h2.jdbc.JdbcConnection.prepareCommand( JdbcConnection.java:1116 ) at app//org.h2.jdbc.JdbcPreparedStatement.<init>( JdbcPreparedStatement.java:92 ) at app//org.h2.jdbc.JdbcConnection.prepareStatement( JdbcConnection.java:288 ) at app//com.zaxxer.hikari.pool.ProxyConnection.prepareStatement( ProxyConnection.java:327 ) at app//com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement( HikariProxyConnection.java ) at app//org.hibernate.engine.jdbc.internal.StatementPreparerImpl$1.doPrepare( StatementPreparerImpl.java:91 ) at app//org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement( StatementPreparerImpl.java:177 ) ... 123 more Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended MemberServiceIntegrationTest > ȸ������() FAILED org.hibernate.exception.SQLGrammarException at MemberServiceIntegrationTest.java:28 Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException at MemberServiceIntegrationTest.java:28 2023-08-20T14:08:26.076+09:00 INFO 17356 --- [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' 2023-08-20T14:08:26.079+09:00 INFO 17356 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... 2023-08-20T14:08:26.109+09:00 INFO 17356 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. 1 test completed, 1 failed > Task :test FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':test'. > There were failing tests. See the report at: file:///C:/Users/man25/OneDrive/����%20ȭ��/������%20����/hello-spring/build/reports/tests/test/index.html * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 22s 4 actionable tasks: 1 executed, 3 up-to-date 아래 사진은 application.properties 디렉터리의 코드입니다. 아래 사진은 SpringConfig 클래스의 코드입니다. 해결 방법을 모르겠네요ㅠㅠㅠ

  • java
  • spring
  • mvc
  • spring-boot
김수환 댓글 4 좋아요 0 조회수 1590

스프링 시큐리티 6.0 이상에서 securityfilterchain의 requestMatcher

미해결

스프링 시큐리티

강의 2-2 필터 초기화와 다중 보안 설정을 시큐리티 6.0 버전 이상으로 따라 하던 중에 다른 결과가 나와서 질문 드립니다 configuration은 위와 같이 설정하였고 처음에는 영상에서 처럼 Order(0)과 Order(1)을 지정 하여 실행하였습니다. 제 생각으로는 6.0이상 버전에서는 사용할 수 없는 antMacher대신 requestMatchers를 사용하여 requestMatcher가 1번첫번째 필터체인은 "admin/**" 두번 째 체인은 any request가 될 것이라고 생각했지만 디버깅 해보니 둘 다 any request가 나와 루트로 접속했을 때 첫번째 필터체인이 생성되어 루트로 가는 것이 아닌 basic login form이 나왔습니다. 그래서 디버깅 중 위와 같이 뜨는 것이 보여 애초에 등록이 잘못 된 건가 싶기도 했는데 영상에서처럼 filters를 확인해보면 첫번 째는 httpbasic와 같이 등록된 12개의 필터, 두번 째는 formlogin과 같이 등록된 14개의 필터로 각각 알맞게 등록되어 있었습니다. 어째서 두 개 모두 다 위 필터들은 정상적으로 등록이 되었는데 requestMatcher는 둘 다 any request 인걸까요? 6.0 이후 버전에서는 requestMatcher를 바꾸려면 다른 방법을 써야 하는 것일까요? 도움 주시면 감사하겠습니다 ㅠㅠ

  • java
  • spring-boot
  • spring-security
장우성 댓글 2 좋아요 0 조회수 3565

스프링부트 시큐리티 3강 - 시큐리티 회원가입에서 USER출력

미해결

스프링부트 시큐리티 & JWT 강의

안녕하세요 강사님 객체 전달관련해서 질문이 있습니다. 강의에서 USER 객체를 출력했을 시, 아래와 같이 객체 내부값이 출력되었는데, 저는 `com.want.project.domain.user.domain.Users@6bfd8b8c` 이런식으로 출력이 되네요.. 혹시 tostring을 오버라이딩하신걸까요?? 그리고 제 객체를 getter로 찍어보면 내부에 값이 아닌 null이 저장되어 있는데 이유가 무엇일까요?

  • spring
  • spring-security
  • jwt
age9696 댓글 2 좋아요 0 조회수 742

스프링부트

미해결

스프링 프레임워크는 내 손에 [스프2탄]

스프2는 스프링부트기반으로 작성하나요? 지금학원에서 스프링부트안적옹해서 시큐리티랑페이징 처리하는걸로프로젝트 하고있거든요

  • spring
  • jquery
  • mvc
  • jpa
  • spring-security
ariel123 댓글 1 좋아요 0 조회수 319

logout을 했지만 세션이 남아있습니다.

해결됨

스프링 시큐리티

http .authorizeRequests() .antMatchers("/user").hasRole("USER") .antMatchers("/admin").hasRole("ADMIN") .antMatchers("/admin/**").access("hasRole('ADMIN') or hasRole('SYS')") .antMatchers("/admin/**").hasAnyRole("ADMIN","SYS") .anyRequest() .authenticated(); http .formLogin(); http .sessionManagement() .maximumSessions(1) .maxSessionsPreventsLogin(true); http .logout() .logoutUrl("/logout"); 위 내용과 같이 설정 후 user 계정으로 [로그인 -> 로그아웃] 후로그인 시도시 아래와 같은 화면이 표시됩니다. 디버깅 해보니 logout 후에도 기존 세션이 있어 기존 살아있고, 해당 세션과 세션아이디가 다르니 초과 오류를 반환하는 것으로 확인이 됩니다. Logout 후에도 세션이 남아있는 이유와 해결방법이 있을까요?

  • java
  • spring-boot
  • spring-security
Troy 댓글 1 좋아요 0 조회수 1110

등록 시 질문

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

등록 id가 1번과 2번이 있었다가 2번을 삭제하고 다시 등록을 하면 id가 3번으로 등록이 됩니다. 제가 잘못한 걸까요..?? 아니면 혹시 원래 이렇게 돌아가도록 설정하신건가요??

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
qwe_e0606 댓글 2 좋아요 1 조회수 269

안녕하세요 강사님 /login 질문입니다.

미해결

스프링부트 시큐리티 & JWT 강의

제가 수업을 놓쳤는지 모르겠는데... 시큐리티가 기본으로 /login을 캐치한다고 들었는데 이 기본값을 바꿀 수 있는 방법이 존재하나요? /login으로 Post 요청을 보내면 attemptAuthentication 메서드를 실행해서 로그인 하는 걸로 알고있는데 /login 값을 제가 원하는 /api/login 처럼 변경할 수 있는지 궁금합니다.

  • spring
  • spring-security
  • jwt
진짜 잘하고싶다 댓글 1 좋아요 0 조회수 647

29강. boardInsert 메서드 @ResponseBody 붙이는 이유

해결됨

스프링 프레임워크는 내 손에 [스프1탄]

안녕하세요. boardInsert 메서드에 @ResponseBody를 붙이는 이유가 궁금합니다. insert 후에 리턴 값이 없는데 왜 @ResponseBody를 붙이는 건가요? callback 함수인 loadList 때문인가요? 감사합니다.

  • jsp
  • spring
  • mvc
  • spring-security
oniic 댓글 2 좋아요 0 조회수 343

안녕하세요 강사님 로그인 질문있씁니다!

미해결

스프링부트 시큐리티 & JWT 강의

public class LoginFilter extends UsernamePasswordAuthenticationFilter 이 작업을 통해서 login으로 들어오는 것을 @Override public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException { try { User user = objectMapper.readValue(request.getInputStream(), User.class); UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(user.getUsername(), user.getPassword()); return authenticationManager.authenticate(authenticationToken); } catch (IOException e) { log.error("{}", e); } return super.attemptAuthentication(request, response); } 이 작업을 통해서 로그인 하는 걸로 알고있는데, 이러한 경우에 컨트롤러 테스트 코드를 어떻게 작성할 수 있는 건지 궁금합니다. api가 아니라 자꾸 에러가 발생하는데 혹시 이러한 경우에 api 테스트 코드 작성 팁좀 가르쳐주실 수 있나요? 이러한 예외가 발생합니다. 이유를 모르겠습니다. Postman으로 할 때는 잘 동작합니다 ㅜㅜ 그냥 /api/login 이라는 api를 생성해서 테스트해야 될까요?

  • spring
  • spring-security
  • jwt
진짜 잘하고싶다 댓글 2 좋아요 0 조회수 496

섹션 3-5의 CustomAuthenticationProvider 오류에 대해

미해결

스프링 시큐리티

강의 소스 그대로 참고하여 현재 진행중인 프로젝트에 CustomUserDetailsService, CustomAuthenticaionProvider, SecurityConfigure 모두 작성하였습니다. 그런데 CustomAuthenticaionProvider의 UserDetailsService와 PasswordEncoder의 @Autowired 부분에서 빨간 줄이 그어져 진행이 불가능합니다. 혹시 스프링 부트 버전차이 때문에 그러는 걸까요?? 현재 2.7.1 사용중입니다. 실습한 코드 사진 첨부하도록 하겠습니다. configure context customUserDetailsService customAuthenticationProvider

  • java
  • spring-boot
  • spring-security
kimdudtj3070 댓글 1 좋아요 0 조회수 366

진짜 객체지향과 테스트하기 쉬운 코드를 위헤서는 jpa가 의미없는게 아닌가하는 생각이 들어요

미해결

Java/Spring 주니어 개발자를 위한 오답노트

이전에 혼자 ddd, 헥사고날 아키텍처를 공부하면서 느꼈던게 객체지향적인 코드 + 테스트하기 용이한 코드를 작성하기 위해서는 결국 domain layer와 persistence layer의 분리가 필수적인데 jpa entity와 domain entity를 완전히 분리했을 때 JPA가 mybatis나 jdbc template를 사용하는 것과 비교해 가지는 강점이 있는지 잘 모르겠습니다.. 그나마 jpa entity와 domain entity를 분리하지 않는다면 어떻게든 온몸 비틀기로 그나마 테스트하기 용이하고 객체지향스러운 코드를 작성해볼 수는 있지만 결국 복잡한 로직에서는 쿼리 때문에 문제가 생기고 ㅜ 지식 공유자님께서는 이 문제에 대해 어떻게 생각하시나요?

  • java
  • spring
  • 객체지향
  • 소프트웨어-테스트
euni 댓글 2 좋아요 2 조회수 1879

동시성제어

미해결

실습으로 배우는 선착순 이벤트 시스템

안녕하세요 강의를 듣다가 궁금증이 생겼는데요. kafka는 메시지를 하나씩 처리하기 때문에 동시성 제어도 가능할 것이라고 이해했는데 그렇다면 여기서 레디스를 사용하지 않더라도 카프카만 사용해도 동시성과 관련된 데이터 정합성을 보장할 수 있는건가요?

  • java
  • docker
  • spring-boot
  • kafka
  • redis
봄봄봄 댓글 2 좋아요 0 조회수 922

c. Collection,Map 질문

해결됨

Java/Spring 주니어 개발자를 위한 오답노트

Collection.Map의 Good 케이스를 알 수 있을까요? 맵을 사용할 때 맵 안에 맵이 있고 이런 형태를 사용하지 않는게 좋은건지 아니면 따로 dto로 변환해서 사용해야하는건지 구분이 안 가서 질문 드립니다 ! 지정된 scope를 넘나들지 않는다는 것도 이해가 가지 않습니다 ㅠㅠ 조금만 더 쉽게 설명 붙여주시면 감사드리겠습니다!

  • java
  • spring
  • 객체지향
  • 소프트웨어-테스트
HOYA 댓글 2 좋아요 1 조회수 553

select 쿼리없이 dto 만들지 않은 이유

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

강의에서는 아래와 같이 select 쿼리를 이용해 업데이트 된 회원을 조회후 response로 전달해 주었는데 @PutMapping("/api/v2/members/{id}") public UpdateMemberResponse updateMemberV2(@PathVariable("id") Long id, @RequestBody @Valid UpdateMemberRequest request) { memberService.update(id,request.getName()); Member findMember = memberService.findOne(id); return new UpdateMemberResponse(findMember.getId(), findMember.getName()); } 아래와 같이 하지 않은 이유가 있을까요?? @PutMapping("/api/v2/members/{id}") public UpdateMemberResponse updateMemberV2(@PathVariable("id") Long id, @RequestBody @Valid UpdateMemberRequest request) { memberService.update(id, request.getName()); return new UpdateMemberResponse(id, request.getName()); }

  • java
  • spring
  • spring-boot
  • jpa
dlwogns3413 댓글 1 좋아요 0 조회수 431

예외처리 동작과정

미해결

스프링 시큐리티

안녕하세요 강의 디버깅중에 저희가 본 내용은 여기입니다. 그런데 위에 보시면 169라인 exception instanceof AuthenticationException 인증예외도 잡더라구요. 그런데 저부분은 현재 강의에선 이용하지않고 지금 강의는 AuthenticationFailureHandler 를 별도로 상속받아 클래스를 만들어 처리하고 있다고 생각하면 될까요 ?

  • java
  • spring-boot
  • spring-security
H K 댓글 1 좋아요 0 조회수 380

강의 내용 질문

미해결

스프링 시큐리티

안녕하세요 강의 너무 최고입니다. 질문이 있습니다. !! 첫번째 질문은 http .exceptionHandling() .authenticationEntryPoint( new AjaxLoginAuthenticationEntryPoint() ) .accessDeniedHandler( ajaxAccessDeniedHandler() ); 설정하실때 전자는 생성자를 만들고 두번째는 왜 같은 방법으로 생성자를 만들지않고 등록을 하는건가요 ? -> .accessDeniedHandler( ajaxAccessDeniedHandler() ); 이걸 .accessDeniedHandler( new AjaxAccessDeniedHandler() ); 이렇게 안하시는 이유가 있나요 ? 두번째 질문은 SecurityConfig 에서 @Bean public 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 에 설정된 내용은 인증 내용이라고 생각하면 될까요 ?

  • java
  • spring-boot
  • spring-security
H K 댓글 1 좋아요 1 조회수 477

구상클래스에서 인터페이스 변수를 선언한 이유가 혹시 다형성과 관련이 있나요?

해결됨

나도코딩의 자바 기본편 - 풀코스 (20시간)

클래스의 상속과 관련된 다형성은 부모객체로 인스턴스를 생성하여 부모클래스의 메소드와 자식클래스 메소드 2가지를 업/다운캐스팅하여 자유롭게 호출할 수 있지만, 단일상속이라는 한계 때문에 다른 부모클래스의 메소드는 호출할 수가 없잖아요? 그래서 인터페이스가 존재하는 이유구요. 마찬가지로, 인스턴스를 생성할 때 다형성을 활용하여 인터페이스 객체(부모 객체)로 생성할 수는 있지만, 이것은 ISP(Interface Segregation Principle)원칙에 따라 detect(), report() 2개의 메소드를 호출하려면 Detectable, Reportable 객체 2개를 생성해야 하기 때문에 메모리가 효율적으로 관리되지 못하는거구요. 따라서 구상클래스인 FactoryCam에서 인터페이스 변수를 직접 생성하고 setter함수로 필요한 인터페이스 변수를 주입한 다음(Dependency Injection) , 주입당한 객체는 인터페이스에 의존하기 때문에(Reportable, Detectable) 동시에 기능이 다른 2가지 메소드를 호출할 수 있는거구요.(Dependency Inversion Principle) ... 과정을 이해하였지만 말로 풀어내니까 굉장히 장황하군요 사실 이 부분은 인터페이스 문법이라기보다는 디자인 패턴과 관련이 있지 않나싶습니다.

  • java
  • 객체지향
  • 다형성
  • 인터페이스
Ambition 댓글 2 좋아요 0 조회수 548

[해결완료] 로그인 인증 테스트코드 작성 질문입니다

미해결

호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)

안녕하세요 호돌맨 선생님! 세션토큰 발급기능 추가를 초반에 보다가 로그인 관련 테스트를 직접 작성해보라고 하셔서 해봤는데 궁금한 점이 있어서 질문드립니다! 작성한코드 @Test @DisplayName("인증 테스트") void test11() throws Exception { // given Member member = Member.builder() .email("abc@naver.com") .password("1234") .build(); // UserRepository를 MemeberRepository로 이름 변경 했습니다. memberRepository.save(member); Login login = Login.builder() .email("abc@naver.com") .password("1234") .build(); String json = objectMapper.writeValueAsString(login); // expected mockMvc.perform(post("/auth/login") .contentType(APPLICATION_JSON) .content(json) ) .andExpect(status().isOk()) .andDo(print()); 결과 query did not return a unique result: 2; nested exception is javax.persistence.NonUniqueResultException: query did not return a unique result: 2 원인 JPA 에러라는 것을 검색을 통해서 알았습니다 해결 방법 블로그 주소 : https://wakestand.tistory.com/943 UserRepository에 작성한 findByEmailAndPassWord 메서드가 Optional로 되어 있는데 이 부분을 List로 변경해야할 것 같아서 다음과 같이 변경했습니다 변경된 코드 UserRepository public interface MemberRepository extends CrudRepository<Member, Long> { List<Member> findByEmailAndPassword(String email, String password); } AuthService @Service @RequiredArgsConstructor public class AuthService { private final MemberRepository memberRepository; public List<Member> signin(Login login) { List<Member> memberList = Optional.ofNullable(memberRepository.findByEmailAndPassword(login.getEmail(), login.getPassword())) .orElseThrow(() -> new InvalidSign()); return memberList; } } 위 처럼 Optional<Member가 아닌 List<Member>로 변경해서 테스트 로직을 성공하긴했습니다... 질문 UserRepository의 Optional<Member>를 변경하지 않고 테스트 코드를 작성하는 방법이 있을까요?? Optional에서 List로 변경했을 때 문제점은 없을까요?

  • vue.js
  • aws
  • spring-boot
  • jpa
  • spring-security
치즈초코우유 댓글 3 좋아요 0 조회수 1029

안녕하세요 질문있습니다.

미해결

Do it! 알고리즘 코딩테스트 with JAVA

방향 그래프 무방향 그래프에 따라서 자료구조에 자료를 저장하는 방법이 다르다고 하셨습니다. 그런데 지금 이 문제에서는 방향그래프 아닌가요?? 간선,엣지들을 보면 모두 방향이 있는 거 같은데, 왜 무방향그래프를 저장할 때처럼 arraylist에 값을 저장하는지 모르겠습니다.

  • java
  • 코딩-테스트
  • 알고리즘
댓글 0 좋아요 0 조회수 351

섹션 01 8강 질문입니다

미해결

스프링 프레임워크는 내 손에 [스프2탄]

8강 스프2탄_Junit리스트보기 Controller테스트 강의 중 질문입니다. 테스트코드 BoardControllerTest.java에서 @Test public void testList() throws Exception{ log.info ( mockMvc.perform(MockMvcRequestBuilders. get ("/board/list")) .andReturn() .getModelAndView().getModelMap()); } 굵은 글씨 get이라고 하셨는데 BoardController.java에서 @GetMapping ("/list") public String getList(Model model) { List<Board> list=boardService.getList(); // 객체바인딩 model.addAttribute("list",list); return "board/boardList"; } 굵은 글씨 @GetMapping 이라고 해줘서 테스트코드에서 get인 것은 알겠는데 왜 get이라고 해 줬는데 이해가 잘 안되서요.. 특별한 거 없으면 그냥 get이라고 해주면 되는 건가요? 두번째 질문은 다음 강의 언제 나오나요

  • spring
  • jquery
  • mvc
  • jpa
  • spring-security
박준호 댓글 1 좋아요 0 조회수 258

인기 태그

인프런 TOP Writers

주간 인기글