Spring Data Jpa의 시작(24.05.22)

YJ·2024년 5월 22일
post-thumbnail

블로그 작성법
목표 > 공부한 내용 > 얻었고, 앞으로 이걸 해봐야지 적기

✋ 수업 목표

  • Spring Data Jpa에 대해 상세히 배워보자.

🤔 공부한 내용

복습
1. Repository는 시스템 단위로 나누기

shell? bash?

shell: 조개 껍데기
ex. OS -> shell -> Kernel -> HW
shell -> 어려운 프로그램
(내가 보이지 않는, 어려운 친구들 한테) 명령어를 치는 곳

ex. windows cmd, mac terminal, linux shell, git bash

cf. bash = born again shell

JPA를 Spring이 조금 더 쉽고 편하게 쓸 수 있게 인터페이스화(추상화)

  1. Repository 간결해짐
    1) 메소드화: Member 메소드들을 바꿔주세요.
    2) 추가하고 싶은 메소드도 쉽게 생성

  2. 어노테이션으로 연관 관계

  • Security 맛보기
  • AWS(RDS) 맛보기

Application main 메소드랑 병렬로 기동될 수 있는 방법

= Application main 메소드를 건드리지 않고, 특정 코드를 실행 가능!

  • Repository만 구현하고 싶은데, 어떻게 돌려볼까?
  1. 테스트 코드

  2. Application main 메소드랑 병렬로 기동될 수 있는 방법
    = Application main 메소드를 건드리지 않고, 특정 코드를 실행가능하다.
    1. CommandRunner
    2. ApplicationRunner
    + health check 용도
    스타트업, 벤처, 중소/중견
    3. ApplicationReadyRunner

  • @SpringBootApplication 안에 @ComponenetScan
    : Application 클래스가 있는 패키지의 @Component를 다 찾아주는 기능

Spring Data JPA

JPA(EntityManager를 개발자가 직접 다룸)를
Spring이 조금 더 쉽고 편하게 쓸 수 있는 인터페이스화(추상화)

[JPA가 제공하는 Repository interface 종류]

  • CRUDRepository : 기본 메소드
  • PagingAndSortingRepository: DB 페이징
  • QueryByExampleExecutor
    : DB의 컬럼명(Entity Field)으로 원하는 메소드 커스텀.
    : findBy*** ex. findByEmail(String email)
public interface MemberJPARepository<Member> extends
                                         QueryByExampleExecutor<Member>,
                                         PagingAndSortingRepository<Member, Integer>,
                                         CrudRepository<Member, Integer> {
    
}

CrudRepository, PagingAndSortingRepository, QueryByExampleExecutor

3개를 합친 것이 JPARepository

Application <-> DB

JPA는
Java의 camelCase -> DB의 snake_case로 변환한다.

Optional

컨테이너 객체이다.
이 말은 다른 객체를 감싸준다는 것이다.

왜? NullPointerException -> null 예외 처리이다.

  • get() 꺼내야 객체를 쓸 수 있다.
  • isEmpty(), isPresent()
    / orElseThrow()

만약에 1.8 이전 버전에서는 null check를 어떻게 했을까?
null은 누구의 책임인가부터 생각해보자.

null을 처음 발견한 클래스의 책임인가?
null이 발생할 수 있는 메소드를 호출한 클래스의 책임인가?

ex. findByUserId: repository vs service (vs controller)

패키지 단위로 코드 ( 고도화 & 깃허브(public) & )

: 요구사항 Spring Data JPA

  • API 설계도는 내지 않음

shoppingmall (모든 부가 기능 옵션 ex. paging)

  • Spring Data JPA
  • product (paging 옵션)
    - 상품 개별 등록
    • 상품 개별 조회
    • 상품 전체 조회
    • (상품 개별 삭제)
    • (상품 전체 삭제)
  • order
    - 주문하기
    • 주문 개별 조회
    • 주문 전체 조회
  • member
    - 회원가입
    • 로그인
    • (탈퇴)
  • utils
  • exception

보통 순서: 중요한 순으로 작성
1. product
2. member(order 하기 위해 member가 필요)
3. order

알쓸송잡

😉 앞으로 이걸 해봐야지

오늘은 어제 배웠던, JPA를 Spring Data JPA로 변환하는 과정을 거쳤다. 앞으로는 Spring Data JPA를 사용하여 DB와 상호작용할 것 같다.

profile
dev

0개의 댓글