[JPA] JPA란 무엇인가.
나다.
이 글이 뭐하는 글이냐면
본인은 요즘 JPA에 대해 배우고 있다.
필수적인 기술이 될 전망이라기도 하고 무엇보다 꽤 재미있으니 기록으로 남겨
혹여나 필요한 사람이 있다면 같이 볼 수 있도록 하려한다.
좋은건 나눠쓰라는 말도 있지 않은가.
Java Persistence API
이하 JPA는 Java Persistence API의 준말이다.
간혹 API가 무엇인지 감을 잡지 못하는 사람들이 있어 간단히 API에 대해 말하자면
어떤 대상을 이용하기 위한 메뉴얼이라 생각하면 편하게 이해할 수 있겠다.
예를 들어, 우리가 배가 고파 청룡각에 갔다고 가정하자.
가게에 가서 하는 것이 무엇인가?
우리가 가게에서 가장 먼저하는 것은 "메뉴판"을 보는 일이다.
만약 지금 당신은 "탕수육"을 먹고싶다.
그렇다면 다음으로 일어나는 일은
청 : "뭐 드실"
You : "탕수육 함 가와보소"
청 : "ㅇㅋ"
이 상황에서 바로 "메뉴판"이 API를 가르킨다.
우리는 메뉴판을 통해 어떤 메뉴가 있는지 확인하고 그 메뉴를 주문한다.
똑같이 API의 스펙을 살펴보고 내장된 기능들을 이용하는 것이다.
JPA 또한 javax.persistence 패키지로 정의된 API 그 자체를 의미한다.
한 마디로 그냥 메뉴판이라는 뜻이다.
우리는 그 메뉴판 안에서 우리가 필요한 것들을 골라 먹으면 된다.
그렇다는 것은 JPA를 Entity 객체를 이용해 영속성 컨텍스트를 구성하고 데이터베이스에 상황에 맞는
주문을 하는 메뉴판 정도로 생각하는 것 또한 편하게 JPA의 본질을 이해할 수 있는 방법이 되겠다.
객체는 객체대로 설계하고, 데이터베이스는 데이터베이스대로 설계한 후
중간에 끼여있는 JPA의 중계에 의해 서로 연결되는 것이다.
"그니까 새X야 메뉴판만 던져주면 뭐 어쩌라고"
"읽고 쓰시라고"
Entity Bean에서 JPA로
여러분은 Hibernate라는 ORM 프레임워크에 대해 알고있는가?
* ORM은 Entity 객체와 데이터베이스를 자동으로 연결해준다고 생각하면 된다.
본래 EJB의 표준이 JPA가 아닌 Entity Bean이 표준이던 시절 프로그래머 Gavin King은 생각했다.
"아 시X Entity Bean Joanna 쓰레기같아서 못 쓰겠네 ㅋㅋㅋ"
존X 쓰레기같던 Entity Bean에 빡치신 폐하께서 퇴근하시고 Hibernate라는 오픈소스를 창조해내신다.
"낭중지추"라 했던가.
맛집은 광고를 하지 않아도 입소문을 타고 단골이 늘기 마련이라 했다.
어느덧 맛집이 된 Hibernate는 오픈소스임에 따라 수 많은 기여자들에 의해 더욱 나은 성능을 보이게 되었고
표준이던 Entity Bean을 더욱 쓰레기처럼 보이게하기 시작했다.
"님아 저희 Entity Bean 좀 갈아엎고 새로 재정립 할건데 와서 도와주실?"
"ㅇㅋ"
이렇게 JPA의 역사가 시작되게 된다.
JPA는 인터페이스다.
여러분은 인터페이스와 클래스의 차이에 대해 알고있는가?
인터페이스란 가이드라인이며 클래스는 그에 대한 세부구현체로 표현하는 것이 맞겠다.
JPA는 인터페이스의 모음이다.
이를 표준 명세라고 칭하는데 이 표준 명세에 대한 3가지 구현체가 존재한다.
Hibernate , EclipseLink, DataNucleus (삼신기)
Spring Boot는 Hibernate를 기본으로 지원하고 있으나 필요에 따라 본인이 맞게 설정해서 사용하면 되겠다.
그래서 이거 왜 써야됨?
SQL문의 족쇄에서 해방되기 위함과 앞으로의 대세를 따르는 것이라 볼 수 있겠다.
전 세계 JPA와 Mybatis의 검색 점유율이다.
참고로 파란색이 JPA임 ㅋㅋ
우리나라, 중국, 일본 빼고 전부 다 JPA 쪽으로 민족대이동을 한 상태다.우리도 곧 머지 않았음을 느낄 수 있다.
또한 SQL문의 직접적인 작성이 줄어들고 객체 중심의 개발이 이루어지기 때문에 생산성이 높아진다.
예를 들어
"기존 Member에 주소까지 추가해서. 진행시켜."
라고 한다면 일일이 Member와 관련된 쿼리문을 하나씩 찾아 주소에 대한 쿼리문을 추가해야 할 것이다.
그러나 JPA를 사용 중이라면 Member라는 Entity에 주소에 대한 필드를 추가함으로 끝낼 수 있다.
물론 그 주소를 이용할 다른 어떠한 세부적인 기능들에 대해서는 신경써야겠지만
기본적으로 Member와 관련된 쿼리문을 싹다 뒤져서 갈아엎어야하지 않는다는 것 만으로도 감지덕지다.
JPA에 대한 맛보기 글을 썼으니 앞으로 그 기능과 사용법들에 대해 적어볼까한다.
혹여나 글에 틀린 점이 있다면 내가 허접이라 그런 것이니 넓은 마음으로 양해해주시길 바란다.
그럼 컴파일 오류없는 개발하시길.. :)