7. Applications of Core Spring Technologies
7장 스프링 핵심 기술 응용
7.1. SQL과 DAO의 분리
7.1.1 XML 설정을 이용한 분리
import org.springframework.jdbc.core.JdbcTemplate
import javax.sql.DataSource
class UserDaoJdbc(
dataSource: DataSource
) {
private val jdbcTemplate: JdbcTemplate = JdbcTemplate(dataSource)
// XML에서 주입받는 SQL
private var sqlAdd: String = ""
fun setSqlAdd(sqlAdd: String) {
this.sqlAdd = sqlAdd
}
fun add(user: User) {
jdbcTemplate.update(
sqlAdd,
user.id,
user.name,
user.password,
user.email,
user.level.value,
user.login,
user.recommend
)
}
}
data class User(
val id: String,
val name: String,
val password: String,
val email: String,
val level: Level,
val login: Int,
val recommend: Int
)
enum class Level(val value: Int) { BASIC(1), SILVER(2), GOLD(3) }7.1.2 SQL 제공 서비스
7.2. 인터페이스의 분리와 자기참조 빈
7.2.1. XML 파일 매핑
7.2.2 XML 파일을 이용하는 SQL 서비스
7.2.3 빈의 초기화 작업
7.2.4 변화를 위한 준비: 인터페이스 분리
다중 인터페이스 구현
7.2.5 자기참조 빈으로 시작하기
7.2.6 디폴트 의존관계
구조적 핵심 정리
7.3. 서비스 추상화 적용
7.3.1. OXM 서비스 추상화
OXM 서비스 인터페이스
JAXB 구현 적용
OXM 테스트 코드 구조
Castor로 기술 교체
7.3.2 OXM 서비스 추상화 적용
멤버 클래스를 사용하는 이유
7.3.3 리소스 추상화
Resource 적용
7.3의 설계적 의미
7.1.~7.3. 재해석
1️. 시작점: DAO 안에 SQL이 있다 (7.1 이전 상태)
문제
2️. 7.1 — SQL을 서비스로 분리
2️-1️. 7.1의 첫 구현: Map 기반 SqlService
3️. 7.1 후반 — SQL을 파일로 분리하고 싶다
4️. 7.2 — XmlSqlService가 너무 많은 일을 한다
5️. 7.2 — 책임을 인터페이스 단위로 분리
5-1️. 저장 책임 분리
5-2️. 읽는 책임 분리
5-3️ 이제 SqlService는 조립자 역할만 한다
6️. 7.3 — 그런데 아직 JAXB에 종속되어 있다
7️. 7.3 — OXM 추상화 적용
8️. 최종 구조 (7.1 ~ 7.3 통합 결과)
단계
추상화 대상
🔥 전체 흐름을 한 문장으로
🎯 이 흐름이 자연스러운 이유
Last updated