스프링 프레임워크가 소프트웨어 아키텍처 설계에 기반하여 따르는 핵심 원칙(Principles)과 유연성(Flexibility)을 의미
사용자가 원하는 방식으로 자유롭게 애플리케이션을 설계하고 구현할 수 있는 기반을 제공
주요원칙
1. 선택과 유연성 (Choice and Flexibility)
- 스프링은 강제적인 사용법 대신 다양한 선택지를 제공
- 예 : XML설정, Java Config, 어노테이션 기반 설정 모두 지원
2. POJO 기반 개발 (Plain Old Java Object)
- 스프링은 비즈니스 로직이 특정 프레임워크나 기술에 종속되지 않도록 POJO로 개발을 장려함
3. Non-Invasive Programming Model
- 스프링은 비침투적 방식으로 설계되어, 특정 프레임워크에 종속적인 코드를 최소화한다
- 즉, 스프링을 사용하지 않아도 기존 코드는 정상적으로 동작할 수 있다
4. DI 와 IoC (Dependency Injection and Inversion of Control)
- 스프링은 의존성주입(DI)과 제어역전(IoC)을 통해 객체간의 결합도를 낮추고 테스트 가능성을 높인다
5. Aspect-Oriented Programming (AOP)
- 횡단 관심사를 비즈니스 로직과 분리하여 코드 재사용성과 유지보수성을 높임
6. 선언적 트랜잭션 관리
- 트랜잭션 관리를 직접 코딩하지 않고 어노테이션이나 설정을 통해 선언적으로 처리할 수 있다
PSA의 스프링 철학
1. 좋은 기본값 제공
- 스프링은 많은 기능을 제공하지만, 사용자가 최소한의 설정으로도 시작할 수 있도록 기본값을 제공함
2. 개방형 아키텍쳐
- 스프링은 다양한 기술과 통합이 쉽도록 설계되어있어, JDBC, JPA, JMS 등과 함께 사용할 수 있음
3. 테스트 친화성
- 스프링은 유닛테스트와 통합테스트를 지원하며, 테스트 주도 개발 (TDD)을 쉽게 구현할 수 있도록 돕는다
PSA의 예
1. XML 기반 설정
- 과거에는 XML로 모든 설정을 정의하던 방식이 유행했으며, 스프링은 이를 지원함
2. Java Config 방식
- 스프링 3.0부터는 Java Config를 지원하여 XML없이 Java코드로 설정 가능
3. 어노테이션 기반
- 어노테이션을 통해 설정을 간단히 처리할 수 있다
- 예 : @Configuration, @Bean, @ComponentScan 등
4. 스프링 부트의 자동 설정
- 스프링 부트는 PSA의 철학을 극대화한 예. 필요한 구성요소를 자동으로 설정해주며, 기본값으로 동작함
장점
1. 유연성과 확장성:
- 사용자는 자신의 요구사항에 맞게 설정 방식을 선택할 수 있습니다
2. 개발 생산성 증가:
- 불필요한 반복 작업을 줄이고, 개발자가 비즈니스 로직에 집중할 수 있게 해줍니다
3. 테스트 용이성:
- DI와 POJO 기반 설계를 통해 단위 테스트와 통합 테스트가 용이합니다
PSA와 스프링 철학 요약
- 스프링의 PSA는 단순한 공익 발표가 아니라, 프레임워크 설계 철학과 개발자 친화적인 소프트웨어 아키텍처를 의미한다
- 이는 유연성, 비침투성, POJO 기반 설계를 통해 개발자에게 자유를 제공한다
- 스프링 부트는 PSA 철학의 집합체로, 복잡한 설정을 단순화하고 기본값을 제공하여 빠르게 시작할 수 있게 한다
출처 : ChatGPT
'BE > Spring & Spring Boot' 카테고리의 다른 글
[Spring Boot, JPA] EntityManager (1) | 2025.01.16 |
---|---|
[Spring Boot] @ControllerAdvice (0) | 2025.01.09 |
[Spring Boot] AOP (0) | 2025.01.05 |
[Spring Boot] DTO (0) | 2025.01.04 |
[Spring Boot, JPA] 관련 어노테이션 (0) | 2025.01.01 |