공부기록/Spring

[Spring] Spring Framework /25.01.03

taecode 2025. 1. 3. 20:14

Framework란?

 

 - 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것.
ㄴ> 프로그래밍을 하기 위한 틀 혹은 구조를 제공하는 것.

 

장점

  1. 효율적으로 코드를 작성할 수 있다.
    - Framework가 라이브러리 형태로 다양한 기능을 제공함으로써 개발자가 애플리케이션의 핵심 로직을 개발하는 것에 집중할 수 있도록 해준다.
  2. 정해진 규약이 있어 애플리케이션을 효율적으로 관리할 수 있다.
    - 규약에 맞게 코드를 작성하기 때문에, 유지보수가 필요한 경우 더 빠르고 쉽게 문제점을 파악해 수정할 수 있다.
    - 또한 비슷한 기능을 개발할 때 코드의 재사용이 용이하고 기능의 확장 또한 쉽게 확장 가능하다.

 

단점

  1. 사용하고자 하는 Framework에 대한 학습이 필요하다.
    - Framework에서 정하는 규약들을 학습할 시간이 필요하다.
  2. 자유롭고 유연한 개발이 어렵다.
    - 이미 만들어진 애플리케이션의 Framework를 변경하거나, Framework를 사용하지 않게 변경할 경우 많은 시간이 필요하다.

 

 

Framework 와 Library 의 차이

 

$$$ 핵심은 애플리케이션 흐름의 주도권

 

Library

  • Library는 애플리케이션을 개발하는 데 사용되는 일련의 데이터 및 프로그래밍 코드이다.
  • 애플리케이션을 개발할 때 필요한 기능을 미리 구현해 놓은 집합체
  • Framework와의 차이를 비유하자면 자동차의 차체는 Frame, 다양한 부품들은 Library이다.
  • Library는 쉽게 교체가 가능하며 필요한 Library들을 선택적으로 사용할 수 있다.
  • 개발자가 필요한 기능이 있으면 해당 라이브러리를 호출해서 사용할 수 있기에 흐름의 주도권이 개발자에게 있다.

 

 

Spring Framework

 

  1. POJO ( Plan Old Java Object ) 기반의 구성
  2. DI ( Dependency Injection ) 지원
  3. AOP ( Aspect Oriented Programming, 관점지향 프로그래밍) 지원
  4. Java 언어를 사용함으로써 얻는 장점

 

 

 

Spring Framework를 사용하는 이유

 

  • Spring Framework가 도입되기 전에는 JSP나 Servlet 기술을 사용한 아키텍처를 기반으로 한 Java 웹 애플리케이션을 제작했지만 코드 자체도 너무 길고 애플리케이션의 유지 보수 측면에서 상당히 불편한 부분이 많았다.

  • Spring MVC 방식이 도입됨으로써 Java 웹 애플리케이션의 제작 방식이 획기적으로 변하게 되었따.

  • Spring MVC 설정의 복잡함과 어려움을 극복하기 위해 Spring Boot가 탄생했다.

  • Spring의 복잡한 설정 작업마저도 Spring이 대신 처리를 해주기 때문에 개발자는 애플리케이션의 핵심 비즈니스 로직에만 집중할 수 있다.

 

 

 


Spring Framework의 특징

 

POJO ( Plain Old Java Object )

 

Spring 삼각형

 

 

 - POJO 라는 것은 IoC/DI, AOP, PSA를 통해서 달성할 수 있다는 것을 의미한다.

 

 - POJO = Java로 생성하는 순수한 객체

 

 - POJO 프로그래밍이란?

  • POJO를 이용해서 프로그래밍 코드를 작성하는 것.
  • 크게 두 가지 정도의 기본적인 규칙을 지켜야한다.
  • 1. Java나 Java의 스펠(사양)에 정의된 것 이외에는 다른 기술이나 규약에 얽매이지 않아야 한다.
  • 2. 특정 환경에 종속적이지 않아야 한다.

 - POJO 프로그래밍이 필요한 이유

  1. 특정 환경이나 기술에 종속적이지 않으면 재사용 가능하고, 확장 가능한 유연한 코드를 작성할 수 있다.
  2. 저수준 레벨의 기술과 환경에 종속적인 코드를 애플리케이션 코드에서 제거함으로써 코드가 깔끔해진다.
  3. 코드가 깔끔해져서 디버깅이 상대적으로 쉬워진다.
  4. 특정 기술이나 환경에 종속적이지 않기 때문에 테스트 또한 단순해진다.
  5. ************객체지향적인 설계를 제한 없이 적용할 수 있다.***********

 

요약 :
-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 예시

-- AOP : 관점(관심) 지향 프로그래밍 --

-- 애플리케이션에 필요한 기능 중에서 공통적으로 적용되는 공통 기능에 대한 관심 --

 

공통 관심 사항과 핵심 관심 사항

- 공통 관심 사항 : 애플리케이션 전반에 걸쳐 공통적으로 사용되는 기능들에 대한 관심사

- 핵심 관심 사항 : 비즈니스 로직 즉, 애플리케이션의 주목적을 달성하기 위한 핵심 로직에 대한 관심사

 

# 애플리케이션의 핵심 업무 로직에서 로깅이나 보안, 트랜잭션 같은 공통 기능 로직들을 분리하는 것.

 

 

필요한 이유

  1. 객체 지향 설계 원칙에 맞는 코드 구현
  2. 코드의 간결성 유지
  3. 코드의 재사용

 

 

 

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