inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

연관관계 메소드와 setter

해결됨

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

엔티티에서 Setter 를 사용하지 않아야 변경점을 줄일 수 있어 유지보수 할 때 유리하다고 하셔서 최대한 사용을 자제하려고 하는데요, 연관관계 메소드를 만들 때, setter 를 사용해서 만드셨는데 없이 만들 수 있는 방법이 있을까요? // Order - Delivery 연관관계 메소드 public void setDelivery(Delivery delivery){ this.delivery = delivery; delivery.setOrder(this); // Delivery 의 setter 사용 }

  • java
  • JPA
  • spring
  • 웹앱
  • spring-boot
jaden 댓글 1 좋아요 0 조회수 285

API란

해결됨

[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발

안녕하세요 선생님! 웹 백엔드 개발자를 희망하는 대학생입니다. 선생님의 강의를 들으며 api를 설계하고 있는데 궁금증이 생겼습니다. 이전 까지 학습했던 spring 기반 웹 공부는 사용자의 요청에 따라 SSR를 통해 view를 응답해주는 것으로 알고 있는데 api는 uri와 http 메소드를 통해 json으로 응답해주는 것으로 알고 있습니다. 궁금한 점은 , 프로그래머가 아닌 일반 사용자가 view 에서가 아닌 api를 통해 json 형식으로 회원가입, 조회를 하지 않는거 같은데 api는 언제 쓰이는지 궁금합니다. 단순 개발자의 편의를 위해? 너무 두서가 없네요ㅠㅠ 아직 api의 감이 안잡혀서 그런거같습니다.. 본질적으로 왜 쓰이는지에 대해서 인지를 하고 학습을 하면 더 유용할 것 같습니다. 감사합니다^^

  • api
  • rest-api
  • spring-boot
김상운 댓글 2 좋아요 0 조회수 835

1.Exception 관련, 2. Item에 정의한 메서드

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

1.MemberService에 이 메서드도 Exception에 두어도 될까요? validateDuplicateMember 2.Item에 정의한 재고수량/제거 메서드를 Member와 같이 ItemService를 만들어 여기에 둔다면 조금 어색한 느낌인가요?

  • 웹앱
  • java
  • JPA
  • spring-boot
  • spring
mongsil 댓글 1 좋아요 0 조회수 228

GET에서 던져준 new Form과 POST에서 제출된 Form간의 연관관계가 궁금합니다!

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

안녕하세요. 훌륭한 강의.. 완강하고 공부하던중 문득 의문이 들었습니다. GET에서 던져준 Form과 POST의 Form은 같은 객체일까? 하고 보니 다른 주소값의 객체이더라구요. 혼자 고민을 조금 해보았습니다. 생각해보니 POST에서 넘어온 것은 JSON형태의 데이터를 객체화?? 시켰을 뿐인 것일테니 당연한 결과 이겠더라구요.. 이어서 궁금한것은 GET에서의 Form의 역할 입니다. 그저 어떤 필드가 정의되어 있는지 알려줄 뿐인걸까요?? 그 대상은 타임리프인?? 그렇다면 BookForm.class 나 다른 방법을 통해 알려 줄 수 있을텐데 이런 방법을 택한 이유가 뭘까요?? 메모리 낭비와 코드의 간결함(가독성과 개연성 있는 문맥)을 저울질 했을 때 후자가 훨씬 가치 있는 거라서 그런걸까요??

  • spring-boot
  • spring
  • java
  • JPA
  • 웹앱
박종수 댓글 1 좋아요 1 조회수 246

JWT 관련 라이브러리 추가시 build.gradle 오류

해결됨

Spring Boot JWT Tutorial

build.gradle에 JWT 관련 라이브러리들을 추가한 후 적용하게 되면 다음과 같은 오류가 발생합니다 ㅠㅠㅠ 어떻게 해결할 수 있을까요?? 여기서 진행을 못하고 있습니다 ㅠㅠㅠㅠ build.gradle은 혹시 몰라 github에 올리신 소스코드에서 복사까지 해보았지만 똑같은 문제가 계속 발생하네요 ㅠㅠ error message : A problem occurred evaluating root project 'jwt-tutorial'. > Could not find method compile() for arguments [io.jsonwebtoken:jjwt-api:0.11.2] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler. * Try: Run with --info or --debug option to get more log output. Run with --scan to get full insights. * Exception is: org.gradle.api.GradleScriptException: A problem occurred evaluating root project 'jwt-tutorial'. at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:93) at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.lambda$apply$0(DefaultScriptPluginFactory.java:133) at org.gradle.configuration.ProjectScriptTarget.addConfiguration(ProjectScriptTarget.java:77) at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:136) at org.gradle.configuration.BuildOperationScriptPlugin$1.run(BuildOperationScriptPlugin.java:65) 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$3.execute(DefaultBuildOperationRunner.java:75) at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68) at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56) at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71) at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45) at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71) at org.gradle.configuration.BuildOperationScriptPlugin.lambda$apply$0(BuildOperationScriptPlugin.java:62) at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:43) at org.gradle.configuration.BuildOperationScriptPlugin.apply(BuildOperationScriptPlugin.java:62) at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.lambda$applyToMutableState$0(DefaultProjectStateRegistry.java:250) at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.fromMutableState(DefaultProjectStateRegistry.java:277) at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.applyToMutableState(DefaultProjectStateRegistry.java:249) at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:42) at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:26) at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:35) at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.lambda$run$0(LifecycleProjectEvaluator.java:100) at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.lambda$applyToMutableState$0(DefaultProjectStateRegistry.java:250) at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.lambda$withProjectLock$3(DefaultProjectStateRegistry.java:310) at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:213) at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withProjectLock(DefaultProjectStateRegistry.java:310) at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.fromMutableState(DefaultProjectStateRegistry.java:291) at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.applyToMutableState(DefaultProjectStateRegistry.java:249) at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.run(LifecycleProjectEvaluator.java:91) 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$3.execute(DefaultBuildOperationRunner.java:75) at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68) at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56) at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71) at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45) at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71) at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:63) at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:723) at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:150) at org.gradle.execution.TaskPathProjectEvaluator.configure(TaskPathProjectEvaluator.java:41) at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:67) at org.gradle.configuration.DefaultProjectsPreparer.prepareProjects(DefaultProjectsPreparer.java:46) at org.gradle.configuration.BuildTreePreparingProjectsPreparer.prepareProjects(BuildTreePreparingProjectsPreparer.java:64) at org.gradle.configuration.BuildOperationFiringProjectsPreparer$ConfigureBuild.run(BuildOperationFiringProjectsPreparer.java:52) 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$3.execute(DefaultBuildOperationRunner.java:75) at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68) at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56) at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71) at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45) at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71) at org.gradle.configuration.BuildOperationFiringProjectsPreparer.prepareProjects(BuildOperationFiringProjectsPreparer.java:40) at org.gradle.initialization.DefaultGradleLauncher.prepareProjects(DefaultGradleLauncher.java:226) at org.gradle.initialization.DefaultGradleLauncher.doClassicBuildStages(DefaultGradleLauncher.java:164) at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149) at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:125) at org.gradle.internal.invocation.GradleBuildController$1.create(GradleBuildController.java:71) at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:213) at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:67) at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:56) at org.gradle.tooling.internal.provider.runner.AbstractClientProvidedBuildActionRunner.runClientAction(AbstractClientProvidedBuildActionRunner.java:53) at org.gradle.tooling.internal.provider.runner.ClientProvidedPhasedActionRunner.run(ClientProvidedPhasedActionRunner.java:47) at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35) at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35) at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:66) at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32) at org.gradle.tooling.internal.provider.FileSystemWatchingBuildActionRunner.run(FileSystemWatchingBuildActionRunner.java:90) at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:41) at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:49) at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:44) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195) at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75) at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68) at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62) at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76) at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54) at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76) at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:44) at org.gradle.launcher.exec.InProcessBuildActionExecuter.lambda$execute$0(InProcessBuildActionExecuter.java:59) at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:86) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:58) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:30) at org.gradle.launcher.exec.BuildTreeScopeLifecycleBuildActionExecuter.lambda$execute$0(BuildTreeScopeLifecycleBuildActionExecuter.java:34) at org.gradle.internal.buildtree.BuildTreeState.run(BuildTreeState.java:53) at org.gradle.launcher.exec.BuildTreeScopeLifecycleBuildActionExecuter.execute(BuildTreeScopeLifecycleBuildActionExecuter.java:33) at org.gradle.launcher.exec.BuildTreeScopeLifecycleBuildActionExecuter.execute(BuildTreeScopeLifecycleBuildActionExecuter.java:28) 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:58) at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:42) 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.metaobject.AbstractDynamicObject$CustomMessageMissingMethodException: Could not find method compile() for arguments [io.jsonwebtoken:jjwt-api:0.11.2] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler. at org.gradle.internal.metaobject.AbstractDynamicObject$CustomMissingMethodExecutionFailed.<init>(AbstractDynamicObject.java:190) at org.gradle.internal.metaobject.AbstractDynamicObject.methodMissingException(AbstractDynamicObject.java:184) at org.gradle.internal.metaobject.ConfigureDelegate.invokeMethod(ConfigureDelegate.java:86)

  • spring-boot
  • jwt
아아아가다나타다 댓글 4 좋아요 1 조회수 9403

회원가입 테스트 오류

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

안녕하세요 강사님 항상 좋은 강의와 피드백 감사드립니다 다름이 아니라 이번에 강의 중 '회원가입' 테스트를 그대로 따라 코딩하였으나 실행에 오류가 뜹니다. 관련하여 사진과 오류글을 그대로 올려보니 한 번 확인해주시면 감사하겠습니다! java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:132) at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:124) at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:244) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) at org.junit.runners.ParentRunner.run(ParentRunner.java:413) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:221) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54) Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [jpabook.jpashop.JpashopApplication]; nested exception is org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'memberRepository' for bean class [jpabook.jpashop.repository.MemberRepository] conflicts with existing, non-compatible bean definition of same name and class [jpabook.jpashop.domain.MemberRepository] at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:189) at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:331) at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:247) at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:311) at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:112) at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:771) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:763) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:438) at org.springframework.boot.SpringApplication.run(SpringApplication.java:339) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:123) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) ... 25 more Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'memberRepository' for bean class [jpabook.jpashop.repository.MemberRepository] conflicts with existing, non-compatible bean definition of same name and class [jpabook.jpashop.domain.MemberRepository] at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.checkCandidate(ClassPathBeanDefinitionScanner.java:349) at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:287) at org.springframework.context.annotation.ComponentScanAnnotationParser.parse(ComponentScanAnnotationParser.java:132) at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:296) at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:250) at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:207) at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:175) ... 38 more

  • 웹앱
  • spring-boot
  • java
  • JPA
  • spring
taetae 댓글 2 좋아요 0 조회수 1151

UrlResourcesMapFactoryBean을 FactoryBean인터페이스를 상속해서 만드신 이유가 있나요?

미해결

스프링 시큐리티

저는 FactoryBean인터페이스를 상속하지 않고 @Component로 등록해서, 내부에 resourceMap을 반환하는 메소드를 하나 만들면 된다고 생각했습니다. FactoryBean을 상속받으면 어떠한 장점이 있어서 구현하신건지 궁금합니다

  • java
  • spring-boot
  • Spring Security
E mergency 댓글 1 좋아요 0 조회수 280

로직 배치

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

안녕하세요! 선생님 강의 잘 보고 있습니다. 강의를 보며 MyBatis로 개발된 프로젝트에 JPA를 적용해보고 있는데요. change 라는 메소드를 도메인객체에 작성하신 부분에 질문이 있습니다. 기존 프로젝트에서는 update 나 휴면계정처리 같은 메소드를 모두 dao에 배치했었는데 JPA를 적용하는 과정에서 update, 휴면계정처리 또는 로그인 상태 확인 과 같은 메소드는 어디에 배치하는 것이 좋을지 헷갈리기 시작합니다. 질문이 미시적인데요. 결과적으로 domain, repository, service, controller 에 배치되는 로직의 기준에 대해 팁을 알고 싶습니다. 맞는 말인지는 모르겠지만 예시를 들자면 아래와 같이요. ex) repository에는 DB에 접속이 꼭 필요한 메소드만 작성한다.

  • 웹앱
  • java
  • JPA
  • spring-boot
  • spring
이민준 댓글 1 좋아요 0 조회수 383

windows는 설정을 어떻게 하나요?

미해결

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

과제 진행하면서 windows에서는 file 경로를 못 찾아서 config 설정이 안되는데 어떻게 해야 하나요?

  • spring-cloud
  • JPA
  • architecture
  • spring-boot
  • Kafka
  • msa
kkh 댓글 2 좋아요 1 조회수 630

부트스트랩 적용 후 회색영역이 안 뜰 때 해결방법

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

그 회색 창 html을 보시면 class="jumbotron"으로 되어 있을텐데 부트스트랩4까지 지원해주던 클래스입니다. 부트스트랩5로 올라가면서 빠졌다고 합니다. 현재 부트스트랩 가장 최신 버전이 5.0.1이기 때문에 저처럼 최신 버전 받았다가 엥 왜 얘만 안되지 하시는 분이 있으실까봐 관련 정보를 남깁니다. 부트스트랩 4를 이용하시면 문제 없고 어차피 디자인적인 요소라 크게 신경 안쓰고 넘어가셔도 될 것 같습니다. - 부트스트랩5 점보트론 변경 정보 https://getbootstrap.com/docs/5.0/migration/#jumbotron - 부트스트랩4 다운로드 링크 https://getbootstrap.com/docs/4.6/getting-started/download/ - 다운로드 없이 cdn으로 적용하기 https://www.inflearn.com/questions/151764

  • spring-boot
  • 웹앱
  • java
  • JPA
  • spring
모기물림 댓글 6 좋아요 25 조회수 1062

orderItem LAZY 로딩 질문

미해결

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

안녕하세요. orderItems.stream().forEach(o -> o.getItem().getName()) ; orderItem 반복문 돌 때 getName을 하거나 getprice, getstockQuantity를 넣어도 모든 필드가 로딩이 되는데 왜 그런건지 이해가 잘 안가는데 간단한 설명 부탁드려도 될까요?

  • spring
  • spring-boot
  • JPA
  • java
차가운물 댓글 1 좋아요 0 조회수 364

Starter-Zipkin 의존성 추가 문제 `Cannot resolve starter-zipkin:unkown`

해결됨

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

강사님 안녕하세요. 이번 질문은 다름이 아니라, Zipkin 의존성 추가할 때, Spring-boot 나 Cloud 가 강의 시점에 비해 상위 버전이라는 이유여서 그런지 추가가 되질 않아 이렇게 남기게 되었습니다 그래서 아래와 같이 Maven Repo 에서 starter zipkin 의 최신 버전으로 명시하여 애러는 모면했습니다만... <!-- Zipkin --> < dependency > < groupId > org.springframework.cloud </ groupId > < artifactId > spring-cloud-starter-sleuth </ artifactId > </ dependency > < dependency > < groupId > org.springframework.cloud </ groupId > < artifactId > spring-cloud-starter-zipkin </ artifactId > < version > 2.2.8.RELEASE </ version > </ dependency > 그러나, 이것이 올바른 설정인지 의문이 듭니다 자칫, 충돌이 날것 같은 불안감 있습니다. 혹시 다른 방식으로 starter 를 추가해야 되는지 궁금합니다. 제가 실습을 시작할 당시의 Spring-boot, cloud 버전입니다 < parent > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-parent </ artifactId > < version > 2.4.6 </ version > </ parent > < properties > < java.version > 11 </ java.version > < spring-cloud.version > 2020.0.2 </ spring-cloud.version > </ properties > 읽어주셔서 감사드립니다.

  • Kafka
  • msa
  • architecture
  • spring-cloud
  • spring-boot
  • JPA
Truestar 댓글 1 좋아요 1 조회수 1049

RememberMe 설정 시 문제가 발생합니다...

미해결

스프링 시큐리티

제가 RememberMe 설정 중 문제가 발생하여 해당 부분이 잘 안풀려 강사님께 질문 드립니다. 로그인 한 사용자 정보가 필요하여 AuthenticationProvider 에서 하단 캡쳐화면 처럼 설정을 하였습니다. 그리고 RememberMe 기능을 하단 캡쳐 화면 처럼 설정 하였습니다. 설정 후 rememberMe 기능 사용 시 로그인이 안되는 문제가 발생을 하였습니다. 그래서 디버깅 하여 확인 시 하단 캡쳐 화면과 같이 해당 부분에서 (TokenBasedRememberMeService에서 UserDetails user = getUserDetailsService().loadUserByUsername(username);) 다시 사용자를 다시 조회를 하여, email 파라미터의 값이 객체가 들어와서 로그인이 안되는 문제가 발생 합니다. 제가 RememberMe 기능 과 @AuthenticationPrincipal 어노테이션을 이용해서 Dto의 사용자 정보를 둘 다 사용을 하고 싶은데 이 경우 어떻게 해야하는지 구글링을 봐도 안나와서 강사님께 여쭤봅니다. 좋은 강의 해주셔서 감사합니다.

  • Spring Security
  • spring-boot
  • java
박찬석 댓글 3 좋아요 0 조회수 449

MemberConroller에서 생성자를 통한 의존성 주입시 멤버 변수에 final 키워드를 사용하는 이유에 대한 질문입니다.

해결됨

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

안녕하세요. 김영한 팀장님. ' 컴포넌트 스캔과 자동 의존관계 설정 ' 강의 02:35 쯤 ' MemberConroller ' 클래스의 멤버변수로 ' MemberService ' 타입의 멤버변수를 선언할 때 final 키워드 를 설정한 이유에 대한 질문입니다. Java에서 final 키워드가 붙은 멤버변수는 쉽게 말해 '변할 수 없다.' 라는 의미를 가지게 됩니다. 저는 스프링에서 다루는 Bean은 '특별한 설정 설정(Scope)'이 없는 경우 싱글톤 형태로 스프링 컨테이너에 등록되어 상황에 따라 다른 클래스의 의존 주입 객체로 사용할 수 있는 것으로 이해하고 있습니다. 이러한 이유로 현재 MemberController에서는 Setter 메소드도 선언되지 않았으니 생성자를 통한 의존 주입 이후에는 MemberService 타입의 멤버변수가 변경될 가능성이 없다고 보아 final 키워드를 사용하지 않아도 되지 않을까? 하는 의문이 들었습니다. 그럼에도 불구하고 final 키워드를 사용한 이유가 궁금합니다! 미리 답변 감사드립니다.

  • spring
  • gradle
  • java
  • spring-boot
  • MVC
Henu 댓글 2 좋아요 2 조회수 517

count 변수로 조회된 데이터 숫자를 세는 부분

해결됨

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

안녕하세요, 영한님 강의를 듣다가 궁금한 부분을 질문드립니다! return new Result(collect.size(), collect); static class Result<T>{ private int count; private T data; } -> count값은 강의에서 4 위와 같은 조회 부분에서 Dto 클래스인 Result에 count 변수를 선언하면 collect.size()로 바로 연결이 됨을 볼 수 있었는데, 이는 2개의 파라미터가 순서대로 적용되어 Result라는 객체가 생성되어서 그렇다고 이해하면 되는지 궁금합니다. 너무 기초적인 질문 같은데 초보라서 그렇다고 너그럽게 이해 부탁드립니다. 항상 감사합니다..

  • collect.size()
  • spring-boot
  • count
  • spring
  • 숫자세기
  • java
  • JPA
쿠카이든 댓글 2 좋아요 0 조회수 765

Entity 사용에 대한 질문

해결됨

실전! 스프링 데이터 JPA

안녕하세요. 강사님 먼저 항상 좋은 강의를 해주셔서 감사합니다. 제가 실무에서는 Mybatis만 사용하다, 강사님 강의를 통해서 처음 JPA를 접하고, 개인 프로젝트에서 처음 JPA를 사용하고 있습니다. 강의에서 Entity를 직접 반환을 하면 안된다고 하신걸로 기억을 하는데, API 개발 시 리턴을 할 때만 직접 Entity로만 반환을 하면 안되지는 일반 MVC 형태의 개발을 할 때는 직접 Entity를 반환하는 방식을 실무에서 사용을 하시는지 궁금합니다. 저는 평소 Controller에서 파라미터를 받을 때 @ModelAttribute를 이용해 DTO를 통해 파라미터를 받는 방식을 주로 이용하는데, JPA 사용 시 @ModelAttribute를 이용하여 직접 Entity를 받는 방식은 좋은 방식인지 궁금하여 질문 드립니다. 감사합니다.

  • JPA
  • spring-boot
  • java
  • spring
박찬석 댓글 1 좋아요 0 조회수 283

v2 api의 delivery 쿼리 조회문

해결됨

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

안녕하세요 영한님! 간단한 주문 조회v2 질문이 있습니다. @GetMapping ( "/api/v2/simple-orders" ) public Result ordersV2 () { List<Order> orders = orderService .findAll( new OrderSearch()) ; // 프록시가 들어있는 orde 객체 List<SimpleOrderDto> collect = orders.stream().map(o -> new SimpleOrderDto(o.getId() , o.getMember().getName() , o.getOrderDate() , o.getStatus() , o.getDelivery().getAddress())). collect(Collectors. toList ()) ; return new Result(collect) ; } 위의 v2 api를 실행하면 문제없이 5개의 쿼리문이 나가는 것을 확인했습니다. name을 조회하는 쿼리는 예상했던데로 단순 조회 쿼리인 select member0_.member_id as member_i1_5_0_, member0_.city as city2_5_0_, member0_.street as street3_5_0_, member0_.zipcode as zipcode4_5_0_, member0_.name as name5_5_0_ from member member0_ where member0_.member_id=? 와 같이 나가지만. delivery 엔티티에 접근할때 select delivery0_.delivery_id as delivery1_2_0_, delivery0_.city as city2_2_0_, delivery0_.street as street3_2_0_, delivery0_.zipcode as zipcode4_2_0_, delivery0_.status as status5_2_0_, order1_.orders_id as orders_i1_6_1_, order1_.delivery_id as delivery4_6_1_, order1_.member_id as member_i5_6_1_, order1_.order_date as order_da2_6_1_, order1_.status as status3_6_1_ from delivery delivery0_ left outer join orders order1_ on delivery0_.delivery_id=order1_.delivery_id where delivery0_.delivery_id=? 위와 같이 외부 조인문이 나가는 것을 확인했습니다. 마치 패치조인을 한거 같은 전혀 예상치 못한 쿼리문이여서 질문을 드립니다. 또한 모두 lazy로 설정을 했습니다. 혹시 데이터베이스의 방언차이 때문일까요? mysql 사용중입니다.

  • 쿼리
  • JPA
  • spring-boot
  • java
  • spring
김상운 댓글 4 좋아요 3 조회수 335

401 Unauthorized

미해결

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

postman으롷 127.0.0.1:port로 /login 호출 시에 401에러가 나는데 왜그런걸까요..? login api 호출 시 loadUserByUserName 메서드 타서 user정보 가져오는거까진 디버그로 확인했는데, 해당 값 user로 감싸서 리턴 후에 응답이 저렇게 나오는데 이유를 모르겠네요.. 참고로 permitAll로 진행중입니다

  • msa
  • Kafka
  • JPA
  • architecture
  • spring-cloud
  • spring-boot
살아남자 댓글 6 좋아요 0 조회수 1607

getTotalPrice같은 조회함수가 왜 필요한지 모르겠씀니다=_=

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

totalPrice라는 변수를 만들어서 처음 주문 들어왔을떄 계산해서 넣어두고, 주문 취소라던지 하는 변경이 일어나면 그때 상황에 맞게 업데이트 해주는게 맞는거 아닌가요?? 일반적으로 변경보다는 조회가 빈번하니까 변경되었을때 미리 계산해두고 조회할떄는 가져다 쓰기만 하는게 더 맞지않나 싶어서요=_=

  • 웹앱
  • JPA
  • spring-boot
  • spring
  • java
abcabc 댓글 1 좋아요 0 조회수 356

volume 질문

미해결

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

/var/run/docker.sock:/var/run/docker.sock 라는 의미가 어떤 의미인건가요 ? 중간 중간 Dockerfile에서 /tmp라고만 적으신것도 보이는데 요거에 대해서도 궁금합니다 ㅠㅠ

  • msa
  • Kafka
  • architecture
  • JPA
  • spring-boot
  • spring-cloud
정윤성 댓글 1 좋아요 0 조회수 351

인기 태그

인프런 TOP Writers

주간 인기글