[JPA] 1. 왜 JPA를 공부해야 할까?

2022. 3. 16. 21:28· BE/JPA
목차
  1. 1. DB 통신 방식
  2. 2. JPA의 수요
  3. 3. JPA의 간단한 특징
  4. 4. 최근 기술 동향
  5. 5. 기존 방식의 단점
반응형

회사에서 MyBatis, iBatis위주로 사용을 해왔는데 요새 JPA라는 기술이 많이 사용되고 있다고 한다.

간단하게 말하면 Java에서 JDBC를 관리해주는 기능인데, 쉽게 관리해주는 기능으로 사용하기가 편리하다고들 한다.

이 기술에 대해 호기심이 생겼고, 현재 진행하고 있는 사이드 프로젝트에 도입할 생각이다.

(실무에서는 어렵다고하기에, 회사 프로젝트는 JPA에 대해 충분히 공부한 후 상황이 적합하다면 도입할 의지가 있다. )

 

그럼, JPA에 대해 알아보자.

 


자바 ORM 표준 JPA 프로그래밍

이 포스팅에서 작성하는 내용은 자바 ORM 표준 JPA 프로그래밍 (김영한 지음) 에서 발췌하였습니다.

 

 

1. DB 통신 방식

1-1. JDBC 방식, MyBatis

  • 위의 두 방식 모두 개발자가 직접 SQL문을 작성해서 통신을 진행

 

1-2. JPA 방식

  • 개발자가 SQL문을 작성할 필요없이 통신을 진행.
  • 마치 Java에서 Collection 객체를 사용할 때 자연스레 넣고 가져오듯 사용.
  • JPA가 JDBC를 관리하여 적절한 SQL을 생성하고 DB에 요청하는 방식.

 

2. JPA의 수요

2-1. 키워드 'JPA'

대한민국에서의 MyBatis는 우하향 그래프이고, JPA는 우상향 그래프로 JPA에 대한 관심이 점점 많아지는 것을 알 수 있다.

 

이미 전세계는 JPA에 대한 관심이 MyBatis보다 훨씬 높았다는 것을 알 수 있다.

 

2-2. JPA 적용 사례

  • 쿠팡, 카카오, 배달의 민족, 네이버 등 국내 유명한 IT 기업에서 사용 중
  • 최신 스프링 예제에서도 JPA 이용
  • 자바 개발자에게 JPA를 기본 기술이라고 볼 수 있다.

 

3. JPA의 간단한 특징

  • 개발 속도와 유지보수 속도가 상당히 빨라짐 → 수 십 줄의 코드를 한두 줄로 작성 가능
  • 난이도가 있어 공부해야할 필요가 있음
  • 난이도가 있기 때문에 실무에 바로 도입하기엔 어려울 수 있음
    • JPA 관련 예제들은 보통 테이블이 1~2개로 단순한 구조이지만, 실무에서는 수십 개 이상의 복잡한 객체와 테이블을 사용하기 때문.
    • 객체와 테이블을 제대로 설계하고 매핑하는 방법을 완벽하게 숙지한다면 어떠한 복잡한 시스템도 JPA로 설계가 가능

 

4. 최근 기술 동향

4-1. 애플리케이션

애플리케이션에서는 객체 지향 언어를 대부분 사용한다.

* 객체 지향 언어? Java, Scala ...

 

4-2. 데이터베이스

요즈음 NoSQL이 많이 사용되고 있지만, 아직까지는 관계형 DB(RDBMS)가 많이 사용되고 있다.

* NoSQL? MongoDB,Azure Cosmos DB ...

* RDBMS? Oracle, MySQL ...

 

4-3. 애플리케이션과 RDBMS를 같이 사용하면?

애플리케이션이 객체 지향 언어로 사용함에도 불구하고 SQL문이 대부분이다.

→ RDBMS는 SQL만 알아들을 수 있기 때문!!

 

 

5. 기존 방식의 단점

5-1. 단순 노동 작업

  • 간단한 테이블을 하나 추가하더라도, CRUD 쿼리를 짜줘야하며 자바 객체를 SQL로 보내주고 또 반대로 SQL에서 자바 객체로 보내주고 하는 단순 노동 작업이 필요하다.
  • dto(vo) 객체를 정의 및 이에 알맞게 CRUD쿼리를 작성 후, 특정 컬럼이 추가되는 경우 dto 객체에 해당 컬럼 추가하고~ 작성한 SQL에도 해당 컬럼 추가하는 작업이 필요함.. → 놓치거나 실수할 가능성이 있음

5-2. 패러다임의 불일치

객체 지향 프로그래밍 : 추상화, 캡슐화, 정보은닉, 상속, 다형성 등 시스템의 복잡성을 제어할 수 있는 다양한 장치들을 이용하여 프로그래밍 하는 것을 목표 함.

 

하지만, SQL문을 더 많이 작성하는 경우가 빈번함.

 

* 객체 지향 프로그래밍의 객체 vs RDBMS의 차이

 

1) 상속

RDBMS에는 상속이라는 개념이 없다.

비슷하게 나마, Table 슈퍼타입 서브타입 관계가 있는데 다르다고 볼 수 있다.

 

- Album 데이터를 저장할 때

  객체 : 단순히 Album 객체를 생성하고 저장하면 끝.

  RDBMS : 2번의 INSERT가 필요함 (T.ITEM과 T.ALBUM)

 

- Album 데이터를 조회할 때

  객체 : 컬렉션에서 객체에서 get하면 끝.

  RDBMS : 기본=T.ITEM과 T.ALBUM을 조인하는 SQL문을 작성하여 결과를 받아온 뒤 각각의 객체에 할당...

               하지만 위의 방법은 너무 번거로우므로 DB에서 받아오는 데이터를 저장할 객체에는 상속 관계를 사용X

객체에 Album 데이터를 저장 시, 단순히 Album 객체를 생성하고 할당하면 끝.

 

 

2) 연관관계

- 객체 : 참조를 사용함.

- RDBMS : 테이블간 외래키를 사용하기 때문에 JOIN을 맺어야 함.

 

 

3) 엔티티 신뢰 문제

 - DAO를 호출하여 결과값을 받는 객체를 무조건 신용할 수 없다.

→ 호출하는 쿼리를 확인해야만 함.

 

 

4) 반환된 객체 비교

 

String memberId = "10";

Member member1 = list.get(memberId);
Member member2 = list.get(memberId);
// member1 == member2 (같다)

- 객체 : 컬렉션에서 같은 객체를 A, B에 저장 시 이 두 객체는 같다.

 

 

String memberId = "10";

Member member1 = memberDAO.getMember(memberId);
Member member2 = memberDAO.getMember(memberId);
// member1 != member2 (다르다)

- RDBMS : A라는 쿼리를 보내서 데이터를 받은 1번 객체와 그 이후에 똑같이 A라는 쿼리를 보내서 데이터를 받은 2번 객체와 다름. (안의 내용은 같겠지만 객체가 두 번 생성된 것이므로)

 

 

즉, 위의 두 특징 차이로 인해 객체 지향 언어답게 객체를 모델링할 수록 DB와 매핑 시 번거로워지는 아이러니한 상황이 발생. 

→ 객체를 자바 컬렉션에 저장하듯 DB에 저장하는 기술 : JPA (Java Persistence API)

반응형

'BE > JPA' 카테고리의 다른 글

[JPA] 6. 영속성 컨텍스트란?  (0) 2022.04.11
[JPA] 5. JPA에서 리스트를 조회해보자  (0) 2022.04.05
[JPA] 4. JPA 맛보기  (0) 2022.03.31
[JPA] 3. JPA 프로젝트 세팅  (0) 2022.03.26
[JPA] 2. Java Persistence API 란  (0) 2022.03.18
  1. 1. DB 통신 방식
  2. 2. JPA의 수요
  3. 3. JPA의 간단한 특징
  4. 4. 최근 기술 동향
  5. 5. 기존 방식의 단점
'BE/JPA' 카테고리의 다른 글
  • [JPA] 5. JPA에서 리스트를 조회해보자
  • [JPA] 4. JPA 맛보기
  • [JPA] 3. JPA 프로젝트 세팅
  • [JPA] 2. Java Persistence API 란
멍목
멍목
개발 관련 새롭게 알게 된 지식이나 좋은 정보들을 메모하는 공간입니다.
반응형
멍목
김멍목의 개발블로그
멍목
전체
오늘
어제
  • 분류 전체보기 (514)
    • BE (190)
      • Spring (21)
      • Java (141)
      • Kotlin (6)
      • JPA (22)
    • FE (33)
      • Javascript (16)
      • Typescript (0)
      • React (5)
      • Vue.js (9)
      • JSP & JSTL (3)
    • DB (32)
      • Oracle (22)
      • MongoDB (10)
    • Algorithm (195)
    • Linux (8)
    • Git (6)
    • etc (42)
    • ---------------------------.. (0)
    • 회계 (4)
      • 전산회계 2급 (4)
    • 잡동사니 (2)

블로그 메뉴

  • 홈
  • 관리

공지사항

인기 글

태그

  • JPA 공부
  • MongoDB 기초부터 실무까지
  • 자바 테스팅 프레임워크
  • junit5
  • 코테 공부
  • MongoDB 공부
  • 알고리즘공부
  • 자기공부
  • 알고리즘 공부
  • JPA
  • 자기개발
  • 코테공부
  • 프로젝트로 배우는 Vue.js 3
  • 전산회계 2급 준비
  • 더 자바 Java 8
  • 이펙티브 자바
  • 코틀린
  • java 8
  • 자기 개발
  • 자기 공부
  • Java to Kotlin
  • 이펙티브자바
  • 더 자바 애플리케이션을 테스트하는 다양한 방법
  • Oracle
  • vue3 공부
  • 자바공부
  • Effective Java
  • MongoDB with Node.js
  • 자바 공부
  • 자바 개발자를 위한 코틀린 입문

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
멍목
[JPA] 1. 왜 JPA를 공부해야 할까?
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.