성장호소 2024. 6. 25. 23:27
패러다임의 불일치

내가 웹을 개발하기 위해 사용하고자 하는 언어는 Java이고 데이터를 저장하기 위해 사용하는 도구는 MySQL이다.

Java는 객체지향 언어로 객체들이 서로 연관 관계를 맺고 있고 MySQL은 관계형 데이터베이스로 테이블들이 서로 연관 관계를 맺고 있다.

Java로 웹을 개발하기 위해서는 객체와 객체들간의 연관 관계를 테이블과 테이블들간의 연관 관계로 매핑해야 한다.

간단한 게시판의 경우 별로 문제가 안 되지만 실무처럼 객체 간의 연관 관계가 복잡해질수록 테이블 간의 연관 관계로 매핑하는데 드는 시간과 비용은 더욱 더 올라간다.

 

객체를 자바 컬렉션에 저장하듯이 DB에 저장할 수 없을까?

이러한 고민들이 쌓여 객체와 테이블을 매핑해주는 JPA가 등장하게 된다..!

 

ORM ?

Object-Relational-Mapping으로 객체와 관계형 데이터베이스를 매핑해주는 기술이다.

JPA는 자바 ORM 기술에 대한 API 표준 명세로 쉽게 말해 인터페이스들을 모아둔 것이다. 따라서 JPA를 사용하기 위해서는 JPA를 구현한 ORM 프레임워크를 선택해야 한다. 그 중 가장 대중적인 것이 하이버네이트다.

 

Why JPA ?

객체를 관계형 DB에 저장하기 위해서는 SQL 연산이 필요하고 만약 객체의 필드가 바뀌면 SQL을 하나하나 수정해줘야하는 번거러움이 있다. 객체의 연관 관계가 복잡해질수록 여기에 드는 시간과 비용은 더욱 커진다.

이러한 복잡성을 막고자 SQL 중심으로 객체를 설계하다보면 우리의 근본적인 목표인 객체지향 설계를 잃게 된다. 그렇기에 중간에 JPA라는 다리를 놓아 이러한 목적성을 잃지 않을 수 있다.

다음은 JPA를 사용할 때 장점들이다.

  • SQL 중심 -> 객체 중심
  • 생산성
  • 유지보수
  • 패러다임의 불일치 해결
  • 성능 최적화

 

JPA 를 사용하면 SQL이랑 관계형 DB에 대해 몰라도 돼?


JPA, 즉 ORM 기술은 객체지향과 관계형 DB라는 두 기둥 위에 있는 기술이다. 

결국 데이터는 관계형 DB에 저장되기 때문에 DB에 객체를 저장하는 것과 복잡한 관계의 테이블을 설계할 줄 알아야지 JPA를 사용했을 때 빛을 발할 수 있다.