DB와의 연결, JDBC vs JPA 에 대해

김엄지·2024년 2월 24일
0

Spring

목록 보기
2/21

애플리케이션 서버와 데이터베이스(DB)는 어떻게 소통해야 할까?

JDBC(Java DataBase Connectivity)

JDBC란 DB에 접근할 수 있도록 Java에서 제공하는 API이다.

DB의 JDBC Driver를 제공하면, MySQL, PostgreSQL 등 다양한 DB와 연결가능하며, Java 표준이기 때문에 JVM 위에서 운영되는 애플리케이션에서 자유롭게 사용할 수 있다.

JDBC의 등장으로 손쉽게 DB교체가 가능해졌지만 여러가지 작업 로직들을 직접 작성해야하는 불편함이 있어, 이를 해결하기 위해 (커넥션 연결, statement 준비 및 실행, 커넥션 종료 등의 반복적이고 중복되는 작업들을 대신 처리해주는) JdbcTemplate이 등장하게 되었다.

DB연결이 필요한 곳에서 JdbcTemplate을 주입받아와 사용하면 된다.

JdbcTemplate이 JDBC를 직접 사용할 때 발생하는 불편함을 해결해 주었지만 SQL에 의존적이라 수정 시 취약하고 아직도 복잡하기 때문에, Java 개발자들을 위해 DB와 객체를 매핑하여 소통할 수 있는 ORM이라는 기술이 등장하게 되었다.

ORM(Object-Relational Mapping)

ORM이란 객체와 DB의 관계를 매핑해주는 도구이다.

JPA(Java Persistence API)

JPA란 자바 ORM기술에 대한 API표준 명세이다.

JPA를 사용하면 DB 연결 과정을 직접 개발하지 않아도 자동으로 처리해준다.

객체를 통해 간접적으로 DB 데이터를 다룰 수 있기 때문에 매우 쉽게 DB 작업을 처리할 수 있는 장점을 가지고 있다.

SpringBoot의 JPA

JPA를 사용하여 DB에 데이터를 저장, 수정, 삭제 하려면 트랜잭션 적용이 반드시 필요하다.

Spring 프레임워크에서는 DB의 트랜잭션 개념을 애플리케이션에 적용할 수 있도록 트랜잭션 관리자를 제공한다.

@Transactional 애너테이션을 클래스나 메서드에 추가하면 쉽게 트랜잭션 개념을 적용할 수 있다.

@Transactional(readOnly = true)
public class SimpleJpaRepository<T, ID> implements JpaRepositoryImplementation<T, ID> {
						...
			
		@Transactional
		@Override
		public <S extends T> S save(S entity) {
		
			Assert.notNull(entity, "Entity must not be null");
		
			if (entityInformation.isNew(entity)) {
				em.persist(entity);
				return entity;
			} else {
				return em.merge(entity);
			}
		}

						...
}

Spring Data JPA

Spring Data JPA란 JPA를 쉽게 사용할 수 있게 만들어놓은 하나의 모듈이다.

JPA를 추상화시킨 Repository 인터페이스를 통해 JPA를 간편하게 사용할 수 있다.

Spring Data JPA에서는 JpaRepository 인터페이스를 구현하는 클래스를 자동으로 생성해주기 때문에, 인터페이스의 구현 클래스를 직접 작성하지 않아도 "JpaRepository 인터페이스"를 통해 JPA의 기능을 사용할 수 있다.


참고 자료

profile
나만의 무언가를 가진 프로그래머가 되자

0개의 댓글