본문 바로가기
Spring 이해하기

스프링이란 무엇인가?

by simplify-len 2021. 1. 6.

아래 내용은 토비의 스프링을 읽으며, 일부 내용을 발췌한 것임을 밝힙니다.

그림1- 토비의 스프링 책 표지

스프링이란 무엇인가?

여전히 '스프링을 사용하는 이유가 무엇일까?' 이 질문에 대해서 여타 다른 프레임워크에 반해 도드라지는 특징을 찾지 못했던 것 같다. 물론 IoC/DI 의 강력함으로 타 프레임워크보다 강점으로 둘 수 있지만, 그보다 더 다양한 관점에서 말할 수는 없을까? 

가장 쉽게 알려진 정의는 스프링은 아래와 같다.

"자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크"

그럼 '애플리케이션 프레임워크'는 무엇인가?

 특정 계층이나 기술, 업무 분야에 국한되지 않고 애플리케이션의 전 영역을 포괄하는 범용적인 프레임워크, 애플리케이션 개발의 전 과정을 빠르고 편리하게 효율적으로 진행하는 데 일차적인 목표를 두는 프레임워크이다.

 단지 여러 계층의 다양한 기술을 그저 한데 모아뒀기 때문에 애플리케이션 프레임워크라고 불리는 것이 아니라, 애플리케이션의 전 영역을 관통하는 일관된 프로그래밍 모델과 핵심 기술을 바탕으로 해서 각 분야의 특성에 맞는 필요를 채워주고 있기 때문에, 애플리케이션을 빠르고 효과적으로 개발할 수가 있다. 바로 이것이 스프링이 애플리케이션 프레임워크라고 불리는 이유.

 스프링의 일차적인 존재 목적은 핵심 기술에 담긴 프로그래밍 모델을 일관되게 적용해서 엔터프라이즈 애플리케이션 전 계층과 전 영역에 전략과 기능을 제공해줌으로써 애플리케이션을 편리하게 개발하게 해주는 애플리케이션 프레임워크로 사용하는 것.

'경량급'이란 말의 의미는?

 여기서 경량급이란 말의 의미는, 스프링 자체가 아주 가볍다거나 작은 규모의 코드로 이뤄졌다는 의미가 아닌, 불필하게 무겁지 않다는 의미이다. 

이에 따라, 스프링은 가장 단순한 서버환경인 톰캣이나 제티에서도 완벽하게 동작된다. 

 경량급이라는 의미는 스프링을 기반으로 제작되는 코드나 기존 EJB나 여타 프레임워크에서 동작하기 위해 만들어진 코드에 비해 상대적으로 작고 단순하다는 뜻이다.

즉, 스프링이 가볍다는 건 기술수준이 가볍다거나, 스프링이 유치하고 용도가 제한적이라는 의미는 결코 아니라, 고성능이면서 내구성이 좋은 스포츠카가 그저 덩치만 크고 성능은 떨어지는 차에 비해 오히려 중량은 가볍고 차체도 작다는 것과 마찬가지의 개념. 만들어진 코드가 지원하는 기술수준은 비슷하더라도 그것을 휠씬 빠르고 간편하게 작성하게 해줌으로써 생산성과 품질 면에서 유리하다는 것이 바로 경량급이라는 말로 표현되는 스프링의 특징이다.

'자바 엔터프라이즈 개발을 편하게' 의미는?

 이는 간단히 개발을 편리하게 해준다는 의미가 아니다. 이는 스프링의 근본적인 부분에서 엔터프라이즈 개발의 복잡성을 제거해내고 진정으로 개발을 편리하게 해주는 해결책을 제시해준다.

 근본적인 부분이 의미하는 것이 무엇인가?

 즉, 개발자가 복잡하고 실수하기 쉬운 로우레벨 기술에 많은 신경을 쓰지 않으면서도 애플리케이션의 핵심인 사용자 요구사항, 즉 비지니스 로직을 빠르고 효과적으로 구현하는 것을 말합니다.

 다시 말하면, 스프링은 애플리케이션 개발자들이 스프링이라는 프레임워크가 제공하는 기술이 아니라 자신이 작성하는 애플리케이션의 로직에 더 많은 관심과 시간을 쏟게 해준다는 것, 초기에 스프링의 기본 설정과 적용 기술만 잘 선택하고 준비해두면, 이후로 애플리케이션 개발에는 신경쓰지 않아도 된다.

'오픈소스' 란?

 말 그래도 스프링은 오픈소스로 구성되어 모두에게 공개되고, 특별한 라이선스를 취득할 필요없이 얼마든지 가져다 자유롭게 이요해도 된다는 뜻.


스프링의 목적

스프링의 개발 철학과 궁극적인 목표가 무엇일까? 정의를 통해 살펴본 - '경량급 프레임워크인 스프링을 활용해서 엔터프라이즈 애플리케이션 개발을 편하게' 이다. 이 말은 엔터프라이즈 애플리케이션의 개발은 사실 쉽지 않다는 것이다.

엔터프라이즈 개발이 복잡한 이유는?

첫 번째는 기술적인 제약조건과 요구사항이 늘어가기 때문이다.

두 번째는 엔터프라이즈 애플리케이션이 구현해야 할 핵심기능인 비즈니스 로직의 복잡합이 증가하기 때문이다.

 

위에서 말하는 복잡성이란 무엇을 의미하는가?

 복잡하다는 건 세부 요소가 이해하기 힘든 방식으로 얽혀 있고, 그 때문에 쉽게 다루기 어렵다는 것을 의미합니다. 자칫 잘못 손을 댔다가는 더 엉망이 되기 쉬우며, 들인 노력과 시간이 허사가 될 수도 있습니다. 가장 근본적인 이유는 근본적인 비즈니스 로직과 엔터프라이즈 기술이라는 두 가지 복잡함이 한데 얽혀 있기 때문입니다. 하나씩 놓고 봐도 만만치 않은데, 그 두 가지를 한 번에 다뤄야 하니 복잡함이 몇 배로 가중되는 것입니다.

복잡성을 제거하기 위해서 스프링은...

비침투적인 방식을 통한 해결책을 제시합니다. 비침투적(non-invasive)기술은 기술의 적용 사실이 코드에 직접 반영되지 않는다는 특징을 가지고 있습니다. 어딘가에는 기술의 적용에 따라 필요한 작업을 해줘야 하겠지만, 애플리케이션 코드 여기저기에 불쑥 등장하거나, 코드의 설계와 구현 방식을 제한하지 않는다는 게 비침투적인 기술의 특징입니다.

 이 비침투적인 방식으로 인해, 기술적인 복잡함과 비즈니스 로직을 다루는 코드를 깔끔하게 분리할 수 있고, 그 과정에서 스프링 스스로 애플리케이션 코드에 불필요하게 나타나지 않도록 하는 것입니다. 꼭 필요한 것 같은 경우조차도 기술 코드가 직접 노출되지 않도록 만들어 줍니다.

기술적 복잡함을 상대하는 전략

1. 기술에 대한 접근 방식이 일관성이 없고, 특정 환경에 종속적이다.

2. 기술적인 처리를 담당하는 코드가 성격이 다른 코드에 섞여서 등장한다.

     - AOP는 최후까지 애플리케이션 로직을 담당하는 코드에 남아 있는 기술 관련 코드를 깔끔하게 분리해서 별도의 모듈로 관리하게 해주는 강력한 기술. 

 

비즈니스와 애플리케이션 로직의 복잡함을 상대하는 전략

비즈니스 로직의 복잡함을 상대하는 전략은 자바라는 객체지향 기술 그 자체다. 스프링은 단지 객체 지향 언의 장점을 제대로 살리지 못하게 방해했던 요소를 제거하도록 도와줄 뿐. 그래서 핵심 도구가 객체지향과 DI 로 존재한다.

....

댓글