묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
멤버 서비스 통합 테스트 오류 질문
jdbcTemplateMemberRepository 까지 테스트 성공했는데 jpaMemberRepository로 바꾼뒤 테스트하면 오류가 발생합니다. 오류를 읽어봤을 때 핵심이 되는 오류는 javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not prepare statement Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "MEMBER0_.USERNAME" not found; SQL statement: select member0_.id as id1_0_, member0_.username as username2_0_ from member member0_ where member0_.username=? [42122-200] 이것들인 것 같은데 jpa를 아예 몰라서 오류를 해결하기가 어렵습니다. 아래는 전체 오류입니다. 2022-02-28 01:28:31.569 INFO 1303 --- [ main] o.s.t.c.transaction.TransactionContext : Began transaction (1) for test context [DefaultTestContext@1a9c38eb testClass = MemberServiceIntegrationTest, testInstance = hello.hellospring.service.MemberServiceIntegrationTest@78aa1753, testMethod = 회원가입@MemberServiceIntegrationTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@319bc845 testClass = MemberServiceIntegrationTest, locations = '{}', classes = '{class hello.hellospring.HelloSpringApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@a8ef162, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@21d03963, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@33f676f6, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@3576ddc2, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@19b843ba, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@33cb5951], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]]; transaction manager [org.springframework.orm.jpa.JpaTransactionManager@7845ee8a]; rollback [true] Hibernate: select member0_.id as id1_0_, member0_.username as username2_0_ from member member0_ where member0_.username=? 2022-02-28 01:28:31.834 WARN 1303 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 42122, SQLState: 42S22 2022-02-28 01:28:31.834 ERROR 1303 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : Column "MEMBER0_.USERNAME" not found; SQL statement: select member0_.id as id1_0_, member0_.username as username2_0_ from member member0_ where member0_.username=? [42122-200] 2022-02-28 01:28:31.858 INFO 1303 --- [ main] o.s.t.c.transaction.TransactionContext : Rolled back transaction for test: [DefaultTestContext@1a9c38eb testClass = MemberServiceIntegrationTest, testInstance = hello.hellospring.service.MemberServiceIntegrationTest@78aa1753, testMethod = 회원가입@MemberServiceIntegrationTest, testException = javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not prepare statement, mergedContextConfiguration = [WebMergedContextConfiguration@319bc845 testClass = MemberServiceIntegrationTest, locations = '{}', classes = '{class hello.hellospring.HelloSpringApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@a8ef162, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@21d03963, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@33f676f6, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@3576ddc2, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@19b843ba, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@33cb5951], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]] javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not prepare statement at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154) at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1626) at org.hibernate.query.Query.getResultList(Query.java:165) at hello.hellospring.repository.JpaMemberRepository.findByName(JpaMemberRepository.java:33) at hello.hellospring.service.MemberService.validateDuplicatedMember(MemberService.java:27) at hello.hellospring.service.MemberService.join(MemberService.java:21) at hello.hellospring.service.MemberService$$FastClassBySpringCGLIB$$530c61b7.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753) at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698) at hello.hellospring.service.MemberService$$EnhancerBySpringCGLIB$$31a58160.join(<generated>) at hello.hellospring.service.MemberServiceIntegrationTest.회원가입(MemberServiceIntegrationTest.java:30) 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 java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725) at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:214) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:210) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:135) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:66) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53) at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:71) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54) Caused by: org.hibernate.exception.SQLGrammarException: could not prepare statement at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:63) at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:37) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:186) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:151) at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:2122) at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2059) at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2037) at org.hibernate.loader.Loader.doQuery(Loader.java:956) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:357) at org.hibernate.loader.Loader.doList(Loader.java:2868) at org.hibernate.loader.Loader.doList(Loader.java:2850) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2682) at org.hibernate.loader.Loader.list(Loader.java:2677) at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:540) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:400) at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:219) at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1454) at org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1649) at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1617) ... 86 more Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "MEMBER0_.USERNAME" not found; SQL statement: select member0_.id as id1_0_, member0_.username as username2_0_ from member member0_ where member0_.username=? [42122-200] at org.h2.message.DbException.getJdbcSQLException(DbException.java:453) at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) at org.h2.message.DbException.get(DbException.java:205) at org.h2.message.DbException.get(DbException.java:181) at org.h2.expression.ExpressionColumn.getColumnException(ExpressionColumn.java:163) at org.h2.expression.ExpressionColumn.optimize(ExpressionColumn.java:145) at org.h2.expression.Alias.optimize(Alias.java:52) at org.h2.command.dml.Select.prepare(Select.java:1206) at org.h2.command.Parser.prepareCommand(Parser.java:744) at org.h2.engine.Session.prepareLocal(Session.java:657) at org.h2.server.TcpServerThread.process(TcpServerThread.java:278) at org.h2.server.TcpServerThread.run(TcpServerThread.java:183) at java.base/java.lang.Thread.run(Thread.java:834) at org.h2.message.DbException.getJdbcSQLException(DbException.java:453) at org.h2.engine.SessionRemote.done(SessionRemote.java:611) at org.h2.command.CommandRemote.prepare(CommandRemote.java:85) at org.h2.command.CommandRemote.<init>(CommandRemote.java:51) at org.h2.engine.SessionRemote.prepareCommand(SessionRemote.java:481) at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1235) at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:76) at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:352) at com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:337) at com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement(HikariProxyConnection.java) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:149) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:176) ... 102 more
-
미해결Vue.js + TypeScript 완벽 가이드
깃헙 권한 요청드립니다.
안녕하세요. 두번째 프로젝트 깃헙 권한 요청 부탁드립니다. 깃헙 아이디 guruJelly 입니다.
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
python manage.py shell 을 실행시킬때 In[1] 이 나오는 이유는
무엇일까요? 아래는 캡처화면 입니다...
-
미해결8명의 비전공자는 어떻게 개발자로 취업했을까
독학에 대해 문의 드립니다.
안녕하세요 강사님 좋은 강의 제공해주셔서 감사합니다. 현재 제가 있는 상황에 대해 말씀드리자면, 1. 저는 기계공학 전공이며 비전공자 입니다. 그러나 C언어나 매틀랩 등 학과 수업을 들었으며, 전공자에 비할 건 아니지만, 프로그래밍이 어떤 것인지 수박 겉핥기 정도로 알고 있습니다. 2. 경제적인 이유로 인해 현 직장을 그만 두면서 학원을 다닐 여력이 없습니다. 그래서 독학을 생각 중인데, 이에 관련하여 조언을 구 할 수 있을까요? 이상입니다. 감사합니다.
-
미해결HTML+CSS+JS 포트폴리오 실전 퍼블리싱(시즌2)
자바스크립트 getElementById, querySelector 구문 질문있습니다.
자바스크립트 선택자중에서 queryselector, getelementbyid 구문 궁금한게 있는데요 id 선택자는 getelementbyid 를 사용하고 queryselector 는 class 선택자를 사용하는건데 구글링해봐도 둘의 차이점을 정확히 어떤 차이인지는 잘 이해가 안가는데 id 선택자는 getelementbyid, queryselector 는 class 선택자로 무조건 사용하는건가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2979번 트럭 주차 궁금한 것이 있습니다.
https://www.acmicpc.net/source/share/4e97e76bb0dd438fba134d0aada1c531위에서 작성하신 코드에서전역 변수로int A, B, C, a, b, cnt[104], ret; 를 선언하셨습니다. 그런데이러한 변수들을 지역 변수로 선언하면 값이 다르게 나오는데 이유를 모르겠습니다.
-
미해결버전 관리 시스템 Git
토토이즈 깃 녹색, 적색 뱃지가 안 보이는데
git2 - Tortoise Git 4.1. 버전생성 수업을 듣다가, 따라했고 show log 보면 이상이 없는 것 같은데 아이콘에 녹색 적색 뱃지가 보이지 않습니다. 어떻게 해야할까요?
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 기본편
시스템에 부착된 장치가 작동하지 않습니다 오류(?)
웹사이트 열기까지는 실행이 잘 되는데, 그 다음 명령어 browser.find_elements_by_css_selector('a.nav.shop').click() 작동하지 않습니다... ㅠㅠ 터미널을 보면 사진과 같이 시스템에 부착된 장치가 작동하지 않습니다 라는데, 어떻게 해야하나요 ? 유료강의 수강직전 복습중인데 여기서 막혀서 진도가 안나갑니다. 도와주세요!
-
미해결배달앱 클론코딩 [with React Native]
질문있습니다!
안녕하세요. 제로초님 질문1. 리액트네이티브에서는 stylesheet에서는 dip가 가능하다고 하셨는데 styled-components에서는 안되는것 같더라구요 styled-components에서는 dip대신 어떤걸 사용하는 편인가요?...(기기마다 해상도가 다르기 때문에 dip를 사용하는걸로 알고있습니다.) 질문2. absolute와 relative에 대해서 배웠는데요! 만약 position을 아무것도 정해주지 않았을 시 기본값은 무엇으로 되나요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
JPA와 DDD에 대하여 질문 드립니다.
안녕하세요. 공부하는 개발자입니다. 도메인 주도 설계를 바탕으로 설계를 해보려고 하는 도중에 궁금한것이 있어 질문 드립니다. 데이터를 영속화하기 위해 사용하는 ORM Entity를 하나의 도메인으로 바라보고 설계를하니 너무 관계형 데이터베이스 모델링에 의존적인 설계가 되어버리는것 같습니다. 마치 도메인 주도 설계가 아니라 ERD 주도 설계를 하는 느낌이 듭니다. 도메인 주도 설계에서 말하는 Domain과 데이터를 영속화하기 위해 사용하는 ORM(JPA)Entity를 분리하여 ORM Entity는 RDB 의 모델링에 맞게 설계하여 데이터베이스와의 작업을 수행하고, 실제 핵심 비즈니스 로직들은 ORM Entity가 아니라 POJO로 만들 어진 Domain이 수행하는게 좀 더 DDD에 맞는 개발이 아닌가 하는 생각이 듭니다. 영한님의 생각은 어떠한지, 실무에서는 어떤식으로 설계를 하는지 궁금해서 질문 남깁니다. 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
AnnotationConfigApplicationContext implements ApplicationContext 를 해야 할 것 같습니다
BeanFactory <interface> ↓ ApplicationContext <interface> ↓ AnnotationConfigApplicationContext <Class> 위 구조상 AnnotationConfigApplicationContext 이 클래스에서 AnnotationConfigApplicationContext implements ApplicationContext 를 해야할 것 같습니다 AnnotationConfigApplicationContext 의 부모의 부모를 봐도implements ApplicationContext 를 하는 소스가 없습니다 AnnotationConfigApplicationContext 의 부모인 GenericApplicationContex에서 public GenericApplicationContext(@Nullable ApplicationContext parent) { this(); setParent(parent); } 생성자를 통해 ApplicationContext 를 설정하는 부분을 발견했는데요 저희가 배운것 처럼 스프링 내부적으로 Bean 설정을 통해 주입되고 있는건가요? 아니면 왜 implements ApplicationContext 가 없는건가요?
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
수강생 카카오톡 그룹 채팅방은 어떻게 들어가나요?
안녕하세요. 다른이 아니라 수강생 카카오톡 그룹 채팅방 입장 비밀번호는 어디서 알 수가 있는지 궁금합니다.. 혹시 강의 구입후 처음 듣기 시작했을 때 나왔던 모달창에 비밀번호가 작혀 있었을까요?ㅠㅠ 차음 수강 시작 했을 때 모달창이 한개 나왔던거 같은데.... 제대로 확인을 못 해서 질문드리게 되었습니다
-
미해결스프링 핵심 원리 - 고급편
AutoProxyCreator와 BeanFactoryAspectJAdvisorsBuilder의 관계
안녕하세요 영한님 강의 잘 수강하고 있습니다. 8. @Aspect AOP 이 부분에 대해서 공부하고 있습니다. 첫번째 질문 5번째 페이지를 보면, @Aspect 를 찾아서 이것을 Advisor 로 만들어준다. 쉽게 이야기해서 지금까지 학습한 기능에 @Aspect 를 Advisor 로 변환해서 저장하는 기능도 한다. 6번째 페이지를 보면, BeanFactoryAspectJAdvisorsBuilder 클래스이다. @Aspect 의 정보를 기반으로 포인트컷, 어드바이스, 어드바이저를 생성하고 보관하는 것을 담당한다. AutoProxyCreator와 AdvisorBuilder 모두 어드바이저를 생성하는 것처럼 이해가 됩니다. @Aspect를 스캔하고 어드바이저를 생성하는게 둘 중 어느것인가요? 어드바이저 빌더가 @Aspect로 생성된 어드바이저를 관리하는건 이해가 되는데, 어드바이저를 생성하는게 어느것인지 궁금합니다. 2번째 질문 + @Aspect로 생성된 어드바이저는 스프링 빈이 아닌가요? 그림 상에서 스프링 컨테이너 외부에 표현되어 있어서 헷갈립니다
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
input 값에 제한을 거는 방법이 궁금합니다/
# Hangman(행맨) 미니게임 제작(1) # 기본 프로그램 제작 및 테스트 import time # 처음 인사 name = input("What is your name?") print("Hi, " + name, "Time to play hangman game!") print() time.sleep(1) print("Start Loading...") print() time.sleep(0.5) # 정답 단어 word = "butterfly" # 추측 단어 guesses = '' # 기회 turns = 10 # 핵심 While Loop # 찬스 카운트가 남아 있을 경우 while turns > 0: # 실패 횟수(단어 매치 수) failed = 0 print(guesses) # 정답 단어 반복 for char in word: # 정답 단어 내에 추측 문자가 포함되어 있는 경우 if char in guesses: # 추측 단어 출력 print(char, end=' ') else: # 틀린 경우는 대시로 처리 print("_", end=' ') failed += 1 # 단어 추측이 성공 한 경우 if failed == 0: print() print() print('Congratulations! The Guesses is correct.') # While 구문 중단 break print() # 추측 단어 문자 단위 입력 print() guess = input("guess a charater.") # 단어 더하기 guesses += guess # input 자리 수가 word 자리수보다 클 때 에러 발생 try: a = len(guesses) b = len(word) if a < b: print("입력한 값의 자리수가 답의 자리수보다 적습니다") else: raise ValueError except ValueError: print("입력한 값의 자리수가 답의 자리수보다 크므로 에러를 발생시킵니다") else: print("답의 자리 수를 확인하세요") # 정답 단어에 추측한 문자가 포함되어 있지 않으면 if guess not in word: # 기회 횟수 감소 turns -= 1 # 오류 메세지 print("Oops! Wrong") # 남은 기회 출력 print("You have", turns, 'more guesses!') if turns == 0: # 실패 메세지 print("You hangman game failed. Bye!") 기본 학습자료에서 예외처리를 참고하여서 input값의 자리수가 word의 자리수보다 크면 입력을 에러를 띄워 입력을 못하게 하고 싶은데 제가 수정,추가한 코드는 에러로 input값을 강제하지 못하더라구요, 위치가 잘못된건지는 모르겠으나, 일단 코드자체를 제대로 작성하지 못한 것 같습니다. 피드백 가능할까요?
-
미해결스프링 시큐리티
pointcut사용이유
바로 전시간에 배웠던 방법과 매우 흡사하며 배우기 전까지 전시간에는패키지 이름부터 쓰는게 불편해서 그게 바뀌나 했는데 오히려 pointcut쓸때는 더 추가할 내용이 많네요. 제가 보기에는 방법도 흡사하며 기능도 비슷한거 같은데 굳이 더 추가하고 해서 이방법을 사용할 이유는 없는거같은데 혹시 이것만이 가지고 있는장점이나 실무에서도 자주 쓰이는지 여쭤봐도 될까요??
-
미해결스프링 핵심 원리 - 고급편
프록시의 필요성
안녕하세요! 프록시 필요성에 대해 궁금해서 질문 합니다. 보통 아키텍처를 구현할때 client 가 있고 프론트를 거쳐서 백단(서버)쪽 으로 가기전에 프록시서버를 두잖아요? 선생님께서 말씀하신 프록시서버의 장점. 캐시, 접근제어 또는 보안 등등이 이미 '프록시서버'에서 필터링이 되는 부분인데. 굳이 자바단에서 까지 코드를 프록시를 써서 코드를 구현해야할까? 라는 생각이 듭니다. 즉슨, 강의에서 처럼 JDK 동적프록시 또는 CGLIB 과같은 것을 이용하여 프록시를 만들어서 코드 구현을 많이하나요?
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
package 설치가 안돼요...ㅠㅠㅠ
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
antd
안녕하세요 강의랑은 예외질문인 것같지만 antd 에서 아이콘들 때문에 밑에 이미지같은 결과가 나오는 것같은데, 자기가 사용할 아이콘들 다운받아서 static폴더 따로 만들어서 사용 해도 별 문제 없을까요? 아이콘을 따로 받아서 사용할경우 license라든가 렌더 속도문제 같은 부가적인 문제들은 없을까요?
-
미해결유니티(Unity)로 시작하는 게임개발: Part 3. 슈팅게임 개발
part4강의
안녕하세요? 궁금한 사항이 있어서 문의 드립니다 인프런에는 part1, 2, 3강의만 올라와 있는데 part4강의는 어디에서 수강할 수 있나요? 항상 좋은 강의 잘 듣고 있습니다 감사합니다 답변에 미리 감사드립니다 꾸뻑^^
-
미해결엑셀 기초에서 실무까지
찾기 및 선택에서 상수선택하기.
올려주신 실습파일에서 행사금액 열의 금액의 몇개를 지운 후 찾기 및 선택-이동옵션-상수 를 선택하여 숫자가 입력되어있는 셀만 지정하려고 했더니 '해당되는 셀이 없습니다'라는 메세지가 뜹니다. 아마도 행사금액의 값은 수식이기 때문에 그런거 같은데, 이럴 때는 어떤 방법으로 빈셀을 제외하고 나머지 값을 선택할 수 있나요?