Spring을 인강을 통해서 배웠기에 무지성으로 Spring Data JPA를 사용했어요.
강의에서도 JDBC를 다루긴 했지만 차이에 대해서는 명확히 다루질 않았기에
JPA에 어떠한 점이 JDBC보다 좋은지
그리고 JPA와 Spring Data JPA는 무슨 차이가 있는지
한번 알아보려 합니다!
0. 그림으로 한 눈에 확인하기
1. JDBC
Java Database Connectivity
JDBC는 인터페이스라고 생각하면 된다.
DBMS 종류에 무관하게 DB 관련 코드를 작성할 수 있게 도와주는 자바 표준 인터페이스이다.
JDBC로 데이터를 삽입하는 코드의 예시이다.
출처) [10분 테크톡] 올레의 JPA와 JDBC
public class ChessBoardDAO{
private Connection connection;
public ChessBoardDAO(Connection connection){
this.connection = connection;
}
public void add(ChessBoard chessBoard, Team team, int roomId) throws SQLException{
for(Position position : chessBoard.getUnits().keySet()){
String query = "INSERT INTO chess_board(roomId, positionX, positionY, unit) + VALUES(?, ?, ?, ?)";
PreparedStatement pstmt = connection.prepareStatement(query);
pstmt.setInt(1, roomId);
pstmt.setInt(2, position.getX());
pstmt.setInt(3, position.getY());
pstmt.setString(4, chessBoard.getUnit(position).get().toString();
pstmt.executeUpdate();
}
}
}
2. JPA
Java Persistent API : 자바 영속성 API
먼저 영속성 컨텍스트이란 Entity를 저장하는 비휘발성 환경을 뜻한다.
DB와의 통신 횟수나 방식을 효율적으로 관리하여 서버의 속도가 빨라지는 장점이 있다.
또한 JPA는 ORM 기술 표준인데 그럼 ORM은 무엇일까?
ORM은 Object Relational Mapping의 약자로 객체와 관계형 데이터베이스의 데이터를 자동으로 연결해주는 것을 말한다.
즉, JPA는 객체와 관계형 DB의 테이블을 짝지어 데이터를 영구적으로 저장할 수 있도록 정해진 Java의 규칙이다.
이를 코드로 구현한 것이 Hibernate이다.
JPA는 Hibernate를 기반으로, HIbernate는 JDBC를 기반으로 작동된다.
JPA의 장점
- 코드가 간결해진다.
- Query를 직접 작성하지 않기 때문에 실수를 방지할 수 있다.
3. Spring Data JPA
JPA를 더 쉽게 사용할 수 있게 돕는 프레임워크
Spring Data JPA는 DB에 접근할 필요가 있는 대부분의 상황에서 Repository를 정의하여 사용한다.
Repository 인터페이스에서 정해진 규칙대로 메소드를 만들면 이에 해당하는 쿼리를 만들어서 Bean으로 자동 등록된다.
아래 코드를 보면 JDBC보다 코드가 얼마나 간결해지는 지 확인이 가능하다.
public class ChessBoardDAO{
@Autowired
ChessBoardRepository chessBoardRepository;
public void add(ChessBoard chessBoard){
chessBoardRepository.save(chessBoard);
}
}
만약 Spring Data JPA를 사용하지 않고 JPA만 사용한다면?
EntityManager로 데이터베이스의 기능을 사용해야 한다.
EntityManager는 영속성 컨텍스트를 관리한다.
Spring Data JPA는 Repository를 통해 EntityManager가 하는 일을 대신 한다.
제 글 중 이 주제에 대해 다룬 포스팅이 또 있는데
약간 결이 다르게? 작성해서 같이 참고해주시면 좋을 거 같아 링크 첨부합니다 :)
'JAVA > [개인프로젝트] GooGoo' 카테고리의 다른 글
CSR VS SSR (0) | 2023.09.10 |
---|---|
[Spring Security] 일반 로그인과 소셜 로그인 (oauth2) 그리고 JWT (0) | 2023.09.06 |
[외부 API 호출] RestTemplate, WebFlux (WebClient) 그리고 WebSocket (0) | 2023.09.02 |
[Spring Boot] 최고의 프로젝트 구조는 무엇일까? (0) | 2023.08.30 |
[JAVA] Selenium으로 구글 로그인 자동화 만들기 (0) | 2023.07.29 |