1. 영속성(Persistence)
- 데이터를 생성한 프로그램이 종료되어도 사라지지 않는 데이터의 특성.
- 영속성을 갖지 않는 데이터는 메모리에서만 존재하기 때문에, 프로그램을 종료하면 모두 사라진다.
- 메모리 상의 데이터를 파일 시스템, 관계형 DB, 등을 활용하여 영구적으로 저장해서 영속성을 부여한다.
데이터를 DB에 저장하는 3가지 방법
- JDBC(Java Database Connectivity)
- Java에서 DB에 접속하고 SQL을 실행할 수 있게 해주는 Java 표준 API.
- Spring JDBC
- Spring Framework에서 제공하는 JDBC 모듈, JDBC의 복잡함을 간소화. ex) JDBC Template
- Persistence Framework: DB와 연동되는 시스템을 빠르게 개발하고 안정적인 구동을 보장해주는 Framework.
- SQL Mapper: Java의 메소드와 SQL을 매핑. (SQL 문장을 직접 작성해 DB의 데이터를 다룬다)
ex) MyBatis - ORM(Object Relational Mapping): DB 테이블과 Java 객체를 매핑하여, SQL 없이 객체를 통해 DB 작업 처리.
ex) JPA, Hibernate
- SQL Mapper: Java의 메소드와 SQL을 매핑. (SQL 문장을 직접 작성해 DB의 데이터를 다룬다)
2. MyBatis
- SQL을 직접 작성하여 DB와 상호 작용하는 SQL Mapper Framework.
- XML과 Annotation을 사용하여 SQL 매핑을 정의. (XML 파일에 Query를 직접 작성하고, JDBC 코드로 바꾸어 실행)
- SQL을 직접 작성.
장점
- SQL Query를 직접 작성하므로, 최적화된 Query를 구현할 수 있다.
- Query 자체를 독립적인 파일(XML)에 작성할 수 있다.
- 복잡한 쿼리문 작성 가능.
단점
- 변경시, SQL Query를 직접 수정해야 한다.
- XML 특성상, Query에 오류가 있더라도 빌드과정에서 오류를 확인할 수 없다.
3. JPA (Java Persistence API)
- Java에서 ORM 기술을 표준화하기 위한 API.
- 객체 중심의 매핑을 사용.
- JPA는 ORM을 사용하기 위한 Interface의 집합이며, 사용을 위해 이를 구현한 Hibernate 등 ORM Framework를 사용해야 한다.
- Hibernate는 SQL을 직접 사용하지 않고, 메소드 호출만으로 Query가 수행된다.
- JPQL(JPA Query Language)을 사용하여 객체를 검색하고 조작.
동작
- JPA가 JDBC API를 사용해서 DB와 통신하고 SQL을 호출하고 반환한다.
장점
- Query를 직접 작성하지 않아서 간편하다.
단점
- 복잡한 연산을 수행하기에는 부적절하다.
- 초기 생산성은 높을 수 있으나, 사용시 성능상 이슈가 발생할 수 있다.
- 성능 이슈의 연장선으로 복잡한 내부 로직을 이해해야 할 필요가 있다.
참고
- https://velog.io/@kbk3771/Java-%ED%8D%BC%EC%8B%9C%EC%8A%A4%ED%84%B4%EC%8A%A4-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-Persistence-Framework#mybatis
- https://lealea.tistory.com/239
- https://velog.io/@rladuswl/ORM%EC%9D%98-%EA%B0%9C%EB%85%90-JPA%EC%99%80-MyBatis-%EC%B0%A8%EC%9D%B4
- https://mininkorea.tistory.com/39
- https://incheol-jung.gitbook.io/docs/q-and-a/spring/jpa-vs-mybatis
'DB' 카테고리의 다른 글
[Relational database] 10. 개념적 설계와 ER 모델 (1) | 2024.10.13 |
---|---|
[Relational database] 07. 보안과 뷰 *** (1) | 2024.10.12 |
[Relational database] 06. SQL *** (0) | 2024.10.04 |
[Relational database] 05. 관계 대수 * (0) | 2024.10.04 |
[Relational database] 04. 파일 조직과 인덱스 (1) | 2024.10.03 |