Framework/Spring

[Spring] Spring Framework 개념 및 정리

pongic 2022. 10. 17. 14:57
반응형
Spring Framework이란?

 

자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로서 엔터프라이즈급 애플리케이션을 개발하기 위한 모든 기능을 종합적으로 제공하는 경량화된 솔루션이다.

 

Spirng Framework는 컨테이너로 자바 객체를 담고 직접 관리한다.

 

Java 기반의 웹 애플리케이션 개발을 위한 Framework에 Spring Framework만 있는 것은 아니다. 

Apache Struts2나 Apache Wicket, JSF(Java Server Faces), Grails 같은 Java 또는 JVM 기반의 Web Framework들이 존재하며, 현재도 꾸준히 그 기능들이 업데이트되고 있다.

 

자주 사용하는 이유는 대부분의 기업들이 기업용 엔터프라이즈 시스템용 애플리케이션 개발에 있어 Framework을 선택할 때, 개발 생산성을 높이고 어떻게 하면 애플리케이션의 유지 보수를 조금 더 용이하게 할 것인가에 많은 초점을 맞추기 때문에 Spring Framework를 사용한다.

 

 

Spring Framework 장점
  • POJO(Plan Old Java Object) 기반의 구성
  • DI(Dependency Injection) 지원
  • AOP(Aspect Oriented Programming) 지원
  • Java 언어를 사용함으로써 얻는 장점

 

Spring Framework는 POJO 프로그래밍을 지향하기 위해 IoC/DI, AOP, PSA라는 기술을 제공한다.

POJO

 

Java로 생성하는 순수한 객체를 의미한다. 

 

POJO 프로그래밍으로 불리기 위한 규칙

  • Java나 Java의 스펙에 정의된 것 이외에는 다른 기술이나 규약에 얽매이지 않아야 한다.
  • 특정 환경에 종속적이지 않아야 한다.

 

 

POJO 프로그래밍이 필요한 이유
  • 재사용이 가능하고 확장 가능한 유연한 코드를 작성할 수 있다.
  • 코드가 깔끔해진다.
  • 디버깅하기도 상대적으로 쉽다.
  • 테스트 역시 단순해진다.
  • 객체지향적인 설계를 제한 없이 적용할 수 있다.

 

 

IoC(Inversion of Control)

 

애플리케이션 흐름의 주도권이 뒤바뀐 것을 의미한다.

메서드나 객체의 호출 작업을 개발자가 결정하는 것이 아니라 외부에서 결정되는 것을 의미한다.

이러한 IoC의 개념이 적용되어 있는 것이 DI이다.

 

 

DI(Dependency Injection)

 

DI는 IoC 개념을 조금 구체화시킨 것이라고 볼 수 있다.

의존성 주입이라는 의미이며 객체를 직접 생성하는 것이 아닌 외부에서 생성한 후 주입시켜주는 방식이다.

객체 간의 관계를 느슨하게 해 준다. 클래스 내부에서 다른 클래스의 객체를 생성하게 되면 두 클래스 간에 의존 관계가 성립하게 된다. 클래스 내부에서 new를 사용해 객체를 직접 생성하지 않고 생성자 등을 통해 외부에서 다른 클래스의 객체를 전달받고 있다면 의존성 주입이 이루어지고 있는 것이다.

 

 

AOP(Aspect Oriented Programming)

 

관점 지향 프로그래밍이라고 불린다. 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화 하겠다는 것이다. 

 

예를 들어 핵심 관심 사항에는 커피 메뉴를 구성하기 위해 커피 종류를 등록하는 것과 고객이 커피를 주문하는 기능이고  커피 주문 애플리케이션에 아무나 접속하지 못하도록 제한하는 애플리케이션 보안에 대한 부분은 애플리케이션 전반에 공통적으로 적용되는 기능이기 때문에 공통 관심 사항에 해당된다.

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

반응형

'Framework > Spring' 카테고리의 다른 글

[Spring] AllArgsConstructor, NoArgsConstructor  (0) 2022.12.07
[Spring API 계층] DTO(Data Transfer Object)  (0) 2022.12.07