안녕하세요! 좋은 강의 공유해주셔서 감사합니다. Part1 에 이어 Part2도 즐겁게 수강하고 있습니다 :) 다름이 아니라 3-2) 서비스탐색 및 코드 분석 강의 하단에 있는 소스코드의 링크가 문구와는 다르게 lecture-4 를 가리키고 있습니다. lecture-3로 변경이 필요할 것 같습니다. clone하고 나서 순간 좀 당황했네요 ㅎㅎ..
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 환경 세팅하고 yarn run client으로 "simple sns" 정상출력 확인 후 목록뷰 구현하기에서 코드 친 후 yarn run client하니 갑자기 빈페이지에 아래 오류가 뜨는데 구글링해도 방법을 잘 모르겠습니다ㅜ
안녕하세요 ! 좋은 강의 만들어 주셔서 너무 재밌게 공부하고 있습니다 ! 상태 (State) 패턴 은 순환구조 (Circular Reference) 로 구성된 것으로 이해 하였습니다. 순환구조를 Code smell 로 표현하는 글들을 몇번 본적이 있습니다. 제가 기억하는 이유는 다음과 같습니다. * 메모리 누수 요인 (순환을 끊지 않는한) * 컴파일(빌드) 시, 순환구조 import 에러 (Java 에서는 정상 동작되는 것이 이상하게 생각 되었습니다) 개인적으로 Parent-Child 를 순환구조로 사용하면, 사용성이 너무 좋게 느껴졌습니다. (특히 탐색을 적게 하니까 더 좋았습니다.) 선생님께서는 순환구조를 어떻게 생각하시는지, 사용해도 되는지 궁금합니다 🙇‍♂️ (혹은 제가 상태 패턴을 순환구조로 잘 못 이해하고 있는걸까요? 🤔) 감사합니다.
이강의에서는 이전강의에서 layout shift 에 대한 처리를 해서 현재는 발생하지 않고있지만, 보통이라면 lazy loading 을 할때 layout shift 가 반드시 따라올것같은데 image lazy loading시에는 선작업으로 무조건 layout shift를 없애주어야하는것일까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 먼저 좋은 강의감사합니다. 질문이있습니다. 보여주신 예제는 전부 동일한 이미지일때인데 각 이미지마다 사이즈가 다른 갤러리에서는 어떻게 적용하면 좋을까요 ? 예를들어 이런 사이트의 형식입니다. https://www.pinterest.com/seanbiehle/finterest/
2022.01.07 기점 수업을 수강 중 강의에서 사용하시는 소스와 현재 소스 차이가 있어 안내드립니다. 기존에 PetRepository가 존재했지만, 01/05 기점으로 PetRepository가 제거된 상태입니다. 당황하지 마시고, 새로 샘플Repository 생성해서 주입하는걸 테스트 진행하면 될 것 같습니다.
10강 리엑트가 없다면 진행하던 도중 pure.html를 추가하여 해당 html을 확인하는 도중 마이크로소프트 엣지에서는 html이 확인되는데, 크롬에서는 확인이 되지 않습니다... 구글링했는데도 원인을 찾지 못해 질문 남깁니다 ㅠㅠ 를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
이번 강의에서 web.ignoring().requestMatchers(PathRequest.toStaticResources().atCommonLocations()); 코드가 존재함에도 static 파일들이 ignore 되지 않는 문제가 발생합니다. 깃 파일과 비교하고, 강의 다시 보며 체크해봤는데도 도무지 원인을 찾지 못하겠습니다. 찾아주시면 정말 감사하겠습니다. 소스는 https://github.com/aittaa/corespringsecurity-authorize 입니다.
여러 질문 답변을 찾아보고 내용을 종합해서 이해해본 결과 엔티티매니저와 영속성컨텍스트에 관해서 제가 현재 이해하고 있는게 맞는지 확인 부탁드립니다 .. 엔티티 매니저 1. 언제 생성되나 엔티티 매니저의 빈 스코프는 request로 설정되어 있다. 스프링이 처음 의존성을 주입하는 단계에서 엔티티 매니저를 의존하는 다른 빈들은 실제 엔티티 매니저가 아닌 가짜 엔티티 매니저(프록시)를 주입 받는다. 고객의 요청이 오고 엔티티 매니저가 관련 로직을 실행해야 하는 시점에 가짜 엔티티 매니저는 해당 트랜잭션과 관련된 실제 엔티티 매니저를 호출해준다. 여러 빈들이 엔티티매니저에 의존하고 있을 때 같은 고객의 요청 안에서는 모두 같은 엔티티매니저를 반환받는다. 2. 몇 개가 생성되나 고객이 요청할 때마다 생성되고 요청이 끝나면 사라진다. 고객의 요청이 동시에 100명이 오면 100개 10000명이 오면 10000개가 생성된다. 3. 영속성 컨텍스트와의 관계 엔티티 매니저가 트랜잭션을 실행하면 영속성 컨텍스트가 생성되고 트랜잭션이 종료되면 영속성 컨텍스트가 사라진다. 4. 궁금한 점 같은 트랜잭션이면 서비스, 리포지토리에서 사용하는 EntityManager가 모두 같은 영속성 컨텍스트에 접근하게 되기 때문에 스프링 환경에서는 엔티티매니저와 영속성 컨텍스트의 관계가 N:1이 될 수 있다고 설명해주셨는데요. 답변 링크 같은 트랜잭션이면 같은 고객의 요청 안에서 이루어지고 있고 그렇다면 서비스, 리포지토리에서 사용하는 엔티티매니저는 모두 동일한 엔티티매니저이기 때문에 1:1 관계가 아닌가요?
강의 7:01 부분의 16번쨰 코드내용에대한 질문입니다! 노드js는 처음이라서 우선 강의따라 흐름만 이해하면서 듣고있습니다! 16번쨰줄의 내용이 서버가 실행될때 forEach로 순회하면서 messagesRoute에서 정의한 메서드들을 실행하는 내용같은데, 작성된 문법이라면 현재 url외의 메서드들도 순회하면서 전부 실행 시키는 중인가요??
추가 학습을 해 보았더니, 클라이언트로 부터 온 요청은 서블릿 필터가 받게 되고, 서블릿 필터가 처리할 수 없는? 요청은 DelegatingFilterProxy 를 통해 스프링 Application Context에 등록된 필터 빈 으로 책임을 위임한다고 나와있는데요. 이때 FilterChainProxy가 서블릿 필터로 부터 DelegatingFilterProxy을 통해 역할을 위임받게 되는건가요? 그렇다면 FilterChainProxy가 위치한 곳은 Spring의 IoC컨테이너일텐데 어떻게 서블릿 컨테이너에 위치한 서블릿 필터가 스프링 컨테이너에 위치한 FilterChainProxy에 필터링 작업을 위임할 수 있게 되는지 궁금합니다.
안녕하세요! 항상 강의 잘 듣고 있습니다. H2 DB Connection시 jdbc:h2:~/test 로 DB생성 및 접속이 되지만 jdbc:h2:tcp://localhost/~/test 로 접속 하려하면 다음 에러가 발생합니다. 1.4.199, 1.4.200 모두 같은 에러가 발생합니다. JPA로 연결 하기 전 순수 H2 디비 접속 시 발생하는 문제점입니다. 일단 아쉬운대로 persistence.xml의 jdbc.url을 <property name ="javax.persistence.jdbc.url" value ="jdbc:h2:~/test" /> 로 바꾸어 그냥 접속을 시도해 보았지만 다른 질문글에서 답변 하셨듯이 file이 locked 되었다고 하고 다른 커넥션을 끊거나 server mode를 활용하라는 에러가 발생합니다.. H2 삭제 후 재설치, test.mv.db 강제로 지우기 다 시도 해보았는데 계속 같은 문제가 발생합니다.. test말고 사용한 적이 없는 다른 db이름을 활용해도 같은 문제가 발생합니다. 복습중이라 과거에는 문제 없이 세팅했던 부분인데 어떤 상관이 있을 까요?? 감사합니다!
=========에러 내용입니다================= 1월 03, 2022 4:40:34 오후 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions ERROR: Connection is broken: "java.net.SocketTimeoutException: connect timed out: localhost" [90067-199] Exception in thread "main" 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:904) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:935) at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:56) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) at hellojpa.JpaMain.main(JpaMain.java:11) Caused by: org.hibernate.exception.JDBCConnectionException: Error calling Driver#connect at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:48) at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113) at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.convertSqlException(BasicConnectionCreator.java:118) at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:41) at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:58) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.addConnections(DriverManagerConnectionProviderImpl.java:363) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.<init>(DriverManagerConnectionProviderImpl.java:282) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.<init>(DriverManagerConnectionProviderImpl.java:260) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections$Builder.build(DriverManagerConnectionProviderImpl.java:401) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildPool(DriverManagerConnectionProviderImpl.java:112) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:75) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:100) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:246) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.java:145) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:66) 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) ... 14 more Caused by: org.h2.jdbc.JdbcSQLNonTransientConnectionException: Connection is broken: "java.net.SocketTimeoutException: connect timed out: localhost" [90067-199] at org.h2.message.DbException.getJdbcSQLException(DbException.java:617) at org.h2.message.DbException.getJdbcSQLException(DbException.java:427) at org.h2.message.DbException.get(DbException.java:194) at org.h2.engine.SessionRemote.connectServer(SessionRemote.java:435) at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:317) at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:169) at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:148) at org.h2.Driver.connect(Driver.java:69) at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:38) ... 29 more Caused by: java.net.SocketTimeoutException: connect timed out at java.base/java.net.PlainSocketImpl.waitForConnect(Native Method) at java.base/java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:107) at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399) at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242) at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224) at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.base/java.net.Socket.connect(Socket.java:608) at org.h2.util.NetUtils.createSocket(NetUtils.java:103) at org.h2.util.NetUtils.createSocket(NetUtils.java:83) at org.h2.engine.SessionRemote.initTransfer(SessionRemote.java:115) at org.h2.engine.SessionRemote.connectServer(SessionRemote.java:431) ... 34 more Process finished with exit code 1 =============================== ===========현재소스입니다=============== package hellojpa ; import javax.persistence.EntityManager ; import javax.persistence.EntityManagerFactory ; import javax.persistence.EntityTransaction ; import javax.persistence.Persistence ; import java.util.List ; public class JpaMain { public static void main (String[] args) { EntityManagerFactory emf = Persistence. createEntityManagerFactory ( "hello" ) ; EntityManager em = emf.createEntityManager() ; EntityTransaction tx = em.getTransaction() ; tx.begin() ; try { // 비영속 Member member = new Member() ; member.setName( "HelloJpa" ) ; member.setId( 101L ) ; // 영속 em.persist 하면 db 에 바로 날아가는 것이 아니라 영속성 컨텍스트안에 영속성으로 된다 // 현재 1 차 캐쉬에 저장되어있다 System. out .println( "=========BEFORE ======" ) ; em.persist(member) ; System. out .println( "========AFTER========" ) ; // 영속성 컨택스트는 한 트랙젝션 단위로 이루어지기에 순간의 찰나에 따라서 변화한다 Member findMember = em.find(Member. class, 101L ) ; tx.commit() ; } catch (Exception e) { tx.rollback() ; } finally { em.close() ; } emf.close() ; } } ============================ ===========메이븐 파일입니다============= <? xml version ="1.0" encoding ="UTF-8" ?> <project xmlns ="http://maven.apache.org/POM/4.0.0" xmlns: xsi ="http://www.w3.org/2001/XMLSchema-instance" xsi :schemaLocation ="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" > <modelVersion> 4.0.0 </modelVersion> <groupId> jpa-basic </groupId> <artifactId> ex1-hello-jpa </artifactId> <version> 1.0.0 </version> <build> <plugins> <plugin> <groupId> org.apache.maven.plugins </groupId> <artifactId> maven-compiler-plugin </artifactId> <configuration> <source> 11 </source> <target> 11 </target> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId> javax.xml.bind </groupId> <artifactId> jaxb-api </artifactId> <version> 2.3.0 </version> </dependency> <!-- JPA 하이버네이트 --> <dependency> <groupId> org.hibernate </groupId> <artifactId> hibernate-entitymanager </artifactId> <version> 5.3.10.Final </version> </dependency> <!-- H2 데이터베이스 --> <dependency> <groupId> com.h2database </groupId> <artifactId> h2 </artifactId> <version> 1.4.199 </version> </dependency> </dependencies> <properties> <maven.compiler.source> 11 </maven.compiler.source> <maven.compiler.target> 11 </maven.compiler.target> </properties> </project> 현재 connect 에러라고 발생하는데 왜 이런지 모르겠습니다. 소스는 동일 한 것같습니다.
안녕하세요! jpa 수업듣고 혼자 공부하다가 궁금한 점이 생겨서 질문 남깁니다. @Repository @Transactional @RequiredArgsConstructor public class ItemRepositoryImpl implements itemRepository{ private final EntityManager em ; @Override public void delete (Long itemId){ // Item item=findOne(itemId); // em.remove(item); em .createQuery( "delete from Item i where i.id = :id" ) .setParameter( "id" , itemId).executeUpdate() ; } @RunWith (SpringRunner. class ) @SpringBootTest @Transactional public class ItemRepositoryTest { @Autowired ItemRepository itemRepository ; @Autowired private EntityManager em ; private User user ; private Item item ; @Test public void delete (){ Long itemId= itemRepository .save( item ) ; System. out .println(itemId) ; itemRepository .delete(itemId) ; // 1) System. out .println( itemRepository .findOne(itemId).getId()) ; Assertions. assertEquals ( null, itemRepository .findOne(itemId)) ; } 테스트코드를 이렇게 작성하는 경우에는 delete가 다시 rollback되고 테스트 코드에서 1) 부분에서 rollback이 되고 itemRepository.findOne(itemId)가 itemId로 나오던데 @Transactional가 잘못 적용된 것인가요? jpql을 사용하는 경우 flush가 일어나서 flush 과정에서 commit이 일어나고 테스트 코드에서는 이 commit때문에 rollback이 일어나는 것 같은데 제가 생각한 것이 맞나요? 만약 제가 생각한 것이 맞다면 테스트 코드 부분에 1)에서 롤백이 일어나서 테스크코드 delete 메소드에서 save(item)부분도 롤백이 되서 itemRepository.delete(itemId)를 한 이후에는 find해도 null이 나와야하는데 그대로 itemId가 나오는 이유가 뭘까요? 주석처리한 것처럼 em.remove를 사용하면 테스트에 성공하는데 그 이유는 뭘까요ㅜㅜ
@CreatedBy나 @LastModifedBy 설정에서 문제가 생기는 것 같습니다. @Entity @Getter @NoArgsConstructor @ToString ( of = { "id" , "name" , "price" }) public class Item extends BaseEntity { @Id @GeneratedValue @Column ( name = "item_id" ) private Long id ; private String name ; private int price ; private String title ; private String filePath ; public Item ( String name , int price ) { this ( name , price , null, null ) ; } public Item ( String name , int price , String title , String filePath ) { this . name = name ; this . price = price ; this . title = title ; this . filePath = filePath ; } } @Profile ( "local" ) @Component @RequiredArgsConstructor public class InitItem { private final InitItemService initItemService ; @PostConstruct public void init () { initItemService .init () ; } @Component @RequiredArgsConstructor static class InitItemService { private final ItemRepository itemRepository ; @Transactional public void init () { for ( int i = 0 ; i < 10 ; i++ ) { itemRepository .save ( new Item ( "cat's tower" + i , ( i + 1 ) * 50 , "Cat's Tower v." + i , "img/catTower" + i + ".jpg" )) ; } } } @EntityListeners ( AuditingEntityListener. class ) @MappedSuperclass @Getter @ToString ( of = { "createdDate" , "lastModifiedDate" }) public class BaseTimeEntity { @CreatedDate @Column ( updatable = false ) private LocalDateTime createdDate ; @LastModifiedDate private LocalDateTime lastModifiedDate ; } @EntityListeners ( AuditingEntityListener. class ) @MappedSuperclass @Getter @ToString ( of = { "createdBy" , "lastModifiedBy" } , callSuper = true ) public class BaseEntity extends BaseTimeEntity { @CreatedBy @Column ( updatable = false ) private LocalDateTime createdBy ; @LastModifiedBy private LocalDateTime lastModifiedBy ; } @SpringBootApplication @EnableJpaAuditing public class ShoppingmallApplication { public static void main ( String [] args ) { SpringApplication. run ( ShoppingmallApplication. class, args ) ; } @Bean public AuditorAware < String > auditorAware () { return () -> Optional. of ( UUID. randomUUID () .toString ()) ; } } public class Item extends BaseTimeEntity를 하면 즉 @CreatedDate, @LastModifiedDate까지는 잘 작동하는데 @Bean을 설정 후 public class Item extends BaseEntity로 바꾸면 Cannot cast java.lang.String to java.time.LocalDateTime 오류가 터져서 검색으로 조금 알아봤더니 , mysql사용시 liquibase-core v.3.10.3에서 발생하는 문제이고 v.4.3.1로 변경하면 된다는 글을 찾았는데 프로젝트 내에서 liquibase는 없고 또, 다른 글에서는 number타입을 String타입으로 형변환 할 때 나타나는 오류라고 하는데 허접한 시도들을 해보았으나, 결국 저 코드에서 어떻게 손대야 될 지 모르겠어서 질문올립니다 :[ 아래는 오류코드 입니다. ㅡㅡㅡㅡㅡㅡㅡ오류코드 시작ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2022-01-02 18:31:31.498 ERROR 6928 --- [ main] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'initItem': Invocation of init method failed; nested exception is java.lang.ClassCastException: Cannot cast java.lang.String to java.time.LocalDateTime at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:160) ~[spring-beans-5.3.14.jar:5.3.14] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:440) ~[spring-beans-5.3.14.jar:5.3.14] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796) ~[spring-beans-5.3.14.jar:5.3.14] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) ~[spring-beans-5.3.14.jar:5.3.14] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.14.jar:5.3.14] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.14.jar:5.3.14] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.14.jar:5.3.14] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.14.jar:5.3.14] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.14.jar:5.3.14] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:953) ~[spring-beans-5.3.14.jar:5.3.14] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.14.jar:5.3.14] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.14.jar:5.3.14] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.6.2.jar:2.6.2] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730) ~[spring-boot-2.6.2.jar:2.6.2] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:412) ~[spring-boot-2.6.2.jar:2.6.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:302) ~[spring-boot-2.6.2.jar:2.6.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301) ~[spring-boot-2.6.2.jar:2.6.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1290) ~[spring-boot-2.6.2.jar:2.6.2] at com.example.shoppingmall.ShoppingmallApplication.main(ShoppingmallApplication.java:17) ~[classes/:na] Caused by: java.lang.ClassCastException: Cannot cast java.lang.String to java.time.LocalDateTime at java.base/java.lang.Class.cast(Class.java:3605) ~[na:na] at com.example.shoppingmall.entity.Item_Accessor_12rl31.setProperty(Unknown Source) ~[classes/:na] at org.springframework.data.mapping.model.InstantiationAwarePropertyAccessor.setProperty(InstantiationAwarePropertyAccessor.java:104) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.mapping.model.SimplePersistentPropertyPathAccessor.setProperty(SimplePersistentPropertyPathAccessor.java:127) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.mapping.model.SimplePersistentPropertyPathAccessor.setProperty(SimplePersistentPropertyPathAccessor.java:171) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.auditing.MappingAuditableBeanWrapperFactory$MappingMetadataAuditableBeanWrapper.lambda$setProperty$0(MappingAuditableBeanWrapperFactory.java:259) ~[spring-data-commons-2.6.0.jar:2.6.0] at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[na:na] at org.springframework.data.auditing.MappingAuditableBeanWrapperFactory$MappingMetadataAuditableBeanWrapper.setProperty(MappingAuditableBeanWrapperFactory.java:259) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.auditing.MappingAuditableBeanWrapperFactory$MappingMetadataAuditableBeanWrapper.setCreatedBy(MappingAuditableBeanWrapperFactory.java:204) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.auditing.AuditingHandlerSupport.touchAuditor(AuditingHandlerSupport.java:169) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.auditing.AuditingHandlerSupport.lambda$touch$0(AuditingHandlerSupport.java:136) ~[spring-data-commons-2.6.0.jar:2.6.0] at java.base/java.util.Optional.map(Optional.java:265) ~[na:na] at org.springframework.data.auditing.AuditingHandlerSupport.touch(AuditingHandlerSupport.java:134) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.auditing.AuditingHandlerSupport.markCreated(AuditingHandlerSupport.java:114) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.auditing.AuditingHandler.markCreated(AuditingHandler.java:92) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.jpa.domain.support.AuditingEntityListener.touchForCreate(AuditingEntityListener.java:92) ~[spring-data-jpa-2.6.0.jar:2.6.0] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.hibernate.jpa.event.internal.ListenerCallback.performCallback(ListenerCallback.java:55) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final] at org.hibernate.jpa.event.internal.CallbackRegistryImpl.callback(CallbackRegistryImpl.java:97) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final] at org.hibernate.jpa.event.internal.CallbackRegistryImpl.preCreate(CallbackRegistryImpl.java:57) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final] at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:108) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final] at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:185) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final] at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:128) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final] at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:55) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final] at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:107) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final] at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:760) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final] at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:746) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:311) ~[spring-orm-5.3.14.jar:5.3.14] at com.sun.proxy.$Proxy121.persist(Unknown Source) ~[na:na] at org.springframework.data.jpa.repository.support.SimpleJpaRepository.save(SimpleJpaRepository.java:624) ~[spring-data-jpa-2.6.0.jar:2.6.0] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:289) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:529) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:285) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:638) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:163) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:138) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) ~[spring-tx-5.3.14.jar:5.3.14] at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) ~[spring-tx-5.3.14.jar:5.3.14] at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-5.3.14.jar:5.3.14] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) ~[spring-tx-5.3.14.jar:5.3.14] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:174) ~[spring-data-jpa-2.6.0.jar:2.6.0] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215) ~[spring-aop-5.3.14.jar:5.3.14] at com.sun.proxy.$Proxy124.save(Unknown Source) ~[na:na] at com.example.shoppingmall.controller.InitItem$InitItemService.init(InitItem.java:34) ~[classes/:na] at com.example.shoppingmall.controller.InitItem$InitItemService$$FastClassBySpringCGLIB$$681abf02.invoke(<generated>) ~[classes/:na] at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.14.jar:5.3.14] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) ~[spring-tx-5.3.14.jar:5.3.14] at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) ~[spring-tx-5.3.14.jar:5.3.14] at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-5.3.14.jar:5.3.14] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698) ~[spring-aop-5.3.14.jar:5.3.14] at com.example.shoppingmall.controller.InitItem$InitItemService$$EnhancerBySpringCGLIB$$a2f07708.init(<generated>) ~[classes/:na] at com.example.shoppingmall.controller.InitItem.init(InitItem.java:22) ~[classes/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389) ~[spring-beans-5.3.14.jar:5.3.14] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333) ~[spring-beans-5.3.14.jar:5.3.14] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157) ~[spring-beans-5.3.14.jar:5.3.14] ... 18 common frames omitted Process finished with exit code 1 ㅡㅡㅡㅡㅡㅡㅡ오류코드 끝ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
강의에서 영속성 컨텍스트에 있는 데이터를 데이터베이스에 보내기 위해 flush하고 그리고 영속성 컨텍스트를 비우기 위해 clear한 후 em.find하여 영속성 컨텍스트가 비워졌으니 데이터베이스에서 값을 가져오는 것은 이해했습니다. 제가 알기로는 em.find가 영속성 컨텍스트에서 찾아보고 없으면 데이터베이스에서 데이터를 가져오는데 그러면 clear하지 않고 영속성 컨텍스트에서 자료 찾아오는 것과 무슨 차이가 있는지 모르겠습니다... 영속성 컨텍스트에도 같은 자료가 있으니 굳이 clear할 필요가 있나 생각이 듭니다. 답변 부탁드립니다.