✍학습 키워드
JPA?
- 자바 표준 ORM이다.
- ORM은 객체를 매핑하는 것
- MyBatis, iBatis는 SQL Mapper이며 쿼리를 매핑하는 것이다.
- JPA는 인터페이스로서 Hibernate같은 구현체가 존재한다.
- Spring Data의 하위 프로젝트들은 save(), findAll(), findOne() 등을 인터페이스로 갖고 있어 저장소가 교체되어도 기본적인 기능은 변경할게 없다.
- 여러 성능 이슈 해결책들을 준비해놓은 상태이기 때문에 네이티브 쿼리만큼의 성능을 낼 수 있다.
Entity 클래스에서는 절대 Setter 메소드를 만들지 않는다.
- 해당 클래스의 인스턴스 값들이 언제 어디서 변해야 하는지 코드상으로 명확하게 구분할 수 없기 때문이다.
JPA의 영속성 컨텍스트
example.update(requestDto.getTitle(), requestDto.getContent());
⇒ update 기능에서 데이터베이스에 쿼리를 날리는 부분이 없는 이유가 JPA의 영속성 컨텍스트 때문이다.
- 영속성 컨텍스트란? ⇒ 엔티티를 영구 저장하는 환경이다.
- JPA는 엔티티가 영속성 컨텍스트에 포함되어 있냐 아니냐로 갈린다.
- JPA의 엔티티 매니저가 활성화된 상태로 트랜잭션 안에서 DB의 데이터를 가져오면 영속성 컨텍스트가 유지된 상태이다. 트랜잭션이 끝나는 시점에 해당 테이블의 변경분을 반영한다.
- Entity 값만 변경하면 별도로 Update 쿼리를 날릴 필요가 없다. 이를 더티 체킹 이라고 한다.
📝새로 배운 개념
JPA 소개
- 객체지향 언어는 기능과 속성을 한 곳에서 관리하는 기술이다. (추상화, 캡슐화, 정보은닉, 다형성)
- 그러므로 RDBMS와 패러다임이 서로 다른 불일치가 일어난다.
- 그러므로 JPA가 이 중간에서 패러다임을 일치, 즉 개발자는 객체지향적으로 프로그래밍하고, JPA가 관계형 데이터베이스에 맞게 SQL을 대신 생성해서 실행한다. (SQL 종속적인 개발을 하지 않아도 된다.)
domain?
- 도메인이란 게시글, 댓글, 회원, 정산, 결제 등 소프트웨어에 대한 요구사항 혹은 문제영역을 말한다.
- 도메인이라고 불리는 개발 대상을 모든 사람이 동일한 관점에서 이해할 수 있고 공유할 수 있도록 단순화 시킨것이 도메인 모델이다.
- @Entity가 사용된 영역 역시 도메인 모델이라고 할 수 있다.
@Entity
- 테이블과 링크될 클래스임을 나타낸다.
@Id
- 해당 테이블의 PK 필드를 나타낸다.
@GeneratedValue
- PK의 생성 규칙을 나타낸다.
@Column
- 테이블의 칼럼을 나타낸다, 주로 사이즈를 나타낼 때 쓰이거나 한다.
@NoArgsConstructor
- 기본 생성자 자동 추가
Builder 패턴
// 잘못된 예시
public Ex(String c, String d) {
this.c = c;
this.d = d;
} // => 이러면 c, d 위치 바꿔도 문제 찾기 힘들다.
//빌더 예시
Ex.builder()
.c(c)
.d(d)
.build();
@After
- Junit에서 단위 테스트가 끝날 때마다 수행되는 메소드를 지정
- 배포 전 전체 테스트를 수행할 때 데이터 침범을 막기 위해서 사용
- 여러 테스트가 동시에 수행되면 H2에 데이터가 그대로 남아있어 다음 테스트 실행 시 테스트가 실패 할 수 있으므로, deleteAll() 등을 써준다.
JPA Auditing으로 로그 생성하기
- entity에 들어가는 생성시간과 수정시간을 편하게 넣는 용도로 사용된다.
✨느낀 점
- 주요 어노테이션을 클래스에 가깝게 ⇒ 롬복은 필수 어노테이션은 아니므로 JPA 어노테이션을 위로 해준다.
- ibatis나 MyBatis등에서는 Dao라고 부르지만 JPA에선 Repository라고 부른다. (인터페이스로 생성하는 DB Layer 접근자)
- Entity 클래스는 기본 Repository 없이는 제대로 역할을 할 수 없으므로 domain 패키지에서 함께 관리한다. (도메인별로 프로젝트를 분리해야 한다면)
🔗레퍼런스
참고 도서
- [스프링 부트와 AWS로 혼자 구현하는 웹 서비스] - 이동욱 저
728x90
'개발 공부 기록 > 07. TIL' 카테고리의 다른 글
스프링 부트와 AWS로 혼자 구현하는 웹 서비스 TIL - 5장 스프링 시큐리티 (0) | 2023.11.25 |
---|---|
스프링 부트와 AWS로 혼자 구현하는 웹 서비스 TIL - 4장 머스테치 (1) | 2023.11.15 |
스프링 부트와 AWS로 혼자 구현하는 웹 서비스 TIL - 2장 테스트 코드 (1) | 2023.10.31 |
스프링 부트 3로 백엔드 입문하기 TIL - 5장 : ORM (JPA) (0) | 2023.10.24 |
스프링 부트 3로 백엔드 입문하기 TIL - 4장 : 스프링 부트 3와 테스트 (0) | 2023.10.24 |