지금까지 저는 JPA가 Spring(이하 스프링)의 기술이라고 생각했습니닷! 그래서 아.. 스프링 못하니까 JPA는 어림도 없겠지.. 라며 엄두도 못냈었죠..ㅎㅎ 알고보니, JPA는 JAVA의 기술이었습니다!!
Spring에서 사용하는 JPA는 Spring Data JPA인데 우리가 줄여서 JPA라 부르는 것일뿐..!
그럼 JPA가 무엇인지, 어떻게 Database에 객체를 저장할 수 있는지 제가 이해한 것을 함께 나눠보도록 하겠습니다!
JPA란 무엇인가
JPA란 Java Persistence API의 축약어입니다.
자바 Persistence API..? 자바 Persistence하는 API..? Persistence..? 이게 영속성인 것 같은데..
사전을 찾아봤습니다.
아, 영속이라는 말대신 지속이라는 말로 바꾸니 쉽게 와닿습니다. JPA는 자바를 지속시키는 API 라는 것으로 풀어서 의미를 파악했습니다.
그럼 자바가 지속시키고 싶은 것은 무엇일까요? 정답! 바로, 객체입니다! 자바는 객체들이 살아움직이며 프로그램이 만들어지니까요!
다시 말해, JPA는 자바에서 생성한 객체를 프로그램이 종료되어도, 저장하여 없어지지 않도록 도와주는 API 친구입니다!
자바에서 저장할 수 있는 건, JDBC(Java DataBase Connectivity)도 있는데? 그럼 이 친구와 차이점은 뭐지!!?
개발자는 JDBC를 이용해서 저장할 수 있으나, 쿼리를 개발자가 모두 구현해야합니다. 그러나, JPA는 API, 즉 인터페이스이기 때문에 내부적으로 어떻게 동작하는지 모르더라도 개발자가 사용할 수 있다는 점이 다릅니다.(JPA를 이용하게되면, 내부적으로 JDBC를 사용하게 됩니다)
JPA는 어떻게 객체를 저장할까?
JPA는 Interface이기 때문에 구현체가 필요합니다.(JDBC역시 구현체 중 Hikari라는 구현체가 존재합니다.) 구현체의 이름은 Hibernate입니다.
EntityManagerFactory가 EntityManager라는 일꾼객체를 만들면, 이 일꾼객체가 지속하고 싶은 객체(영속화하고 싶은 객체)를 관리하게 됩니다.
객체를 영속화하고 싶다고 JPA에게 알리면, JPA는 EntityManager에게 객체를 EntityContext(영속화 준비 공간)에 넣어두라고 요청합니다.
이렇게 번거로운 과정을 꼭 거쳐야만 할까요?
자바와 database의 지향하는 관점이 다르기 때문에, 번거롭지만 이러한 과정을 거쳐야만 합니다. 저바는 객체지향적이지만, DB는 데이터 중심의 패러다임을 가지고 있습니다.
이러한 차이로 인해, 자바는 상속과 멤버변수로 다른 객체를 가질 수 있는 수직적 계층 구조가 가능하지만, 수평적 구조만 가능한 DB는 단순히 관계를 FK로써 표현할 수 있다는 점까지 다르게 나타날 수 있습니다.
'언어(Language) > JAVA' 카테고리의 다른 글
[JAVA] ISP vs 다형성 (0) | 2024.08.02 |
---|---|
[JAVA] Optional, 사용하는 이유와 메서드 5가지 (5) | 2024.07.25 |
[JAVA] 예외(Exception)는 어디서 처리하는게 좋을까? (0) | 2024.07.24 |
내가 생각하는 SOLID원칙 (0) | 2024.07.12 |
[JAVA] 생성자도 상속이 된다는 입장에서 쓰는 글 (0) | 2024.07.04 |