Home [Spring] Spring 시작하기
Post
Cancel

[Spring] Spring 시작하기

Spring Framework의 등장 배경과 핵심 개념들을 정리합니다.

EJB(Enterprise Java Bean)

EJB란 엔터프라이즈급1 어플리케이션 개발을 단순화하기 위한 서버 측 컴포넌트 모델입니다. 여기서 Java bean이란 자바 클래스들이 복합적으로 이루어진 구조를 말합니다.
EJB는 개발 시 필요한 비즈니스 객체들을 관리하는 컨테이너를 만들고 필요할 때마다 컨테이너로부터 객체를 받는 식으로 관리하자는 취지에서 탄생하였으나, 배우기 어렵고 설정이 복잡하다는 단점이 있습니다.


Spring Framework의 등장배경

이후 EJB가 제공하는 서비스를 지원하면서도 복잡하지 않은 경량 프레임워크들이 등장하였고, 그 중 하나가 Spring 입니다.
2002년 Rod Johnson은 [Expert One-on-One J2EE Design and Development]라는 책을 출간했습니다. 책에는 약 3만 라인 가량의 예제 코드가 포함되어 있으며, 이것을 기반으로 발전시키 것이 오늘날의 스프링 프레임워크입니다.


Spring의 기본 철학

스프링은 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크라고 정의됩니다.

spring 스프링 삼각형

POJO

Spring 프레임워크에서는 POJO를 지원합니다. POJO(Plain Old Java Object)란 특정 클래스를 상속하거나 인터페이스를 구현하지 않는 평범한 자바 클래스입니다. POJO는 getter/setter를 가진 단순 자바 오브젝트로 정의하고 있습니다. 이러한 단순 오브젝트는 의존성이 없고, 추후 테스트 및 유지보수가 편리하다는 장점을 가집니다. 이로 인해 객체지향적 설계와 구현이 가능해집니다.

IoC/DI

IoC(Inversion of Control, 제어의 반전)은 스프링이 가지고 있는 핵심 기능입니다.
일반적으로 자바의 객체 생성 및 의존관계에 있어 모든 제어권은 개발자에게 있었습니다.
객체 결정 및 생성 → 의존성 객체 생성 → 객체 내의 메소드 호출 작업을 반복했습니다. 그러나 Servlet과 EJB가 나타나면서 기존의 제어권이 Servlet Container 및 EJB Container에게 넘어가게 되었습니다.

스프링에서도 객체에 대한 생성과 생명주기를 관리할 수 있는 기능을 제공하고 있습니다. IoC에서의 객체는 자기가 사용할 객체를 선택하거나 생성하지 않고, 컨테이너에게 권한을 위임합니다. 따라서 프레임워크가 객체의 생명주기를 관리하게 됩니다.

IoC는 DI에 의해 구현됩니다. DI(Dependency Injection, 의존성 주입)란 객체 간의 의존성을 자신이 아닌 외부에서 주입하는 개념입니다.
스프링에서는 설정 파일이나, 어노테이션을 통해서 객체 간의 의존 관계를 설정할 수 있으므로, 객체는 의존하고 있는 객체를 직접 생성하거나 검색할 필요가 없게 됩니다. 개발자가 new 키워드를 사용하여 객체를 생성하지 않고, 외부 컨테이너에서 생성된 객체를 주입받게 됩니다. 이때 @Autowired 등의 Annotation을 사용합니다.

AOP

AOP(Aspect Oriented Programming, 관점 지향적 프로그래밍)는 문제를 바라보는 관점을 기준으로 프로그래밍하는 기법입니다.
대부분 소프트웨어 개발 프로세스에서 사용하는 방법은 OOP(객체 지향 프로그래밍)입니다. 이는 객체지향 원칙에 따라 관심사가 같은 데이터를 한곳에 모아 분리하고, 낮은 결합도를 갖게 하여 독립적이고 유연한 모듈로 캡슐화를 하는 것을 일컫습니다. 그러나 이러한 과정 중 중복된 코드들이 많아지고 가독성, 확장성, 유지보수성을 떨어뜨립니다. 이러한 문제를 보완하기 위해 나온 것이 AOP입니다.

AOP는 핵심기능과 공통기능을 분리시켜 핵심 로직에 영향을 끼치지 않게 공통기능을 끼워넣는 개발 형태를 가집니다. 예를 들어, 트랜잭션, 로깅, 보안과 같이 여러 모듈에서 공통으로 필요하지만 실제 모듈의 핵심이 아닌 기능들을 분리하여, 각 모듈에 적용 가능합니다. 공통 코드를 한 곳에 모음으로써 중복되는 코드를 제거할 수 있고, 한 번의 수정으로 모든 핵심 기능들의 공통 기능을 수정할 수 있어 효율적인 유지보수가 가능합니다.

PSA

PSA(Portable Service Abstractions, 이식 가능한 서비스의 추상화)란 환경의 변화와 관계없이 일관된 방식으로 기술에 접근할 수 있게 해주는 추상화 구조를 말합니다. Spring은 Spring Web MVC, Spring Transaction, Spring Cache 등의 다양한 PSA를 제공합니다.


Spring 구조

spring 스프링 모듈


annotation
  1. 엔터프라이즈 시스템: 서버에서 동작하며 기업과 조직의 업무를 처리해주는 시스템. 많은 사용자들의 요청을 동시에 처리해야 하므로 서버 자원을 효율적으로 사용할 수 있어야 한다. 

This post is licensed under CC BY 4.0 by the author.