티스토리 뷰

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
링크
«   2025/06   »
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
글 보관함