본문 바로가기
Framework/Spring

[Spring/개념] 스프링 프레임워크(Spring Framework)란?

by woongii 2024. 10. 14.

1. 프레임워크 (Framework) 란?

프레임워크(Framework)는 소프트웨어 개발에서 재사용할 수 있는 구조나 기반이 되는 틀을 제공하는 개발 도구이다. 개발자는 이 틀을 바탕으로 일관된 방식으로 코드를 작성할 수 있으며, 핵심 로직에 집중할 수 있게 도와준다. 프레임워크는 미리 정의된 구조와 규칙을 제공하기 때문에 개발자는 해당 구조를 따르면서 필요한 기능을 추가하고 맞춤화하여 애플리케이션을 완성할 수 있다.

  • 프레임워크 특징
    • 재사용성 : 프레임워크는 미리 구현된 코드와 구조를 재사용할 수 있게 해준다. 이를 통해 개발자는 중복되는 작업을 줄이고, 코드의 일관성을 유지할 수 있다.
    • 모듈화 : 프레임워크는 애플리케이션의 각 기능을 모듈 단위로 분리하고 관리할 수 있도록 도와다. 이를 통해 코드의 유지보수성과 확장성이 높아진다.
    • 표준화 : 프레임워크는 개발 과정에서 따라야 할 명확한 규칙과 관습을 제시한다. 개발자들은 이를 통해 코드의 구조와 작동 방식이 일관되도록 작성할 수 있어, 협업 시에도 효율적인 개발이 가능하다.
    • 확장성 : 프레임워크는 기본적인 기능 외에도 확장 가능한 구조를 제공한다. 개발자는 필요한 기능을 추가하거나 커스터마이징하여 자신의 요구에 맞는 애플리케이션을 만들 수 있다.
    • 기본 기능 제공 :많은 프레임워크는 기본적인 기능을 내장하고 있어, 개발자는 핵심 로직에만 집중하면 된다. 예를 들어, 스프링 프레임워크는 의존성 주입(DI), 트랜잭션 관리, 보안, 데이터베이스 연동 등을 기본적으로 지원한다.

 

2. 스프링 프레임워크(Spring Framework)

스프링 프레임워크는 자바 기반의 엔터프라이즈 애플리케이션을 개발하기 위해 널리 사용되는 애플리케이션 프레임워크이다. 엔터프라이즈급 애플리케이션이란 보통 대규모 시스템을 필요로 하는 기업 환경에서 사용되며, 스프링은 이러한 복잡한 애플리케이션을 보다 쉽게 개발하고 관리할 수 있도록 다양한 기능과 도구를 제공한다.

💡 엔터프라이즈 개발이란? 
대규모 데이터 처리와 트랜잭션이 동시에 여러 사용자로부터 행해지는 매우 큰 규모의 환경에서 개발하는 것을 의미

 

1) 스프링 컨테이너 (Spring Container)

스프링 프레임워크의 핵심은 바로 스프링 컨테이너다. 스프링 컨테이너는 "스프링 런타임 엔진"으로도 불리며, 애플리케이션을 구성하는 객체들의 생명주기 및 의존관계를 관리하는 역할을 한다. 이 컨테이너는 다음과 같은 특징을 가지고 있다.

  • 객체 생성 및 관리: 스프링 컨테이너는 애플리케이션 설정 정보를 바탕으로 객체(빈, Bean)를 생성하고 그들 간의 의존성을 자동으로 주입하여 애플리케이션을 효율적으로 구성한다.
  • 독립적 또는 웹 모듈 통합 사용: 컨테이너는 독립적으로 실행될 수 있지만, 보통 웹 모듈과 함께 사용되어 서블릿으로 등록된다. 이는 주로 스프링 MVC와 같은 웹 프레임워크에서 많이 사용된다.
  • POJO(Plain Old Java Object)방식 지원 : 스프링은 POJO(Plain Old Java Object) 방식의 프레임워크로, 특정 인터페이스를 구현하거나 상속받을 필요가 없어 기존 라이브러리와의 호환이 용이하고, 객체가 가볍다. 또한 의존성이 낮아 테스트와 유지보수가 쉽다.

2) 스프링의 공통 프로그래밍 모델

스프링은 개발자가 일관된 방법으로 애플리케이션을 작성할 수 있도록 세 가지 핵심 프로그래밍 모델을 제공합니다:

  • IoC (Inversion of Control) / DI (Dependency Injection)

IoC는 제어의 역전(Inversion of Control)을 의미하며, 객체의 생성과 생명주기를 개발자가 아닌 스프링 컨테이너가 관리하도록 한다. DI(의존성 주입)는 스프링이 IoC 원칙을 적용하는 방식으로, 객체 간의 의존 관계를 코드 내에서 직접 설정하지 않고 스프링이 알아서 주입해준다. 이러한 설계는 유연하고 확장성 있는 객체지향 시스템을 구성하는 데 매우 유용하다.

  • 서비스 추상화 (Service Abstraction)

스프링은 특정 기술이나 환경에 종속되지 않도록 설계되었다. 서비스 추상화를 통해 애플리케이션은 다양한 기술 스택(데이터베이스, 메시징 시스템 등)을 유연하게 사용할 수 있으며, 코드의 이식성과 확장성이 크게 향상된다. 예를 들어, JDBC나 ORM 같은 데이터 액세스 계층도 스프링에서는 통일된 방식으로 사용할 수 있다.

  • AOP (Aspect-Oriented Programming)

AOP는 횡단 관심사(Cross-Cutting Concerns)를 모듈화하는 프로그래밍 패러다임이다. 예를 들어, 로깅, 트랜잭션 관리, 보안과 같은 기능은 애플리케이션의 여러 부분에서 반복적으로 사용되는데, 이러한 부가 기능을 핵심 비즈니스 로직과 분리하여 AOP를 통해 적용할 수 있다. 스프링의 AOP는 특히 트랜잭션 관리와 같은 엔터프라이즈 기능을 효율적으로 처리하는 데 강력한 도구이다.

 

✔️OOP와 AOP 의 차이
 
객체지향 프로그래밍으로, 관심사가 같은 데이터를 모아 캡슐화하고, 낮은 결합도로 독립적인 모듈을 구성한다. 그러나 중복된 코드가 많아질 수 있고, 유지보수성이 저하될 수 있다.

OOP의 문제점을 해결하기 위해 등장한 방식으로, 핵심 기능과 공통 기능을 분리하여 공통 기능을 모듈화할 수 있다. 공통 기능을 한 곳에서 관리하기 때문에 유지보수가 용이하고, 재사용성을 극대화할 수 있다.

 

3) 스프링 프레임워크 구조

스프링 프레임워크는 다양한 모듈로 구성되어 있으며, 각 모듈이 서로 유기적으로 연결되어 있다.

 

스프링 프레임워크의 구조

  • Spring Core

스프링의 핵심 모듈로, 스프링 컨테이너를 의미한다. 핵심은 Bean Factory이며, IoC 패턴을 적용하여 객체 구성부터 의존성 처리까지 모든 역할을 담당한다 .

  • Spring Context

스프링 Context는 엔터프라이즈 애플리케이션에 필요한 다양한 기능을 제공하는 설정 파일로, JNDI, EJB, 트랜잭션 관리, 스케줄링 등의 서비스들을 포함하고 있다.

  • Spring AOP

Spring AOP 모듈은 스프링에서 관점지향 프로그래밍(AOP)을 적용할 수 있도록 도와준다. 이를 통해 로깅, 트랜잭션 관리 등의 횡단 관심사를 모듈화하여 적용할 수 있다.

  • Spring DAO

DAO란 Data Access Object의 약자로 데이터베이스에 접근하는 객체이다. 스프링은 JDBC DAO를 지원하여 데이터베이스 처리에 대한 예외 처리와 코드를 간소화해준다.

  • Spring ORM

ORM이란 Object relational mapping의 약자로 간단하게 객체와의 관계 설정을 하는 것이다. 스프링은 객체 관계 매핑(ORM)을 지원하며, Hibernate, iBatis, JDO 등의 ORM 도구와 연동할 수 있다.

  • Spring Web

스프링은 웹 애플리케이션 개발을 위한 Web Context 모듈을 제공하며, Jakarta Struts와 통합하여 사용할 수 있다.

  • Spring MVC

스프링은 MVC (Model-View-Controller) 패턴을 지원하여, 효율적인 웹 애플리케이션 개발을 가능하게 합니다. 스프링 MVC는 다양한 뷰 기술(JSP, Velocity, Tiles 등)을 지원한다. MVC 프레임 워크는 전략 인터페이스를 통해 고급 구성 가능하며 JSP, Velocity, Tiles, iText 및 POI를 포함한 수많은 뷰 기술을 지원하고 있다.

 

4) 주요 기술 API

스프링은 엔터프라이즈 애플리케이션 개발에 필요한 광범위한 기술 API를 제공한다. 여기에는 다음과 같은 영역이 포함된다.

  • 스프링 데이터(Spring Data): 관계형 데이터베이스와 NoSQL 데이터베이스에 접근하는 다양한 기술을 제공.
  • 스프링 시큐리티(Spring Security): 애플리케이션의 인증과 인가(Authorization)를 처리하는 보안 프레임워크.
  • 스프링 배치(Spring Batch): 대용량 데이터 처리, 배치 처리에 특화된 기능.
  • 스프링 클라우드(Spring Cloud): 마이크로서비스 아키텍처와 클라우드 네이티브 애플리케이션 개발을 위한 다양한 도구 제공.

스프링은 이러한 방대한 기술 스택을 통해 개발자가 다양한 요구 사항을 만족하는 애플리케이션을 효율적으로 개발할 수 있게 도와준다.

 

 

 

 

 

 

 

 

[출처: 토비의스프링3.1(Vol1), https://www.icia.co.kr/community/board/view/2/2/76, https://medium.com/@khj93/spring-framework%EB%9E%80-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-%ED%95%B5%EC%8B%AC-%EC%A0%95%EB%A6%AC-ffe1c10dc980]

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

[Spirng/개념] 스프링 MVC 구조  (1) 2024.10.16
[Spring/개념] 기본 구조  (1) 2024.10.14