inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

hello-form.html의 status code

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

redirect 메소드에서 첫 번째 방법이 아니라 response.sendRedirect("/basic/hello-form.html") 로 실행시켰을 때 저는 hello-form.html의 status code가 200이 아니라 302가 뜹니다 왜 이런거죠..?

  • spring
  • mvc
공태성 댓글 1 좋아요 0 조회수 551

Colab 에서 한글 사용시 셀이 확대 되는 문제

미해결

안녕하세요 colab을 이용하던 도중에 갑자기 이상한 현상이 생겨서 질문 남깁니다! 영어를 사용하면 별 문제가 없는데 이상하게 한글만 사용하면 글씨색도 변하고 위의 사진 처럼 셀의 화면이 내려가거나 확대 됩니다. 주석뿐만 아니라 코드에도 한글을 넣으면 똑같은 현상이 발생합니다. 작성시에는 화면이 보이지 않지만 작성후 방향키나 공백을 넣으면 다시 원래 화면으로 돌아옵니다. ㅠㅠㅠㅠ 너무 거슬려서 주석을 작성 할 수 가 없습니다ㅠㅠㅠ 해결책이 있을까요 이것저것 옵션 다 만져봤지만 해결이 안돼서 여쭙니다.

  • colab
  • 한글
  • python
한승훈 댓글 1 좋아요 0 조회수 592

실행 오류(Unable to set prepareKotlinBuildScriptModel sync task.)

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

springboot 3.0.6, java17로 파일 다운로드 후 메인 클래스를 실행시켜보니 아래와 같은 오류가 발생합니다. JAVA_HOME과 JDK모두 17로 변경 및 설치 완료하였는데 실행이 되지 않아 질문 남깁니다. 아래와 같은 오류는 어떻게 해결하면 되나요? Unable to set prepareKotlinBuildScriptModel sync task. javax.management .InstanceNotFoundException: org.jetbrains.kotlin.gradle.plugin.statistics:type=StatsService at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1088) at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:811) at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:802) at org.jetbrains.kotlin.idea.gradleTooling.KotlinDslScriptTaskModelBuilder.reportFUSMetricByJMX(KotlinDslScriptTaskModelBuilder.kt:24) at org.jetbrains.kotlin.idea.gradleTooling.KotlinDslScriptTaskModelBuilder.buildAll(KotlinDslScriptTaskModelBuilder.kt:39) at org.jetbrains.plugins.gradle.tooling.internal.ExtraModelBuilder.buildAll( ExtraModelBuilder.java:107 ) at org.jetbrains.plugins.gradle.tooling.internal.ExtraModelBuilder.buildAll( ExtraModelBuilder.java:76 ) at org.gradle.tooling.provider.model.internal.DefaultToolingModelBuilderRegistry$BuilderWithParameter.build( DefaultToolingModelBuilderRegistry.java:287 ) at org.gradle.tooling.provider.model.internal.DefaultToolingModelBuilderRegistry$UserCodeAssigningBuilder.lambda$build$0( DefaultToolingModelBuilderRegistry.java:374 ) at org.gradle.configuration.internal.DefaultUserCodeApplicationContext$CurrentApplication.reapply( DefaultUserCodeApplicationContext.java:109 ) at org.gradle.tooling.provider.model.internal.DefaultToolingModelBuilderRegistry$UserCodeAssigningBuilder.build( DefaultToolingModelBuilderRegistry.java:374 ) at org.gradle.tooling.provider.model.internal.DefaultToolingModelBuilderRegistry$LockSingleProjectBuilder.lambda$build$0( DefaultToolingModelBuilderRegistry.java:304 ) at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.lambda$fromMutableState$1( DefaultProjectStateRegistry.java:383 ) at org.gradle.internal.work .DefaultWorkerLeaseService.withReplacedLocks( DefaultWorkerLeaseService.java:345 ) at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.fromMutableState( DefaultProjectStateRegistry.java:383 ) at org.gradle.tooling.provider.model.internal.DefaultToolingModelBuilderRegistry$LockSingleProjectBuilder.build( DefaultToolingModelBuilderRegistry.java:304 ) at org.gradle.tooling.provider.model.internal.DefaultToolingModelBuilderRegistry$BuildOperationWrappingBuilder$1.call( DefaultToolingModelBuilderRegistry.java:337 ) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute( DefaultBuildOperationRunner.java:204 ) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute( DefaultBuildOperationRunner.java:199 ) at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute( DefaultBuildOperationRunner.java:66 ) at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute( DefaultBuildOperationRunner.java:59 ) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute( DefaultBuildOperationRunner.java:157 ) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute( DefaultBuildOperationRunner.java:59 ) at org.gradle.internal.operations.DefaultBuildOperationRunner.call ( DefaultBuildOperationRunner.java:53 ) at org.gradle.internal.operations.DefaultBuildOperationExecutor.call ( DefaultBuildOperationExecutor.java:73 ) at org.gradle.tooling.provider.model.internal.DefaultToolingModelBuilderRegistry$BuildOperationWrappingBuilder.build( DefaultToolingModelBuilderRegistry.java:334 ) at org.gradle.internal.build .DefaultBuildToolingModelController$AbstractToolingScope.getModel( DefaultBuildToolingModelController.java:82 ) at org.gradle.tooling.internal.provider.runner.DefaultBuildController.getModel( DefaultBuildController.java:106 ) at org.gradle.tooling.internal.consumer.connection.ParameterAwareBuildControllerAdapter.getModel( ParameterAwareBuildControllerAdapter.java:39 ) at org.gradle.tooling.internal.consumer.connection.UnparameterizedBuildController.getModel( UnparameterizedBuildController.java:113 ) at org.gradle.tooling.internal.consumer.connection.NestedActionAwareBuildControllerAdapter.getModel( NestedActionAwareBuildControllerAdapter.java:31 ) at org.gradle.tooling.internal.consumer.connection.UnparameterizedBuildController.findModel( UnparameterizedBuildController.java:97 ) at org.gradle.tooling.internal.consumer.connection.NestedActionAwareBuildControllerAdapter.findModel( NestedActionAwareBuildControllerAdapter.java:31 ) at org.gradle.tooling.internal.consumer.connection.UnparameterizedBuildController.findModel( UnparameterizedBuildController.java:81 ) at org.gradle.tooling.internal.consumer.connection.NestedActionAwareBuildControllerAdapter.findModel( NestedActionAwareBuildControllerAdapter.java:31 ) at org.jetbrains.plugins.gradle.model.ProjectImportAction$MyBuildController.findModel( ProjectImportAction.java:664 ) at org.jetbrains.plugins.gradle.model.ProjectImportAction$MyBuildController.findModel( ProjectImportAction.java:685 ) at org.jetbrains.plugins.gradle.model.ClassSetImportModelProvider.populateBuildModels( ClassSetImportModelProvider.java:27 ) at org.jetbrains.plugins.gradle.model.ProjectImportAction.addBuildModels( ProjectImportAction.java:422 ) at org.jetbrains.plugins.gradle.model.ProjectImportAction.execute( ProjectImportAction.java:139 ) at org.jetbrains.plugins.gradle.model.ProjectImportAction.execute( ProjectImportAction.java:43 ) at org.gradle.tooling.internal.consumer.connection.InternalBuildActionAdapter.execute( InternalBuildActionAdapter.java:64 ) at org.gradle.tooling.internal.provider.runner.AbstractClientProvidedBuildActionRunner$ActionAdapter.runAction( AbstractClientProvidedBuildActionRunner.java:131 ) at org.gradle.tooling.internal.provider.runner.AbstractClientProvidedBuildActionRunner$ActionAdapter.beforeTasks( AbstractClientProvidedBuildActionRunner.java:99 ) at org.gradle.internal.buildtree.DefaultBuildTreeModelCreator.beforeTasks( DefaultBuildTreeModelCreator.java:52 ) at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.lambda$fromBuildModel$2( DefaultBuildTreeLifecycleController.java:82 ) at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.lambda$runBuild$5( DefaultBuildTreeLifecycleController.java:113 ) at org.gradle.internal.model.StateTransitionController.lambda$transition$5( StateTransitionController.java:166 ) at org.gradle.internal.model.StateTransitionController.doTransition( StateTransitionController.java:247 ) at org.gradle.internal.model.StateTransitionController.lambda$transition$6( StateTransitionController.java:166 ) at org.gradle.internal.work .DefaultSynchronizer.withLock( DefaultSynchronizer.java:44 ) at org.gradle.internal.model.StateTransitionController.transition( StateTransitionController.java:166 ) at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.runBuild( DefaultBuildTreeLifecycleController.java:110 ) at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.fromBuildModel( DefaultBuildTreeLifecycleController.java:81 ) at org.gradle.tooling.internal.provider.runner.AbstractClientProvidedBuildActionRunner.runClientAction( AbstractClientProvidedBuildActionRunner.java:43 ) at org.gradle.tooling.internal.provider.runner.ClientProvidedPhasedActionRunner.run ( ClientProvidedPhasedActionRunner.java:53 ) at org.gradle.launcher.exec.ChainingBuildActionRunner.run ( ChainingBuildActionRunner.java:35 ) at org.gradle.internal.buildtree.ProblemReportingBuildActionRunner.run ( ProblemReportingBuildActionRunner.java:49 ) at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run ( BuildOutcomeReportingBuildActionRunner.java:65 ) at org.gradle.tooling.internal.provider.FileSystemWatchingBuildActionRunner.run ( FileSystemWatchingBuildActionRunner.java:136 ) at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run ( BuildCompletionNotifyingBuildActionRunner.java:41 ) at org.gradle.launcher.exec.RootBuildLifecycleBuildActionExecutor.lambda$execute$0( RootBuildLifecycleBuildActionExecutor.java:40 ) at org.gradle.composite.internal.DefaultRootBuildState.run ( DefaultRootBuildState.java:122 ) at org.gradle.launcher.exec.RootBuildLifecycleBuildActionExecutor.execute( RootBuildLifecycleBuildActionExecutor.java:40 ) at org.gradle.internal.buildtree.DefaultBuildTreeContext.execute( DefaultBuildTreeContext.java:40 ) at org.gradle.launcher.exec.BuildTreeLifecycleBuildActionExecutor.lambda$execute$0( BuildTreeLifecycleBuildActionExecutor.java:65 ) at org.gradle.internal.buildtree.BuildTreeState.run ( BuildTreeState.java:53 ) at org.gradle.launcher.exec.BuildTreeLifecycleBuildActionExecutor.execute( BuildTreeLifecycleBuildActionExecutor.java:65 ) at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$3.call( RunAsBuildOperationBuildActionExecutor.java:61 ) at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$3.call( RunAsBuildOperationBuildActionExecutor.java:57 ) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute( DefaultBuildOperationRunner.java:204 ) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute( DefaultBuildOperationRunner.java:199 ) at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute( DefaultBuildOperationRunner.java:66 ) at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute( DefaultBuildOperationRunner.java:59 ) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute( DefaultBuildOperationRunner.java:157 ) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute( DefaultBuildOperationRunner.java:59 ) at org.gradle.internal.operations.DefaultBuildOperationRunner.call ( DefaultBuildOperationRunner.java:53 ) at org.gradle.internal.operations.DefaultBuildOperationExecutor.call ( DefaultBuildOperationExecutor.java:73 ) at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor.execute( RunAsBuildOperationBuildActionExecutor.java:57 ) at org.gradle.launcher.exec.RunAsWorkerThreadBuildActionExecutor.lambda$execute$0( RunAsWorkerThreadBuildActionExecutor.java:36 ) at org.gradle.internal.work .DefaultWorkerLeaseService.withLocks( DefaultWorkerLeaseService.java:249 ) at org.gradle.internal.work .DefaultWorkerLeaseService.runAsWorkerThread( DefaultWorkerLeaseService.java:109 ) at org.gradle.launcher.exec.RunAsWorkerThreadBuildActionExecutor.execute( RunAsWorkerThreadBuildActionExecutor.java:36 ) at org.gradle.tooling.internal.provider.continuous.ContinuousBuildActionExecutor.execute( ContinuousBuildActionExecutor.java:110 ) at org.gradle.tooling.internal.provider.SubscribableBuildActionExecutor.execute( SubscribableBuildActionExecutor.java:64 ) at org.gradle.internal.session.DefaultBuildSessionContext.execute( DefaultBuildSessionContext.java:46 ) at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter$ActionImpl.apply( BuildSessionLifecycleBuildActionExecuter.java:100 ) at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter$ActionImpl.apply( BuildSessionLifecycleBuildActionExecuter.java:88 ) at org.gradle.internal.session.BuildSessionState.run ( BuildSessionState.java:69 ) at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter.execute( BuildSessionLifecycleBuildActionExecuter.java:62 ) at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter.execute( BuildSessionLifecycleBuildActionExecuter.java:41 ) at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute( StartParamsValidatingActionExecuter.java:63 ) at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute( StartParamsValidatingActionExecuter.java:31 ) at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute( SessionFailureReportingActionExecuter.java:52 ) at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute( SessionFailureReportingActionExecuter.java:40 ) 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.internal.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:49 ) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker( ThreadPoolExecutor.java:1136 ) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run( ThreadPoolExecutor.java:635 ) at java.base/java.lang.Thread.run( Thread.java:833 ) *구글에 검색해보니 아래와 같은 tasks.register("prepareKotlinBuildScriptModel"){} 문구를 추가하라고 하여 추가 후 다시 실행해보아도 여전히 실행되지 않습니다.

  • spring
  • mvc
Yeonnnni 댓글 2 좋아요 0 조회수 2628

BasicErrorController에서 뷰를 선택하는 우선순위 관련

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

public class ServletExController { @GetMapping("/error-404") public void error404(HttpServletResponse response) throws IOException { response.sendError(404, "404 오류 발생!"); } } templates/error/4xx.html, static/error/404.html라는 2개의 오류 페이지를 등록했습니다. /error-404 요청 -> WAS가 sendError() 호출 기록 확인 -> WAS가 /error 요청 -> 이 요청을 BasicErrorController에게 전달 -> BasicErrorController은, 뷰 우선순위에 따라 뷰(오류 페이지)를 선택합니다. templates폴더가 static 폴더보다 우선순위가 높기 때문에 'templates/error/4xx.html' 파일이 선택될 줄 알았는데, 'static/error/404.html 파일이 선택되었습니다. 왜 그런 것일까요? 혹시 templates, static 폴더보다 파일명(400, 4xx)에 대한 우선순위가 높은 것이 영향이 있을까요...?

  • spring
  • mvc
도토리 댓글 1 좋아요 0 조회수 347

요청 매핑 (파라미터로 추가 매핑 코드 400 오류)

해결됨

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 요청 매핑 강의 내용 중에 파라미터 추가 매핑 관련 질문 드립니다. @GetMapping(value = "/mapping-param", params = {"mode=debug","data=good"}) public String mappingParam() { log.info ("mappingParam"); return "ok"; } postman url 창에 localhost:8080/mapping-param => 이 뒤에 어떻게 입력해야 제대로 출력이 되는 건 지 알고 싶습니다. 위에 코드 부분이 잘못되었는지 아니면 url 창에 적은 부분이 잘못 되어서 그런건지 400오류가 계속 나옵니다. 어떻게 하면 해결 되어질까요?

  • mvc
  • spring
지루한 갈매기 댓글 2 좋아요 0 조회수 663

regions의 컬랙션 객체

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

컨트롤러에서 Map 타입 region의 값을 넣어주는데 @ModelAttribute("regions") public Map<String, String> regions() { Map<String, String> regions = new LinkedHashMap<>(); regions.put("SEOUL", "서울"); regions.put("BUSAN", "부산"); regions.put("JEJU", "제주"); return regions; } Item 객체의 regions에는 값을 언제 넣어주는 지 궁금합니다. @Data public class Item { private List<String> regions; //등록 지역 } 아래 질문을 보면 https://www.inflearn.com/questions/298992/regions-%ED%95%84%EB%93%9C%EC%9D%98-%EA%B0%92%EC%9D%B4-%EC%B6%94%EA%B0%80%EB%90%98%EB%8A%94-%EB%8F%99%EC%9E%91%EB%B0%A9%EC%8B%9D%EC%9D%B4-%EA%B6%81%EA%B8%88%ED%95%A9%EB%8B%88%EB%8B%A4 스프링이 List 타입으로 선언한 regions에도 컬랙션 객체를 만들어서 자동으로 값을 넣어준다고 말씀하셨는데 하나는 Map이고 다른하나는 LIst로 서로 다른 컬랙션 객체인데 어떻게 값을 넣어 주는 지 궁금합니다. 정리하면 아래 addForm.html 코드에서 <!-- multi checkbox --> <div> <div>등록 지역</div> <div th:each="region : ${regions}" class="form-check form-check-inline"> <input type="checkbox" th:field="*{regions}" th:value="${region.key}" class="form-check-input"> <label th:for="${#ids.prev('regions')}" th:text="${region.value}" class="form-check-label">서울</label> </div> </div> <input type="checkbox" th:field="*{regions}" th:value="${region.key}">에서 item.regions에 값을 넣어주지도 않았는데 item.regions와 region.key가 어떻게 비교할 수 있는 지 궁금합니다.

  • spring
  • mvc
코딩먹는하마 댓글 1 좋아요 0 조회수 543

java.lang.IllegalArgumentException: Unresolvable class definition for class

미해결

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

섹션 6. 스프링 DB 접근 기술 의 순수 JDBC 강의 수강 중, 코드 작성 후 16분에 재기동을 하는데 다음과 같은 오류가 떠 원인과 해결 방법을 질문합니다. 윈도우 회사 PC로 실습 중이며, h2 db는 권한 없음으로 bat 파일 기동되지 않아 javaw -jar h2-1.4.200.jar 명령어로 기동했습니다. 해당 명령어로 기동 시 http://192.168.70.178:8082/login.jsp?jsessionid=5137fb26224e404a43f0ac762325f8d5 주소로 접속됩니다. 2023-05-09 16:53:54.867 ERROR 17292 --- [ restartedMain] o.s.boot.SpringApplication : Application run failed java.lang.IllegalArgumentException: Unresolvable class definition for class [org.springframework.boot.devtools.autoconfigure.DevToolsDataSourceAutoConfiguration$DatabaseShutdownExecutorEntityManagerFactoryDependsOnPostProcessor] at org.springframework.util.ClassUtils.resolveClassName( ClassUtils.java:331 ) ~[spring-core-5.3.27.jar:5.3.27] at org.springframework.core.annotation.TypeMappedAnnotation.adapt( TypeMappedAnnotation.java:474 ) ~[spring-core-5.3.27.jar:5.3.27] at org.springframework.core.annotation.TypeMappedAnnotation.getValue( TypeMappedAnnotation.java:397 ) ~[spring-core-5.3.27.jar:5.3.27] at org.springframework.core.annotation.TypeMappedAnnotation.asMap( TypeMappedAnnotation.java:283 ) ~[spring-core-5.3.27.jar:5.3.27] at org.springframework.core.annotation.AbstractMergedAnnotation.asAnnotationAttributes( AbstractMergedAnnotation.java:193 ) ~[spring-core-5.3.27.jar:5.3.27] at org.springframework.core.type.AnnotatedTypeMetadata.getAnnotationAttributes( AnnotatedTypeMetadata.java:106 ) ~[spring-core-5.3.27.jar:5.3.27] at org.springframework.core.type.AnnotatedTypeMetadata.getAnnotationAttributes( AnnotatedTypeMetadata.java:81 ) ~[spring-core-5.3.27.jar:5.3.27] at org.springframework.context.annotation.AnnotationConfigUtils.attributesFor( AnnotationConfigUtils.java:285 ) ~[spring-context-5.3.27.jar:5.3.27] at org.springframework.context.annotation.AnnotationBeanNameGenerator.determineBeanNameFromAnnotation( AnnotationBeanNameGenerator.java:103 ) ~[spring-context-5.3.27.jar:5.3.27] at org.springframework.context.annotation.AnnotationBeanNameGenerator.generateBeanName( AnnotationBeanNameGenerator.java:82 ) ~[spring-context-5.3.27.jar:5.3.27] at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.registerBeanDefinitionForImportedConfigurationClass( ConfigurationClassBeanDefinitionReader.java:169 ) ~[spring-context-5.3.27.jar:5.3.27] at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass( ConfigurationClassBeanDefinitionReader.java:150 ) ~[spring-context-5.3.27.jar:5.3.27] at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions( ConfigurationClassBeanDefinitionReader.java:129 ) ~[spring-context-5.3.27.jar:5.3.27] at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions( ConfigurationClassPostProcessor.java:343 ) ~[spring-context-5.3.27.jar:5.3.27] at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry( ConfigurationClassPostProcessor.java:247 ) ~[spring-context-5.3.27.jar:5.3.27] at org.springframework.context.support .PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors( PostProcessorRegistrationDelegate.java:311 ) ~[spring-context-5.3.27.jar:5.3.27] at org.springframework.context.support .PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors( PostProcessorRegistrationDelegate.java:112 ) ~[spring-context-5.3.27.jar:5.3.27] at org.springframework.context.support .AbstractApplicationContext.invokeBeanFactoryPostProcessors( AbstractApplicationContext.java:748 ) ~[spring-context-5.3.27.jar:5.3.27] at org.springframework.context.support .AbstractApplicationContext.refresh( AbstractApplicationContext.java:564 ) ~[spring-context-5.3.27.jar:5.3.27] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh( ServletWebServerApplicationContext.java:147 ) ~[spring-boot-2.7.11.jar:2.7.11] at org.springframework.boot.SpringApplication.refresh( SpringApplication.java:731 ) ~[spring-boot-2.7.11.jar:2.7.11] at org.springframework.boot.SpringApplication.refreshContext( SpringApplication.java:408 ) ~[spring-boot-2.7.11.jar:2.7.11] at org.springframework.boot.SpringApplication.run ( SpringApplication.java:307 ) ~[spring-boot-2.7.11.jar:2.7.11] at org.springframework.boot.SpringApplication.run ( SpringApplication.java:1303 ) ~[spring-boot-2.7.11.jar:2.7.11] at org.springframework.boot.SpringApplication.run ( SpringApplication.java:1292 ) ~[spring-boot-2.7.11.jar:2.7.11] at juney.juneyspring.JuneySpringApplication.main( JuneySpringApplication.java:10 ) ~[classes/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke( NativeMethodAccessorImpl.java:62 ) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:43 ) ~[na:na] at java.base/java.lang.reflect.Method.invoke( Method.java:566 ) ~[na:na] at org.springframework.boot.devtools.restart.RestartLauncher.run ( RestartLauncher.java:49 ) ~[spring-boot-devtools-2.2.10.RELEASE.jar:2.2.10.RELEASE] Caused by: java.lang.NoClassDefFoundError: org/springframework/boot/autoconfigure/data/jpa/EntityManagerFactoryDependsOnPostProcessor at java.base/java.lang.ClassLoader.defineClass1(Native Method) ~[na:na] at java.base/java.lang.ClassLoader.defineClass( ClassLoader.java:1016 ) ~[na:na] at java.base/java.security.SecureClassLoader.defineClass( SecureClassLoader.java:174 ) ~[na:na] at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass( BuiltinClassLoader.java:800 ) ~[na:na] at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull( BuiltinClassLoader.java:698 ) ~[na:na] at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull( BuiltinClassLoader.java:621 ) ~[na:na] at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass( BuiltinClassLoader.java:579 ) ~[na:na] at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass( ClassLoaders.java:178 ) ~[na:na] at java.base/java.lang.ClassLoader.loadClass( ClassLoader.java:521 ) ~[na:na] at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass( RestartClassLoader.java:144 ) ~[spring-boot-devtools-2.2.10.RELEASE.jar:2.2.10.RELEASE] at java.base/java.lang.ClassLoader.loadClass( ClassLoader.java:521 ) ~[na:na] at java.base/java.lang.Class.forName0(Native Method) ~[na:na] at java.base/java.lang.Class.forName( Class.java:398 ) ~[na:na] at org.springframework.util.ClassUtils.forName( ClassUtils.java:284 ) ~[spring-core-5.3.27.jar:5.3.27] at org.springframework.util.ClassUtils.resolveClassName( ClassUtils.java:324 ) ~[spring-core-5.3.27.jar:5.3.27] ... 30 common frames omitted Caused by: java.lang.ClassNotFoundException: org.springframework.boot.autoconfigure.data .jpa.EntityManagerFactoryDependsOnPostProcessor at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass( BuiltinClassLoader.java:581 ) ~[na:na] at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass( ClassLoaders.java:178 ) ~[na:na] at java.base/java.lang.ClassLoader.loadClass( ClassLoader.java:521 ) ~[na:na] ... 45 common frames omitted Process finished with exit code 0

  • java
  • spring
  • mvc
  • spring-boot
냠냠 댓글 2 좋아요 1 조회수 1576

트리에 관해 질문 있습니다

해결됨

코딩테스트 [ ALL IN ONE ]

해당 코드에서 LCA에 첫번째 인자값에 배열을 넣어주는데 LCA의 함수에서 root는 left와 right를 가지고 있습니다. 무엇인가요...

  • python
  • 코딩-테스트
  • 알고리즘
유제환 댓글 1 좋아요 1 조회수 509

다중 인터셉터의 경우 호출 순서가 어떻게 되는지 궁금합니다.

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요?예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예/ 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 여기에 질문 내용을 남겨주세요. <스프링 인터셉터 - 인증 체크> 강의 수강 중 의문이 생겨 질문드립니다. 다중 인터셉터의 경우 ( 편의 상 1, 2 로 표기할게요) 구글링해보니까 pre 1 -> pre 2 -> 컨트롤러 호출 -> post 2 -> post 1 -> 요청 처리완료 -> after2 -> after 1 이 순으로 호출된다고 하는데 맞을까요? 그리고, 미인증상태로 items/add 를 들어갔을 때 pre2 까지 수행 후 리다이렉트 + return false; 니까 다음 인터셉터는 수행되지 않는다 생각해서 after1 도 수행되지 않을 거라 생각했는데 로그에는 수행이 되더라구요. 컨트롤러에서 예외가 발생한게 아니라, preHandle 에서 false를 반환하는 경우에도 afterCompletion은 수행되는건가요? 아니면 두번째 인터셉터의 preHandle이 false를 반환한거라 두번째 인터셉터만 건너뛰는거고 첫 번째 인터셉터랑은 무관해서 수행된걸까요? 2023-05-09 13:56:35.412 INFO 32688 --- [nio-8080-exec-7] h.login.web.interceptor.Loginterceptor : REQUEST [14810694-f53d-4526-9a1f-5b95b3c0c010] [/items/add] [hello.login.web.item.ItemController#addForm(Model)] 2023-05-09 13:56:35.419 INFO 32688 --- [nio-8080-exec-7] h.l.w.interceptor.LoginCheckInterceptor : 인증 체크 인터셉터 실행 /items/add 2023-05-09 13:56:35.427 INFO 32688 --- [nio-8080-exec-7] h.l.w.interceptor.LoginCheckInterceptor : 미인증 사용자 요청 2023-05-09 13:56:35.432 INFO 32688 --- [nio-8080-exec-7] h.login.web.interceptor.Loginterceptor : RESPONSE [14810694-f53d-4526-9a1f-5b95b3c0c010][/items/add][hello.login.web.item.ItemController#addForm(Model)] 2023-05-09 13:56:35.468 INFO 32688 --- [nio-8080-exec-6] h.login.web.interceptor.Loginterceptor : REQUEST [5fb2bde4-eba5-4f97-b294-bad2597bd5f1] [/login] [hello.login.web.login.LoginController#loginForm(LoginForm)] 2023-05-09 13:56:35.495 INFO 32688 --- [nio-8080-exec-6] h.login.web.interceptor.Loginterceptor : postHandle [ModelAndView [view="login/loginForm"; model={loginForm=LoginForm(loginId=null, password=null), org.springframework.validation.BindingResult.loginForm=org.springframework.validation.BeanPropertyBindingResult: 0 errors}]] 2023-05-09 13:56:35.529 INFO 32688 --- [nio-8080-exec-6] h.login.web.interceptor.Loginterceptor : RESPONSE [5fb2bde4-eba5-4f97-b294-bad2597bd5f1][/login][hello.login.web.login.LoginController#loginForm(LoginForm)] 2023-05-09 13:56:35.699 INFO 32688 --- [nio-8080-exec-8] h.l.w.interceptor.LoginCheckInterceptor : 인증 체크 인터셉터 실행 /favicon.ico 2023-05-09 13:56:35.699 INFO 32688 --- [nio-8080-exec-8] h.l.w.interceptor.LoginCheckInterceptor : 미인증 사용자 요청 2023-05-09 13:56:35.709 INFO 32688 --- [nio-8080-exec-9] h.login.web.interceptor.Loginterceptor : REQUEST [5ad8ae3f-2e48-479e-8013-4ffc72ecaf06] [/login] [hello.login.web.login.LoginController#loginForm(LoginForm)] 2023-05-09 13:56:35.709 INFO 32688 --- [nio-8080-exec-9] h.login.web.interceptor.Loginterceptor : postHandle [ModelAndView [view="login/loginForm"; model={loginForm=LoginForm(loginId=null, password=null), org.springframework.validation.BindingResult.loginForm=org.springframework.validation.BeanPropertyBindingResult: 0 errors}]] 2023-05-09 13:56:35.719 INFO 32688 --- [nio-8080-exec-9] h.login.web.interceptor.Loginterceptor : RESPONSE [5ad8ae3f-2e48-479e-8013-4ffc72ecaf06][/login][hello.login.web.login.LoginController#loginForm(LoginForm)] 혹시 여기서 말하는 '나머지 인터셉터'가 다른 인터셉터의preHandle만 의미하는 건가요? 그래서 postHandle, afterCompletion 이랑은 별개인걸까요 아직 내용을 잘 숙지하지는 못한 상태라 질문이 매끄럽지 못한점 양해부탁드려요. 감사합니다.

  • spring
  • mvc
니야옹 댓글 1 좋아요 0 조회수 1125

ResponseEntity와 @RestController

해결됨

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

안녕하세요 강의 너무 잘 듣고 있습니다! 다름이 아니라 섹션 6. 스프링 MVC - 기본 기능 부분을 듣다가 궁금한 점이 생겨서 질문 드립니다. 우선 제가 이해하기로는 ResponseEntity를 사용하는 이유는 데이터(객체)와 함께 HTTP 응답 코드를 같이 반환 할 수 있기 때문이다 물론 @ResponseBody와 @ResponseStatus를 같이 쓰면 데이터와 HTTP 응답 코드를 같이 보내줄 수 있지만, @ResponseStatus는 애노테이션이기에 동적으로 HTTP 응답 코드를 설정할 수 없기에 ResponseEntity를 사용하는게 더 효율적이다 이렇게 두 가지 정도로 알고 있습니다. 여기서 제가 궁금한 점은 반환 타입이 ResponseEntity인 경우 왜 @RestController를 사용하는지 입니다. 그 동안 저도 ResponseEntity를 반환하는 컨트롤러에 @RestController를 항상 붙여줬는데, 강의를 보다 보니 ResponseEntity를 반환할 때는 @ReponseBody가 필요하지 않아서 @RestController가 아닌 @Controller로도 동작하는데 문제가 없어 보이기에 혹시 다른 이유가 있는지 궁금합니다. 개인적으로 생각했을때 ResponseEntity를 반환하는 컨트롤러에 @RestController를 쓰는 이유는 중간중간 ResponseEntity가 아닌 String, Object 같은 데이터만 반환하는 메서드가 있을 수 있고, 그런 메서드 마다 @ResponseBody를 붙이는게 번거롭기 때문에 @RestController 적용시 스프링 컨테이너가 Bean Scope를 template 영역까지 고려하지 않아서 resource를 절약할 수 있기 때문에(?) 이 두가지 정도 떠오릅니다. 만약 추가적으로 ResponseEntity를 반환하는 컨트롤러에서 @RestController를 사용하는 이유가 있을까요? 그리고 두 번째 이유는 저도 정확히 아는게 아니라 주변에서 들었던 부분인데 이 이유도 해당된다면 조금 풀어서 설명해주실 수 있을까요? 감사합니다!

  • spring
  • mvc
  • ResponseEntity
  • @restcontroller
이진혁 댓글 1 좋아요 2 조회수 1255

http://localhost:8080/hello 에서 에러가 나네요

미해결

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 몇 번을 확인했는데 에러가 나서 찾기가 어렵네요 도움 부탁드립니다.

  • java
  • spring
  • mvc
  • spring-boot
ksd1003 댓글 2 좋아요 0 조회수 667

build 오류 발생 문의

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 네 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 네 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 네 [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요 강의 잘 듣고 있습니다. cmd에서 선생님과 동일하게 build 명령어 입력했는데 실행 할 수 없다고 떠서 문의 드립니다. 관리자 모드 cmd에서도 동일한 증상인데 무엇이 문제일까요..?

  • java
  • spring
  • mvc
  • spring-boot
Hellokkk 댓글 2 좋아요 0 조회수 1200

templates html 실행

해결됨

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

현재 IDE은 이클립스 사용중입니다. 내용은 모두 강의와 동일하고, 아래와 같이 html파일들을 위치시켰을 때, static에 저장된 index.html은 실행이 잘되는 반면에 templates에 저장된 hello.html과 hello-template.html은 가져오지 못하고 whitelabel error page 로 연결되는 오류가 발생합니다. 어떤 부분이 잘못되었는지 확인해봐야 하나요?

  • java
  • spring
  • mvc
  • spring-boot
nippert 댓글 1 좋아요 0 조회수 510

webapp에 대해 궁급합니다

해결됨

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

[질문 내용] 여기에 질문 내용을 남겨주세요. main> webapp> index.html 의 경로로 설정하면 localhost:8080 실행시 기본으로 index.html 이 실행되고 이것이 welcome 페이지인 것은 이해하였습니다. 그럼 webapp을 컨트롤러를 사용하지 않아도 파일을 열 수 있도록 해주는 디렉토리 정도로 이해해도 될까요? 무조건 실행되는..? 근데 이렇게 생각하면 왜 basic.html도 있는데 index.html이 실행되는건지 헷갈리기도 하고.. webapp의 정의? 원리? 를 잘 모르겠습니다.. 답변 부탁드리겠습니다.

  • spring
  • mvc
공태성 댓글 1 좋아요 0 조회수 606

질문드립니다

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. BindingResult가 model로 자동 등록되서 타임리프 코드에서 th:object="${item}"이 여기서 등록된걸 참조하는것 같은데요 @ModelAttribute도 model로 자동 등록하지않나요? 그러면 item이라는 이름으로 model에 등록된게 같은이름으로 2개가 아닌지요?

  • spring
  • mvc
정중한 개구리 댓글 1 좋아요 0 조회수 375

수업자료 다운로드 위치가 안보입니다 ㅠㅠ

미해결

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

수업자료 ppt가 초반에 다운받는 링크가 어디 있었던걸로 기억하는데 해당 링크가 안보이네요 ㅠㅠㅠ.......

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

css style 태그 적용

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] CSS <style> 태그의 클래스이름과 body에서 input 태그의 클래스 이름 설정이 다른데 어떻게 적용이 되는지 궁금합니다. <style> .container { max-width: 560px; } .field-error{ // 이 부분 border-color: #dc3545; color: #dc3545; } </style> <div> <label for="itemName" th:text="#{label.item.itemName}">상품명</label> <input type="text" id="itemName" th:field="*{itemName}" th:class="${errors?.containsKey('itemName')} ? 'form-control field-error' : 'form-control'" class="form-control" placeholder="이름을 입력하세요"> <div class="field-error" th:if="${errors?.containsKey('itemName')}" th:text="${errors['itemName']}"> 상품명 오류 </div> </div> 아래 코드를 보면 오류 발생시 클래스 이름을 'form-control field-error'로 설정했는데 css를 보면 .field-error 으로 클래스 이름을 찾아서 적용하는데 어떻게 이렇게 되는지 궁금합니다.

  • spring
  • mvc
김승환 댓글 1 좋아요 1 조회수 446

MemorymemberRepository와 memberRepository에 대아혀

미해결

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

MemorymemberRepository가 memberRepository를 구현하고 있는데 그러면 이 부분에서 MemberRepository memberRepository; 로 선언하는게 아니라 MemoryMemberRepository memberRepository; 로 선언한 후 사용해야 하는것 아닌가요,,? 인터페이스를 구현한게 MemoryMemberRepository인데 memberRepository로 선언을 해서 계속 사용하면 MemoryMemberRepository에서 구현한 내용을 못보는것 아닌가요,,?? MemberRepository memberRepository = new MemoryMemberRepository(); MemberService memberService = new MemberService(memberRepository); 이런 식으로 따로 생성을 해서 사용해야 하는것이 아닌가 궁금합니다!

  • java
  • spring
  • mvc
  • spring-boot
jake991110 댓글 1 좋아요 0 조회수 813

view render 에 질문이 있습니다.

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

[질문 내용] 강의 약 19분 00초에서 view.render()를 해줄 때 모델 객체도 같이 넘겨줘야한다 하셨는데... 모델 객체는 왜 같이 넘겨주어야 하나요? 이미 view는 어떤 페이지로 갈지 알고 있고, request 값은 createParamMap(request) 를 통해 넘어온 값을 재정의? 해주는걸로 생각하고 있는데, 모델객체가 왜 필요한지 잘 이해가 안갑니다.

  • spring
  • mvc
gmldnjs0402 댓글 1 좋아요 1 조회수 688

인기 태그

인프런 TOP Writers

주간 인기글