To Be Develop
[Spring Boot] JDBC, JdbcTemplate, JPA 차이점 및 활용법! 본문
반응형
Spring Boot에서는 데이터베이스와 상호 작용하기 위해 여러 가지 방법을 제공합니다. 이 중 JDBC, JdbcTemplate, JPA는 가장 일반적으로 사용되는 방법 중 일부입니다. 이 세 가지의 차이점과 각각의 특징을 자세히 설명해보겠습니다.
1. JDBC (Java Database Connectivity)
JDBC는 Java에서 데이터베이스에 연결하고 SQL 쿼리를 실행하기 위한 Java API입니다. 이것은 가장 기본적이고 직접적인 방법입니다. JDBC를 사용하면 개발자가 SQL 쿼리를 직접 작성하고 실행해야 합니다.
특징:
- 직접적인 SQL 쿼리 실행: JDBC를 사용하면 개발자가 SQL 쿼리를 직접 작성하여 데이터베이스에 전송합니다.
- 높은 유연성: 모든 유형의 쿼리 및 데이터베이스 조작이 가능합니다.
- 저수준 API: JDBC는 상당히 저수준의 API이므로 데이터베이스 작업을 처리하기 위해 많은 양의 코드가 필요합니다.
예시:
Connection conn = DriverManager.getConnection(url, username, password);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM users");
while (rs.next()) {
System.out.println(rs.getString("username"));
}
2. JdbcTemplate
JdbcTemplate은 Spring Framework의 일부로 제공되는 JDBC의 확장입니다. JDBC의 저수준 API를 추상화하여 보다 간단하고 효율적인 방식으로 데이터베이스와 상호 작용할 수 있도록 지원합니다.
특징:
- 간결한 코드: JdbcTemplate은 JDBC와 비교하여 훨씬 간결한 코드를 제공합니다.
- 자동 리소스 관리: 커넥션 생성, 예외 처리, 리소스 해제와 같은 작업을 자동으로 처리합니다.
- SQL 파라미터화: 자동으로 SQL 쿼리 파라미터를 처리하여 SQL Injection 공격을 방지합니다.
예시:
List<User> users = jdbcTemplate.query("SELECT * FROM users",
(rs, rowNum) -> new User(rs.getString("username")));
3. JPA (Java Persistence API)
JPA는 객체-관계 매핑(ORM)을 위한 Java 표준 API로, 객체와 데이터베이스 간의 매핑을 자동으로 처리합니다. Hibernate, EclipseLink, OpenJPA 등의 구현체를 사용하여 실제 데이터베이스와 상호 작용합니다.
특징:
- 객체 지향적 접근: 데이터베이스 테이블을 객체로 매핑하여 객체 지향적인 접근을 가능하게 합니다.
- 자동화된 쿼리 생성: 개발자가 SQL 쿼리를 작성할 필요 없이 JPA가 자동으로 SQL을 생성하여 데이터베이스에 전송합니다.
- 캐시 및 지연 로딩: JPA는 자동으로 캐싱과 지연 로딩을 처리하여 성능을 향상시킵니다.
예시:
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
// 추가 필드 및 메서드
// Getter와 Setter
}
선택 기준
- JDBC: 직접적인 제어가 필요하고, SQL 쿼리를 자주 작성해야 하는 경우에 적합합니다.
- JdbcTemplate: 간단한 CRUD 작업 및 SQL 작성 부담을 줄이고자 할 때 유용합니다.
- JPA: 객체 지향적인 설계와 객체-관계 매핑이 필요한 경우에 사용합니다. 대규모 애플리케이션에서 많이 사용됩니다.
Spring Boot에서는 이러한 세 가지 방법 중에서 프로젝트의 요구 사항에 따라 적절한 방법을 선택할 수 있습니다.
https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_%ED%8D%BC%EC%8B%9C%EC%8A%A4%ED%84%B4%EC%8A%A4
https://spring.io/projects/spring-data-jpa
반응형
'dev > SpringBoot' 카테고리의 다른 글
[Spring Boot] Caused by: org.hibernate.service.spi.ServiceException: (0) | 2024.02.11 |
---|---|
[Spring Boot] HTTP 302 error 발생 원인: 웹 애플리케이션 예시 (0) | 2024.02.09 |
[Spring Boot] [Error] Caused by: java.lang.NoSuchFieldError: UUID (1) | 2024.02.08 |