HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
📝
남득윤 학습 저장소
/
⛱️
토비의 스프링 3.1 Vol.2 스프링의 기술과 선택
/
2️⃣
2장 - 데이터 액세스 기술
2️⃣

2장 - 데이터 액세스 기술

@참고)
스프링 DB 2편 - 데이터 접근 활용 기술 - 인프런 | 강의
백엔드 개발에 필요한 DB 데이터 접근 기술을 활용하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다. 백엔드 개발자라면 반드시 알아야하는 스프링 데이터 접근 기술 Part.2 📣 확인해주세요! 본 강의는 자바 스프링 완전 정복 시리즈의 7번째 강의입니다.
스프링 DB 2편 - 데이터 접근 활용 기술 - 인프런 | 강의
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-2/dashboard
스프링 DB 2편 - 데이터 접근 활용 기술 - 인프런 | 강의
 
스프링이 지원하는 다양한 데이터 액세스 기술을 살펴보자.
 

2.1 공통 개념

모든 기술에 공통적으로 적용되는 원칙과 기본 개념을 정리하자
 

2.1.1 DAO 패턴

  • 데이터 액세스 계층은 DAO 패턴이라 불리는 방식으로 분리하는 것이 원칙이다.
  • 이를 통해 얻을 수 있는 가장 큰 장점은 이를 통해 서비스 계층의 코드를 기술이나 환경에 종속되지 않는 순수한 POJO로 개발할 수 있다는 것이다.
The DB is a Detail!!!! - figure from Clean Architecture with Spring by Tom Hombergs @ Spring I/O 2019 (link)
The DB is a Detail!!!! - figure from Clean Architecture with Spring by Tom Hombergs @ Spring I/O 2019 (link)
 
  • 하지만 많은 경우 개발 편의성 및 속도를 위해 Data Access Layer (Persistence Layer) 와 Service Layer (Application Layer)의 Model 이 통합 되는 경우도 많다.
  • DAO는 인터페이스를 이용해 접근하고 DI 되도록 만들어야 한다.
    • DAO 인터페이스에는 구체적인 데이터 액세스 기술과 관련된 어떤 API나 정보도 노출하지 않는다.
    • 메서드 시그니처, 반환 타입, 심지어 예외 까지도!
 

2.1.2 템플릿과 API

  • 데이터 액세스 기술을 사용하는 코드는 대부분 try/catch/finally와 판에 박힌 방복되는 코드로 작성된다.
  • 스프링은 템플릿/콜백 패턴을 이용해 이 문제를 해결하였다.
  • 스프링은 템플릿/콜백 패턴을 통해 코드 반복 문제 뿐만 아니라 예외 변환과 트랜잭션 동기화 작업 까지 수행해준다.
 

2.1.3 Datasouce

  • Java의 모든 데이터 액세스 기술은 JDBC를 근간으로 하며 DataSource, Connection을 필수 리소스로 가진다.
 
  • 스프링에서 사용되는 주요 DataSource의 종류를 알아보자.
    • SimpleDriverDataSource
      • 테스트용, 메번 DB 커넥션 생성, 풀 관리 X
    • SingleConnectionDataSource
      • 테스트용, 하나의 DB 커넥션 사용, 풀 관리 X
 
See Also)
🤽
JDBC Connection을 얻는 법
  • DriverManagerDataSource
  • HikariDataSource - 스프링2.0 이후의 기본 커넥션 풀(DataSource) 구현체
 

2.2 JDBC

  • JDBC는 자바의 데이터 액세스 기술의 기본이 되는 로우레벨의 API이다.
  • 안정적이고 유연한 기술이지만 반대로 너무 로우레벨 기술이기도 하다.
  • 간단한 SQL을 하나 실행하는 데도 매우 많은 설정코드, try catch 처리가 필요하며 심지어 체크 예외인 SQLException에 대한 처리도 필요하다.
 
  • 앞서 살펴보았듯이 Spring은 Spring data jdbc와 jdbcTemplate을 통해 이 문제를 해결한다.
 

2.2.1 Spring Jdbc 기술과 동작 원리

JdbcTemple 종류

  • JdbcTemplate은 가장 기본이 되는 클래스이다.
  • NamedParameterJdbcTemplate 은 ? placeholder 대신 필드의 이름을 사용할 수 있게 해준다.
 
  • 책에 simplejdbctemplate 이녀석이 나오기는 하지만 위 두 클래스가 더 선호되기 때문에 Deprecate 되었다고 한다. 쓰지 말자
  • 관련 내용이 2.7.4 에도 있다.

Template 에서 처리 되는 작업

  • Connection 조회, (열고 닫기 - Connection pool 을 사용하면 조회)
  • Jdbc 사용을 위해 Statement 혹은 PreparedStatement 등을 생성
  • Statement 실행
  • (RowMapper를 통해) ResultSet을 돌며 쿼리 결과 바인딩
  • 예외 처리와 변환 - spring의 추상 예외인 DataAccessException 으로 변환해준다.
  • 트랜잭션 처리
 

코드에서 확인해보자

 
notion image
 
템플릿에 콜백을 인자로 받는 전형적인 템플릿/콜백 패턴을 사용한 코드를 확인 할 수 있다!
 
notion image
template의 코드 action.doInConnection(conToUse)를 따라가다 보면 나오는 result set 처리를 담당하는 부분
 
Transaction 처리의 경우 TransactionManager에서 담당하기 때문에 jdbc.core 패키지에서는 관련 코드를 찾아 볼 수 없다.
 
이후 구체적인 사용법, 2.3 iBatis, SqlMaps와 관련된 부분은 생략합니다.
 

2.4 JPA, 2.5 하이버네이트

  • jpa는 java 표준 ORM 기술이다.
  • ORM은 OOP와 RDB간에 존재하는 패러다임의 불일치를 해결하고자 하는 목적으로 등장하였다.
 

2.6 트랜잭션

  • 스프링 트랜잭션 추상화의 핵심 인터페이스는
  • PlatformTransactionManager