1. 만드는 중에 @Transactional을 안걸었더니.
너 entitymanager 쓰는데 왜 transaction안해?? 하고 스프링이 에러 뿜뿜.
엔티티매니저와 트랜잭션은 정확히 어떤 관계인가...
스프링 data JPA를 쓰면. 트랜잭션 관리를 알아서 해주던데 ( 뭐 Modifying이런식으로 추상화해놓긴 하지만. )
으음~~~뭔가 막 확!! 와닿지가 않네.
기본적으로 entityManager는 작업 단위로 생성되고 close되는 걸로 안다.
트랜잭션 단위일수도 있고.. 여러 트랜잭션을 처리할 수 도 있다.
하나의 비지니스 로직의 완성단위 = entityManager의 단위
라고 이해해도 되는걸까!!?!!
2. @PostConstruct
강의 듣던중에 또 새로운 어노테이션 알게되었다.
스프링 빈이 initialized된 후, 실행되도록 보장해준다
초기화실행하고자 하는 메소드 위에 붙이기만 하면 됨!
스프링 빈이 등록 된 후에 실행되기 때문에 - 주입할 빈이 null이 되는 오류를 방지할 수 있다고 한다.
( 왠지 이거 - commandliner랑 역할이 좀 비슷한 것 같은?? )
3. https://www.baeldung.com/running-setup-logic-on-startup-in-spring
<<오오. 참고가 되었다.
스프링은 많은 초기화메서드를 제공한다!!
commandLinerRunner도, @PostContstructor도 그중하나인 것이다.
근데 @PostConstructor가 커맨드라인러너보다 빨리 실행됨.
4. 실행하는 중에 - @Component어노테이션을 안붙였더니. 스프링에서- 그런 애는 스프링빈에 등록되어있지 않아서 주입할수가 없어! 라는 에러가 났었음.
궁금해져서 @Component와 @Bean어노테이션의 차이도 찾아봄.
@Component는 개발자가 관리하는 객체, @Bean은 그 외의 외부 객체들 (이를테면 - PasswordEncoder같이. 내가 만들지 않았지만 활용하는 객체들) 에 붙인다고 한다!
댓글 없음:
댓글 쓰기