BE/Spring & Spring Boot

[Spring Boot] PSA

baek-dev 2025. 1. 5. 13:14

스프링 프레임워크가 소프트웨어 아키텍처 설계에 기반하여 따르는 핵심 원칙(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