JPA(Java Persistence Api) - 입문

JPA(Java Persistence Api) - 입문

■JPA(Java Persistence Api) 간단 설명!

- 먼저 ORM이 무엇인지 알아야 한다!

ORM(Object-Relational Mapping)은 객체지향적인 db 개발 패러다임, 쉽게 말하면

객체지향적인 db 개발 방법이라고 말할 수 있다.

객체지향 언어의 객체와 관계형 데이터베이스의 데이터 사이에서 나타나는 미묘한 차이와

이로 인한 문제들을 극복하기 위해 등장한 개발 방법이다.

- ORM을 구현한 프레임워크는 상당히 많다.

php 기반의 Laravel, python 기반의 Django, java 기반의 Spring 등

- 여기서는 ORM이라는 개념을 Spring 프레임워크에 맞게 명세된 JPA를 배울것이다.

정확히는 ORM을 java에 맞게 구체화한 JPA,

그리고 그 JPA를 구현한 Hibernate를 배울것이다.

다른 jpa의 구현체로는 OpenJPA, EclipseLink, TopLink Essentials 등이 있다.

(Hibernate가 규모가 가장 큼)

- Hybernate는 엔티티를 중심으로 돌아간다!

■엔티티가 뭘까??

- 엔티티는 테이블과 매핑되는 클래스다!

- 엔티티 작성 방법은 XML 파일에 작성하는 것과 Java 파일에 직접 어노테이션으로 작성하는 것이

있다 .어노테이션을 사용하는 편이 나중에 읽기 편하다고 한다

■Persistence(영속성)가 뭘까??

- 사전적 정의는 엔티티를 영구 저장하는 특징... 인데 와닿지 않는다.

엔티티를 저장하고 관리하는 특징이라고 생각하면 될 듯하다.

■JPA를 사용하고 있는 기업은?

- 배민,쿠팡 등등등

■Hibernate vs Mybatis 사용 현황

- 이미지 출처 : https://trends.google.com/trends/explore?q=mybatis,hibernate

■JPA(Hibernate)의 장점은?? (Mybatis 사용의 단점)

- 코드 안에서 DB데이터를 객체지향적으로 컨트롤 가능

Mybatis : Insert * FROM Member; + 기타 서비스, dto, dao 등등등..

Hibernate : member.findAll();

Mybatis와 같은 Mapper방식은 테이블에 칼럼이 하나 추가된다면

이와 관련된 모든 DAO의 SQL문을 수정해야 한다.

JPA를 사용하게 되면 쿼리를 직접 생성하는 것이 아니고, 만들어진 객체로 데이터베이스를

다루기 때문에 객체 중심으로 개발을 진행할 수 있다.

dto와 비슷한 격인 엔티티를 만들어야 하긴 하지만, dao와 dto,service에

신경써야 하는 것보단 훨씬 간단

- 테이블 명세에 대한 간단한 정보들을 엔티티 클래스를 통해 바로 알 수 있다.

엔티티 자체가 테이블 정보이기 때문!

귀찮게 db 툴 접속해서 보거나 erd 등을 안봐도 될듯

- 각 RDBMS에 대한 의존성 감소

DBMS마다 SQL 문법이 일부 다른 경우가 있는데, 이러한 문법적 차이가 발생하는 부분을

SQL 방언이라고 한다

JPA에서는 엔티티 코드들로 각 RDBMS에 맞게 쿼리를 생성하기 때문에,

RDBMS가 바뀌어도 SQL 방언에 대한 이슈가 없다

■JPA(Hibernate)의 단점은?? (Mybatis 사용의 장점)

- 배우기 귀찮다..

- 제대로 알고 사용하지 않으면 데이터 손실이 나거나 성능에 문제가 생길 수 있다.

■이외의 JPA 특징

- Hibernate가 지원하는 메서드 내부에서는 JDBC API가 동작

단지 개발자가 직접 SQL을 직접 작성하지 않을 뿐

- 복잡한 쿼리는 JPQL 이나 Native Query 로 사용가능

- 테이블이 없으면 엔티티를 기반으로 테이블이 자동으로 생성된다.

또한 엔티티가 수정되면 테이블이 자동으로 수정된다.

■결론

- 이런 장단점을 이해하고 적절한 프로젝트에 JPA를 적용하면 된다!

- Spring에서는 Hibernate와 Mybatis를 혼용해서 사용할 수 있기 때문에

필요에 따라 적절한 방식으로 선택해가면서 사용해도 될 것 같다.

■출처

- https://victorydntmd.tistory.com/195

from http://jithub.tistory.com/4 by ccl(A) rewrite - 2020-03-07 13:22:07

댓글

이 블로그의 인기 게시물

1. 라라벨설치 설정

PHP 라라벨프레임워크 설치하기 in CentOS 7

Remove Laravel bootstrap cache config.php uploaded to AWS