오봉이와 함께하는 개발 블로그

Spring - 스프링 개요 본문

BE/Spring

Spring - 스프링 개요

오봉봉이 2022. 1. 4. 17:01
728x90

스프링 프레임워크

  • 엔터프라이즈 애플리케이션 구축을 위한 솔루션
  • 자바 애플리케이션 개발을 포괄적인 인프라 지원을 제공하는 자바 플랫폼
    • 스프링에서 인프라를 처리하므로 개발자는 애플리케이션 개발에만 집중
  • 모듈화되어 있어 필요한 부분만 사용 가능
  • 완전한 기능을 갖춘 MVC 프레임워크 제공

장점

  • 생산성 우수
    • 엔터프라이즈 애플리케이션 구축을 위한 솔루션이지만, 가볍고 모듈화 되어 있어 필요한 부분만 사용하면 된다.
    • POJO 클래스와 약간의 설정만으로도 개발이 가능하므로 개발 생산성을 높일 수 있음
    • 실제 스프링을 적용하면 적용하지 않은 코드의 1/3 정도의 코드만으로도 개발 가능
  • 품질 보증
    • 스프링 프레임워크는 이미 검증된 많은 아키텍처 및 디자인 패턴을 적용하여 만들어졌기 때문에 코드에 아키텍처를 구현하기 위한 코드나 디자인 패턴을 사용하기 위한 코드를 개발자가 만들 필요가 없음
    • 이는 개발에 일관성을 제공해 주고 소프트웨어의 품질을 보증해 줌
  • 유지 보수 용이
    • 스프링 프레임워크를 사용하여 작성된 애플리에케이션들을 유지보수하는데 소요되는 인력과 시간을 줄일 수 있기 때문에 여러 프레임워크 중 스프링 프레임워크가 업계 표준으로 자리잡음

EJB(Enterprise JavaBean)

  • 규모가 커지고 복잡한 애플리케이션 제작위해 만들어진 기술
  • extends, implements를 많이 사용해서 클래스 의존도가 높고, 복잡하고 제한이 많은 문제 발생
  • 별도로 종속되지 않고 간단한 자바 객체를 사용하자는 의도에서 나온 것이 POJO
  • Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 '무거운'객체를 만들게 된 것에 반발해서 사용하게 된 용어가 POJO

POJO (Plain Old Java Object)

  • 자바 언어 사양 외에 어떠한 제한에도 묶이지 않은 자바 객체
  • 특정 환경과 규약에 종속되지 않아 필요에 따라 재사용될 수 있는 방식으로 설계된 객체
  • 즉, 다른 클래스를 상속 받거나 인터페이스를 구현해야 하는 규칙이 없는 자바 클래스
  • 미리 정의된 클래스 확장의 예
    • public class @@@ extends javax.servlet.http.HttpServlet{ ... }
  • 대표적인 POJO
    • JavaBean
      • 생성자와 Getters/Setters만 지닌 단순 자바 객체
    • 프레임워크
      • 스프링 프레임워크
        • POJO를 사용하는 장점과 EJB에서 제공하는 엔터프라이즈 서비스와 기술을 그대로 사용할 수 있도록 도와주는 프레임워크

특징

  • POJO 기반 프레임워크
    • 자바 객체의 라이프사이클을 스프링 컨테이너가 직접 관리하고 스프링 컨테이너로부터 필요한 객체를 얻어옴
  • DI(Dependency Injection) 지원
    • 의존성 주입
    • 의존 관계에 있는 객체를 생성 조립해주는 기능
    • 각 계층이나 서비스들 사이 또는 객체들 사이의 의존성이 존재할 경우 스프링 프레임워크가 서로 연결시켜, 클래스 간 약한 결합 가능
  • AOP(Aspect Oriented Programming) 지원
    • 관점 지향 프로그래밍
    • 트랜잭션 로깅, 보안 등 여러 모듈에서 공통적으로 지원하는 기능을 분리하여 사용 가능
    • 반복적인 코드를 줄이고 개발자가 비즈니스 로직에만 집중할 수 있도록 지원
  • 뛰어난 확장성
    • 스프링 프레임워크의 소스는 모두 라이브러리로 분리되어 있어서 필요한 라이브러리만 가져다 사용하면 됨
  • Model2 방식의 MVC 프레임워크 지원
    • Model / View / Controller 패턴

스프링 프레임워크 핵심 기능

  • 의존 관계에 있는 객체를 생성 조립해주는 기능
  • DI(Dependency Injection : 의존성 주입)
    • 객체 간의 의존성을 개발자가 설정하는 것이 아니라 스프링 컨테이너가 주입 시켜주는 기능
    • 장점 : 객체를 쉽게 확장하고 재사용할 수 있음
  • IoC(Inversion of Control : 제어의 역전)
    • 객체에 대한 제어권 문제
    • 기존에는 개발자에게 제어권이 있었음
      • new 연산자를 사용해서 원하는 곳에서 객체 생성
    • 스프링 프레임워크에서는 개게의 제어권이 스프링에게 있고 인스턴스 라이프 사이클(생성~소멸)을 개발자가 아닌 스프링 프레임워크에서 담당

스프링 프로젝트 종류

  • Spring Legacy Project
    • 스프링 템플릿 프로젝트 이용하는 프로젝트
    • 모델2 방식 (MVC) 프로젝트 생성 시 사용
    • 서버 및 여러 설정 필요
    • 실제 개발 업무에서 많이 사용 했었음
  • Spring Starter Project
    • Spring Boot을 이용하는 프로젝트
    • 최대한 간단하게 실행하고, 배포가 가능한 수준의 웹 애플리케이션을 제작하기 위한 목적
    • 개발에 필요한 모든 환경 설정을 갖추면서 최소한의 개발을 해야 하는 경우 사용
    • 개발자가 복잡한 설정 없이 모든 개발 환경이 준비되기 때문에 초보 개발자도 쉽게 웹 프로젝트 생성 가능
    • 실제 개발 업무에서는 Legacy Project 사용했지만 현재는 Spring Boot를 주로 사용
    • 기존에 진행했던 프로젝트들은 Legacy Project가 많다.
  • Simple Spring Maven (Maven)
    • Spring 라이브러리의 기본 세트를 포함하는 Maven을 사용하여 간단한 Spring 프로젝트 생성
      • Maven (메이븐)
        • Java용 프로젝트 관리도구
        • XML 기반의 정적인 빌드 제공
      • Gradle (그레이들)
        • 그루비(groovy) 스크립트 기반의 동적인 빌드 기능 제공
        • 안드로이드 앱을 만들 때 필요한 공식 빌드시스템
        • 메이븐보다 빌드 작업이 간단하며 프로그래밍만으로 기능 추가 가능
        • 별도의 빌드 스크립트를 통하여 사용할 애플리케이션 버전, 라이브러리 등 설정
728x90
Comments