본문 바로가기

CSE/Back-end

스프링 프레임워크 이해하기

반응형

기존 다른 업무를 하면서 Back-end에 대하여 공부하면서 작성한 글입니다.
기본적으론 개인 아카이빙이 목적이지만 같이 공부한 것을 나누는 포스터이며, 혹시 잘못된 점이 있다면 댓글로 알려주세요


Spring

1. 배경: 스프링의 진화

엔터프라이즈 자바의 초창기에는 EJB(Enterprise JavaBeans)가 강력한 엔터프라이즈 어플리케이션을 구축하는 데 대세였습니다. 하지만, EJB의 복잡성은 현대의 아키텍처 트렌드와 잘 어울리지 않았습니다. 이러한 필요성은 스프링 프레임워크의 탄생을 이끌었습니다.

시간이 지나면서 스프링은 EJB의 복잡성을 완화하는 프레임워크에서 엔터프라이즈 자바의 다양한 요구사항을 해결하는 종합적인 프로젝트 모음으로 진화했습니다. 이제는 보안 프레임워크부터 완전한 MVC 웹 어플리케이션 프레임워크에 이르기까지 모든 것을 포함하고 있습니다.

2. 스프링 프레임워크 이해하기

스프링 프레임워크는 자바로 엔터프라이즈 어플리케이션을 구축하기 위한 종합적이면서도 경량한 솔루션입니다. 복잡한 엔터프라이즈 어플리케이션 개발의 복잡성에 대응하여 나타났으며, 더 단순하고 유연하며 모듈화된 접근법을 제공합니다.

3. 스프링 프레임워크의 핵심 원리

스프링 프레임워크는 몇 가지 핵심 원리에 기반을 두고 있습니다:

  • 제어의 역전 (IoC): 의존성 주입 (DI) 및 의존성 조회 (DL)라고도 알려져 있으며, IoC는 의존성 관리의 책임을 프로그

래머에서 프레임워크 자체로 옮깁니다. 이 결과 더 모듈화되고 테스트 가능한 코드가 생성됩니다.

  • POJO (Plain Old Java Object): 스프링은 POJO의 사용을 지지합니다. 이것은 특정 프레임워크에 바인딩되지 않은 간단하면서도 재사용 가능하고 테스트 가능한 자바 객체입니다.
  • 관점 지향 프로그래밍 (AOP): AOP는 교차 관심사를 분리함으로써 모듈성을 증가시키는 프로그래밍 패러다임입니다. 이는 프로그램 로직을 고유한 부분 ("관점"이라고 함)으로 분해함으로써 이루어집니다. 예를 들어, 로깅은 어플리케이션의 여러 메소드, 클래스, 레이어를 관통하는 문제입니다. 스프링 AOP를 사용하면, 이러한 로깅 문제를 핵심 비즈니스 로직에서 분리할 수 있어 코드가 깔끔해지고 유지 관리가 쉬워집니다.
  • Model-View-Controller (MVC): 스프링 MVC 웹 어플리케이션 프레임워크는 어플리케이션의 역할들 사이에서 명확한 관심사의 분리를 제공하며, 기존의 무거운 프레임워크들에 대한 매우 유연하고 강력한 대안입니다.
  • 모듈성: 스프링의 모듈성은 개발자가 전체 프레임워크를 채택하는 대신 필요한 컴포넌트만 사용할 수 있게 합니다.

4. 스프링 프레임워크 아키텍처 속으로

Spring Architecture

스프링 프레임워크는 Core Container, Data Access/Integration, Web, AOP, Instrumentation, 그리고 Test와 같은 여러 잘 구조화된 모듈로 구성된 계층 아키텍처를 가지고 있습니다. 스프링 프레임워크 아키텍처의 상세 다이어그램은 다양한 모듈이 어떻게 함께 작동하는지 시각화하는 데 도움이 되며, 개발자가 자신들의 어플리케이션을 경량화하고 최적화하는데 도움이 됩니다.

5. 스프링 부트 소개

스프링 부트는 스프링 프레임워크의 확장으로, 새로운 스프링 프로젝트의 초기 설정과 구성을 단순화하도록 설계되었습니다. 스프링 플랫폼과 서드파티 라이브러리에 대한 의견을 내는 방식으로, 스프링 부트는 개발자가 프로젝트를 빠르게 시작할 수 있게 해줍니다. 이는 마이크로서비스를 개발하는데 이상적인 선택입니다.

6. Java EE vs. 스프링 부트: 비교해 보기

특징 Java EE 스프링 부트
시작 시간 애플리케이션 서버 시작으로 인해 길 수 있음 매우 빠름, 마이크로서비스에 이상적
구성 XML 기반, 다소 장황할 수 있음 규칙보다는 구성, 최소한의 설정
의존성 주입 CDI 사용 스프링의 의존성 주입 사용
데이터 액세스 JPA 사용 JPA 및 스프링 데이터 지원
유연성 명세서에 종속적임 매우 커스터마이징 가능
학습 곡선 다양한 명세서를 이해하는 것이 필요하여 경사가 더 가파름 자동 설정과 내장된 서버 덕분에 시작하기가 더 쉬움
커뮤니티 및 지원 다양한 공급업체에 의해 지원됨, 더 큰 커뮤니티 강력한 커뮤니티 지원, 주로 Pivotal에 의해 주도됨
패키징 및 배포 일반적으로 배포를 위해 애플리케이션 서버가 필요 독립적인 애플리케이션에 내장된 서버, 배포가 쉬움
마이크로서비스 지원 설정이 더 복잡할 수 있음 마이크로서비스를 염두에 두고 구축

Java EE (Enterprise Edition)는 대규모, 다계층, 확장 가능하며, 신뢰할 수 있고 안전한 네트워크 어플리케이션을 구축하고 실행하는데 필요한 표준화된 API와 런타임 환경을 제공합니다. Java EE가 제공하는 종합적인 솔루션에도 불구하고, 스프링 부트

는 훨씬 더 단순하고 유연한 설정을 제공하여 시작부터 종료까지의 개발 사이클을 가속화합니다.

결론

스프링 프레임워크는 엔터프라이즈 자바 어플리케이션 개발에 있어 효율적인, 유연한, 테스트 가능한 코드를 작성하는데 도움이 됩니다. 이는 엔터프라이즈 어플리케이션 개발에서 중요한 요소이며, 이를 달성하기 위해 필요한 기능과 도구를 모두 제공합니다. 스프링 부트는 이러한 스프링 프레임워크의 기능을 활용하여 초기 설정을 단순화하고 빠르게 시작하도록 해주는 추가적인 프레임워크입니다. 그래서 스프링 프레임워크는 자바 기반의 웹 어플리케이션 개발에 있어서 널리 사용되는 선택이 되었습니다.

반응형