hibernate

자바 언어를 위한 ORM 프레임워크로, JPA*를 구현하며 내부적으로는 JDBC** API를 사용한다.
* JPA : 자바 애플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
** JDBC : 자바 프로그래밍 언어와 다양한 데이터베이스 SQL 또는 테이블 형태의 데이터 사이에 독립적인 연결을 지원하는 표준
| 장점 |
단점 | ||
| 생산성 | SQL을 직접 사용하지 않고, 메소드 호출만으로 쿼리가 수행되므로 반복 작업을 하지 않아 생산성이 높아진다. | 성능 | 메소드 호출만으로 쿼리를 수행하는 것은 직접 SQL문을 작성하는 것보다 성능상 좋지 않다. |
| 유지보수 | 테이블 컬럼이 변경되었을 때, 관련된 DAO의 파라미터, 결과, SQL 등을 대신 수행해 주기 때문에 유지보수 측면에서 좋다. | 세밀함 | 메소드 호출만으로 데이터베이스 데이터를 조작하기에는 한계가 있다. (이를 보완하기 위해 JPQL을 지원) |
| 특정 벤더*에 종속적이지 않음 | 설정 파일에서 JPA에게 어떤 DB를 사용하고 있는지를 알려 주기만 하면 간단하게 DB를 변경할 수 있다. | ||
| 패러다임 불일치 해결 | 상속, 연관 관계 등 객체와 관계형 데이터베이스와의 패러다임 불일치를 해결할 수 있다. | 러닝커브 | 공부해야 할 것이 많다. |
JPA 와 MyBatis
| MyBatis | JPA |
| SQL 직접 제어 가능 | 표준화된 인터페이스 |
| 학습 용이성 | 자동 매핑으로 개발 및 유지보수성 향상 |
| CRUD 단순 반복 작업 | 높은 학습곡선 |
| 데이터베이스에 종속적 | 복잡한 SQL 생성의 어려움 |
상황별 선택
| 종류 | 상황 |
| MyBatis | 복잡한 쿼리와 SQL 제어가 필요한 경우 |
| JPA | 간단한 매핑 및 객체 지향적인 접근이 필요한 경우 |
SLF4J
다양한 로깅 프레임워크에 대한 추상화(인터페이스) 역할을 하는 라이브러리

개발시 SLF4J API를 사용하여 로깅 코드를 작성하고, 배포시 바인딩된 Logging Framework가 실제 로깅 코드 수행
System.out.println()이 아닌 로깅을 사용하는 이유
| 1. 출력 형식을 제공할 수 있다 |
| 2. 로그 레벨에 따라 남기고 싶은 로그를 별도로 지정할 수 있다 |
| 3. 콘솔뿐만아니라 파일이나, 네트워크 등 로그를 별도 위치에 남길 수 있다 |
DB Dialect
JPA 같은 ORM은 객체 매핑을 통해 자동으로 쿼리를 작성해 주는데, DBMS 종류마다 쿼리가 조금씩 다르기 때문에 이를 알릴 수 있도록 데이터베이스 유형을 지정해 주는 것
· 추상화된 Dialect(방언) 클래스를 사용함으로써, 개발자는 데이터베이스에 의존적인 개발을 지양할 수 있으며 여러 가지 이유로 데이터베이스를 변경할 때 Dialect만 변경하면 된다.
참고 블로그
[Spring boot] JPA Dialect(방언) 설정에 관하여 (tistory.com)
로깅이(SLF4J) 뭐야 그냥 print 찍으면 되는거 아니야? :: 고민의 흔적 (tistory.com)
[Logging] SLF4J란? (tistory.com)
JPA vs Mybatis, 현직 개발자는 이럴 때 사용합니다. I 이랜서 블로그 (elancer.co.kr)
'BACK > Spring' 카테고리의 다른 글
| Spring 08 (1) | 2024.07.24 |
|---|---|
| Spring 07 (0) | 2024.07.22 |
| Spring 05 - JdbcDaoSupport (0) | 2024.07.16 |
| Spring 04 - annotation (0) | 2024.07.15 |
| Spring 03 - annotation (0) | 2024.07.12 |