반응형

JPA에서 영속화라는 의미는 뭘까?

팀 사이드 프로젝트를 하던 중 JPA(ORM)을 사용하는 이유에 대해 이야기를 하다가
한 분이 persist, 영속화라는 의미에 대해 고민을 하시고, 이야기를 하게 되었다.

JPA는 왜 Java Persistence Api라는 이름을 지었을까?


Persistence 사전적 의미는 지속되다라는 의미가 있다.
엔티티 매니저의 persist() 메서드가 있다. save라고 해도될텐데 말이다.
이유는 정의하기 나름일 수도 있지만, 나는 간단하게 flush, commit 단계가 존재하고,
영속성 컨텍스트에 영속화 하는 것이기 때문에 persist()라고 네이밍 했을 것이라고 했다.
save는 persist, flush, commit을 모두 포함하는 것이기 때문이다.

팀원 분의 생각은 조금 더 나아간 생각이었다.

영속성 컨텍스트에서 영속이 뭔가요?

나는 영속성 컨텍스트에 객체를 영속 시킨다는 것이라고 했다.
객체를 관리하는 컨텍스트이다 라는 의미였다.

다음 질문이 있었다.

영속이란 무엇인가요?

설명이 되지 않아 사전을 찾아보니 지속적인 것, 영원한 것과 같은 의미가 있었다.
누구나 대략 감으로 알고 있는 내용일 것이다.
여기서 왜 JPA는 persistence라는 영속이라는 개념을 사용하는지 본인의 생각을 전달해주셨다.

이유는?

JVM 외부에 객체를 영원히 관리하고 싶기 때문이다.

처음에는 무슨 의미지? 라는 생각이 들었다.
하지만 점점 공감이 되었다.
java라는 것은 JVM이라는 세상에서 존재하게 된다. 즉, JVM 밖에서는 지속될 수 없는 것이다.
JVM이 사라지면 java 객체도 사라지는 것이다. 그런데 JPA는 이를 JVM 밖에서도 유지하고 싶었던 것이다.
그래서 JVM에 있던 객체를 JVM 밖에서도 지속하고 싶다는 생각으로 영속화라는 개념이 나오게 된 것이었다.
그게 데이터 베이스가 될 수도, 텍스트 파일이 될 수도 있다. 중요한건 JVM 외부에서 객체를 유지하고 싶다는 것이다.

여기서 나는 의문이 들었다.

그럼 굳이 JPA(ORM)이 아니고, MyBatis를 쓴다고 해도 이것도 영속이겠네요?

객체를 JVM 외부에서 유지를 하고싶다. 라는 것은 결국 데이터 베이스에 저장한다는 것인데
JPA를 사용하지 않고, MyBatis를 쓴다고 해도 객체를 JVM 외부인 데이터 베이스에 지속시킬 수 있는 것이다.
하지만, JPA에서만 영속화라는 persist라는 의미를 사용하는 이유는 나의 생각은 이렇다.
MyBatis는 객체 지향적 사고가 아닌 데이터 베이스 위주의 데이버 베이스 매퍼 객체일 뿐이다.
물론 JVM 외부인 데이터 베이스에서 객체를 유지하는 것은 맞지만 패러다임 자체가 다른 것이다.
객체를 외부에서 유지하고 싶다가 아닌 데이터 베이스에 맞춰 매핑을 하고 싶다라는 것이 핵심이다.
반면, JPA는 데이터 베이스가 메인이 아니다. 데이터베이스에 영향을 덜 받고 객체지향적으로 설계하기 위한 것이다.
즉, 객체를 외부에 지속하고 싶은 것이다.
정리를 하자면 MyBatis는 DB → 객체라면 JPA는 객체 → DB와 같은 개념이 되는 것이다.
그렇기 때문에 JPA는 영속이라는 의미를 사용하고, MyBatis에서는 그런 의미를 사용하지 않는 것이다.

이 내용은 hibernate 공식 문서에 있던 내용을 상의한 내용이고,
ORM을 왜 사용해야 하는지 → ORM 중 JPA는 왜 ORM을 추구 했는지 → JPA는 왜 영속이라는 의미를 사용하는지에 대한
생각의 흐름에서 나온 이야기이다. 정답이 아닐 수는 있지만, 기술을 사용함에 있어서 가장 중요한건
이 기술이 왜 탄생 했는지라고 생각한다. 그래야 그 배경에 맞게 잘 활용할 수 있기 때문이다.
그렇지 않으면, 엉뚱하게 사용하면서, 이 기술은 안좋다라는 터무니 없는 생각이 들기 때문이다.
이번 대화에서 JPA가 추구하는 철학?에 조금 더 다가간 것 같고, 이런 경험은 조금 씩 해당 기술을 올바르게 사용하는데 있어서
큰 도움이 될 것이라고 생각한다.

지금까지 너무 기술적인 부분에만 치우쳐 있었나?? 라는 생각도 조금 들게 되는 대화였다.

참고


https://hibernate.org/orm/what-is-an-orm/

반응형
복사했습니다!