250x250
반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Python
- 영상편집
- Kotlin
- 코틀린
- SQL
- 한글
- spring
- neo4j
- 윈도우10
- 유니티
- Tutorial
- json
- 코딩학습
- unity
- 윈도우
- programmers
- 애플
- 아이패드
- iPad
- DaVinci Resolve
- 아이폰
- Apple
- 녹화프로그램
- 파이썬
- kakao
- graph DB
- AWS
- 프로그래머스
- 스프링
- 튜토리얼
Archives
- Today
- Total
코드짜는 노인네
[Spring] ORM(Object Relational Mapping)와 JPA(Java Persistent API) 본문
spring/JPA
[Spring] ORM(Object Relational Mapping)와 JPA(Java Persistent API)
ikohong 2022. 8. 22. 03:39728x90
반응형
[Spring] ORM(Object Relational Mapping)와 JPA(Java Persistent API)
ORM(Object Relational Mapping)
Object: "객체"지향 언어 (자바, 파이썬)
Relational: "관계형" 데이터베이스 (H2, MySQL)
- 객체와 테이블을 매핑해서 패러다임의 불일치를 개발자 대신 해결해주는 것
- 객체는 객체대로 설계하고 RDB는 RDB에 맞게 설계하는 것을 추구함 ⇒ 객체와 RDB를 중간에서 서로 매핑
- 데이터베이스와 객체 지향 프로그래밍 언어 간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법
ORM이란 객체가 테이블이 되도록 매핑을 시켜주는 역할을 합니다. ORM을 이용하면 SQL Query가 아닌 메서드로 데이터를 조작할 수 있습니다.
// SQL문
SELECT * FROM user;
// ORM
user.findAll()
위의 코드를 보면, SQL 쿼리문과 똑같은 기능으로 ORM을 사용하면, User 테이블과 매핑된 객체를 user라 할때 user.findAll() 메서드를 호출하면 데이터베이스에서 해당 데이터를 조회할 수 있습니다.
ORM을 만든 이유
- ORM 이 없는 환경에서는 백엔드 개발자가 비즈니스 로직 개발보다 SQL 작성에 더 많은 노력을 들여야 함
- SQL 작성이 단순하고 반복적인데, 실수하기는 쉬움
- 생산성이 매우 높아집니다.
ORM의 단점
- query가 복잡해주면 ORM으로 표현하는데 한계가 있음
- 성능이 raw query에 비해 느림
반응형
JPA(Java Persistent API)
- 자바 진영의 ORM 기술 표준으로 SQL을 쓰지 않고 데이터를 생성, 조회, 수정, 삭제할 수 있도록 해주는 번역기
- Java 플랫폼 SE와 자바 플랫폼 EE를 사용하는 응용 프로그램에서 관계형 데이터베이스의 관리를 표현하는 자바 API
- 실제로 구현된 것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크
- JPA 인터페이스를 구현한 대표적인 오픈소스 : Hibernate
- 어플리케이션과 JDBC 사이에서 동작
JPA는 데이터를 객체지향적으로 관리할 수 있기에 개발자는 비즈니스 로직에 집중할 수 있고, 객체지향 개발이 가능한 특징을 가지고 있습니다.
JPA 사용 이유
- 생산성
- 자바 컬렉션에 객체를 저장하듯 JPA에 저장할 객체를 전달
- JDBC API 사용하는 지루하고 반복적인 일을 JPA가 대신 처리
- DDL문 자동 생성
- 데이터베이스 설계 중심의 패러다임을 객체 설계 중심으로 역전
- 유지보수
- 개발자가 작성해야 할 SQL과 JDBC API 코드를 JPA가 대신 처리해줌으로 유지보수해야 하는 코드 수가 줄어듦
- ex) 엔티티에 필드 추가 시 등록, 수정, 조회 관련 코드를 모두 변경해야하지만 JPA를 사용하면 이런 과정을 JPA가 대신 처리함
- 패러다임 불일치 해결
- 상속, 연관관계, 객체 그래프 탐색, 비교하기 같은 패러다임 불일치 해결
- 성능
- 다양한 성능 최적화 기회 제공
- 어플리케이션과 데이터베이스 사이에 존재함으로 여러 최적화 시도 가능
- 데이터 접근 추상화와 벤더 독립성
- 데이터베이스 기술에 종속되지 않도록 함
- 데이터베이스를 변경하면 JPA에 다른 데이터베이스를 사용한다고 알려주면 됨
JPA의 장점
- 특정 데이터베이스에 종속되지 않음
- Oracle과 MariaDB 등과 같이 쿼리문은 데이터베이스마다 다름 ⇒ 데이터베이스 변경이 어려움
- but) JPA의 경우 데이터 접근 계층을 제공해주기 때문에 설정 파일에 어떤 데이터베이스를 사용하는지만 알려주면 데이터베이스 변경이 가능
- 객체지향적 프로그래밍
- JPA를 사용하면 데이터베이스 설계 중심의 패러다임에서 객체지향적 설계가 가능 ⇒ 더 직관적이고 비즈니스 로직에 집중할 수 있음
- 생산성 향상
- 데이터베이스 테이블에 새로운 컬럼이 추가되면 해당 테이블의 컬럼을 사용하는 DTO 클래스의 필드 역시 모두 변경해주어야 함
- but) JPA를 사용하면 테이블과 매핑된 클래스에 필드만 추가하면 쉽게 관리가 가능
SQL을 직접 작성하지 않고 객체를 사용하여 동작 ⇒ 유지보수 측면 및 재사용성도 증가
JPA의 단점
- 복잡한 쿼리 처리
- 통계 처리 같은 복잡한 쿼리를 사용할 경우는 SQL문을 사용하는 게 나을 수도 있음
- JPA에서는 Native SQL을 통해 기존의 SQL문을 사용할 수 있지만 그러면 특정 데이터베이스에 종속된다는 단점이 발생 ⇒ 이를 보완하기 위해 SQL과 유사한 기술인 JPQL을 지원
- 성능 저하 위험
- 객체 간의 매핑 설계가 좋지 않을 때 성능 저하가 발생할 수 있으며, 자동으로 생성되는 쿼리가 많기 때문에 개발자가 의도하지 않는 쿼리로 인해 성능이 저하되기도 함
- 학습 시간
- JPA를 제대로 사용하려면 학습하는데 시간이 오래 걸린다.
728x90
반응형
'spring > JPA' 카테고리의 다른 글
[Spring] JPA 개념과 JPA 사용예시 (0) | 2022.08.22 |
---|
Comments