자바 & 스프링/JPA / / 2024. 12. 11. 20:38

[JPA] JPA를 사용하는 이유

JPA 란 무엇인가

JPA는 데이터베이스 기술이라기보다, 애플리케이션의 데이터를 객체지향 프로그래밍의 관점으로 지켜보고 다룰 수 있게 해주는 기술이다. 객체지향 프로그래밍의 기본적인 원칙을 지키면서 프로그래밍을 하면 생산성, 품질, 유지보수성 등 많은 장점이 있다.

과거에는 애플리케이션 개발단계에서 프로덕션 코드 보다, SQLJDBC 코드를 작성하는 시간이 더 길었다고한다.

MyBatisJdbcTemplate과 같은 SQL Mapper의 등장으로 이 부분은 많이 개선되었지만, 여전히 유지보수의 관점에서는 문제가 많았다. 

이때 CRUD 작업을 훨씬 간편하고 빠르게 할 수 있게 해준 도구가 JPA이다.

// 1. Create
jpa.persist(member);

// 2. Read
String memberId = "helloId";
Member member = jpa.find(Member.class, memberId);

// 3. 수정 기능
Member member = jpa.find(Member.class, memberId);
member.setName("이름변경");

// 4. 연관된 객체 조회
Member member = jpa.find(Member.class, memberId);
Team team = member.getTeam();

SQL을 직접 다룰 때 생기는 문제점

간단하게, 서비스 애플리케이션이 테이블을 100개 정도 사용한다면 SQL은 수백개가 된다. 이 많은 쿼리문장들을 유지보수하는 것은 쉽지 않다. 데이터베이스에 관련된 요구사항이 바뀌면 SQL 뿐만 아니라 관련된 객체(클래스) 또한 수정되야 한다는 것을 알아야한다.

좋은 코드를 작성하기 위해 고민하는 사람들은 결국 유지보수에 용이한 프로그램을 만들기 위함이다. Agile 개발방법론과 같이 현대의 소프트웨어 개발방법론 또한 빠르게 변화는 SW 요구사항에 최적화되어있다.

 

비즈니스 요구사항을 모델링한 객체를 엔티티라고 하는데, SQL에 모든 것을 의존하는 상황에서는 개발자들이 엔티티를 신뢰할 수 없다. 

따라서 DAO를 열어서 어떤 SQL이 실행되고 어떤 객체들이 함께 조회되는지 확인해야해서 번거롭다.

 

마지막으로, 객체지향 프로그래밍은 추상화, 캡슐화, 정보은닉, 상속, 다형성 등 시스템의 복잡성을 제어할 수 있는 다양한 장치를 제공한다.

객체는 상속이라는 개념을 가지고 있지만 관계형 데이터베이스의 테이블은 상속 개념이 존재하지 않는다.

따라서 객체로 테이블을 모델링 함으로써 어느정도 이 문제점을 해결할 수 있다. 

JPA의 역할

JPA는 현재 자바 진영의 ORM 기술 표준이다. 다음과 같이 Application과 JDBC 사이에서 동작한다.

ORM(Object-Relational Mapping)은 이름 그대로 객체와 관계형 데이터베이스 테이블을 매핑한다는 뜻이다.
ORM 프레임워크는 객체와 테이블을 매핑해서 패러다임 불일치 문제를 개발자 대신 해결해준다. ORM 프레임워크를 사용하면 자바 컬렉션에 저장하듯이 DB에 저장이 가능해진다.

Insert / Read의 예시

결론

가장 큰 장점은 생산성 향상과 객체지향 패러다임에 더 가까운 코드작성이 크다고 생각한다.

이 외에도 아래와 같은 장점들이 있는데, 블로그의 jpa의 시리즈에 잘 녹여내보고자 한다.

  • 데이터베이스에 의존적이지 않은 코드작성
  • 성능 최적화 도구 제공
  • 트랜잭션 관리의 간소화
  • 유지보수성과 확장성 향상

 

 

출처 : 자바 ORM 표준 JPA 프로그래밍 (김영한 저)

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유