7.1 SQL과 DAO의 분리
- 앞에서 했던 UserDao에서 마지막으로 개선할 점 → SQL을 Dao에서 분리하기
- • 운영 중에 DB의 테이블or필드이름orSQL문이 변경될 수 있는데, 그 때마다 Dao를 수정해서 다시 컴파일하기에는 무리가 있기 때문.
1. XML 설정을 이용한 분리
- 개별 SQL프로퍼티 방식
- SQL 맵 프로퍼티 방식
- SQL이 점점 많아지면 그때마다 ADO에 DI용 프로퍼티를 추가하기 귀찮아지니까
SQL을 하나의 컬렉션으로 담아둠
2. SQL 제공 서비스
- xml 방식의 문제점을 해결하기 위해 DAO가 사용할 SQL을 제공해주는 기능을 독립
SQL 인터페이스 서비스
// SqlService 인터페이스
package springbook.user.sqlservice;
public interface SqlService {
Srting getSql(String key) throws SqlRetrievelFailureException;
//런타임 예외이므로 특별히 복구해야 할 필요가 없다면 무시해도 됨
}
7.2 인터페이스의 분리와 자기참조 빈
1. XML 파일 매핑
JAXB(Java Architecture for XML Binding)
- xml에 담긴 정보를 파일에서 읽어오는 방법 중 하나(가장 간단)
- 언마샬링 : xml 문서를 읽어서 자바 오브젝트로 변환
- 마샬링 : 바인딩 오브젝트를 XML문서로 변환
- 직렬화(Serialization) : 자바오브젝트를 바이트 스트림으로 바꾸는 것