JPA. 왜 쓰세요?

무지성개발자·2024년 1월 29일
0

JPA

목록 보기
1/12

서론

조금만 찾아봐도 mybatits 보다 JPA를 더 많이 사용한다고 알 수 있다.
많은 사람들이 JPA를 사용하는 이유가 반드시 있을 테니 언젠간 JPA를 나도 공부 해야지 해야지 하고 미뤄두다 어느 기업 과제전형에서 JPA를 반드시 요구사항으로 넣었고 부랴부랴 JPA사용법만 익혀서 과제 제출 후 더 이상 미뤄 둘 수 없다고 생각해 JPA공부과정을 정리해보려고 한다.

JPA는 왜 쓸까?

JPA는 왜 쓸까?

  • 패러다임의 불일치 해결
    • 상속
    • 연관관계
    • 객체 그래프 탐색
    • 비교
  • 불필요한 작업을 줄여줌
  • DB교체 용이

패러다임의 불일치 해결

RDB는 데이터 중심으로 구조화 되어있고 OOP에서 말하는 다향성, 추성화, 상속 관계가 없다 하지만 우린 데이터를 가져와서 객체에 저장하고 다룬다.

불러온 객체를 데이터에 맞춰 사용하고 있는 것인데 데이터 중심의 구조와 객체지향의 패러다임의 불일치를 감수하고 있는 것인데 JPA이는 이런 부분을 해결해준다.

  • 상속

    RDB는 상속이 없으므로 오른쪽과 같은 수퍼타입-서브타입으로 상속을 표현할 수 있지만 데이터이터를 저장한다고 생각하면 각각의 테이블 별로 Insert를 해줘야하지만 JPA를 사용하면 list.add(album)와 같이 컬랙션을 사용하듯 사용할 수 있다.
    하지만 상속보단 조인을 사용한 연관관계를 사용하는 것을 권장한다.

  • 연관관계

// 데이터 중심의 객체
public class Member {
	...
    private Long teamId;
    ...
}

// 객체 지향적인 설계
public class Member {
	...
    private Team team;
    ...
}

RDB는 FK를 통한 join으로 관계를 맺는데 데이터 중심적인 객체를 사용하면 객체에 FK를 포함을 시키켜 어떤 데이터와 연관관계가 있는지 표현하지만, JPA는 객체지향 설계를 사용할 수 있도록 도와주기에 객체에 연관 객체를 담아 설계 할 수 있다.

  • 객체 그래프 탐색
    위 연관관계에서 사용한 것 처럼 데이터 중심적 설계는 team_id는 알 수 있지만 team_name같은 team에 관한 부가 정보를 얻을 수 없다. 하지만 JPA를 사용하면 Member.getTeam()과 같이 Team 객체를 불러 올 수 있다.

  • 비교
    JPA는 영속성 컨텍스트라는 논리적 공간을 사용하는데 영속성 컨텍스트에서 먼저 조회 후 없다면 DB에서 데이터를 가지고와서 영속성 컨텐스트에 저장하고 사용한다. 영속성 컨텍스트에 저장된 객체는 항상 같은 객체를 반환 하므로 동등성이 아닌 동일성이 보장된다.

불필요한 작업을 줄여줌

개발자가 개발하면서 불필요한 작업을 줄여준다라게 와닿지 않는데 예컨데 SQL을 직접 입력하는 시간을 줄여주고, 조회한 데이터의 맵핑하는 등 반복적인 작업을 대신해준다는 뜻이다.

DB교체 용이

JPA를 사용하면 DB에 종속적이지 않아서 DB 종류에 상관없이 일관된 코드를 사용할 수 있다. 이 말은 곧 DB를 변경해도 코드의 변경이 없다는 말이다.

결론

JPA를 사용하면 개발자가 개발에 더 집중 할 수 있도록 도움을 받을 수 있다는 점이 큰 골자인거 같다

profile
no-intelli 개발자 입니다. 그래도 intellij는 씁니다.

0개의 댓글