묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
db에 관해서 질문이 있습니다!
이번 강의도 잘 들었습니다.! 궁금한 점이 있는데 지금 spring에서 서버를 재시작할때마다 다 database에 있는 값들이 다 초기화 되는데 db에 있는 값을 유지하고 있는 값들을 읽어 오려면 어떻게 해야하나요???
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
오류 : NullReferenceException
강의의 4:40초인 Debug.Log(Input.mousePosition); 에서는 정상 작동을 하는데 그 이후 과정인 Debug.Log(Camera.main.ScreenToViewportPoint(Input.mousePosition)); 을 입력하고 실행 시 위의 널레퍼런스익셉션 오류가 뜨네요 ㅠㅠ 어떻게 해결해야하나요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
LocalValidatorFactoryBean 질문있습니다.
항상 좋은 강의 감사드립니다. 스프링 부트는 LocalValidatorFactoryBeand을 자동으로 글로벌검증기로 등록해주는것이고 이는 어떤 컨트롤러든 @validated를 만나면 LocalValidatorFactoryBeand을 통해 어토네이션 기반 검증을 거쳐 이를 bindingresult에 객체단위로 저장해주는 것인가요?? 또한 궁금한것이 LocalValidatorFactoryBeand에는 그럼 @NotNUll과 같은 어노테이션 기반 검증 로직이 자동으로 등록되어 있는것인가요??
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
오류 : NullReferenceException
안녕하세요 강사님 ! Raycast 부분 듣고 코드를 똑같이 따라 썼는데 NullReferenceException 오류가 발생합니다 ㅠㅠ NullReferenceException: Object reference not set to an instance of an object TestCollision.Update () 어떻게 해결해야 할까요..
-
미해결딥러닝 CNN 완벽 가이드 - TFKeras 버전
안녕하세요 tf.train 모듈을 최근에도 사용하나요?
안녕하세요 TF 코드를 보다가 tf.train,CheckpointManager라는 tf.train 모듈 함수를 사용하는 경우를 발견했는데 tf.train 모듈이 따로 있는 이유와 최근에 keras가 들어오면서도 사용하게 되는지 궁금합니다
-
미해결따라하며 배우는 MySQL on Docker
운영체제 호환성..
우분투를 사용하여 왔습니다만 .강의를 듣는중 센토스와 파일경로가 달라서 어려움이 발생. 웹 서버 운영체제는 우분투 이미지를 베이스로 사용하고 디비 서버를 센토스 이미지를 기반으로 했을 때 운영체제 호환성에 문제가 있을까요? 운영체제를 다르게 사용해도 될까요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
질문있습니다
안녕하세요 영한님. 질문이 있습니다. ControllerV1 ~ ControllerV4 까지 인터페이스를 바라보고 개발을 할 클라이언트(개발자) 입장에서 인터페이스가 점점 더 좋아지는 부분은 이해했습니다. v1 - void process(HttpServletRequest request, HttpServletResponse response) v2 - MyView process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException; v3 - ModelView process(Map<String, String> paramMap); v4 - String process(Map<String, String> paramMap, Map<String, Object> model); 그에 따라 인터페이스를 구현하는 부분, 각 버전별 controller 하위 구현체 코드들도 점점 구현할 내용이 적어지면서, 개발자 관점에서 편리하게 구현할 수 있다는 부분도 이해했습니다. 그런데 만약 제가 클라이언트 개발자라면 v5? 스타일로 구현하려면 어떻게 해야 되는지 잘 상상이 안됩니다. 클라이언트 개발자가 V3 방식으로 MemberListControllerV5 를 구현한다고 했을땐 어떤 식으로 구현을 하게 되나요? 사실 제가 아직 어댑터 패턴이 익숙치 않아서 그런 것일 수도 있겠네요 (기껏해야 dto 간에 변환 용도로만 어댑터 패턴을 써본 적이 없어서요) 질문이 좀 바보같을 수도 있는데 확인 부탁드리겠습니다. 감사합니다.
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
문제오류인가요?
M개의 DVD는 모두 같은 크기여야 제조원가가 적게 들기 때문에 꼭 같은 크기로 해야 한다. 같은 크기( DVD 녹화길이) 여야만 하는데 예시는 (1,2,3,4,5) = 15분 (6,7) = 13분 (8,9) = 17분 다른 크기 아닌가요?
-
미해결앨런 iOS Concurrency(동시성) - 디스패치큐와 오퍼레이션큐의 이해
sync, async 질문
안녕하세요. sync, async 에 대해서 잘 이해가 가지 않는 부분이 있어서 질문드립니다. 1. sync와 async는 "메인" 쓰레드에서 큐에 작업을 넣고, 이를 OS가 다른 Thread로 배분하는데 이 작업이 끝나기를 오직 "메인" 쓰레드에서 기다리는지의 여부로 이해했는데 정확한 걸까요? 메인이 아닌 다른 쓰레드에서도 sync, async 구분이 될 수 있나요? 2. 메인 쓰레드에서 큐에 async인 작업1을 넣어서 다른 쓰레드A에서 그 작업1을 하게 되었다고 하고, 그리고 그 작업1에는 또 concurrent큐에 sync인 작업2를 넣는 코드가 있었다고 합시다. 2-1. 작업2를 직접 수행하는건 쓰레드A가 되나요? 2-2. 쓰레드B는 sync 작업2를 실제로 수행할 쓰레드라고 할 때, 쓰레드A에서는 쓰레드B에서 작업 2를 끝내고 리턴될때까지 쓰레드 A의 작업1이 block되는 건가요? 쓰레드A에서 또 다른 쓰레드B로 넘어가게 될 테니 메인쓰레드가 아닌 쓰레드A에서 쓰레드B가 끝날때까지 기다리는건가 싶습니다... 잘 모르겠습니다 ㅠㅠ
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
제 예상과 다르게 응답을 하고 있습니다
제 index.js 파일 일부입니다. app.use(express.static(path.join(__dirname + '/public'))); app.get('/', (req, res) => { console.log('메인페이지 겟요청'); res.send('hi'); //res.sendFile(path.join(__dirname, '/public/index.html')); }) 위와 같이 작성 후 localhost:3000/ 에 접속하면 저는 hi를 받을 줄 알았는데 public 폴더에 있는 Index.html 을 응답받습니다. 그리고 express.static 부분을 주석처리하면 그제서야 hi를 응답받는데, 이유가 무엇일까요??
-
미해결[Python 실전] 웹크롤링과 데이터분석 : 전세계 축구 선수 몸값 분석
transfermarkt.com 페이지에 대해서 status_code가 404로 오류가 나타납니다.
안녕하세요. headers={"User_Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36"} url="https://www.transfermarkt.com/" r=requests.get(url,headers=headers) r.status_code 해당 코드 결과가 404로 나옵니다. 404의미를 찾아보니 해당 페이지가 없을 때 나오는 오류라고 하는데 해당 페이지는 잘 접속이 되는 상태입니다. 새로고침도 해보고 다시 켜보기도 하고 캐시도 삭제해본 상황 입니다. 오류의 이유가 무엇인지 알 수 있을까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Input질문
앞서 한 질문과 이어지는것 같기도 합니다. static Managers s_Instance; public static Managers Instance { get { Init(); return s_Instance; } } private InputManagers _input = new InputManagers(); public static InputManagers Input { get { return Instance._input; } } 와 같이 강의에서과 같이 코트를 짜면 유니티에서 원하는대로 캐릭터가 잘 움직입니다. 그러나 마지막 Instance._input를 s_Instance._input으로 바꾸거나 _input을 static으로 바꾸고 마지막에 return _input으로 바꾸는 등 Instance의 getter를 통하지 않고 _input을 호출하면 캐릭터가 움직이지 않습니다. 제가 생각했을 때 유니티 내 캐릭터는 PlayerController를 부품으로 가지고 있고 PlayerController는 Managers안에있는 Input 이라는 getter함수에만 접근했으니 Managers의 start함수는 실행되지 않는다? 라고 추론하긴 했습니다만 정확히 왜 이러는지 모르겠습니다. 그리고 또 궁금한점은 PlayerController를 유심히 보면 OnKeyboard함수는 Update부분이 아닌 Start부분에서만 구독할 수 있는데 우리가 키보드를 누르는 순간은 이미 play된 이후고, 그렇다면 이후에 저희가 누른 키보드는 더이상 구독될 수 없는것 아닌가요? 한번 구독하는 부분을 모두 Update함수로 옯겨본 후 play해보니 처음과 동일하게 캐릭터가 잘 움직였습니다. 이 부분은 정말로 이해가 가지 않습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
인텔리제이에러
hello-spring 을 오픈하면 이런식의 에러가 뜨는데 이유를모르겠습니다.. 도와주세요 ㅠㅠ * Try: Run with --info or --debug option to get more log output. Run with --scan to get full insights. * Exception is: org.gradle.initialization.exception.InitializationException: Gradle could not start your build. at org.gradle.initialization.exception.DefaultExceptionAnalyser.collectFailures(DefaultExceptionAnalyser.java:65) at org.gradle.initialization.exception.MultipleBuildFailuresExceptionAnalyser.transform(MultipleBuildFailuresExceptionAnalyser.java:48) at org.gradle.initialization.exception.StackTraceSanitizingExceptionAnalyser.transform(StackTraceSanitizingExceptionAnalyser.java:30) at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:64) at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:41) at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:47) at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:31) at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:65) at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:39) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:29) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:35) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:78) at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:75) at org.gradle.util.Swapper.swap(Swapper.java:38) at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:75) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:63) at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:84) at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:52) at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56) Caused by: org.gradle.internal.service.ServiceCreationException: Could not create service of type CrossBuildFileHashCache using BuildSessionServices.createCrossBuildFileHashCache(). at org.gradle.internal.service.DefaultServiceRegistry$FactoryMethodService.invokeMethod(DefaultServiceRegistry.java:848) at org.gradle.internal.service.DefaultServiceRegistry$FactoryService.create(DefaultServiceRegistry.java:773) at org.gradle.internal.service.DefaultServiceRegistry$ManagedObjectServiceProvider.getInstance(DefaultServiceRegistry.java:563) at org.gradle.internal.service.DefaultServiceRegistry$SingletonService.get(DefaultServiceRegistry.java:621) at org.gradle.internal.service.DefaultServiceRegistry$FactoryService.assembleParameters(DefaultServiceRegistry.java:786) at org.gradle.internal.service.DefaultServiceRegistry$FactoryService.create(DefaultServiceRegistry.java:772) at org.gradle.internal.service.DefaultServiceRegistry$ManagedObjectServiceProvider.getInstance(DefaultServiceRegistry.java:563) at org.gradle.internal.service.DefaultServiceRegistry$SingletonService.get(DefaultServiceRegistry.java:621) at org.gradle.internal.service.DefaultServiceRegistry$FactoryService.assembleParameters(DefaultServiceRegistry.java:786) at org.gradle.internal.service.DefaultServiceRegistry$FactoryService.create(DefaultServiceRegistry.java:772) at org.gradle.internal.service.DefaultServiceRegistry$ManagedObjectServiceProvider.getInstance(DefaultServiceRegistry.java:563) at org.gradle.internal.service.DefaultServiceRegistry$SingletonService.get(DefaultServiceRegistry.java:621) at org.gradle.internal.service.DefaultServiceRegistry$FactoryService.assembleParameters(DefaultServiceRegistry.java:786) at org.gradle.internal.service.DefaultServiceRegistry$FactoryService.create(DefaultServiceRegistry.java:772) at org.gradle.internal.service.DefaultServiceRegistry$ManagedObjectServiceProvider.getInstance(DefaultServiceRegistry.java:563) at org.gradle.internal.service.DefaultServiceRegistry$SingletonService.get(DefaultServiceRegistry.java:621) at org.gradle.internal.service.DefaultServiceRegistry.find(DefaultServiceRegistry.java:305) at org.gradle.internal.service.DefaultServiceRegistry.get(DefaultServiceRegistry.java:289) at org.gradle.internal.service.DefaultServiceRegistry.get(DefaultServiceRegistry.java:284) at org.gradle.initialization.DefaultGradleLauncherFactory.createDefaultGradleLauncher(DefaultGradleLauncherFactory.java:191) at org.gradle.initialization.DefaultGradleLauncherFactory.doNewInstance(DefaultGradleLauncherFactory.java:158) at org.gradle.initialization.DefaultGradleLauncherFactory.doNewInstance(DefaultGradleLauncherFactory.java:101) at org.gradle.initialization.DefaultGradleLauncherFactory.newInstance(DefaultGradleLauncherFactory.java:80) at org.gradle.composite.internal.DefaultRootBuildState.<init>(DefaultRootBuildState.java:47) at org.gradle.composite.internal.DefaultIncludedBuildRegistry.createRootBuild(DefaultIncludedBuildRegistry.java:90) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:57) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:30) at org.gradle.launcher.exec.BuildTreeScopeLifecycleBuildActionExecuter.lambda$execute$0(BuildTreeScopeLifecycleBuildActionExecuter.java:33) at org.gradle.internal.buildtree.BuildTreeState.run(BuildTreeState.java:53) at org.gradle.launcher.exec.BuildTreeScopeLifecycleBuildActionExecuter.execute(BuildTreeScopeLifecycleBuildActionExecuter.java:32) at org.gradle.launcher.exec.BuildTreeScopeLifecycleBuildActionExecuter.execute(BuildTreeScopeLifecycleBuildActionExecuter.java:27) at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:104) at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:55) at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:64) at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:37) at org.gradle.tooling.internal.provider.SessionScopeLifecycleBuildActionExecuter.lambda$execute$0(SessionScopeLifecycleBuildActionExecuter.java:54) at org.gradle.internal.session.BuildSessionState.run(BuildSessionState.java:67) at org.gradle.tooling.internal.provider.SessionScopeLifecycleBuildActionExecuter.execute(SessionScopeLifecycleBuildActionExecuter.java:50) at org.gradle.tooling.internal.provider.SessionScopeLifecycleBuildActionExecuter.execute(SessionScopeLifecycleBuildActionExecuter.java:36) at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:36) at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:25) at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:59) at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:31) at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:55) ... 30 more Caused by: org.gradle.api.UncheckedIOException: Failed to create parent directory 'C:\01DevelopKits\hello-spring\.gradle' when creating directory 'C:\01DevelopKits\hello-spring\.gradle\6.9\fileHashes' at org.gradle.util.GFileUtils.mkdirs(GFileUtils.java:313) at org.gradle.cache.internal.DefaultPersistentDirectoryStore.open(DefaultPersistentDirectoryStore.java:86) at org.gradle.cache.internal.DefaultPersistentDirectoryStore.open(DefaultPersistentDirectoryStore.java:43) at org.gradle.cache.internal.DefaultCacheFactory.doOpen(DefaultCacheFactory.java:103) at org.gradle.cache.internal.DefaultCacheFactory.open(DefaultCacheFactory.java:68) at org.gradle.cache.internal.DefaultCacheRepository$PersistentCacheBuilder.open(DefaultCacheRepository.java:126) at org.gradle.api.internal.changedetection.state.CrossBuildFileHashCache.<init>(CrossBuildFileHashCache.java:44) at org.gradle.internal.service.scopes.VirtualFileSystemServices$BuildSessionServices.createCrossBuildFileHashCache(VirtualFileSystemServices.java:360) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104) at org.gradle.internal.service.ReflectionBasedServiceMethod.invoke(ReflectionBasedServiceMethod.java:34) at org.gradle.internal.service.DefaultServiceRegistry$FactoryMethodService.invokeMethod(DefaultServiceRegistry.java:846) ... 73 more
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
카드역배치 문제 질문
강사님 안녕하세요 카드역배치문제 질문 있습니다 문제랑 풀이는 이해가 가는데요 문제에서 '1부터 20까지 숫자가 하나씩 쓰인 20장의 카드가 아래 그림과 같이 오름차순으로 한 줄로 놓여있다' 라고 나옵니다 그래서 마지막에 pop를 이용하여 0을 제거하기는 하지만 처음부터 시작할때 a라는 리스트가 0부터 시작해도 상관이 없는건가요...?
-
미해결Slack 클론 코딩[실시간 채팅 with React]
userData?.Workspaces.map 타입에러가 납니다.
새롭게 로그인을 한 직후 바로 Workspace페이지로 이동하지않고 undefinded 타입 에러가 납니다. 이후 새로고침을 한번 실시하면 정상 실행됩니다. 해결방법을 모르겠어요 ㅠ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
왜 Test에 transactional을 또 붙여야하나요?
service에 이미 @Transactional을 붙어있는걸로 보이는데 왜 test코드에 또 Transactional을 붙여줘야 하는건가요? 어차피 Service에서 데이터 추가 , 삭제는 다 이루어지고 있는것 아닌가요?
-
미해결Vuetify Admin Template 만들기 - 기본편 (Based Vue2)
vuetify 설치후 class를 이용한 css 적용 안됨
해당 내용을 따라서 vuetify 설치를 완료했는데 class="d-flex justify-center"등의 css 가 적용이 안됩니다. ㅠㅜ 뭐가 문제일까요? 코드 문제는 아닌 것 같은데 class 를 이용한 css 적용을 위한 vuetify는 또 따로 뭐 다운 받아야 하나요?
-
미해결스프링 시큐리티
Remember-me .CookieTheftException Exception 문의
안녕하세요 ^^. 강의 잘듣고 있습니다. 리멤버미 토큰 관련해서 질문이 있습니다. 스프링 시큐리티 리멤버미 기능을 이용하고 있는데요, 토큰 저장소는 DB 에 저장을 해놓고요. 하지만 스프링 application 을 restart 하게 되면 .CookieTheftException Exception 이 터집니다. 디버깅해보니, 이전에 저장되어 있던 Token value 와 새로 인입된 Token Value 가 일치하지 않더라고요.. 테스트 순서는 아래와 같습니다. 1. 리멤버미를 이용한 로그인 후 로그인 성공 2. DB 및 쿠키 remember-me 확인 완료 3. Springboot app 재시작 4. front 페이지 새로고침 5. RememberMeTokenRepository -> updateToken 메소드 호출 되면서 token value DB update ( 이때 페이지 새로고침했다고 토큰이 새로 발행되는게 맞나요? 토큰 expire 시간이 지나지도 않았는데) 6. 기존 token value 와 신규 token value 불일치로 인한 RememberMeTokenRepository -> removeUserTokens 메소드 호출되면서 token 삭제 7. .CookieTheftException 예외 터짐 일단 어플리케이션 재기동 이후 페이지 새로고침을 하는 순간 기존에 토큰 값이 아닌 새로운 값이 업데이트 되는데, 업데이트된 토큰 값 과 기존의 토큰 값이 불일치 하니 당연히 에러가 터지겠죠.. 근데 왜 업데이트가 되는지 이해가 잘 안되네요.. 혹시 어플리케이션 재기동하게되면 리멤버미 기능을 이용해서 이미 로그인되어 있는 유저들은 어떻게 처리해야 좋을까요? 혹시 몰라 아래 로그 달아드릴게요.. 강의 너무 감사합니다. 2021-07-16 16:10:09.061 INFO 18296 --- [nio-8080-exec-1] c.m.c.r.RememberMeTokenRepository : remember-me token 획득 Hibernate: select rememberme0_.series as series1_1_, rememberme0_.last_used as last_use2_1_, rememberme0_.token as token3_1_, rememberme0_.username as username4_1_ from persistent_logins rememberme0_ where rememberme0_.series=? 2021-07-16 16:10:09.262 INFO 18296 --- [nio-8080-exec-1] c.m.c.r.RememberMeTokenRepository : remember-me token 획득 tokne oulEuy+jZS+XqpkJfzYwBw== 2021-07-16 16:10:09.297 INFO 18296 --- [nio-8080-exec-1] c.m.c.r.RememberMeTokenRepository : remember-me token 업데이트 [ddCMgrk5Gm0hEqiH4LuvaQ==] [55vHBaBrKjGiA039ZzOH4w==] Hibernate: select rememberme0_.series as series1_1_, rememberme0_.last_used as last_use2_1_, rememberme0_.token as token3_1_, rememberme0_.username as username4_1_ from persistent_logins rememberme0_ where rememberme0_.series=? Hibernate: update persistent_logins set last_used=?, token=?, username=? where series=? Hibernate: select member0_.id as id1_18_, member0_.created_at as created_2_18_, member0_.updated_at as updated_3_18_, member0_.access_token as access_t4_18_, member0_.access_yn as access_y5_18_, member0_.account_type as account_6_18_, member0_.activated as activate7_18_, member0_.birth_date as birth_da8_18_, member0_.branch as branch9_18_, member0_.comment as comment10_18_, member0_.email_address as email_a11_18_, member0_.gender as gender12_18_, member0_.group_name as group_n13_18_, member0_.guide_count as guide_c14_18_, member0_.last_accessed_at as last_ac15_18_, member0_.name as name16_18_, member0_.password as passwor17_18_, member0_.phone as phone18_18_, member0_.point as point19_18_, member0_.position as positio20_18_, member0_.refresh_token as refresh21_18_ from tb_member member0_ where member0_.email_address=? 2021-07-16 16:10:09.403 ERROR 18296 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception java.lang.NullPointerException: null at org.springframework.security.authentication.AccountStatusUserDetailsChecker.check(AccountStatusUserDetailsChecker.java:41) at org.springframework.security.web.authentication.rememberme.AbstractRememberMeServices.autoLogin(AbstractRememberMeServices.java:137) at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:104) at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:92) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:834) 2021-07-16 16:10:09.412 INFO 18296 --- [nio-8080-exec-1] c.m.c.r.RememberMeTokenRepository : remember-me token 획득 Hibernate: select rememberme0_.series as series1_1_, rememberme0_.last_used as last_use2_1_, rememberme0_.token as token3_1_, rememberme0_.username as username4_1_ from persistent_logins rememberme0_ where rememberme0_.series=? 2021-07-16 16:10:09.421 INFO 18296 --- [nio-8080-exec-1] c.m.c.r.RememberMeTokenRepository : remember-me token 획득 tokne 55vHBaBrKjGiA039ZzOH4w== 2021-07-16 16:10:09.441 INFO 18296 --- [nio-8080-exec-1] c.m.c.r.RememberMeTokenRepository : remember-me token 삭제 11 Hibernate: select rememberme0_.series as series1_1_, rememberme0_.last_used as last_use2_1_, rememberme0_.token as token3_1_, rememberme0_.username as username4_1_ from persistent_logins rememberme0_ where rememberme0_.username=? Hibernate: delete from persistent_logins where series=? 2021-07-16 16:10:09.492 ERROR 18296 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] threw exception org.springframework.security.web.authentication.rememberme.CookieTheftException: Invalid remember-me token (Series/token) mismatch. Implies previous cookie theft attack. at org.springframework.security.web.authentication.rememberme.PersistentTokenBasedRememberMeServices.processAutoLoginCookie(PersistentTokenBasedRememberMeServices.java:113) at org.springframework.security.web.authentication.rememberme.AbstractRememberMeServices.autoLogin(AbstractRememberMeServices.java:136) at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:104) at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:92) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:710) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:384) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312) at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:398) at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:257) at org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:352) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:177) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:834) 2021-07-16 16:10:09.493 ERROR 18296 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost] : Exception Processing ErrorPage[errorCode=0, location=/error]
-
해결됨실전! Querydsl
10:10 bulkUpdate 질문입니다.
안녕하세요! 강의 재밌게 듣고 있습니다. bulkUpdate 부분에서 flush, clear를 하지 않았는데도 업데이트 후의 값으로 나옵니다. hibernate 버전 업데이트의 영향인 걸까요? hibernate 버전은 5.5.10 을 쓰고 있습니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
안녕하십니까!!!!
안녕하십니까!!!! 좋은 강의 제공해주셔서 감사합니다~ 다름이 아니라 rest api 서버 구축을 하려고하는데 http 메소드 중 put,delete를 사용하려고 하니 보안취약점에 걸리는 문제가 생길수도 있을거 같은데 그러한 경우에 혹시 대비책이 있을까요?