💋 Spring을 사용해 DB에 접근하자!
Spring을 사용한 애플리케이션에서 DAO(Data Access Object) 또는 레포지토리를 만들었다면, 추가적으로 예외 처리에 대한 기능을 할 수 있도록 만들어야 한다.
아래와 같이 @Repository
어노테이션을 붙여 주는 것이 가장 좋은 방법이다.
@Repository
public class SomeMovieFinder implements MovieFinder {
// ...
}
@Repository
어노테이션을 사용하면 컴포넌트 스캔을 통해 자동으로 빈으로 등록된다. 기존에 하던 수동 작업이던 XML 설정 파일에 DAO나 Repository 빈으로 등록하는 것을 더이상 하지 않아도 된다!
DAO나 Repository 클래스에서는 애플리케이션이 종료되더라도 데이터를 계속 유지되도록 해야 하는데, 이것을 도와주는 것을 영속성 기술이라고 한다.
예시로는 JDBC, Hibernate, MyBatis 등이 있다. 영속성 기술을 이용하여 데이터를 저장하고 조회할 수 있다.
무튼 DAO나 Repository 클래스는 각자 사용하는 영속성 기술에 따라서 영속성 리소스에 접근할 수 있어야 한다.
예를 들어 JDBC 기반의 Repository는 JDBC DataSource에 접근해야 하고, JPA 기반의 Repository에서는 @PersistenceContext
어노테이션을 사용하여 EntityManager
를 주입할 수 있다.
각자 상황에 따라서 @Autowired
, @Inject
, @Resource
, @PersistenceContext
어노테이션을 사용하여 의존성을 주입하면 된다.
@Repository
public class JpaMovieFinder implements MovieFinder {
@PersistenceContext // 영속성 리소스!
private EntityManager entityManager;
// ...
}
그러면 이번 포스팅에서 이야기할 키워드에 대해 먼저 공부해보자!
✔ JDBC(Java Database Connectivity)
- 자바를 사용하여 관계형 데이터베이스에 접근하기 위한 자바 API
✔ DataSource
- 데이터베이스 커넥션 풀을 생성하고 관리하기 위한 인터페이스
✔ JdbcTemplate, SimpleJdbcCall
- 데이터에 접근을 도와주는 클래스
- 스프링 프레임워크에서 제공하는 JDBC 지원 클래스
- 데이터 액세스에 필요한 기능들을 쉽게 제공한다.
@Repository
public class JdbcMovieFinder implements MovieFinder {
private JdbcTemplate jdbcTemplate;
@Autowired
public void init(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
// ...
}
이 코드는 DataSource
를 주입받고 있고, dataSource
를 가지고 데이터에 접근을 도와주는 클래스인 JdbcTemplate
을 만들고 있다.
💋 Spring JDBC를 사용하면 편리해진다!
아래 표에서 보면, 그간 맨땅에 헤딩 JDBC에 비해서 내가 해야 했던 모든 Action들을 스프링의 JDBC가 많이 가져가서 해주고 있는 것을 볼 수 있다.
Spring JDBC를 사용하면 DB와 Connection을 맺고 끊음에 대한 과정을 생략하고, 내가 하고 싶은 쿼리에 집중할 수 있어서 굉장히 편리하다! 칭찬해
💋 Spring JDBC를 사용하여 DB에 접근하는 방법
Spring JDBC를 사용해 DB에 접근하는 것에는 여러 가지 방법이 있다.
// TODO: 나의 코드에 어떤 것이 어떤 이유로 적합한지에 대해서 잘 생각해보면 좋을 것 같다.
- JdbcTemplate의 세 가지 방법
- SimpleJdbcInsert: 새로운 방법
- SimpleJdbcCall
- RDBMS 객체 스타일도 있다.
각 방법을 하나씩 살펴보는데, 아직 다 알아듣기 어렵다!
아래의 것들을 종류별로 코드에 사용해봐서 손에 익힌 후에 각자 어떤 곳에 사용하면 좋은지, 어떤 근거로 사용하는 지에 대해 스스로 생각해보면 좋을 것 같다.
✔ JdbcTemplate
- 가장 전통적이고 인기 있는 Spring JDBC 접근 방식
✔ NamedParameterJdbcTemplate
- JDBC의 일반적인 ? 자리 표시자 대신에 이름 있는 매개 변수를 제공하여 문서화 및 사용 편의성을 향상시키는 방식
✔ SimpleJdbcInsert / SimpleJdbcCall
- 데이터베이스 메타데이터를 최적화하여 필요한 구성 양을 제한하는 방식
- 이름 있는 매개 변수를 사용하여 열 이름과 일치하는 매개 변수 맵을 제공하는 방식으로, 데이터베이스가 충분한 메타데이터를 제공하는 경우에만 작동한다.
✔ RDBMS 객체
- MappingSqlQuery, SqlUpdate 및 StoredProcedure를 포함하는 객체를 생성
- 데이터 액세스 계층의 초기화 중에 재사용 가능하고 스레드 안전한 객체를 만든다.
다음 포스팅에서는 JdbcTemplate을 사용해서 DB에 접근하고, Querying과 Updating을 하는 방법에 대해 공부해볼 것이다!