Spring 프레임워크 왜 사용하나? ( Spring 프레임워크를 사용하는 이유 )


첫번째는 Spring 프레임워크가 테스트하기 쉬운 구조로 코드를 개발하는 것이 가능하도록 지원한다는 것이다. Spring 프레임워크가 기본적으로 제공하고 있는 AbstractTransactionalSpringContextTests, AbstractTransactionalDataSourceSpringContextTests 클래스 때문만이 아니라 Spring 프레임워크의 핵심 기능인 Dependency Injection은 개발자들이 원하건 원하지 않건 테스트하기 쉬운 구조로 코딩하는 것이 가능하도록 지원하게 된다. 처음에는 단위테스트 코드를 작성하지 않더라도 추후에 단위 테스트 코드를 작성할 때 그 위력을 느낄 수 있다. Spring 프레임워크가 지원하는 Setter Injection은 디자인 패턴의 Strategy Pattern을 근간으로 하고 있기 때문에 이 같은 효과를 가져올 수 있다. 개발 경력이 많은 자바 개발자라 할지라도 테스트 용이한 소스 코드를 구현하는 것이 생각만큼 쉽지 않다. 그러나 Spring 프레임워크를 이용할 경우 이 같은 효과를 자연스럽게 얻을 수 있게 된다. 초보 개발자라 할지라도 Spring 프레임워크 기반으로 개발하게 될 경우 처음에는 그 가치를 느끼지 못하겠지만 개발 경험이 쌓이면서 그 가치를 이해하게 되면서 점점 더 테스트 용이한 코드를 만들어 낼 수 있도록 유도한다는 측면에서 큰 점수를 주고 싶다.


두번째는 인스턴스의 생성과 클래그간의 의존관계에 대한 고민을 덜어주고 있다는 측면이다. 인스턴스의 생성에 대한 측면이 더 강하다고 생각된다. 지금까지 많은 자바 개발자들은 인스턴스를 Singleton으로 생성할지 Non Singleton으로 생성할지에 대한 고민을 거의 하지 않은 것이 사실이다. 개인적으로 인스턴스의 생성과 의존관계에 기본이 잘 되어 있는 애플리케이션의 경우 유지보수와 확장성이 좋다고 생각한다. 그러나 개발자들이 이 같은 효과를 얻기 위해서는 디자인 패턴까지 이해한 상황에서 설계가 진행되어야 한다. 그러나 국내 현실에서 이 같은 부분까지 고민하면서 개발하기란 쉽지 않은 것이 사실이다. Spring 프레임워크는 개발자가 의도하지 않더라도 인스턴스의 생성에서부터 의존관계를 관리하는 것이 가능하도록 지원해준다. 인스턴스의 생성에서는 Singleton 인스턴스 생성을 위한 static을 사용하지 않아도 됨으로 좀 더 OOP적인 개발이 가능하도록 유도한다. 또한 인터페이스의 사용을 유도함으로서 각 클래스, 컴포넌트간의 의존관계를 줄여주는 효과를 얻을 수 있다. 이 같은 모든 효과는 애플리케이션의 개발을 완료한 다음 유지보수업무를 진행할 때 큰 효과를 볼 수 있다. 물론 애플리케이션을 개발하는 도중에도 무수히 많은 유지보수성(기능의 변경) 업무가 발생하기 때문에 애플리케이션을 개발하는 도중에도 큰 효과를 얻을 수 있게 된다.


위 두가지 이유로 Spring 프레임워크를 사용해야 한다는 것은 당위성이 너무 약하게 생각될 것이다. 나는 단지 Spring 프레임워크가 가지는 잇점들 중 핵심적이라고 생각되는 두가지에 대하여 다루고 있을 뿐이다. 그러나 이 두가지가 애플리케이션 개발에 있어서는 상당히 중요한 부분이라고 생각된다. 이 두가지 요소를 제대로 구현하지 못한 소스코드들은 유지보수하기 힘들뿐만아니라 테스트하기 힘든 상황이 발생할 것이다. 테스트하기 힘든 코드는 점점 더 개발자들이 테스트하지 않도록 만들어버린다. 모든 것에 있어서 기본이 가장 중요하듯이 애플리케이션 개발에 있어서도 기본이 제대로 서 있을 때 품질 좋은 소스코드를 만들어 낼 수 있지 않을까 생각한다.


물론 위와 같은 잇점은 Spring 프레임워크를 제대로 사용할 때 더 큰 효과를 얻을 수 있지만, Spring 프레임워크의 일부 기능을 사용하더라도 얻을 수 있는 장점들이 많다. Spring 프레임워크를 애플리케이션 개발의 어느 측면에서 활용할지는 Spring 프레임워크를 사용하는 개발자의 몫이라고 생각한다. Spring 프레임워크의 기능 중 여러분의 프로젝트에 적용하면 좋은 것으로 기대되는 기능이 있다면 적극적으로 활용하기 바란다. 물론 프로젝트에 적용하기 전 검증하는 절차는 반드시 필요할 것이다. 남들이 사용하니까 무조건 사용하는 식의 접근방법은 바람직하지 못할 것이다.


Spring 프레임워크는 위 두가지 이외에도 무수히 많은 잇점을 가지고 있다. 물론 단점 또한 가지고 있다. 최근에는 너무 방대해진 API로 인해 나 또한 싫어질려고 하는 것이 사실이다. 그러나 Spring 프레임워크가 가지고 있는 핵심 사상에 있어서 후한 점수를 주지 않을 수 없다. 하나의 프레임워크가 모든 요구사항을 만족시킬 수는 없다. 그러므로 Spring 프레임워크가 모든 요구사항을 충족시켜주기를 바라기 보다는 자신의 현재 요구사항과 가장 적합한 프레임워크와 기술을 선택하는 것이 좋을 것이다. 다른 사람이 사용하니까 나도 사용한다는 식으로 접근한 다음 욕하기 보다는 사용하기 전에 철저하게 검토해보는 자세가 더 중요할 것이다.


기술이나 프레임워크를 비판할 때도 해당 기술이나 프레임워크를 제대로 사용해본 다음에 비판하는 자세가 더 좋지 않을까 생각한다. 모든 기술과 프레임워크에는 장,단점이 있음에도 불구하고 맹목적으로 비판하는 자세보다는 좀 더 발전적인 방향을 위해서 비판하는 자세가 좋아보인다. 최근 온라인상에 무차별적인 비판만을 가하는 모습을 많이 보면서 한편으로는 씁쓸함이 느껴진다. 중용의 자세를 가질 때가 아닐까?


http://javajigi.net/pages/viewpage.action?pageId=8880226


스프링이 사랑한 디자인 패턴1 - 템플릿 메소드 패턴

http://expert0226.tistory.com/230


스프링이 사랑한 디자인 패턴2 - 팩토리 메소드 패턴

http://expert0226.tistory.com/233


스프링이 사랑한 디자인 패턴3 -프록시 패턴

http://expert0226.tistory.com/234

Posted by 솔라리스™
: