일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 인프런
- 정렬
- java
- js
- 자바
- 백준
- 삼성소프트웨어아카데미
- 코테준비
- 코딩
- spring
- NestJS
- 자료구조
- 자바스크립트
- 중간 평균값 구하기
- 카카오
- 콜백지옥
- 스텍
- 코딩테스트
- mybatis
- stack
- 배열
- array
- 알고리즘
- javascript
- 삼성
- AtoZ0403
- 코테
- 그리디알고리즘
- 프로그래머스
- SWEA
- Today
- Total
개발에 AtoZ까지
H2, JPA, MyBatis 특징 및 차이 본문
1. 목표
이번 포스팅의 목표는 DB관련 라이브러리 3가지의 특징 및 차이점을 알아보는 것입니다.
2. 정의
라이브러리명 | H2 | JPA | MyBatis |
정의 | H2DB는 자바 기반의 오픈소스 관계형 데이터 베이스 관리 라이브러리 |
개발자가 직접 SQL을 작성하지 않아도 자동으로 생성해주는 라이브러리 | 개발자가 직접 SQL을 작성하여 객체와 매핑시키는 라이브러리 |
장점 | 브라우저 기반의 콘솔모드를 이용할 수 있고, 별도의 설치과정이 없이 용량도 2MB이하로 매우 저용량임 DB자체가 매우 가볍기 때문에 빠르고, JDBC API 또한 지원 |
RDB에 종류와 관계없이 사용가능 SQL 및 데이터 중심이 아닌 객체중심적이기 때문에 비지니스 로직에 집중 가능 테이블 생성,변경등 엔티티 관리 간편 |
JPA에 비해 쉬움 SQL의 세부적인 내용 변경시 간편함 |
단점 | 메모리에 저장되기 때문에 데이터가 영구적인것이 아닌 휘발성임 | 어렵다(많은 내용이 감싸져 있기 때문에 알아야 할 것이 많음) | 데이터 베이스 설정 변경시 수정할 부분이 많음 Mapper ~인터페이스 설계까지 JPA보다 설계,파일,로직이 많음 |
3. 상세 설명
1) H2
H2DB
- 오픈 소스 데이터베이스이며 JAVA로 작성됨
- 초경량 DB로 속도가 매우 빠르다.
- RDBMS이면서 인메모리 DB를 지원한다.
- 인메모리DB를 지원하기 때문에 데이터의 영속성은 보장되지 않지만 TEST 환경에서는 유익하게 사용할수있다.
2) JPA
JPA (Java Persistence API)
- 자바 ORM의 기술 표준, 대표적인 오픈 소스가 Hibernate이다.
ORM(Object-relational mapping)
- 객체 관계 매핑, 객체와 RDB를 별개로 설계하고 ORM이 중간에서 매핑해주는 역할
데이터베이스 데이터 <—매핑—> Object 필드
즉, ORM은 SQL문이 아닌 RDB에 데이터 그 자체와 매핑하기 때문에 SQL을 직접 작성할 필요가 없다.
해당 객체와의 매핑에 필요한 SQL문을 알아서 만들어준다.
이로인해 어떤 RDB를 사용하던 상관 없다.
SQL문이 아닌 ORM에서 제공하는 메서드, 코드 등을 이용하기에 직관적이다.
3) MyBatis
MyBatis (Java Persistence Framework)
- 마이바티스는 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다. 마이바티스는 JDBC로 처리하는 상당부분의 코드와 파라미터 설정및 결과 매핑을 대신해준다. 마이바티스는 데이터베이스 레코드에 원시타입과 Map 인터페이스 그리고 자바 POJO 를 설정해서 매핑하기 위해 XML과 애노테이션을 사용할 수 있다. ( MyBatis 공식 홈페이지 소개 )
MyBatis는 자바에서 SQL Mapper를 지원해주는 Framework이다.
즉, SQL 작성을 직접 하여 객체와 매핑시켜준다.
추가: 프로시저(PL/SQL 같은 친구들), POJO(순수 자바코드, 즉 직접 만든 엔티티(class)), 원시타입(기본형)
SQL Mapper
- SQL문을 이용하여 RDB에 접근, 데이터를 오브젝트(객체)화 시켜준다.
개발자가 작성한 SQL문으로 해당되는 ROW를 읽어 온 후 결과 값을 오브젝트화 시켜 사용가능하게 만들어준다.
즉, RDB에 따라 SQL 문법이 다르기 때문에 특정 RDB에 종속적이다.
References
'백엔드 > Spring' 카테고리의 다른 글
[에러]Database "mem:testdb" not found, either pre-create it or allow remote database creation (0) | 2021.07.19 |
---|---|
[Spring Boot] Gradle로 Build하는 방법 (0) | 2021.06.13 |
[에러] Cause: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 39; 예기치 않은 파일의 끝입니다. (0) | 2021.05.26 |
[Spring Boot] 전송방식에 따른 Parameter 받는 방법 (1) | 2021.04.30 |
[Spring] 파일 단일/다중 업로드(Multipart) (0) | 2021.01.23 |
[Spring] Mybatis 와 JPA 환경설정 차이 (0) | 2021.01.17 |