[Spring] 특징
업데이트:
스프링 프레임워크의 역사
프레임워크는 ‘뼈대나 근가을 이루는 코드들의 묶음’이다.
프레임워크는 개발자 간 능력 차이로 프로젝트의 결과물이 달라지는 상황을 극복하기 위한 코드의 결과물이다.
프레임워크를 이용하면 프로그램의 기본 흐름이나 구조를 정하고, 모든 팀원이 이 구조에서 자신의 코드를 추가하는 방식으로 개발하게 된다.
-
프레임워크의 장점
개발에 필요한 구조를 이미 코드로 만들어 놓음.
때문에 실력이 부족하더라도 반쯤 완성한 상태에서 필요한 부분을 조립하는 형태의 개발이 가능하다.
일정한 품질이 보장되는 결과물을 얻을 수 있고, 개발 시간을 단축할 수 있다.
-
경량 프레임워크(light-weight Framework)
스프링은 시작이 비교적 늦지만, 가장 성공적인 경량 프레임워크이다.
경량프레임워크란, 과거의 복잡한 구동 환경과 하드웨어적은 구성이 필요한 프레임워크의 반대되는 개념으로, 특정 기능을 위주로 간단한 jar파일 등을 이용해서 모든 개발이 가능하도록 구성된 프레임워크이다.
-
스프링과 다른 프레임워크와의 차별성
- 복잠함에 반기를 들다.
엔터프라이즈급 프레임워크들의 가장 큰 문제점은 복잡성이다.
다양한 경우를 처리할 수 있는 다양한 기능을 가지도록 만들다 보니 하나의 기능을 위해서 너무나 많은 구조가 필요하게 되었다.
스프링은 이러한 복잡성을 해결하기 위해서 나온 경량화된 프레임워크이다.
Java의 클래스와 인터페이스를 이용하는 구조이기 때문에 진입장벽이 낮고, 복잡한 프레임워크에 비해 가볍기 때문에 엔터프라이즈급의 시스템을 작성할 수 있다. - 프로젝트의 전체 구조를 설계할 때 유용하다.
다른 프레임워크는 전문적인 영역에 대해서만 지원하고, 비즈니스 로직 설계는 개발자의 역량에 맡긴다.
하지만, 스프링은 어느 한 분야에 집중하지 않고, 전체를 설계하는 용도로 사용된다.
스프링 프로젝트는 대부분 Web에 제한되어 사용되지만, 사실상 OOP 구조를 뒷받침하고 구조를 설계하는 사상이다. - 다른 프레임워크들의 포용
스프링은 전체 구조에 집중했기 때문에 특정한 영역의 프레임워크와 공존할 수 있다.
다른 프레임워크들과의 통합을 지원했기 때문에 최소한의 수정이 가능하다.
스프링의 최대 장점은 기본 뼈대를 흔들지 않고, 여러 종류의 프레임워크를 혼용해서 사용할 수 있다는 점이다. - 개발 생산성과 개발도구 지원
이론적으로는 개발자가 제대로 이해해야 되는 부분이 많지만, 결과적으로 코드의 양은 줄고, 유지보수에 있어서 XML의 설정등을 이용했기 때문에 환영받는다.
플러그인의 지원이 다른 플레임워크들에 비해서 빠른 업데이트가 되어 별도의 새로운 개발도구에 대한 적응 없이 개발이 가능하다.
-
스프링의 특징
- POJO 기반의 구성
스프링은 객체 간의 관계를 구성할 수 있는 특징을 가지고 있다.
다른 프레임워크들과 달리 이 관계를 구성할 때 별도의 API 등을 사용하지 않는 POJO(Plain Old Java Object)의 구성만으로 가능하다.
Java코드를 이용해서 객체를 구성하는 방식을 그대로 스프링에 적용할 수 있다.
그렇기 때문에 코드를 개발할 때 개발자가 특정한 라이브러리나 컨테이너의 기술에 종속적이지 않다.
가장 일반적인 형태로 코드를 작성하고 실행할 수 있어서 생산성에서 유리하고, 코드에 대한 테스트 작업을 유연하게 할 수 있다는 장점이 있다. - 의존성 주입(DI)과 스프링
의존성 : 하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없어서 하나의 객체가 다른 객체의 상태에 따라 영향을 받는 것을 의미한다.
흔히 A 객체가 B 객체 없이 동작이 불가능한 상황을 ‘A가 B에 의존적이다’라고 표현한다.
주입 : 외부에서 밀어 넣는 것을 의미한다.
의존성 주입이란 ‘어떤 객체가 필요한 객체를 외부에서 밀어 넣는다’라는 의미이다.
주입을 받는 입장에서는 어떤 객체인지 신경 쓸 필요가 없고, 어떤 객체에 의존하든 자신의 역할은 변하지 않는다.
A는 B가 필요하다는 신호만 보내고, B객체를 주입하는 것은 외부에서 이루어지는 방식이다.
스프링에는 의존성이 필요한 객체에 필요한 객체를 찾아서 주입하는 역할을 하는 존재가 있다.
ApplicationContext
라는 존재가 필요한 객체들을 생성하고, 필요한 객체들을 주입하는 역할을 해 주는 구조이다.
개발자들은 객체와 객체를 분리해서 생성하고, 이러한 객체들을 엮는 작업을 하는 형태의 개발을 한다.
스프링에서는 ApplicationContext가 관리하는 객체들을Bean
이라고 부르고, 빈과 빈 사이의 의존관계를 처리하는 방식으로 XML 설정, 어노테이션 설정, Java 설정 방식을 이용할 수 있다. - AOP의 지원
좋은 개발환경의 중요 원칙은 ‘개발자가 비즈니스 로직에만 집중할 수 있게 한다.’이다.
이 목표를 이루기 위해 가장 중요한 것은 ‘반복적인 코드의 제거’이다.
스프링은 반복적인 코드를 줄이고, 핵심 비즈니스 로직에만 집중할 수 있는 방법을 제공한다.
대부분의 시스템이 공통으로 가지고 있는 보안, 로그, 트랜잭션과 같은 반드시 처리가 필요한 부분을 스프링에서는 ‘횡단 관심사(cross-concern)’라고 한다.
스프링은 AOP를 AspectJ의 문법을 통해서 작성할 수 있다.
이로 인해 개발자는 핵심 비즈니스 로직에만 집중해서 코드를 개발할 수 있고, 각 프로젝트마다 다른 관심사를 적용할 때 코드의 수정을 최소화 시킬 수 있고, 원하는 관심사의 유지보수가 수월한 코드를 구성할 수 있다. - 트랜잭션의 지원
트랜잭션 처리는 상황에 따라서 복잡하게 구성될 수도, 아닐 수도 있다.
그때마다 코드를 이용해서 처리하는 작업은 개발자에게 상당히 피곤한 일이다.
스프링은 트랜잭션의 관리를 어노테이션이나 XML로 설정할 수 있어 개발자가 매번 상황에 맞는 코드를 작성할 필요가 없도록 설계되었다.
관련 서적 : 코드로 배우는 스프링 웹 프로젝트
공유하기
Twitter Google+ LinkedIn
댓글남기기