[TIL #5] 항해99 2023.02.10

강민규·2023년 2월 10일
0
post-thumbnail

오늘은 JPA(Java Persistence API)가 무엇인지 알아보려고합니다.

JPA는 자바 진영의 ORM 기술의 표준이라고 할 수 있습니다.

기본적으로 스프링을 입문하게 되서 배우기 위함과 사용에 대한 이유를 꼽자면!

  • 대표적으로 JPA가 제공하는 API를 사용하면 객체를 DB에 저장하고 관리할 때,
    개발자가 직접 반복적이며 복잡한 SQL을 작성하지 않아도 됩니다.

  • JPA가 개발자 대신 그에 맞는 적절한 SQL을 작성해서 DB에 전달하고, 객체를 자동으로 Mapping 해줍니다.

  • JPA는 내부적으로 JDBC API를 사용하는데, 개발자가 직접 JDBC API를 활용하면 패러다임 불일치, SQL 의존성 등등 효율성이 떨어집니다.

🙏결론은 JPA를 활용한다면 개발자에게 SQL로 인한 생산성 저하를 줄여줄 수 있다는말이다.


🤔 근데 ORM은 뭔데?

Object Relational Mapping, 줄여서 ORM 이라고 합니다.

단어뜻처럼 객체관계형 데이터베이스(테이블)의 데이터를 자동으로 매핑(연결) 해주는 것을 말합니다.

  1. 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용합니다.

  2. 객체 모델과 관계형 모델 간에 불일치가 존재합니다.

  3. ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 이에 대한 불일치를 해결해줍니다.

🟢 ORM의 장점

  • 객체 지향적은 코드로 인해 더 직관적이고 비즈니스 로직에 더 집중할 수 있게 도와줍니다.
  • ORM을 사용하면 SQL Query가 아닌 직관적인 코드(메서드)로 데이터를 조작할 수 있어 개발자가 코드에 흐름을 파악하거나, 그로인해 반비례적으로 올라가는 능률이 증가합니다.
  • 선언문, 할당, 종료 같은 부수적인 코드가 없거나 급격히 줄어듭니다.
  • SQL의 절차적이고 순차적인 접근이 아닌 객체 지향적인 접근으로 인해 생산성이 증갑합니다.

☝️ 코드가 간결하며 직관적이다 == 재사용 및 유지보수의 편리성 증가!
✌️객체간의 관계를 바탕으로 SQL문을 자동으로 생성 == DBMS에 대한 중속성 저하!

🔴 ORM의 단점

  • 완벽한 ORM으로만 서비스를 구현하기가 어렵습니다.
  • 사용하기는 매우 편하지만 설계는 매우 신중하고 철저하게 해야합니다.
  • 프로젝트의 규모가 커지거나, 복잡해질 경우 난이도 또한 비례하여 증가합니다.
  • 잘못 구현 or 무분별한 사용이 있을경우 프로그램 내부적으로 속도 저하 및 심각할 경우 일관성이 무너지는 문제점이 발생할 수 있습니다.

🤔 JPA 란?

JPA(Java Persistence API)는 자바 진영의 ORM 기술 표준입니다.

JPA를 사용하려면 JPA를 구현한 ORM 프레임워크를 선택해야하는데, 가장 대중적인건 하이버네이트입니다.

■ JPA의 역할

  • Entity 분석
  • INSERT SQL 생성
  • JDBC API 사용
  • 패러다임 불일치 해결

🟢 JPA의 장점

  • 특정 데이터 베이스에 중속되지 않습니다.
    만약, 다른 데이터 베이스 오라클(Oracle)을 사용하여 개발하다가 오픈소스인 MariaDB로 변경한다면 데이터 베이스마다 쿼리문이 다르기 때문에 전체를 수정해야 합니다.
    하지만 JAP는 추상화한 데이터 접근계층을 제공합니다.
    그로인해 설정 파일에 어떤 데이터베이스를 사용할지만 다시 정의 해준다면 얼마든지 데이터베이스의 형식을 전환할 수 있습니다.

  • 객체지향적(OOP) 프로그래밍
    JPA를 사용하면 데이터베이스 설꼐 중심의 패러다임에서 객체지향적으로 설계가 가능하다. 이를 통해 좀 더 직관적이고 비즈니스 로직에 집중할 수 있도록 도와줍니다.

  • 생산성 향상
    데이터베이스 테이블에 새로운 컬럼이 추가되었을 경우, 해당 테이블의 컬럼을 사용하는 DTO 클래스의 필드도 모두 변경해야 한다. JPA에서는 테이블과 매핑된 클래스에 필드만 추가한다면 쉽게 관리가 가능하다. 또한 SQL문을 직접 작성하지 않고 객체를 사용하여 동작하기 때문에 유지보수 측면에서 좋고 재사용성도 증가한다.

🔴 JPA의 단점

  • 복잡한 쿼리 처리
    통계 처리 같은 복잡한 쿼리를 사용할 경우는 SQL문을 사용하는게 나을 수도 있습니다.
    JPA에서는 Native SQL을 통해 기존의 SQL문을 사용할 수 있지만 그러면 특정 데이터베이스에 중속된다는 단점이 생깁니다.
    이를 보완하기 위해서는 SQL과 유사한 기술인 JPQL을 지원하기도 합니다.

  • 성능 저하 위험
    객체 간의 매핑 설계를 잘못했을 때 성능 저하가 발생할 수 있으며, 자동으로 생성되는쿼리가 많고 제 각기 의존성을 띄기에 개발자가 의도하지 않는 쿼리로 인해 성능이 저하되기도 합니다.

  • 숙련의 시간
    JPA를 적재적소에, 제대로 사용하려면 알아야 할 것이 많아서 학습하고 숙련하는데 오래 걸립니다.

0개의 댓글