스프링이 인기를 얻게 된 이유는 무엇인가
스프링의 중요한 특징들은 무엇인가
1. 스프링 프레임워크가 개발의 대세가 된 이유
1.1. 프레임워크
'뼈대나 근간'을 이루는 코드들의 묶음
1.2. 이 뼈대가 왜 필요할까?
- 개발자는 개인의 능력 차이가 큰 직종이고, 따라서 개발자의 구성에 따라 프로젝트 결과 역시 차이가 큼
- 프레임워크는 바로 이런 상황을 극복하기 위한 코드의 결과물
- 프레임워크를 이용한다는 의미는 프로그램의 기본 흐름이나 구조를 정하고, 모든 팀원이 이 구조에 자신의 코드를 추가하는 방식으로 개발하게 됨
1.3. 프레임워크의 장점
- 회사는 일정한 품질이 보장되는 결과물을 얻을 수 있음
- 개발자는 개발 시간을 단출할 수 있음
2. 스프링의 주요 특징
- POJO 기반의 구성
- 의존성 주입(DI)을 통한 객체 간의 관계 구성
- AOP(Aspect-Oriented-Programming) 지원
- 편리한 MVC 구조
- WAS에 종속적이지 않은 개발 환경
2.1. POJO 기반의 구성
- 스프링은 다른 프레임워크들과 달리 객체 간 관계를 구성할 때 별도의 API 등을 사용하지 않는 POJO(Plain Old Java Object)의 구성만으로도 가능하도록 제작됨
- 즉, 일반적인 Java 코드를 이용해 객체를 구성하는 방식을 그대로 스프링에서 사용할 수 있음
- 이것이 중요한 이유는 코드를 개발할 때 개발자가 특정 라이브러리나 컨테이너 기술에 종속적이지 않다는 것을 의미하기 때문
- 개발자가 가장 일반적인 형태로 코드를 작성하고 실행할 수 있어 생산성에도 유리하고 코드에 대한 테스트 작업 역시 좀 더 유연하게 할 수 있다는 장점이 있음
2.2. 의존성 주입(DI)을 통한 객체 간의 관계 구성
제어의 역행
- 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것
- 대부분의 프레임워크에서 사용하는 방법으로, 개발자는 필요한 부분을 개발해 '끼워 넣기'의 형태로 개발하고 실행하게 됨
- 조립된 코드의 최종 호출은 개발자가 아닌 프레임워크 내부의 결정대로 이뤄지게 되는데, 이런 현상을 '제어의 역행'이라고 표현함
의존성 주입
- 제어의 역행이 일어날 때 스프링이 내부에 있는 객체(스프링에서는 빈(Bean)이라는 용어 사용)들 간의 관계를 관리할 때 사용하는 기법
- 의존적 객체를 직접 생성하거나 제어하는 것이 아니라, 제어의 역행으로 특정 객체에 필요한 객체를 외부에서 결정해서 연결 시키는 것을 의미
- 외부에서 필요한 객체를 결정하기 때문에 개발자는 의존적인 객체들과의 관계를 직접 처리할 필요가 없고, 인터페이스를 활용해 유연한 구조를 사용할 수 있음
- 스프링은 의존성 주입을 프레임워크에서 처리하기 때문에 개발자는 자신이 만드는 객체나 클래스 외에는 신경쓰지 않고 코드를 만듦
의존성 주입의 종류
- 생성자를 통한 주입
- set 메소드를 이용한 주입
스프링은 두 방식 모두 사용할 수 있고, 이에 대한 처리 역시 간단한 애노테이션만으로 처리할 수 있음
2.3. AOP의 지원
스프링은 프레임워크를 이용한 개발에도 반복적인 코드를 줄이고,
핵심 비즈니스 로직에만 집중할 수 있는 방법을 제공함
횡단 관심사(cross-concern)
- 스프링에서 대부분의 시스템이 공통으로 가지는 보안이나 로그, 트랜잭션과 같이 비즈니스 로직은 아니지만 반드시 처리가 필요한 부분
- 스프링은 AOP를 이용하여 이러한 횡단 관심사를 분리해서 제작하는 것이 가능함
AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)
- 횡단 관심사를 모듈로 분리하는 프로그래밍의 패러다임
- 스프링은 AOP를 AspectJ 문법을 통해서 작성할 수 있음
AOP의 장점
- 개발자는 핵심 비즈니스 로직에만 집중해서 코드를 개발할 수 있음
- 각 프로젝트마다 다른 관심사를 적용할 때 코드의 수정을 최소화
- 원하는 관심사의 유지보수가 수월한 코드를 구성할 수 있음
2.4. 트랜잭션의 지원
- 데이터베이스를 이용할 때 반드시 신경써야 하는 부분은 하나의 업무가 여러 작업으로 이뤄지는 경우의 트랜잭션 처리임
- 스프링은 트랜잭션의 관리를 애노테이션이나 XML로 설정할 수 있음
- 때문에 개발자가 매번 상황에 맞는 코드를 작성할 필요가 없도록 설계됨
'~2023.02 > Spring' 카테고리의 다른 글
[Spring]좋은 객체 지향 설계를 위한 5가지 원칙 - SOLID (0) | 2022.06.11 |
---|---|
스프링 웹 개발 기초 (0) | 2022.06.10 |