오봉이와 함께하는 개발 블로그
Spring - 스프링 개요 본문
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에서 제공하는 엔터프라이즈 서비스와 기술을 그대로 사용할 수 있도록 도와주는 프레임워크
- 스프링 프레임워크
- JavaBean
특징
- 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) 스크립트 기반의 동적인 빌드 기능 제공
- 안드로이드 앱을 만들 때 필요한 공식 빌드시스템
- 메이븐보다 빌드 작업이 간단하며 프로그래밍만으로 기능 추가 가능
- 별도의 빌드 스크립트를 통하여 사용할 애플리케이션 버전, 라이브러리 등 설정
- Maven (메이븐)
- Spring 라이브러리의 기본 세트를 포함하는 Maven을 사용하여 간단한 Spring 프로젝트 생성
728x90
'BE > Spring' 카테고리의 다른 글
Spring - Controller와 요청 처리 (0) | 2022.01.07 |
---|---|
Spring - 모델 패턴 (0) | 2022.01.06 |
Spring - AOP 간단한 기초 설명 (0) | 2022.01.05 |
Spring - 스프링 싱글톤 & 어노테이션을 통한 DI (0) | 2022.01.05 |
Spring - 의존성, DI(Dependency Injection) (0) | 2022.01.04 |
Comments