@Controller, @Repository, @Service
@Controller 어노테이션을 붙이면 빈 객체가 되어 서블릿용 컨테이너에 생성된다.
@Repository, @Service어노테이션 역시 빈 객체로 생성된다.
이 때 Controller어노테이션은 각 서블릿이 사용하는 컨테이너에 생성되고,
Repository 및 Service 어노테이션은 모든 어플리케이션에서 사용하는 컨테이너에 생성된다.
@PersistenceContext
EntityManager를 빈으로 주입할 때 사용하는 어노테이션이다.
스프링에서는 영속성 관리를 위해 EntityManager가 존재하고, 스프링 컨테이너가 시작되면 EntityManager를 만들어서 빈으로 등록한다. 이 때 사용하는게 PersistenceContext어노테이션!
persistence context는 엔티티를 영구 저장하는 환경으로, 논리적인 개념이다.
persistence context는 @Id필드를 이용해 엔티티를 식별한다.
Entity Manager로 엔티티를 저장(persist) 조회 등을 수행하면, 엔티티 매니저는 해당 엔티티를 영속성 컨텍스트에 보관하고 관리한다.
자세한 것은 나중에 정리!
@Transactional
EntityManager를 통한 모든 데이터 관리는 Transaction내에서 이루어져야 한다.
(참고) 이 어노테이션이 테스트 코드에 붙어있으면 테스트가 끝나고 자동으로 롤백하기 때문에 DB에 데이터가 추가되어있지 않음