• 데이터베이스와 ORM
JPA : 자바에서 RDBMS를 사용하는 방식을 정의해둔 인터페이스
하이버네이트 : JPA의 구현체인 ORM 프레임워크, 하이버네이트를 이용하면 DB 종류에 상관없이 자유롭게 사용가능하다
엔티티 : db 테이블과 매핑되는 객체, db 테이블과 직접 연결되기에 일반객체와 구분되게 엔티티라 한다
엔티티 매니저 : 엔티티를 관리해 db와 어플리케이션 사이에서 crud를 한다
엔티티 팩토리 : 엔티티 매니저를 생성하는 곳
스프링 부트에서는 직접 엔티티 매니저 팩토리를 만들지 않고 내부에 하나의 엔티티 매니저 팩토리를 두고
@PersistenceContext나 @Autowired를 사용해서 엔티티 매니저를 사용한다
• 영속성 컨텍스트
영속성 컨텍스트는 엔티티를 관리하는 가상의 공간이다
1차 캐시, 쓰기 지연, 변경 감지, 지연 로딩의 특징이 있다
1차 캐시 : 엔티티를 조회하면 1차 캐시내에서 조회하고 반환하고, 1차 캐시에 없으면 db에서 조회해 1차 캐시에 저장하고 반환한다, 캐시된 데이터는 db를 거치지 않고 반환되기에 빠르게 데이터를 조회할 수 있다
쓰기 지연 : 트랜잭션을 커밋 하기 전까지는 쿼리를 모았다가 한번에 실행한다
변경 감지 : 트랜잭션을 커밋하면 1차 캐시에 있는 값과 현재 값을 비교해서 변경된 점을 db에 반영한다
지연 로딩 : 쿼리를 바로바로 날리는 것이 아니라 필요할떄 쿼리를 날린다
• 엔티티의 상태
엔티티는 분리, 관리, 비영속, 삭제 4가지 상태로 나누어진다
• 스프링 데이터 JPA 메서드 사용해보기
@Service
public class MemberService {
final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
public void test() {
memberRepository.save(new Member(1L, "A"));
Optional<Member> member = memberRepository.findById(1L);
List<Member> allMembers = memberRepository.findAll();
memberRepository.deleteById(1L);
}
}
• 기존 코드 어노테이션 해체분석기
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Getter
@Entity
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", updatable = false)
private Long id;
@Column(name = "name", nullable = false)
private String name;
}
@Entity <- Member 객체를 JPA가 관리하는 엔티티가 되게 하고 Member 클래스를 테이블에 매핑시킨다
@NoArgsConstructor <- 기본 생성자, 엔티티는 반드시 public이나 protect 생성자가 있어야 한다
@ID, @GeneratedValuue <- primary key id auto_increment(1,1)의 기능
'스프링 부트 3으로 백엔드 입문하기' 카테고리의 다른 글
6장 API 만들기 (0) | 2023.11.23 |
---|---|
4장 스프링 부트 3 테스트 (1) | 2023.11.22 |
3장 스프링 부트 3 구조 이해하기 (1) | 2023.11.21 |
2장 스프링 부트 3 시작하기 (0) | 2023.11.21 |
1장 스프링 기초 지식 (0) | 2023.11.21 |