평상시에 Spring Data JPA를 사용하면서 JPA를 스터디 하다가 중간에 회사일이 바빠... 그만하게 되었다가 다시 포스팅을 처음부터 진행하려고 합니다.
참고 도서는 "이영한"님의 자바 ORM 표준 JPA 프로그래밍과 인프런 강의를 참고하였습니다.(내돈내산)
해당 강의 및 도서로 공부하고 현업에 사용하면서 얼마나 깔끔히 설명하주시고 책으로 옮겨놓으셨는지 알 수 있었다.
그러면 이제부터 JPA 포스팅도 시작해보겠습니다.
JPA는 자바 진영의 ORM 기술 표준이다. ( 인테페이스의 집합 )
JPA를 한줄로 가장 잘 표현한 문장 같아서 강조를 해봤습니다.
JPA를 사용하게 되면 개발자는 SQL을 직접 작성하는 것이 아니라 어떻게 SQL이 실행될지 생각만 하면 됩니다.
애플리케이션은 시간이 지나면 지날수록 내부로직의 복잡도는 점점 증가합니다. 또한 데이터베이스는 데이터 중심으로 구조화되어있기 때문에 객체지향에서 이야기하는 추상화, 상속, 다형성같은 개념이 없기때문에 패러다임의 불일치를 불러옵니다.
그렇다면 JPA를 사용함에 있어서 어떠한 장점을 얻을수 있을까??
CRUD SQL을 작성할 필요가 없고, 결과를 객체로 매핑하는 작업도 대부분 자동으로 처리해 주기 때문에 작성해야하는 코드가 1/3으로 줄어들었다.
JPA가 제공하는 네이티브 SQL 기능을 사용해서 직접 SQL도 작성할 수 있고 , 데이터베이스 쿼리 힌트도 사용할 수 있다.
Application을 SQL이 아닌 객체를 초점으로 개발하기 때문에 생산성과 유지보수가 확실히 좋아지고 테스트를 작성하기도 편해졌다.
코드를 거의 수정하지 않고 데이터베이스를 손쉽게 변경할 수 있다.
JPA의 설명은 SQL을 직접 다룰때와 함께 비교하면서 설명을 하고자 한다.
대부분의 개발자분들은 자바로 개발하는경우 데이터베이스를 저장소로 사용한다. 또한 SQL은 능숙하게 다룰줄 안다.
반복된 작업의 연속..
SQL을 사용해서 회원을 조회하는 CRUD를 만든다고 생각해보겠습니다.
회원을 조회하는 기능과 등록하는 기능, 수정 , 삭제 기능을 추가한다고 가정하면 아마 SQL을 작성하고 JDBC API를 만드는 비슷한 일을 반복해야 합니다.
하지만 Java에 의존해서 보관한다고 하면 컬렉션은 다음과 같이 한줄로 저장이 가능할것이다
List
members = new ArrayList<>();
members.add(user);
보기만 해도 얼마나 간편한지 한눈에 확인 할 수 있다.
SQL에 의존적인 개발
SQL에 의존적인 개발은 무엇일까?
A개발자는 회원을 생성하고 조회하는 코드까지 다 만들었다 ..
그런데 갑자기 고객사에서 "우리 연락처랑, XX랑 ,XX도 추가하게 해주세요" 라는 요청이 들어왔다고 가정하겠습니다.
그럼 SQL을 사용하는 방식으로 보면 다음과 같습니다.
해당 row를 받을 클래스에 요청받은 필드들을 추가한다음
기존에 있던 Insert쿼리도 수정합니다
그다음 값을꺼내 query와 매핑시키는 작업을 합니다..
그리고 ... 벌써 부터 그냥 적기 귀찮습니다 .. 뭔가 할게 많아집니다.
정리해보면 CRUD에 대한 거의 모든것들이 수정이 되어야 합니다.
한마디로 service, dao, vo와 같은 클래스들의 내용이 전부 바뀌어야 합니다..
자 그럼 이제부터 JPA로는 이러한 문제를 어떻게 해결할수 있는지 보겠습니다
JPA로 CRUD를 다루는 자세한 내용은 다음 포스팅에 나오겠지만 미리 대략적으로 보면 다음과 같습니다
jpa.persist(member);
Member findMember = jpa.find(Member.class, memberId);
findMember.setName("YundleYundle");
findMember.remove()
다음과 같이 표현 할 수 있습니다. SQL을 직접 구현하지 않아도 내부적인 동작으로 개발자 대신 SQL을 작성하고 실행해주는것 이상의 기능들을 제공합니다.
또한 상속의 개념을 통해 자바 컬렉션에 객체를 저장하듯이 JPA를 저장하면 된다
_객체 참조를 통해 다른 엔티티와의 연관관계를 갖고 참조에 접근해서 연관된 객체를 참조할 수 있다. _
정리해보면 JPA에 장점은 다음과 같이 정리 할 수 있습니다.
생산성, 유지보수, 패러다임의 불일치 해결 , 성능, 데이터 접근 추상화와 벤더 독립성, 표준들의 장점을 들 수 있습니다.
다음 포스팅에는 JPA를 어떻게 시작하고 프로젝트를 구성하는지 어떻게 동작하는지에 대해 알아 보도록 하겠습니다.
'JPA' 카테고리의 다른 글
[JPA] 플러시 ( flush ) (0) | 2020.12.22 |
---|---|
[JPA] 영속성 컨텍스트의 특징 및 기본 구조 (0) | 2020.12.20 |
[JPA] JPA 영속성 및 상태 (0) | 2020.12.20 |
[JPA] JPA 실습 구성하기 - 2 (0) | 2020.12.16 |
[JPA] JPA 실습 구성하기 - 1 (0) | 2020.12.16 |
댓글