-
[Spring] 스프링 프레임워크란 무엇인가Framework | Test/Spring 2021. 8. 16. 20:38
1. 스프링 프레임워크의 정의
* 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크
[애플리케이션 프레임워크]
- 애플리케이션 프레임워크는 애플리케이션 개발의 전 과정을 빠르고 편리하며, 효율적으로 진행하는데 일차적인 목표를 둔다.
- 애플리케이션의 전 영역을 관통하는 일관된 프로그래밍 모델과 핵심 기술을 통해 각 분야의 특성에 맞는 필요를 채워주고 있기 때문에 애플리케이션을 신속, 효율적으로 개발 할 수 있다. 이와 같은 이유로 스프링이 애플리케이션 프레임워크로 불린다.
[경량급]
- EJB(Enterprise JavaBean)가 동작하려면 고가의 느리고 무거운 자바 서버(WAS)가 필요했다.
- 위와 달리 스프링은 단순한 서버환경인 Tomcat이나 Jetty에서도 완벽하게 동작함. 서블릿 컨테이너만으로도 충분하기 때문에 EJB 컨테이너를 비롯해 복잡한 기능이 포함된 고급 WAS를 사용하지 않아도된다.
- 스프링의 장점은 가볍고 단순한 환경에서도 복잡한 EJB와 고가의 WAS를 갖춰야만 가능했던 엔터프라이즈 개발의 고급 기술 대부분을 사용할 수 있다.
[편리한 자바 엔터프라이즈 개발]
- 스프링이 말하는 '편리한 자바 엔터프라이즈 개발'이란 근본적인 부분에서 엔터프라이즈 개발의 복잡함을 제거하고, 진정으로 개발을 편하게 해주는 해결책 제시하는 것이다.
[오픈소스]
- 오픈소스: 소스가 모두에게 공개되고, 특별한 라이선스를 취득할 필요 없이 얼마든지 가져다가 자유롭게 이용해도 된다는 뜻이다. 소스를 자유롭게 열람하고 목적에 맞게 사용 가능하며, 마음대로 수정할 수도 있다.
- 스프링에 적용된 오픈소스 라이선스는 오픈소스 라이선스 중에서도 비교적 제약이 적고 사용이 매우 자유로운 아파치 라이선스 2.0(Apache)이다.
2. 스프링의 목적과 등장 배경
[엔터프라이즈 개발의 복잡함]
*스프링의 등장 배경을 결론부터 얘기하자면, '엔터프라이즈 시스템 개발이 너무 복잡해서'이다.
- 복잡함의 근본 이유
1)기술적인 제약조건과 요구사항이 늘었다.
2)엔터프라이즈 애플리케이션이 구현해야 할 핵심기능인 비즈니스 로직의 복잡함이 증가하기 때문이다.
- 복잡함을 가중시키는 원인
1) 세부 요소가 이해하기 힘든 방식으로 얽혀 있고, 이러한 이유로 쉽게 다루기 어렵다.
[비 침투적인 방식을 통한 효과적인 해결책]
*스프링은 EJB의 실패 원인을 교훈으로 삼아 비 침투적인 방식을 채택했다. -> 깔끔한 코드 분리 가능
- EJB처럼 어떤 기술을 적용했을 떄 그 기술과 관련된 코드나 규약 등이 코드에 등장하는 경우를 침투적인 기술이라고 한다.
- 비 침투적인(non-invasive) 기술은 기술의 적용 사실이 코드에 직접 반영되지 않는다는 특징이 있다. 코드의 설계와 구현 방식을 제한하지 않는다는 특징을 가지고 있다.
3. 스프링 프레임워크 사용 시 장점
1)클래스 대신 인터페이스 사용과 같은 좋은 프로그래밍 기법을 제공한다.
2)모듈화되어 있어 필요한 부분만 사용할 수 있다.
3)XML 기반과 어노테이션 기반 설정을 모두 지원한다.
4)제어의 역전과 의존성 주입을 통한 느슨한 결합을 지원한다.
5)생산성을 향상시켜주고(개발자가 개발에만 집중) 에러를 줄여주는 JDBC 프레임워크를 지원한다.
6)스프링 테스트 모듈은 테스트하기 쉬운 코딩을 지원한다.
※해당 포스팅은 개발 공부를 하고 있는 학생에 의하여 작성되었으니 참고 바랍니다.
정정 필요한 내용에 대한 댓글 환영합니다.
'Framework | Test > Spring' 카테고리의 다른 글
[Spring] Spring의 구조 (0) 2021.08.16 [Spring] 스프링의 특징 - POJO란 무엇인가 (0) 2021.08.16 [Spring] xml 설정 파일 (0) 2021.08.15 [Srping] Error : Run on server 가 없을 때 혹은 사라졌을 때 (0) 2021.08.11 [Srping] Error : The prefix "context" for element "context:component-scan" is not bound (0) 2021.08.03