묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 데이터 JPA
JPA auditing 및 SOFT DELETE
안녕하세요 선생님 오랫만에 질문 올려보니다. JPA 사용할때마다 기억안나는 부분을 다시 항상 찾아보며 공부하고 있습니다. 그런던 중 궁금한게 생겨 질문 드립니다. 1.혹시 선생님은 soft delete 는 어떻게 구현하시는 지 궁금합니다.보통 (State 변수추가,deleteAt 컬럼으로 삭제 날짜 추가,deleted flag 변수 추가) 이 세가지인데 어느 방식을 선호하시는지요? 2 해당 구현은 repository 단에서 deleteById 이렇게 호출되면 엔티티를 조회한되 해당 값들을 업데이트 해주시나요?(@PreRemove 애노테이션을 사용해서나, createdAt 이나 lastModifiedAt처럼 Jpa Auditing을 활용해서 가능한가요?그리고 이렇게 하는게 더 깔끔할까요? 3.현재 Table A 의 생성,변경,삭제내역을 담은 Table History가 있다고 하고 일대다 관계로 아래처럼 되어있다고 하면 class Table A { @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) List<History> history; } 생성시 history.add(new History("생성")) 변경시 history.add(new History("변경")) 삭제시 history.add(new History("삭제")) 이러한 로직들은 생성은 생성자 안에, 변경은 변경을 하는 메서드 안에, 삭제는 soft delete시 수행되는 로직과 함께 두는게 나을까요 아님 @PrePersist @preUpdate 이러한 에노테이션을 붙혀서 Table A 안에 메서드를 만드는게 나을까요?
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
클래스 설계가 먼저일까요? 아니면 데이터 베이스 설계가 먼저일까요?
안녕하세요. 6개월차 신입 개발자입니다. 실무에서 php(코드 이그나이터)로 개발을 하다가 스프링부트를 알게되어서 따로 공부하고 연습하고 있는 상황입니다. 매번 서비스를 개발할때에 요구사항을 먼저 받고 데이터베이스 설계를 마친뒤에 코드를 개발하곤 했었습니다. 6개월간 그렇게 개발을 하다보니까 데이터베이스 관점으로 생각하고 개발을 하고있게 되었습니다. 영한님이 준비해주신 요구사항들과 엔티티설계 데이터베이스 관계 설계를 보고 클래스를 만들고 코드를 짜는데 무리는 없지만. 정작 요구하는 사람들은 백지에서 원하는 기능만 설명하고 구현해달라! 이런식으로 나오니까 제 머리가 백지가 되어서 결국 PHP짜던식으로 디비설계 -> 비즈니스로직짜기 -> 비즈니스 로직에 필요한 디비컬럼이 없으면 넣고 -> 비즈니스 로직 짜기 -> 무한반복 -> 리팩토링 이런식으로 갑니다. 너무 비 효율적이라고 생각하게 됩니다. 이번에 jpa기본부터 spring data jpa 4강의를 수강하고 실무환경에서 바로 쓸수있도록 하나의 서비스를 개발해보자! 라는 마음으로 개발을 하고있었습니다만.. 요구사항을 만들고 그에대한 엔티티 설계에서 부터 막히게 되었습니다. 1. 클래스 엔티티 = 데이터 베이스 엔티티 라고 생각하는게 맞을까요? 2. 데이터베이스를 짜고 그에 맞는 클래스 엔티티를 짜는게 맞을까요? 3. 서비스를 만드실려고 요구사항을 받은 시점에서 데이터 베이스 관점에서 설계를 하고 그 위에 엔티티클래스들을 맞게 설계하고 그뒤에 클래스들을 잘게잘게 쪼개는 형식으로 개발을 해야할까요? 4. 아니면 데이터 베이스 정규화를 먼저하고 그뒤에 엔티티클래스를 만들고 개발하는게 맞을까요? 5. 디비설계 -> 비즈니스로직 -> 없는 컬럼 넣기 -> 비즈니스로직 이런 패턴이 잘못되었을까요? 처음부터 요구한 설계에 맞게 완벽한 설계후 개발을 해야할까요? 6. 데이터베이스 , 엔티티클래스 설계에 참고할만한 서적이나 강의영상이 있으시면 추천 부탁드립니다 . 좋은 강의 감사합니다!
-
미해결실전! 스프링 데이터 JPA
@Query를 활용한 DTO 매핑
안녕하세요 김영한 강사님! "@Query값, DTO조회하기" 편에서 @Query 애노테이션을 활용해서 엔티티를 DTO와 매핑하는 것과 ModelMapper를 통해서 엔티티와 DTO를 매핑하는것과 실질적인 차이가 있는지 궁금해서 질문 드려봅니다 혹시 성능면이나 상황상 이번에 소개해주신 방법이 ModelMapper와 비교했을 때 유리한 점이 있나요? ModelMapper를 다루는 강의는 아니지만 기능이 유사한 것 같아 성능면의 차이가 있을까 해서 여쭤봅니다
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
요구사항 분석에서 ERD 질문드립니다 !!
영상본후 저도 요구사항 분석을 조금 더 체계적으로 해보려고 합니다. 혹시 ERD 그리실때 사용한 어플리케이션이나 툴 알려주실수 있으신가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
혹시 이런 에러가 뜨시는 분들이 계시다면은
Failed to load ApplicationContext java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:125) at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:108) 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:246) 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$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 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.run(ParentRunner.java:363) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190) at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:110) at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58) at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38) at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:62) at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94) at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:118) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182) at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164) at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:412) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56) at java.lang.Thread.run(Thread.java:748) Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1771) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:593) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1105) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:744) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:391) at org.springframework.boot.SpringApplication.run(SpringApplication.java:312) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:121) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:117) ... 49 more Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:275) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:152) at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:179) at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:119) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1215) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1246) at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:391) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:378) at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1830) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1767) ... 64 more Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:100) at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:54) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:137) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:94) at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) ... 81 more 강의 내용과 그대로 타이핑 했는데도 불구하고 이런 에러가 떳다면, H2 데이터베이스를 실행 해 보시고 다시 테스트를 진행 해 보세요 저의 경우 H2 데이터베이스를 실행 하고 테스트를 해보니 에러 없이 성공 했습니다.
-
해결됨실전! 스프링 데이터 JPA
커맨드와 쿼리를 분리하라는 말이 잘 이해가 가질 않습니다.
현재 강의를 단계적으로 쭉듣고 있는데 커맨드와 쿼리를 분리하라는게 잘 이해가 가질 않습니다. 커맨드는 무엇을 얘기하는것인가요? 쿼리는 sql말씀하시는거 맞으신가요? 답변 부탁드립니다!
-
미해결실전! 스프링 데이터 JPA
마지막 부분 이해가 ㅠ,ㅠ
쿼리 메소드 - 벌크성 수정 쿼리 에서 질문이 있습니다!! 글로 적는거 보다 코드 밑에 TODO 통해 적는것이 이해하는게 편할꺼 같아서 이렇게 질문 드립니다! TODO로 남겨드렸습니다! 혹시 글자가 작은가요? ㅠ,ㅠ
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
findOne() -> findById()
안녕하세요. findById().get() 으로 처리하셨는데 실무에서도 이렇게 처리하면 되나요? getors를 쓴다고 하셨는데 이건 무엇인가요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
fetch 조인 일 대 다 관게
안녕하세요 갓영환님 강의 정말 잘듣고있습니다. 정말 좋은 강의 감사합니다! 제 궁금한 부분은 저는 fetch조인이 일 대 다 일때 데이터 뻥튀기가 일어나서 데이터 값이 중복되는 부분입니다. fetch조인의 특성인 연관관계 매핑된 객체를 함께 조회하는 기능 때문이라 생각하고 있는데.. 영한님 자료인 위 표를 예를 들면 Team 컬럼 팀A와 Members 컬렉션이 fetch조인될때 팀A와 연관되는 Member 테이블 로우가2개라서 한번 조인될때마다 fetch조인의 특성으로 Member 테이블에 FK외래키 연결 컬럼 모두 가져와서 팀A관련 정보가 2번 반복되는게 맞나요? 질문에 답변 기다리겠습니다 !
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
cascade와 mappedby의 관계에 대해 여쭤보고 싶습니다.
안녕하세요 제 이해가 짧아 어딘가 맥락을 놓친 것 같습니다만 그 부분을 스스로 찾기가 힘들어서 여쭤봅니다. @OneToMany(mappedBy = "order", cascade = cascadeType.ALL) private List<OrderItem> orderItems = new ArrayList<>(); 예시에 나온 위 소스를 보면 mappedBy가 걸린 곳에 (즉 연관관계의 주인이 아닌 쪽에) cascade가 걸려있습니다. 제가 이해하기론 mappedby는 읽기만 가능한데, cascade를 붙임으로써 arraylist에 들어있던 마치 업데이트도 가능해지는 것 같이 들려서 제가 헷갈리는 부분을 확인차 여쭤보고 싶습니다. mappedby가 쓰기도 가능해지는 건가요? 아니면 제가 어딘가 내용을 오해했나요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
fetch join 할 때 쿼리에 대한 질문드립니다!
n+1 문제가 발생하는걸 위해 페치조인을 사용했는데 select o from Order o join fetch o.member join fetch o.delivery d 이렇게 사용할때 의문이 드는부분이 o.member는 그냥 적어주었는데 o.delivery 에서는 왜 d라고 별칭을 준것인지 궁금합니다 별칭이 있거나 없거나 유무에 따라 차이가 존재하나요?? 혹은 페치조인을 사용할 때 첫번째로 join하는 테이블은 별칭을 사용하지 않고 두번째 테이블부터 별칭 사용이 가능하다거나 하는 제약사항이 있는지 궁금합니다! 결론 : o.member는 별칭이 없고 o.delivery는 왜 별칭이 있는가
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
DTO 질문
안녕하세요 질문이 2가지가 있습니다. 해당 클래스에서만 DTO가 쓰인다면 controller 클래스안에 DTO를 선언해도 되나요? DTO클래스 이름은 DTO를 붙일필요없이 ~request 또는 ~reponse라고 붙여도 될까요?
-
미해결실전! Querydsl
질문 있습니다.
안녕하세요 영한님. private BooleanExpression usernameEq(String userCond); 이 함수를만드셧는데, 이런 함수들은 어느 클래스에서 관리하는게 깔끔할까요??
-
미해결실전! 스프링 데이터 JPA
mappedBy를 사용한 경우
예제 도메인모델과 동작확인 강의에서 보다 질문드립니다. 13분08초쯤에 member 엔티티에 changeTeam부분을 보면, team.getMembers().add(this) 부분이 필요없는 거 아닌가요? 기초강좌에서 mappedBy를 사용하면 엔티티의 주인이 아니라고 배운것 같은데, 굳이 저렇게 추가를 해줘야 하는 이유가 있을까요?
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
default_batch_fetch_size 관련질문
안녕하세요 선생님 최근 default_batch_fetch_size 관련 질문과 비슷한 상황이지만 조금 다릅니다. 현재 A 테이블과 B테이블이 one to many 로 연관관계가 있고 현재 A 테이블 기준으로 쿼리를 날린다음(테이블 B는 페치조인하지 않음) 서비스 단에서 (테이블 B)부분 lazy를 강제 초기화 해주고 있습니다. 제가 batchsize를 다르게 주면서 테스트를 해보았습니다. 1. 쿼리 결과물 : 180개(A 테이블 기준 결과물 갯수) B 테이블의 결과물은 1073개 default_batch_fetch_size=100 in 절에 나가는 batch size= 100, 50, 25, 5 총 4번 비정상 fetch size되로면 2번에 나가야함 2.쿼리 결과물 : 180개(A 테이블 기준 결과물 갯수) B 테이블의 결과물은 1073개 default_batch_fetch_size=80 in 절에 나가는 batch size= 80,80,20 총 3번 정상 3.쿼리 결과물 : 180개(A 테이블 기준 결과물 갯수) B 테이블의 결과물은 1073개 default_batch_fetch_size=500 in 절에 나가는 batch size= 125, 31, 15 ,9 총 4번 비정상 fetch size되로면 1번에 나가야함 4.쿼리 결과물 : 180개(A 테이블 기준 결과물 갯수) B 테이블의 결과물은 1073개 default_batch_fetch_size=180 in 절에 나가는 batch size= 180 총 1번 정상 5.쿼리 결과물 : 30개(A 테이블 기준 결과물 갯수) B 테이블의 결과물은 23개 default_batch_fetch_size=100 in 절에 나가는 batch size= 25, 5 총 2번 비정상 fetch size되로면 1번에 나가야함 6.쿼리 결과물 : 30개(A 테이블 기준 결과물 갯수) B 테이블의 결과물은 23개 default_batch_fetch_size=30 in 절에 나가는 batch size= 30 총 1번 정상 7.쿼리 결과물 : 30개(A 테이블 기준 결과물 갯수) B 테이블의 결과물은 23개 default_batch_fetch_size=20 in 절에 나가는 batch size= 20, 10 총 2번 정상 8.쿼리 결과물 : 30개(A 테이블 기준 결과물 갯수) B 테이블의 결과물은 23개 default_batch_fetch_size=500 in 절에 나가는 batch size= 15, 15 총 2번 비정상 fetch size되로면 1번에 나가야함 혹시 자체적으로 최적화 알고리즘이 적용되면서 이렇게 제각각 나가는건가요? 아니라면 혹시 저 in 절을 만드는 부분을 디버깅을 해볼려면 어떤 클래스를 찾아보면 될까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
오버라이드 단축키
오버라이드 단축키가 어케 되나요?? 구글에서 찾아보니 ctrl+o 하라는데 저런식으로 선택하는?? 화면은 안나오더라구요
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
스테이징 서버가 무엇인가요?
안녕하세요? 강의 듣다가 궁금해져서 질문합니다. 인터넷에서 검색해보니 스테이징 서버가 임시 서버로 해석이 된다고 하더라구요.ㅎㅎ 그러면 스테이징 서버를 만드는게, 실제로 운영하기 직전에 운영서버와 비슷하게 만들어서 테스트? 하는 건가요? 정확하게 잘 몰라서.. 대략 짐작으로 유추해보고 질문 올립니다. 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
RequestDTO ResponseDTO 관리
실무에서 사용할 때 질문입니다. RequestDTO ResponseDTO를 패키지와 클래스를 따로 만들어서 관리하나요? 아니면 보통 컨트롤러에 이너클래스로 만들어서 사용하나요
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
default_batch_fetch_size 옵션
안녕하세요... 테스트 환경에서 <entry key="hibernate.default_batch_fetch_size" value="500" /> 이렇게 했는데 실제로는 15개씩으로 나눠지네요.... version 은 5.2.10 이네요... 본격적으로 플젝 들어가는데... 난감하네요... 강의 예제도 데이터 더 넣고 하면 15개씩만 적용되네요... 뭐가 문제가 있나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
유효성 검사 질문
안녕하세요 강사님 다름이 아니라 기존에 프로젝트에서 spring 프레임워크, jsp, 자바스크립트 + jquery 기반으로 실무에서 웹개발을 했는데 사실상 스프링을 사용하고 있다고 말하기 민망할 정도로 기능을 거의 사용하지 못했었습니다. 그래서 이부분도 새로 공부중입니다ㅠㅠ 강의를 듣다보니 @Vaild나 NotEmpty같은 어노테이션도 알게 되고 BindingResult 같은 클래스 패키지도 알게되면서 뭔가 새로태어나는 기분이 들고 있습니다. 이번 강의 끝에 유효성 검사부분을 배우면서 생각이 드는 것이 저는 보통 유효성 검사를 할 때 자바스크립트 jquery를 사용해서 클라이언트단에서 유효성 검사를 하고 중요한 데이터의 경우 백단에서 DB체크(?)를 한번 더 해주는 식으로 개발했었는데요 스프링+타임리프를 조합하니 클라이언트단에서도 UX조작이 가능한 것 같았습니다. 유효성 검사의 어노테이션들을 적절하게 사용한다면 더이상 클라이언트단에서 자바스크립트를 통해 유효성 검사 부분이 불필요하게 되는 건가 조심스럽게 여쭤봅니다.