<ORM>
Object Relational Mapping
자바의 객체와 데이터베이스를 연결하는 프로그래밍 기법.
SQL을 몰라도 자바 언어로만 데이터베이스에 접근할 수 있음.
<JPA>
Java Persistence API
ORM의 한 종류로 자바에서 표준으로 사용하는 ORM
자바 객체와 데이터베이스를 연결해 데이터를 관리함.
<하이버네이트>
JPA 인터페이스 구현체이자 자바용 ORM 프레임워크
내부적으로는 JDBC API를 사용함
<엔티티>
자바의 객체 중 데이터베이스의 테이블과 매핑되는 객체
<엔티니 매니저>
객체 생성/수정/삭제의 요청이 들어오면 엔티티 매니저 팩토리에서 엔티티 매니저를 생성하고 생성된 엔티티 매니저가 데이터베이스에 연결한 뒤 쿼리한다.
그러나 스프링 부트에서는 엔티티매니저를 Spring Data JPA에서 관리하므로 사용자가 생성하거나 관리할 필요는 없다.
<영속성 컨텍스트>
엔티티 매니저는 엔티티를 영속성 컨텍스트에 저장한다.
1차 캐시, 쓰기 지연, 변경 감지, 지연 로딩이라는 특징이 있다.
-1차 캐시: 캐시가 있어 주요 데이터를 저장해놓음
-쓰기 지연: 트랜잭션을 커밋하기 전까지는 데이터베이스에 쿼리문을 모았다가 커밋하면 한 번에 실행하는 것. db의 부담을 줄인다.
-변경 감지: 값이 변경되면 캐시 업데이트
-지연 로딩: 쿼리를 바로 요청하는 것이 아니라 저장해두었따 필요할 때 쿼리를 날려 데이터를 조회하는 것.
<퍼시스턴스관련 애너테이션들>
// Member.java 클래스파일
@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;
}
1. @Entity
Member 객체를 JPA가 관리하는 엔티티로 지정.
즉, Member 클래스와 실제 데이터베이스의 테이블을 매핑시킴.
위 코드에서는 Entity에 name 파라미터값을 지정하지 않았기 때문에 데이터베이스의 member 테이블과 매핑됨.
@Entity(name = "member_list") <- 이처럼 name 파라미터 값을 지정하면 데이터베이스의 member_list 테이블과 매핑됨.
2.@NoArgsConstructor(access = AccessLevel.PROTECTED)
엔티티의 기본 생성자. 엔티티는 기본 생성자가 반드시 있어야함.
접근제어자를 protected로 설정했음.
3. @Id
Long 타입의 id 필드를 프라이머리키로 지정.
4.@GeneratedValue
기본키 생성 방식을 결정하는 애너테이션. 여기서는 자동으로 기본키가 증가되도록 지정했음.
5.@Column 애너테이션
데이터베이스의 칼럼과 필드(클래스의 변수)를 매핑해줌.
name, nullable, unique 등을 설정 가능 함.
@Repository
public interface MemberRepository extends JpaRepository<Member, Long> {
}
리포지터리를 구현하는 것은 간단함.
위 코드와 같이 @Repository 애너테이션과 함께
스프링 데이터 JPA에서 제공하는 JpaRepository클래스(db에 접근해 crud 작업을 수행하는 메서드를 제공함)를 상속받아 구현하면 됨.
이 때 제네릭스는 구현하는 리포지터리의 엔티티와, 그 엔티티의 프라이머리키의 자료형을 인수로 넣어주면 됨.
'웹개발 > [스프링부트3 백엔드 개발자 되기]' 카테고리의 다른 글
JWT + OAuth2 로그인 클래스, 메서드 요약정리 (0) | 2024.08.11 |
---|---|
[스프링부트3 백엔드 개발자되기] 06장. 블로그 기획 & API 만들기 (1) 글 작성 기능 추가 (2) | 2024.06.25 |
[스프링부트3 백엔드 개발자 되기] 스프링부트3와 테스트 (0) | 2024.06.25 |
[스프링부트3 백엔드 개발자 되기] 03장 스프링부트3 구조 이해하기 (0) | 2024.06.20 |
[스프링부트3 백엔드 개발자 되기] 02장 스프링부트3 시작하기 (0) | 2024.06.11 |