BACK/Spring
Spring 06
dazz6
2024. 7. 19. 18:00
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)