ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [토비의 스프링 3.1 Vol.1] 7장 스프링 핵심 기술의 응용
    Java/Spring Framework 2018. 3. 23. 00:14

      [사족]

      6장 리뷰 이후 1달정도 지났다. 중간에 자바 성능 튜닝 이야기를 읽은 이유도 있지만 7장도 6장 만큼 분량이 상당하다. 내용도 기능 추가 및 리팩토링으로 빠르게 전환되서 술술 읽히지도 않았다. 이제 토비스프링의 고비를 어느정도 넘긴거 같다. 완독도 그리 어려운 일은 아닐 것 같다는 생각이 든다.

     

      [내용]

      7장의 목차

          7.1 SQL과 DAO의 분리

          7.2 인터페이스의 분리와 자기참조 빈

          7.3 서비스 추상화 적용

          7.4 인터페이스 상속을 통한 안전한 기능확장

          7.5 DI를 이용해 다양한 구현 방법 적용하기

          7.6 스프링 3.1의 DI

          7.7 정리


      6장까지 점점 더 객체지향적이고 모듈화된 코드를 작성해 왔다. 여기서 더 나아간다. DAO에 속해 있던 SQL을 분리한다. 처음에는 bean에 property들로 SQL문을 저장한 뒤 불러와 사용하는 방식으로 분리한다. 다음엔 빈이 아닌 XML 파일로 분리하기 위해 JAXB(Java Architecture for XML Binding)를 사용한다. JAXB는 XML문서를 읽어서 자바 객체로 바꾸는 언마샬링(unmarshalling), 반대로 자바 객체를 XML로 변환하는 마샬링(marshalling)을 지원하는 OXM(Object Xml Mapping) 기술이다. SQL문을 적절히 의미있게 XML 데이터로 구성하면 JAXB를 이용하여 자바 객체로 불러와 사용할 수 있게 되는 것이다.


      다음엔 서비스 추상화를 적용시킨다. JAXB뿐만 아니라 다른 OXM기술로도 대체가 가능하게 스프링의 OXM 추상화 기능을 이용한다. Unmarshaller를 사용하면 기술에 관계없이 unmarshal(source)이라는 동일한 메소드로 언마샬링이 가능해진다. 리소스를 불러 오는 부분에도 서비스 추상화가 적용된다. file:, classpath:, http등 다양한 위치로부터 파일을 불러올 수 있기 때문에 이 부분도 ResourceLoader를 사용하여 일관되게 불러올 수 있게 적용한다.


      7.4장에는 인터페이스와 DI에 대해 조금 더 다루고 있다. DI를 의식하며  프로그래밍을 하면 더 객체지향적인 코드를 작성하기가 쉬워진다. SRP와 OCP원칙을 지키기 위해 책임에 따라 클래스를 나누고, 인터페이스를 사용해 객체간에 느슨한 연결을 할 수 있다. 더 유지보수 하기, 확장하기 쉬운 구조로 개발을 진행해 나갈 수 있는 것이다.


      7.6장에 XML의 빈 설정을 Java로 옮기는 부분이 개인적으로 가장 인상깊었다. 요새는 왠만해서는 더이상 XML에 빈을 일일히 정의하지 않는다. 스프링 부트가 나오면서 더더욱 안쓰게 된 것 같다. XML로 일일히 등록 했던 빈들을 Java Configuration 파일로 옮기고, 클래스들에 직접 빈설정(@Component, @Repository, @Service)을 붙임으로서 Java 빈 설정 까지도 거의 없애 나간다. 스프링 3.0에 @MVC를 처음 접했을 때 서비스 클래스에는 @Service, Data Access Object에는 @Repository, 기타 빈으로 등록해야 하는 클래스는 @Component로 되어있었는데, 새삼 그 때 처음의 기억이 떠올랐다. 점점 더 기술은 단순화 추상화 되면서 더 편리해 지는 것 같지만 또 한편으로는 새로운 기술들과 알아야 하는 것들이 계속 나오니 참 아이러니하다. 아무튼, XML 빈 설정 파일도 제거했다. 그리고는 조금 더 실제 서비스 개발 할 때 직면할 수 있는 부분들에 대해 도움이 되는 설명들이 나온다. @Import, @Profile, @ActiveProfiles, @PropertySource, @Value 등 단편적으로 필요할 때마다 구글링해 봤던 것들을 정리할 수 있다.

    댓글

Designed by Tistory.