본문 바로가기

Development/Spring

Why Spring - 왜 스프링을 사용하지?

Why Spring ?


스프링을 사용하기만 했지, 왜 스프링을 사용해서 개발하는 지에 대한 고찰을 해본적이 없다. 그래서 또 의식의 흐름대로 글을 써내려가 봅니다.

스프링은 프레임워크(Framework)다. 프레임워크 ! 즉, 소프트웨어의 설계와 구현에 있어서 전체적인 뼈대와 틀을 제공한다는 것이다. 조금 더 높은 추상화 레벨에서 보면 개발자가 개발하기 편하게 해주는 녀석이다.

그렇다면 스프링은 어떤 방식으로, 어떤 컨셉으로 우리를 도와주느냐 ?

이 말을 설명하기에 앞서 그렇다면 스프링 혹은 다른 프레임워크 없이 오직 JDK로만 소프트웨어를 개발한다고 생각해보자. 개발 과정에서 끊임없이 인스턴스는 생성과 소멸을 반복할테고, 클래스들 사이에는 복잡한 의존관계를 가지기도 할 것이며, 반복되는 로직이 수없이 호출되기도 할 것이다. 이러한 일련의 행위들은, 당연히 개발자가 코딩하는 과정에서 끊임없이 명시해주고 관리해주어야 한다.


비즈니스 로직도 개발하기도 바쁜데, 개발자의 책임이 너무 막중하다.


자, 여기서 스프링이 나타나서 하는 말은 이것이다.

그런 것(귀찮지만 중요한 것)들은 이제 내가 해줄게. 너는 조금 더 비즈니스 로직에만 집중하도록 해 !


한마디로 위에서 언급된 귀찮은 행위들을 개발자가 제어(Control) 하는 것이 아니라 스프링이 제어를 하도록 역전시켜 버리는 것(Inversion of Contorl)이다.


스프링이 IoC를 실현하는 방법으로 대표적인 것이 그 유명한 DI와 AOP가 있으며, 우리 개발자가 할 일은 스프링이 관리할 것들에 대한 메타정보만 작성해서 주면 되고, 나머지 시간은 비즈니스 로직에 더 집중하면 된다.


Spring Bean 등록

너가 만든 객체들 중에 내가 관리해야 할 녀석들을 알려줘, java, xml, annotation 등 상관없어 너가 편한 방식으로 나에게 메타정보를 작성해서 알려줘


DI(Dependency Injection)

객체(Bean)들간의 의존성은 생성할 때 내가 다 의존성을 넣어 주고, 관리하도록 할게 ! 너는 나에게 그 메타정보만 작성해서 알려줘


AOP(Aspect Oriented Programming)

반복적으로 적용되는 횡단 관심사(Aspect)도 내가 다 적용시켜줄게, 너는 어떤 로직(advice)어떤 녀석(point cut)에게 붙여주면 되는지 나에게 메타정보만 작성해서 알려줘



이런 스프링의 핵심 컨셉(IoC)과 그 방식들이 스프링을 사용하는 가장 큰 이유가 아닐까?