[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
안녕하세요 강의 듣는 도중 궁금한 점이 생겨서 질문 드립니다. int BUF_SIZE = 100; char a[BUF_SIZE] = "Hello" char b[BUF_SIZE] = "World"; 1. strcpy나 strcat 같은 함수를 보면 char가 char* 형태의 매개변수가 될 수 있는 이유가 a가 배열이기 때문에 배열의 시작주소를 인자로 넘겨주기 때문에 가능한건가요? 2. char형 변수는 데이터가 배열에 저장이 되기 때문에 복사가 이루어지면 그만큼 데이터를 복사하게된다고 생각이드는데 실무에서는 용량이나 트래픽을 아끼기위해서 char* 나 const char* 를 사용하는 편인가요??
fly.io에 server 프로젝트를 deploy 단계까지 마쳤다. web 프로젝트까지 배포가 완료 되어 모든 동작이 잘 이뤄지고 있다. 하지만, 일정 시간이 지나면 자동으로 fly.io에 배포된 DB가 초기화가 된다. 초기화가 된 것인지, local의 데이터가 자동 업로드 되면서 덮어씌여진 것인지는 잘 모르겠다. 이전 질문의 답변을 보면, Commit을 하면서 fly.io가 자동으로 덮어씌여진다는 것을 보았다. -> 하지만, 실험 결과 Commit을 따로 하지 않아도 초기화가 된다. 만약 git과 연관이 있다면 6-1. 배포 이후 별다른 작업을 하지 않았지만, 일정시간이 지나면, vercel와 같이 자동으로 git의 repository 최신 내용 바탕으로 업데이트 되어, git에 이미 올라가 있던 DB가 fly.io에 반영이 되는것인가가 궁금합니다. 6-2. 또한, 그렇다면 애초에 vercel은 레포지토리 주소를 참고하여 배포하였다면, fly.io는 그저 플랫폼 로그인 수단으로만 git을 연동하였는데, 최신 커밋을 참고하는 기능이 있는지도 궁금합니다. 결론적으로 현재 반복적으로 DB가 초기화 되는 현상을 고치고 싶습니다. 추가적인 실험 결과, 로컬의 nodemon server.js가 돌고 있는 server 프로젝트를 종료를 하여도, 일정 시간이 지나면 fly.io의 DB가 초기화 되는 것으로 보아, server의 내용이 바뀌면서 자동으로 로컬 내용이 fly.io로 넘어가는 것도 아닌 것 같습니다.
강사님, 영상 잘 보고 있습니다! 지금 데이터베이스 쪽 강의를 듣고 있는데, 강의에서 데이터베이스의 기능들을 쭉 설명해 주시고, 대충 어떤 기능을 하는지는 잘 알았는데요, 이것을 가지고 실제로 게임에서 실습을 할때 DB를 어떻게 사용하고, 어떤 방식으로 사용하는지에 대해서 알고 싶은데, 혹시 강사님 강의 중에 그런 강의가 있는지, 만약 없으시다면 추천해주시는 공부법, 실습법 등이 있는지 궁금합니다!
안녕하세요. 섹션1 유니티 기초 강의 그대로 프로젝트를 생성하면 Test파일을 만들었을 때 솔루션 탐색기에 프로젝트가 80개가 넘게 나옵니다. 강의 화면에서는 솔루션에 프로젝트가 1개만 포함되어있는데, 어떻게 설정하는지 알고 싶습니다. 포함되어있는 프로젝트들은 아래와 같습니다. 없어서는 안될 구성요소들인 것 같은데 강사님의 솔루션은 어떻게 저렇게 깔끔하게 세팅할 수 있는지 궁금합니다. 감사합니다.
강의 잘 따라오다 특정 지점부터 갑자기 이렇게 지속적으로 뜹니다. Execution failed for task ':app:kaptGenerateStubsDebugKotlin'. > 'compileDebugJavaWithJavac' task (current target is 9) and 'kaptGenerateStubsDebugKotlin' task (current target is 17) jvm target compatibility should be set to the same Java version. Consider using JVM toolchain: https://kotl.in/gradle/jvm/toolchain * Try: > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. * Exception is: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:kaptGenerateStubsDebugKotlin'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1( ExecuteActionsTaskExecuter.java:149 ) at org.gradle.internal.Try$Failure.ifSuccessfulOrElse( Try.java:282 ) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid( ExecuteActionsTaskExecuter.java:147 ) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute( ExecuteActionsTaskExecuter.java:135 ) at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute( FinalizePropertiesTaskExecuter.java:46 ) at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute( ResolveTaskExecutionModeExecuter.java:51 ) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute( SkipTaskWithNoActionsExecuter.java:57 ) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute( SkipOnlyIfTaskExecuter.java:74 ) at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute( CatchExceptionTaskExecuter.java:36 ) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask( EventFiringTaskExecuter.java:77 ) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call( EventFiringTaskExecuter.java:55 ) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call( EventFiringTaskExecuter.java:52 ) 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.api.internal.tasks.execution.EventFiringTaskExecuter.execute( EventFiringTaskExecuter.java:52 ) at org.gradle.execution.plan.LocalTaskNodeExecutor.execute( LocalTaskNodeExecutor.java:42 ) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute( DefaultTaskExecutionGraph.java:338 ) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute( DefaultTaskExecutionGraph.java:325 ) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute( DefaultTaskExecutionGraph.java:318 ) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute( DefaultTaskExecutionGraph.java:304 ) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute( DefaultPlanExecutor.java:463 ) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run( DefaultPlanExecutor.java:380 ) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute( ExecutorPolicy.java:64 ) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run( ManagedExecutorImpl.java:49 ) Caused by: org.gradle.api.GradleException: 'compileDebugJavaWithJavac' task (current target is 9) and 'kaptGenerateStubsDebugKotlin' task (current target is 17) jvm target compatibility should be set to the same Java version. Consider using JVM toolchain: https://kotl.in/gradle/jvm/toolchain at org.jetbrains.kotlin.gradle.tasks.KotlinCompile.validateKotlinAndJavaHasSameTargetCompatibility(Tasks.kt:797) at org.jetbrains.kotlin.gradle.tasks.KotlinCompile.callCompilerAsync$kotlin_gradle_plugin_common(Tasks.kt:722) at org.jetbrains.kotlin.gradle.tasks.KotlinCompile.callCompilerAsync$kotlin_gradle_plugin_common(Tasks.kt:530) at org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile.executeImpl(Tasks.kt:450) at org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile.execute(Tasks.kt:417) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke( NativeMethodAccessorImpl.java:77 ) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:43 ) at org.gradle.internal.reflect.JavaMethod.invoke( JavaMethod.java:125 ) at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute( IncrementalTaskAction.java:45 ) at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute( StandardTaskAction.java:51 ) at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.execute( IncrementalTaskAction.java:26 ) at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute( StandardTaskAction.java:29 ) at org.gradle.api.internal.tasks.execution.TaskExecution$3.run( TaskExecution.java:242 ) at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute( DefaultBuildOperationRunner.java:29 ) at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute( DefaultBuildOperationRunner.java:26 ) 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.run ( DefaultBuildOperationRunner.java:47 ) at org.gradle.internal.operations.DefaultBuildOperationExecutor.run ( DefaultBuildOperationExecutor.java:68 ) at org.gradle.api.internal.tasks.execution.TaskExecution.executeAction( TaskExecution.java:227 ) at org.gradle.api.internal.tasks.execution.TaskExecution.executeActions( TaskExecution.java:210 ) at org.gradle.api.internal.tasks.execution.TaskExecution.executeWithPreviousOutputFiles( TaskExecution.java:193 ) at org.gradle.api.internal.tasks.execution.TaskExecution.execute( TaskExecution.java:166 ) at org.gradle.internal.execution.steps.ExecuteStep.executeInternal( ExecuteStep.java:93 ) at org.gradle.internal.execution.steps.ExecuteStep.access$000( ExecuteStep.java:44 ) at org.gradle.internal.execution.steps.ExecuteStep$1.call( ExecuteStep.java:57 ) at org.gradle.internal.execution.steps.ExecuteStep$1.call( ExecuteStep.java:54 ) 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.internal.execution.steps.ExecuteStep.execute( ExecuteStep.java:54 ) at org.gradle.internal.execution.steps.ExecuteStep.execute( ExecuteStep.java:44 ) at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute( RemovePreviousOutputsStep.java:67 ) at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute( RemovePreviousOutputsStep.java:37 ) at org.gradle.internal.execution.steps.CancelExecutionStep.execute( CancelExecutionStep.java:41 ) at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout( TimeoutStep.java:74 ) at org.gradle.internal.execution.steps.TimeoutStep.execute( TimeoutStep.java:55 ) at org.gradle.internal.execution.steps.CreateOutputsStep.execute( CreateOutputsStep.java:50 ) at org.gradle.internal.execution.steps.CreateOutputsStep.execute( CreateOutputsStep.java:28 ) at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.executeDelegateBroadcastingChanges( CaptureStateAfterExecutionStep.java:100 ) at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute( CaptureStateAfterExecutionStep.java:72 ) at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute( CaptureStateAfterExecutionStep.java:50 ) at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute( ResolveInputChangesStep.java:40 ) at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute( ResolveInputChangesStep.java:29 ) at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache( BuildCacheStep.java:166 ) at org.gradle.internal.execution.steps.BuildCacheStep.lambda$execute$1( BuildCacheStep.java:70 ) at org.gradle.internal.Either$Right.fold( Either.java:175 ) at org.gradle.internal.execution.caching.CachingState.fold( CachingState.java:59 ) at org.gradle.internal.execution.steps.BuildCacheStep.execute( BuildCacheStep.java:68 ) at org.gradle.internal.execution.steps.BuildCacheStep.execute( BuildCacheStep.java:46 ) at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute( StoreExecutionStateStep.java:36 ) at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute( StoreExecutionStateStep.java:25 ) at org.gradle.internal.execution.steps.RecordOutputsStep.execute( RecordOutputsStep.java:36 ) at org.gradle.internal.execution.steps.RecordOutputsStep.execute( RecordOutputsStep.java:22 ) at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause( SkipUpToDateStep.java:91 ) at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$2( SkipUpToDateStep.java:55 ) at org.gradle.internal.execution.steps.SkipUpToDateStep.execute( SkipUpToDateStep.java:55 ) at org.gradle.internal.execution.steps.SkipUpToDateStep.execute( SkipUpToDateStep.java:37 ) at org.gradle.internal.execution.steps.ResolveChangesStep.execute( ResolveChangesStep.java:65 ) at org.gradle.internal.execution.steps.ResolveChangesStep.execute( ResolveChangesStep.java:36 ) at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute( MarkSnapshottingInputsFinishedStep.java:37 ) at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute( MarkSnapshottingInputsFinishedStep.java:27 ) at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute( ResolveCachingStateStep.java:76 ) at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute( ResolveCachingStateStep.java:37 ) at org.gradle.internal.execution.steps.ValidateStep.execute( ValidateStep.java:94 ) at org.gradle.internal.execution.steps.ValidateStep.execute( ValidateStep.java:49 ) at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute( CaptureStateBeforeExecutionStep.java:71 ) at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute( CaptureStateBeforeExecutionStep.java:45 ) at org.gradle.internal.execution.steps.SkipEmptyWorkStep.executeWithNonEmptySources( SkipEmptyWorkStep.java:177 ) at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute( SkipEmptyWorkStep.java:81 ) at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute( SkipEmptyWorkStep.java:53 ) at org.gradle.internal.execution.steps.RemoveUntrackedExecutionStateStep.execute( RemoveUntrackedExecutionStateStep.java:32 ) at org.gradle.internal.execution.steps.RemoveUntrackedExecutionStateStep.execute( RemoveUntrackedExecutionStateStep.java:21 ) at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute( MarkSnapshottingInputsStartedStep.java:38 ) at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute( LoadPreviousExecutionStateStep.java:36 ) at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute( LoadPreviousExecutionStateStep.java:23 ) at org.gradle.internal.execution.steps.CleanupStaleOutputsStep.execute( CleanupStaleOutputsStep.java:75 ) at org.gradle.internal.execution.steps.CleanupStaleOutputsStep.execute( CleanupStaleOutputsStep.java:41 ) at org.gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0( AssignWorkspaceStep.java:32 ) at org.gradle.api.internal.tasks.execution.TaskExecution$4.withWorkspace( TaskExecution.java:287 ) at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute( AssignWorkspaceStep.java:30 ) at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute( AssignWorkspaceStep.java:21 ) at org.gradle.internal.execution.steps.IdentityCacheStep.execute( IdentityCacheStep.java:37 ) at org.gradle.internal.execution.steps.IdentityCacheStep.execute( IdentityCacheStep.java:27 ) at org.gradle.internal.execution.steps.IdentifyStep.execute( IdentifyStep.java:42 ) at org.gradle.internal.execution.steps.IdentifyStep.execute( IdentifyStep.java:31 ) at org.gradle.internal.execution.impl.DefaultExecutionEngine$1.execute( DefaultExecutionEngine.java:64 ) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid( ExecuteActionsTaskExecuter.java:146 ) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute( ExecuteActionsTaskExecuter.java:135 ) at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute( FinalizePropertiesTaskExecuter.java:46 ) at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute( ResolveTaskExecutionModeExecuter.java:51 ) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute( SkipTaskWithNoActionsExecuter.java:57 ) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute( SkipOnlyIfTaskExecuter.java:74 ) at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute( CatchExceptionTaskExecuter.java:36 ) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask( EventFiringTaskExecuter.java:77 ) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call( EventFiringTaskExecuter.java:55 ) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call( EventFiringTaskExecuter.java:52 ) 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.api.internal.tasks.execution.EventFiringTaskExecuter.execute( EventFiringTaskExecuter.java:52 ) at org.gradle.execution.plan.LocalTaskNodeExecutor.execute( LocalTaskNodeExecutor.java:42 ) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute( DefaultTaskExecutionGraph.java:338 ) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute( DefaultTaskExecutionGraph.java:325 ) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute( DefaultTaskExecutionGraph.java:318 ) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute( DefaultTaskExecutionGraph.java:304 ) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute( DefaultPlanExecutor.java:463 ) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run( DefaultPlanExecutor.java:380 ) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute( ExecutorPolicy.java:64 ) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run( ManagedExecutorImpl.java:49 )
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 이해한 내용 HTML 엔티티에 해당하는 html entity(<, >) 문자열을 입력했을때, escape(<, &rt) 문자로 변환된다. Thymeleaf 라이브러리에서 th:text, [[...]] 를 파싱할때는 escape 문자로 변환, th:utext, [(...)] 를 파싱할때는 < 를 문자열 그대로 입력 . 위의 내용대로 이해하였습니다! 제대로 이해한게 맞다면 어떤 시점에서 이뤄지는것인지 궁금합니다. 궁금한 점 어떤 시점에서 escape 문자로 변환 혹은 문자열 입력이 되는것인지 궁금합니다. escape 문자로 변환 혹은 문자열 그대로 입력이 되는 시점이 SSR(서버사이드 렌더링)과정에서 이뤄지는것이 맞는지 궁금합니다!
선생님 안녕하세요 질문을 드리기 전에 스프링과 POJO에 대해 많이 찾아보고 고민했는데, 제가 제대로 이해한 게 맞는지 질문드리고 싶습니다. 저는 스프링이 POJO를 지향하는 프레임워크인 이유를 이렇게 이해했습니다. 엄밀히 말하면 DTO, VO처럼 인터페이스를 구현하지 않고 상위 클래스를 상속받지 않는 클래스들이 POJO라고 할 수 있습니다. 그러나 컨트롤러 클래스는 @Controller라는 어노테이션이 필요하기에, 스프링이라는 프레임워크에 종속된 기술이며, 서비스 클래스도 인터페이스(PSA)를 구현하기에 엄밀히는 POJO가 아닙니다. 그렇지만 POJO를 지향하는 이유가 결합도를 낮추고, 응집도를 높여 환경변화를 적게 받고 특정 기술에 종속되지 않기 위한 목적이 있습니다. 비록 컨트롤러 클래스와 서비스 클래스는 POJO라고 할 수는 없지만, 최대한 POJO에 가깝게 결합도를 낮추고 응집도를 높여서 재사용성을 높이기 위해 DI, AOP, PSA 를 사용했습니다. 즉, 완전한 POJO를 구현한 프레임워크는 아니지만, POJO를 지향하여 최대한 모듈 간 결합도를 낮추고 응집도를 높이고 재사용성을 높인 프레임워크라고 이해했습니다. 혹시 제가 제대로 이해했는지 봐주시면 감사하겠습니다.
동일하게 코드를 작성해보았는데 fetchPosts 함수가 2번 실행되어 포스트 리스트에 데이터가 2번 중복으로 들어갑니다. 강의에서도 19분 12초를 보니 2번 호출이 되는 것으로 보입니다. useEffect(() => { dispatch(fetchPosts()); }, [dispatch]); 이 부분이 2번 실행되는 문제 같아서 버튼 클릭할 때 fetchPosts 함수를 dispatch하는 방식으로 바꾸었더니 데이터가 1번만 요청됩니다. const handleClick = () => { dispatch(fetchPosts()); }; useEffect를 사용해서 페이지 접속 시 자동으로 데이터가 1번만 호출되게 하고 싶은데 어떻게 수정해야 할까요? useEffect(() => { dispatch(fetchPosts()); }, []); 이렇게 수정해도 2번 실행됩니다..ㅠㅠ
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 질문은 아니지만 해결방법이 안 올라온 것 같아 올립니다. 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 강의 초반에 Member 클래스를 만들고 DB연결, 테이블 생성까지 했는데 메인메서드를 실행하면 NoSuchMethodError 오류가 나는 경우가 있습니다. 커뮤니티 게시판을 찾아봤는데 질문은 있고 답변은 없는 것 같아 해결방법 공유합니다. 저같은 경우는 h2버전과 스프링 부트 버전이 맞지 않아 그런 줄 알고 h2와 스프링 부트 버전을 달리해가며 설정해봤는데 알고보니 hibernate 버전 충돌 문제인 것 같습니다. pom.xml파일에서 <!-- JPA 하이버네이트 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version> 5.6.15.Final </version> </dependency> 로 하이버네이트 의존성 설정을 해주면 인텔리제이가 자동으로 하이버네이트 라이브러리를 다운받는데 이때 hibernate-commons-annotations의 버전과 hibernate-core의 버전이 호환되지 않는 경우가 있는 것 같습니다. 저는 처음에 hibernate-commons-annotations 버전이 5.0.4, hibernate-core가 5.6.15 final로 되어있었는데 의존성 설정 갱신 이후 hibernate-commons-annotations 버전이 5.1.2 final로 바뀌며 정상 실행 됐습니다. 인텔리제이가 충돌하는 라이브러리를 다운받기도 하는 것 같습니다.
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세용 현재 23.6월 기준 플러터 다운받으려고 하는데 강의 영상과 플러터 홈페이지가 좀 달라서 질문드립니다. 강의영상 녹화 당시에는 깃으로 플러터 SDK 다운받는 코드(커맨드)가 있었는데 현재기준은 없네요ㅠㅠ 현재 깃까지 다운받은 상태입니다..! 코드팩토리 디스코드 https://bit.ly/3HzRzUM Flutter 강의를 구매하시면 코드팩토리 디스코드 서버 플러터 프리미엄 채널에 들어오실 수 있습니다! 디스코드 서버에 들어오시고 저에게 메세지로 강의를 구매하신 이메일을 보내주시면 프리미엄 채널에 등록해드려요! 프리미엄 채널에 들어오시면 모든 질의응답 최우선으로 답변해드립니다!
강사님 안녕하세요. 비전공자로 Tensorflow 강의를 수강하고 있습니다. 수업 너무 재미있습니다 감사합니다. Category1.기본 모델 만들기에서 본래 모델링 model = Sequential([ Dense(3, input_shape[1]), Dense(4), Dense(4), Dense(1), ])은 이해가 되는데 이걸 간단하게 model = Sequential([ Dense(1, input_shape=[1]), ]) 로 알려주신 것은 이해가 되지 않습니다. 본래 모델링에서 어떤 과정의 요약이 있었는지 설명 부탁드리겠습니다. 아니면 1번 문제는 그냥 간단한 모델링 방법을 외우면 되는 건지 알고 싶습니다.