Spring Framework란? 스프링 프레임워크란?

Spring Framework란?
spring framework를 한마디로 정의하면 “오픈소스 자바 웹 프레임워크” 입니다.
뜻을 하나씩 살펴보자면,
오픈소스 (오픈소스 소프트웨어): 소스가 공개되어있어, 누구나 자유롭게 확인, 수정, 배포할 수 있는 소스입니다.
자바 : 썬 마이크로시스템즈의 제임스 고슬링 주도로 개발된 객체 지향적 프로그래밍 언어입니다.
웹 (웹 개발) : 인터넷이나 인트라넷을 위한 웹사이트를 개발하는것을 의미합니다.
프레임워크 : 복잡한 문제를 해결하거나 서술하는 데 사용되는 기본 개념 구조/틀입니다.
이를 다시 한 문장으로 표현하자면, Java로 웹사이트를 쉽고 빠르게 개발하기 위한 틀이라고 생각할 수 있습니다.
spring은 Java 생태계에서 가장 유명한 프레임워크 입니다.
Spring framework 다운받기
공식홈페이지 :
https://spring.io/
spring 설치파일 다운 (버전, dependency 등을 설정하여 다운):
https://start.spring.io/
spring 설치파일 다운 (빌드된 artifect) :
https://repo.spring.io/release
spring 소스 :
https://github.com/spring-projects/spring-framework
Spring Framework의 특징
- 여러 문제점을 해결하기 위한 디자인 패턴과 아키텍쳐 적용되어있습니다.
- 한국 전자정부 프레임워크 기반 기술이며, 공공기관 웹서비스 제공시 스프링 사용을 권장합니다.
- 경량 컨테이너에서 자바 객체를 직접 관리 : 객체 생성, 소멸과 같은 라이프 사이클을 프레임워크에서 관리합니다.
- POJO(Plain Old Java Object)방식 : 객체가 가벼우며, 기존에 존재하는 라이브러리 등을 활용하여 개발이 가능하니다.
- 제어 반전(IoC : Inversion of Control) : 필요에 따라 스프링에서 사용자의 코드를 호출합니다.
- MVC 패턴(MVC pattern) : 모델-뷰-컨트롤러 세 가지 구성요소로 나눈 패턴을 사용하여 몯류화된 개발방식을 지원합니다.
- 의존성 주입(DI,Dependency Injection) : 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜줍니다.
- 데이터 액세스 프레임워크 : mybatis나 hibernate 등 이미 완성도가 높은 데이터베이스 처리 라이브러리와 연결할 수 있는 인터페이스를 제공합니다.
- 관점 지향 프로그래밍(AOP : Aspect-Oriented Programming) : 로깅, 보안 같은 공통 기능을 분리하여 관리 가능합니다.
Spring Framework 아키텍쳐(architecture)
스프링 프레임워크 아키텍쳐는 크게 아래와 같이 구성되어져 있습니다.
각 모듈들이 구성되어 있고, 프로젝트에 따라 일부 모듈은 사용하지 않을 수도 있습니다.

- Test : 유닛테스트등 지원
- Core Container : 스프링 구동의 핵심 모듈
- AOP / Aspects / Instrumentation / Messaging : 유틸성 모듈
- Web : client쪽 처리에 가까운 모듈
- Data Access/Integration : 데이터 처리 관련 모듈
각 모듈에 따른 세부 내용은 아래에 좀 더 자세히 설명드려보고자 합니다.
Test 모듈
테스트 모듈은 JUnit 또는 TestNG 프레임워크로 스프링 구성 요소 테스트를 지원합니다.
예를들어, 아래와 같은 JUnit 코드를 작성할 수 있고, 테스트를 실행해볼수 있습니다. (junit 테스트코드와 실행결과 예시 스크린샷)


Core Container 모듈
Beans : 팩토리 패턴을 정교하게 구현한 빈팩토리를 제공합니다.
*Bean이란 argument(매개변수)가 없는 생성자, Serializable, getter/setter 메소드 제공 조건을 만족하는 자바 클래스를 의미합니다.
예를 들어, 아래 코드는 Bean이라고 부를 수 있습니다.1
2
3
4
5
6
7
8
9public class Employee implements java.io.Serializable{
private id;
private String name;
public Employee();
public void setId(int id){ this.id = id; }
public int getId(){return id;}
public void setName(String name){this.name = name;}
public String getName() {return name;}
}Core : IoC 및 의존성 주입 기능을 포함하여 프레임워크의 기본 부분을 제공
의존성 주입(Dependency Injection)에 대해서는 다음에 좀 더 자세히 알아보겠습니다.Context : Core 및 Beans 모듈이 제공하는 솔리드 베이스에 구축되며
정의되고 구성된 모든 객체에 액세스하는 매체입니다.SpEL (Spring Expression Language): 런타임에 객체를 쿼리하고 조작하기 위한 강력한 표현언어
보통 properties에 정의한 내용을 주입합니다.
아래와 같은 코드중 @Value(“#{systemProperties[‘user.region’}”) 부분이 SpEL을 사용한 부분입니다.1
2
3
4public static class FieldValueTest{
private String default;
}
위와 같이 코딩했을 시, spring을 실행하면 default라는 변수에 config로 설정한 user.region 값을 주입해주게 됩니다.
유틸성 모듈 : AOP / Aspects / Instrumentation / Messaging 모듈
- AOP : Aspect Oriented Programming구현을 제공하여 메소드 인터셉터와 포인트컷을 정의하여 분리해야 하는 기능을 구현하는 코드를 깨끗하게 분리할 수 있습니다.
- Aspects : AspectJ와의 통합을 제공하며, 이는 다시 강력하고 성숙한 AOP 프레임워크입니다.
- Instrumentation : 특정 애플리케이션 서버에서 사용될 클래스 계측 지원 및 클래스 로더 구현을 제공합니다.
- Messaging : 응용 프로그램에서 사용할 웹소켓 하위 프로토콜로 STOMP를 지원합니다. 또한 웹소켓 클라이언트의 STOMP 메시지를 라우팅하고 처리하기 위한 annotation 프로그래밍 모델을 지원합니다
Data Access/Integration 모듈
- JDBC : JDBC 관련 코딩의 필요성을 제거하는 JDBC-추상 계층을 제공합니다.
- ORM : 은 JPA, JDO, Hibernate, myBatis를 포함한 객체 관계 매핑 API를 위한 통합 계층 제공합니다.
mybatis, hibernate 등은 또 다른 프레임워크라 칭하기도 하는데, 나중에 더 자세히 알아보겠습니다. - OXM : 은 JAXB, 캐스터, XMLBeans, JiBX 및 XStream에 대한 객체/XML 매핑 구현을 지원하는 추상화 계층을 제공합니다.
- JMS(Java message service) : 메시지를 생성하고 소비하기 위한 기능이 포함됩니다.
- Transaction : 모듈은 특수 인터페이스를 구현하는 클래스와 모든 POJO에
대해 프로그램적 및 선언적 트랜잭션 관리를 지원합니다.
일례로, @Transactional이라는 annotation을 사용하면 개발자는 손쉽게 트랜잭션을 적용할 수 있습니다.
Web 모듈
- 웹 : 서블릿을 통한 멀티파트 파일 업로드 기능, IoC 컨테이너 초기화 등 웹 중심의 기본 통합 기능과 웹 중심의 애플리케이션 컨텍스트를 제공합니다.
- 웹-MVC : 웹 애플리케이션을 위한 스프링의 MVC(Model-View-Controller) 구현 포함합니다.
- 웹소켓 : 웹 애플리케이션에서 클라이언트와 서버 간의 웹소켓 기반 양방향 통신을 지원합니다.
- Web-Portlet : View의 모듈화를 위한 portlet을 지원하기 위한 모듈입니다.
총평
spring framework 에 대해 공부해보고자 정리하게 되었습니다.
이번에는 대략적인 내용만 정리하였는데, 대략적인 내용에서 나온 단어들을 심도있게 다뤄보는 기회를 조금씩 가져보과 합니다.
spring은 Java로 웹 개발한다고 하면 사실상 표준이된 프레임워크로 공부하면 할 수록 여러 디자인패턴들을 익힐 수 있어 유용할것 같습니다.
spring 개발자 구하기도 쉽고 구조화가 잘 되어있어서 품질도 어느정도 보장이 된다는 아주 큰 장점이 있어 누구라도 spring을 선호할 수 밖에 없을것 같습니다.
다만, 아무리 개발하기 편하더라도 toy project에서는 부적합할 수도 있습니다.
생각보다 무겁고 느릴 수 있고, over engineering이 들어갈 수 있기 때문입니다.
Spring Framework란? 스프링 프레임워크란?
#spring, #springframework, #framework, #java, #web, #다운로드, #pojo, #ioc, #mvc, #di, #aop, #architecture, #스프링, #스프링프레임워크, #프레임워크, #자바, #웹