Twitter
- 제주올레 12코스 '생이기정' 봄소식 전해드려요. 특히 고스트의 임무 수행 사진 추천. ㅎㅎ http://fantazic.com/archives/435 4 hrs ago
- @yorena 몇번 구직 사례도 봤어요. 지인 소개하는 경우도 있었구요. 잘 됐을까나... in reply to yorena 4 hrs ago
- @jy788 서둘러 집으로 돌아왔는데 석양을 보고 왔으면 더 좋았을 뻔 했네요. 사진으로 봐도 너무 멋지네요. in reply to jy788 6 hrs ago
- More updates...
Posting tweet...
Powered by Twitter Tools
카테고리
- Java (13)
- Ruby (4)
- Software & Developer (54)
- 그들의 이야기 (12)
- 깨달음으로 가는 길 (47)
- 러블 이야기 (8)
- 시골생황 (8)
-
최근 작성글
-
최근 덧글
- sebastian on Daum 제주에서 일해야하는 3가지 이유
- 따지크 on Big Think – 창의적인 전략의 발굴과 실천방법
- alley on Big Think – 창의적인 전략의 발굴과 실천방법
Spring Dependency Injection 정리
오늘부터 아침 스터디를 시작했다. 업무 시작 1시간 전에 나와서, 30분간 각자 책을 읽거나 인터넷에서 관심있는 아티클을 읽고 나머지 30분간 각자가 배운 내용을 공유하는 방식으로 진행하기로 했다.
오늘 공부할 주제로 “Spring Dependency Injection & Java 5″ 아티클을 선택했다. 최근 Spring 관련 정보를 너무 멀리 한 것 같아서 SpringSource 팀 블로그에서 최근 글 리스트를 살펴봤고, 이 글에 끌려서 읽기 시작했다.
간단히 내용을 요약하자면, Spring에서 DI를 구현할 수 있는 3가지 방법에 대해 설명이 되어 있고 각각의 장단점에 대해 잘 설명이 되어 있다.
가장 기본적이면서 많이 쓰이고 있는 방식은 XML 설정 파일을 통해 의존성을 설정해 주는 방식이다. XML 방식은 의존성 설정 파일을 한 곳에 모아서 관리할 수 있기 때문에 코드와 설정이 분리되어 있고, 중앙에서 전체 구조를 파악하기 좋은 장점이 있으나 Type Safety 체크가 어렵고 리팩토링 친화적이지 않은 단점 때문에 다른 대안을 필요로 한다.
XML 방식에 대한 대안으로 annotation 기반으로 코드에 의존성을 선언할 수 있는 방식이 Spring 2.5에서 소개되었다. 코드에 선언된 @Autowired annotation과 @Qualifier annotation을 사용해서 의존성을 삽입할 수 있다. 이 방식은 코드와 설정 파일이 한 곳에 있어서 의존성 파악이 쉬운 장점이 있지만 반대로 의존성 설정이 코드에 흩어져 있어서 전체적인 구조 파악을 방해할 수도 있다. XML 방식보다는 Type Safety를 더 정확히 보장해 주지만 복잡한 설정은 XML을 추가로 사용해야 하는 단점이 있다.
// In file OrderServiceImpl.java: public class OrderServiceImpl implements OrderService { private OrderRepository orderRepository; @Autowired public JdbcOrderServiceImpl(OrderRepository orderRepo) { this.orderRepository = orderRepo; } // ... } // In file JdbcOrderRepositoryImpl.java: public class JdbcOrderRepositoryImpl implements OrderRepository { @Autowired @Qualifier("myDataSource") private DataSource orderDataSource; // ... }code from ‘Introduction to the Spring Framework 2.5′ by Rod Johnson
마지막으로 현재 개발 중에 있는 JavaConfig 방식이 있다. XML로 설정하던 설정 파일을 Plain Java 코드로 구현하는 방식으로 완벽하게 Type Safety를 보장해 주며 코드와 설정 파일을 분리시켜 주는 장점을 그대로 가지고 있는 방식이다. RubyOnRails에서 설정 파일을 Ruby 파일로 구현하는 것과 같은 방식이라 할 수 있다.
@Configuration public class MyConfig { @Bean public Person rod() { return new Person("Rod Johnson"); } @Bean(scope = Scope.PROTOTYPE) public Book book() { Book book = new Book("Expert One-on-One J2EE Design and Development"); book.setAuthor(rod()); // rod() method is actually a bean reference ! return book; } }code from ‘A Java configuration option for Spring’ by Rod Johnson’
결론적으로 세 가지 방식을 통해 DI를 구현할 수 있기 때문에 개발자가 상황에 맞게 적절한 DI 구현 방식을 선택할 수 있는 기회가 생겼다고 할 수 있다. 기존의 XML 방식은 복잡한 구조의 대형 프로젝트에서 여전히 유용하게 사용될 수 있을 것이며, 간단한 프로젝트에서는 annotation 방식을 통해 번거로운 XML 작업 없이 프로젝트 개발이 가능해졌다. 그리고 앞으로 발표된 JavaConfig 방식은 IDE와 연동해서 리팩토링에 친화적이며 Type Safety를 보장해 주는 이점이 극대화될 수 있을 것 같다.