토이프로젝트에 기능추가를 하기위에 다른사람들 코드를 염탐하던중 JPA 라는 기술이 많이 보이기 시작했다. 분위기를 보니 좀 짠다하는 사람은 다짜는것 같던데 일단 DB를 객체화 하는것인건 대충 눈치껏 알겟는데 정확히는 뭔지 모르겠다.
https://www.youtube.com/watch?v=WfrSN9Z7MiA&list=PL9mhQYIlKEhfpMVndI23RwWTL9-VL-B7U&index=1&ab_channel=SKplanetTacademy
유튜브 우아한 형제 김영한님 JPA 강의
위코드처럼 중간에 tel이라는 속성을 추가하면 이미 짜놓은 sql을 수정해야 하는 상황이 온다.
위 사진에서 멤버 객체를 받아오면 당연하게 그안에 멤버의 팀정보, 주문정보 등등을 '객체지향'적으로 받아올 수 있다고 하지만 사실은 그렇지 않다고 설명하신다.
객체에서는 Member.getTeam은 되지만 Team.getMember는 안됨
테이블 연관관계에서는 Member에서나 Team에서나 Join을 통해 서로의 요소를 참조 할 수 있다.
현업에서 개발시 이런식으로 teamId를 넣는다 왜냐?
이런식으로 설계된 테이블에 값을 한번에 넣기 위해 그런데 영한님은 이것은 '객체지향'적이지 못하다고 설명하신다.
위 표처럼 관계가 있다고 치면 ( . )을 찍고 바로 참조 할 수 있어야 한다 JPA를 쓰지않으면 아래처럼 만들어야 하는 경우의 수가 너무 많아진다.
------------일때까지의 문제점은 아래와 같은 질문을 낳는다.---------
그래서 나온게 JPA 라고 한다.
( 이제야 왜쓰는지 이해가 되네 )
JPA는 자바진영에서 쓰는 'ORM'기술이다.
ORM기술은 대부분의 언어에서 존재한다. 아주 오래 전부터 DB와 객체간의 매핑에 대해 고민했다고 한다.
EJB라는 구시대 ORM이 있었는데 이건 너무 불편해서 안쓴다.. JPA는 인터페이스일 뿐이고 그 구현체인 하이버네이트를 쓴다(JPA인터페이스는 하이버네이트의 복붙일 뿐이라고 한다)(참고로 EJB는 컨테이너 기능도 있었는데 이게 너무 불편해서 나온게 Spring이라고 한다)