티스토리 뷰
OXM 서비스 인터페이스
- OXM : XML과 자바오브젝트를 매핑해서 상호 변환해주는 기술
- 코드 수정 없이도 OXM 기술을 자유롭게 바꿔서 적용할 수 있다.
- JAVA Object to XML : Marshaller 인터페이스
- XML To JAVA Object : Unmarshaller 인터페이스
- OXM 기술을 바꿔도 코드를 바꿀 필요가 없다.
@Autowired
Unmarshaller unmarshaller;
@Test
public void unmarshallSqlMap() throws XmlMappingException, IOException {
Source xmlSource = new StreamSource(getClass().getResourceAsStream("/sqlmap1.xml"));
Sqlmap sqlmap = (Sqlmap)this.unmarshaller.unmarshal(xmlSource);
// 코드
}
리소스 접근 추상화
- 다양한 위치에 존제하는 리소스에 접근할 수 있게 추상화해보자.(원격, 서블릿 컨택스트 내 등..)
- 스프링은 리소스 접근 API를 추상화해서 Resource 추상화 인터페이스를 정의했다.
- ResourceLoader : 문자열로 리소스의 종류와 위치(file, classpath, http)를 표현하면 Resource 타입 오브젝트로 변환해준다.
- Resource를 사용하면 리소스 위치와 접근 방법에 독립적인 코드를 만들 수 있다.
Source xmlSource = new StreamSource(sqlmap.getInputStream());
Sqlmap sqlmap = (Sqlmap)this.unmarshaller.unmarshal(xmlSource);
for(SqlType sql: sqlmap.getSql()){
sqlRegistry.registerSql(sql.getKey(),sql.getValue());
}
<bean id="sqlService" class="toby.spring.study.service.OxmSqlService">
<property name="unmarshaller" ref="unmarshaller"/>
<property name="sqlmap" value="classpath:/sqlmap.xml"/> <!--클래스패스를 사용해서 리소스에 접근-->
</bean>
인터페이스 상속을 통한 기능 확장
리소스로부터 SQL 읽음 -> 메모리에 저장 -> SQL에 수정이 있을 때 애플리케이션을 리로딩해야한다.
애플리케이션을 재시작하지 않고 SQL 내용 바꾸는 기능을 추가해보자
인터페이스를 사용하는 이유
- 다형성을 얻기 위해서
- 클라이언트와 의존 오브젝트 사이의 관계를 명확하게 해줄 수 있다.
- 멀티스레드 환경에서 안전하게 HashMap을 조작하려면 ConcurrentHashMap을 사용한다.
// 기존의 SqlRegistry 인터페이스를 상속, sql 데이터를 수정하는 기능까지 추가
public interface UpdatableSqlRegistry extends SqlRegistry{
public void updateSql(String key, String sql) throws SqlUpdateFailureException;
public void updateSql(Map<String,String> sqlmap) throws SqlUpdateFailureException;
}
내장 DB
- 애플리케이션에 내장돼서 애플리케이션과 함께 시작되고 종료되는 DB
- 스프링은 내장현 DB를 손쉽게 이요할 수 있도록 내장형 DB 지원 기능을 제공하고 있다.
- EmbeddedDatabase 인터페이스 제공
<!-- 스프링 내장 DB 설정 -->
<jdbc:embedded-database id="embeddedDatabase" type="HSQL">
<jdbc:script location="classpath:/schema.sql"/>
</jdbc:embedded-database>
EmbeddedDatabase db = new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.HSQL)
.addScript("classpath:/schema.sql")
.addScript("classpath:/data.sql")
.build();
JdbcTemplate jdbcTemplate = new JdbcTemplate(db);
Reference
책 : 토비의 스프링 3.1 Vol.1 스프링의 이해와 원리 (저 이일민)
'book_note > 토비의 스프링' 카테고리의 다른 글
토비의 스프링 VOL.1 CH8 (0) | 2021.07.11 |
---|---|
토비의 스프링 VOL.1 CH7(3) (0) | 2021.07.10 |
토비의 스프링 VOL.1 CH7(1) (0) | 2021.07.10 |
토비의 스프링 VOL.1 CH6(3) (0) | 2021.07.10 |
토비의 스프링 VOL.1 CH6(2) (0) | 2021.07.10 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- c#
- SpringBoot
- orphanRemoval
- JPA
- DataAnnotation
- 다이내믹 프록시
- 스프링
- spring boot
- uploadfive
- Spring
- MSSQL
- 고아 객체
- 준영속
- 빌더 패턴
- 스프링 부트 테스트
- 토비의 스프링
- @Modifying
- OWIN
- 자바의 정석
- JavaScript
- Effective Java
- 영속성
- JpaRepository
- Java
- jQuery
- 스프링MVC
- C# 문법
- Nullable
- default interface
- ASP.NET
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
글 보관함