JPA(Java Persistence API)는 무엇인지 알아보자.
JPA는 자바 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음이다. 다시말하면, 실제적으로 구현이 된게 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크이다.
(JPA를 구현하는 대표적인 오픈소스는 Hibernate이다.)
우선 JPA를 알기전에 ORM에 대해서 개념을 잡고 가야한다.
ORM
우리가 일반적으로 알고 있는 애플리케이션 Class와 RDB(Relational DataBase)의 테이블을 매핑한다는 뜻이다.
기술적으로는 애플리케이션의 객체를 RDB 테이블에 자동으로 영속화 해주는 것이다.
(여기서 영속화란, 지속시킨다는 개념이다. 만약 더 알고싶다면 여기를 클릭하길 바란다)
JPA의 장점과 단점
장점
- SQL문이 아닌 메소드를 통해 DB를 조작할수 있어서 개발자는 객체 모델을 이용하여 비즈니스로직을 더욱 집중이 가능하다.
- Query와 같은 선언문, 할당 등의 부수적인 코드가 줄어든다. (코드의 가독성 증가)
- 객체지향적인 코드 작성이 용이해진다. (객체 지향에 집중이 가능)
- 매핑하는 정보가 Class로 명시 되었기 때문에 ERD를 보는 의존도를 낮출 수 있고 유지보수 및 리팩토링에 유리하다.
(리팩토링이란, 코드의 결과값이 변경되지 않았지만 코드의 내용이 변경되는 것을 뜻한다) - DBMS의 의존도가 낮아진다. 만약 MySQL를 사용하다가 PostgreSQL를 사용해야 할때 변경이 쉽다.
단점
- 프로젝트의 규모가 크고 복잡하게 설계가 잘못되면 속도 저하 및 일관성을 무너뜨리는 문제점이 생길 수 있다.
- 자동으로 Query가 생성되다 보니 세세한 작업이 어렵다 (결국 SQL문을 사용하는 경우도 있다.)
정리하자면, JPA(Java Persistence API)는
- Java 진영의 ORM 기술 표준으로 사용하는 인터페이스 모음
- 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
- 인터페이스 이기 때문에 Hibernate, OpenJPA등이 JAP를 구현
하지만 왜? JPA를 사용해야 할까?
JPA는 반복적인 CRUD SQL을 처리해준다. JPA는 매핑된 관계를 이용해서 SQL를 생성하고 실행하는데, 개발자는 어떤 SQL이 실행되었을지 생각만 하면 되고, 예측도 쉽게 가능하다. 추가적으로 JPA는 SQL이란 기능을 제공해주는데 관계 매핑이 어렵거나 성능에 대한 이슈가 우려되는 경우 SQL을 직접 작성하여 사용이 가능하다.
JPA를 사용하여 얻을 수 있는 가장 큰 것은 SQL이 아닌 객체 중심으로 개발이 가능하다는 것이다. 이에 따라 당연히 생산성이 좋아지고 유지보수가 쉬워진다. 또한 JPA는 패러다임의 불잋리도 해결하였다. 예를들면 Java에서는 상속관계가 존재하는데 데이터베이스는 이러한 객체의 상속관계를 지원하지 않는다. 하지만 JPA는 이것을 해결하였다.
마무리
JPA를 공부해보니 아직 멀었다는 생각이 들었다.
배우니까 또 다른것을 배워야 하고 또 다른것을 배워야 한다는 방대한 양에 절망할 때가 많지만,
포기하지 않고 배움의 길을 걸어 갈 것이다.
이 글을 보는 분들도 힘내고 개발자의 길을 걸어갔으면 좋겠다.
---"내가 지쳤다는 것은 노력했다는 증거다."---
'Back-end > spring' 카테고리의 다른 글
[Spring] DI, IoC 정리 (0) | 2022.11.14 |
---|---|
[Spring] Spring Bean의 개념과 Bean Scope의 종류 (0) | 2022.11.14 |
[Spring] Lombok 어노테이션 정리 (1) | 2022.11.14 |
Spring Security와 JWT의 개념 (0) | 2022.09.15 |
Spring 공부 -프롤로그 (0) | 2022.02.09 |