Framework란?
- 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것.
ㄴ> 프로그래밍을 하기 위한 틀 혹은 구조를 제공하는 것.
장점
- 효율적으로 코드를 작성할 수 있다.
- Framework가 라이브러리 형태로 다양한 기능을 제공함으로써 개발자가 애플리케이션의 핵심 로직을 개발하는 것에 집중할 수 있도록 해준다. - 정해진 규약이 있어 애플리케이션을 효율적으로 관리할 수 있다.
- 규약에 맞게 코드를 작성하기 때문에, 유지보수가 필요한 경우 더 빠르고 쉽게 문제점을 파악해 수정할 수 있다.
- 또한 비슷한 기능을 개발할 때 코드의 재사용이 용이하고 기능의 확장 또한 쉽게 확장 가능하다.
단점
- 사용하고자 하는 Framework에 대한 학습이 필요하다.
- Framework에서 정하는 규약들을 학습할 시간이 필요하다. - 자유롭고 유연한 개발이 어렵다.
- 이미 만들어진 애플리케이션의 Framework를 변경하거나, Framework를 사용하지 않게 변경할 경우 많은 시간이 필요하다.
Framework 와 Library 의 차이
$$$ 핵심은 애플리케이션 흐름의 주도권
Library
- Library는 애플리케이션을 개발하는 데 사용되는 일련의 데이터 및 프로그래밍 코드이다.
- 애플리케이션을 개발할 때 필요한 기능을 미리 구현해 놓은 집합체
- Framework와의 차이를 비유하자면 자동차의 차체는 Frame, 다양한 부품들은 Library이다.
- Library는 쉽게 교체가 가능하며 필요한 Library들을 선택적으로 사용할 수 있다.
- 개발자가 필요한 기능이 있으면 해당 라이브러리를 호출해서 사용할 수 있기에 흐름의 주도권이 개발자에게 있다.
Spring Framework
- POJO ( Plan Old Java Object ) 기반의 구성
- DI ( Dependency Injection ) 지원
- AOP ( Aspect Oriented Programming, 관점지향 프로그래밍) 지원
- Java 언어를 사용함으로써 얻는 장점
Spring Framework를 사용하는 이유
- Spring Framework가 도입되기 전에는 JSP나 Servlet 기술을 사용한 아키텍처를 기반으로 한 Java 웹 애플리케이션을 제작했지만 코드 자체도 너무 길고 애플리케이션의 유지 보수 측면에서 상당히 불편한 부분이 많았다.
- Spring MVC 방식이 도입됨으로써 Java 웹 애플리케이션의 제작 방식이 획기적으로 변하게 되었따.
- Spring MVC 설정의 복잡함과 어려움을 극복하기 위해 Spring Boot가 탄생했다.
- Spring의 복잡한 설정 작업마저도 Spring이 대신 처리를 해주기 때문에 개발자는 애플리케이션의 핵심 비즈니스 로직에만 집중할 수 있다.
Spring Framework의 특징
POJO ( Plain Old Java Object )

- POJO 라는 것은 IoC/DI, AOP, PSA를 통해서 달성할 수 있다는 것을 의미한다.
- POJO = Java로 생성하는 순수한 객체
- POJO 프로그래밍이란?
- POJO를 이용해서 프로그래밍 코드를 작성하는 것.
- 크게 두 가지 정도의 기본적인 규칙을 지켜야한다.
- 1. Java나 Java의 스펠(사양)에 정의된 것 이외에는 다른 기술이나 규약에 얽매이지 않아야 한다.
- 2. 특정 환경에 종속적이지 않아야 한다.
- POJO 프로그래밍이 필요한 이유
- 특정 환경이나 기술에 종속적이지 않으면 재사용 가능하고, 확장 가능한 유연한 코드를 작성할 수 있다.
- 저수준 레벨의 기술과 환경에 종속적인 코드를 애플리케이션 코드에서 제거함으로써 코드가 깔끔해진다.
- 코드가 깔끔해져서 디버깅이 상대적으로 쉬워진다.
- 특정 기술이나 환경에 종속적이지 않기 때문에 테스트 또한 단순해진다.
- ************객체지향적인 설계를 제한 없이 적용할 수 있다.***********
요약 :
-POJO란 순수한 Java 객체를 의미한다.
- POJO프로그래밍이란 순수한 Java
IoC ( Inversion of Control ) / DI ( Dependency Injection )
IoC
-- 애플리케이션 흐름의 주도권이 뒤바뀐 것 --
- 애플리케이션 흐름의 주도권이 사용자에게 있지 않고, Framework나 서블릿 컨테이너 등 외부에 있는 것으로, 흐름의 주도권이 뒤바뀐 것이다.
DI
- 의존성 주입 : 클래스 내부에서 다른 클래스의 객체를 생성하게 되면 두 클래스 간에 의존 관계가 성립하게 된다.
- DI 는 IoC 개념을 조금 구체화시킨 것으로 객체 간의 관계를 느슨하게 해준다.
- 클래스 내부에서 new 를 사용해 참조할 클래스의 객체를 직접 생성하지 않고, 생성자 등을 통해 외부에서 다른 클래스의 객체를 전달받고 있다면 의존성 주입(생성자 주입)이 이루어지고 있는 것.
- new 키워드를 사용하여 객체를 생성하면 클래스 간에 강하게 결합(Tight Coupling)되어 있다고 한다.
- 인터페이스와 같이 일반화된 구성 요소에 의존하고 있을 때, 클래스들 간에 느슨하게 결합(Loose Coupling) 되어 있다고 한다.
- 느슨한 결합은 요구 사항의 변경에 유연하게 대처할 수 있도록 해준다.
- DI 는 클래스들 간의 강한 결합을 느슨한 결합으로 만들어준다.
- Spring에서는 애플리케이션 코드에서 이루어지는 의존성 주입(DI)을 Spring에서 대신해 준다.
AOP ( Aspect Oriented Programming )

-- AOP : 관점(관심) 지향 프로그래밍 --
-- 애플리케이션에 필요한 기능 중에서 공통적으로 적용되는 공통 기능에 대한 관심 --
공통 관심 사항과 핵심 관심 사항
- 공통 관심 사항 : 애플리케이션 전반에 걸쳐 공통적으로 사용되는 기능들에 대한 관심사
- 핵심 관심 사항 : 비즈니스 로직 즉, 애플리케이션의 주목적을 달성하기 위한 핵심 로직에 대한 관심사
# 애플리케이션의 핵심 업무 로직에서 로깅이나 보안, 트랜잭션 같은 공통 기능 로직들을 분리하는 것.
필요한 이유
- 객체 지향 설계 원칙에 맞는 코드 구현
- 코드의 간결성 유지
- 코드의 재사용
PSA ( Portable Service Abstraction )
-- 서비스 추상화 : 추상화의 개념을 애플리케이션에서 사용하는 서비스에 적용하는 기법. --
추상화 : 어떤 클래스의 본질적인 특성만을 추출해서 일반화하는 것.
- PSA : 클라이언트가 추상화된 상위 클래스를 일관되게 바라보며 하위 클래스의 기능을 사용하는 것.
- PSA가 필요한 이유 : 어떤 서비스를 이용하기 위한 접근 방식을 일관된 방식으로 유지함으로써 애플리케이션에서 사용하는 기술이 변경되더라도 최소한의 변경만으로 변경된 요구 사항을 반영하기 위함.
--- 즉, 애플리케이션의 요구 사항 변경에 유연하게 대처할 수 있다.
'공부기록 > Spring' 카테고리의 다른 글
| [Spring] @SpringBootApplication의 역할 (0) | 2025.01.06 |
|---|---|
| [Spring] (Spring MVC) API 계층 (1) | 2025.01.06 |
| [Spring] Spring DI, AOP / 25.01.06 (0) | 2025.01.06 |
| Spring Boot 란? (0) | 2025.01.03 |
| [Spring] Spring Framework 모듈 구성 (1) | 2025.01.03 |