기본 인프라를 관리하기 위한 포괄적인 솔루션을 제공 및 개발자가 비즈니스 로직 작성에 도움을 주는 엔터프라이즈급 애플리케이션을 구축하는데 사용되는 Java 기반 프레임워크입니다.
스프링 프레임워크 구성은 20여가지로 구성되어 있으며 이러한 모듈들은 스프링의 핵심기능을 제공해 주며, 필요한 모듈만 선택하여 사용이 가능합니다. -> (https://spring.io/projects/spring-framework)
가장 중점적인 모듈은 스프링 부트, 스프링 클라우드, 스프링 데이터, 스프링 배치, 스프링 시큐리티 입니다.
1. 모듈식 아키텍처
개발자가 프로젝트에 필요한 구성요소를 선택하고 필요에 따라 구성 요소를 쉽게 추가하거나 제거할 수 있습니다. 적, 빠르고 효율적인 개발을 하는 동시 유지 관리 및 업데이트가 더 용이합니다.
2. 종속성 주입
스프링의 종속성 주입 메커니즘을 통해 개발자는 느슨하게 결합된 코드를 작성할 수 있습니다. 이로 인해 테스트 및 유지 관리가 더 쉬워지며 필요한 상용구 코드의 양이 줄어들어 코드 품질 향상을 기대할 수 있습니다.
3. AOP(Aspect-Oriented Programming)
스프링은 개발자가 AOP를 사용하여 로깅 및 보안과 같은 교차 절단 문제를 구현할 수 있게 합니다. -> 응용 프로그램의 문제를 분리하여 유지 관리 및 확장이 더 용이하게 할 수 있습니다.
4. 데이터 액세스
데이터 액세스에 대한 통합 접근 방식을 제공하여 다양한 유형의 데이터 베이스 및 데이터 소스로 작업하기가 더 쉬워집니다. 클라우드 기반 데이터 소스,관계형 데이터베이스,NoSQL 등에 대한 지원이 포함됩니다.
5. 보안
애플리케이션에서 인증 및 권한 부여를 쉽게 구현할 수 있는 포괄적인 보안 프레임워크를 제공합니다. 여기에는 사용자 이름 및 비밀번호와 같은 기존 인증 메커니즘과 OAuth 및 JWT와 같은 최신 보안 프로토콜에 대한 지원이 포함됩니다.
6. 마이크로 서비스
서비스 검색, 로드 밸런싱에 대한 지원을 제공하는 마이크로 서비스 기반 애플리케이션 구축에 매우 적합합니다. -> 분산 시스템을 보다 쉽게 구축하고 유지 관리할 수 있습니다.
7. 테스트
애플리케이션 스택의 다양한 수준에서 테스트를 지원하고 다양한 테스트 도구를 사용하여 애플리케이션에 대한 테스트를 더 쉽게 작성하고 실행할 수 있습니다. -> 유지 보수 용이롤 인한 코드 품질의 향상을 기대할 수 있습니다.
1. 러닝 커브 높음
스프링에는 많은 기능과 구성 요소가 있어 새로 시작하는 개발자에겐 어려울 수 있습니다. 프레임워크와 핵심 개념을 익히는데 소요되는 시간이 많이 걸릴 수 있습니다.
2. 성능 오버헤드
많은 기능 및 도구를 제공하는 만큼 애플리케이션에 오버헤드를 추가할 수 있습니다. 고성능 요구 사항이 있는 애플리케이션일 수록 눈에 띄는 성능 저하, 메모리 사용량 증가로 이어질 수 있습니다.
3. 복잡성
많은 구성 옵션으로 프레임워크를 설정하고 구성하기 어려움을 겪을 수 있습니다. 첫번째 내용과 유사하게 러닝 커브가 높아 올바르게 수행하지 못하는 경우 오류 및 문제가 발생합니다.
즉, 많은 기능, 구성 요소가 있는 만큼 러닝 커브가 높고 잘 활용하지 못하는 것으로 이어지며 오류, 성능에 문제가 생깁니다. -> 잘하면 잘할수록 이점이 훨씬 크다.