지식

스프링 프레임워크란?

colin2 2024. 1. 23. 11:43

 

자, 프레임워크가 무엇인지 조금은 알았으니 본격적으로 스프링 프레임워크에 대해 알아보자.

 

IoC(제어의 역행-낮은 결합도)와 AOP(횡단관심-높은 응집도)를 지원하는 경량의 컨테이너 프레임워크

 

 

사실 스프링 프레임워크에 대한 설명이라면 위에 한 줄이면 끝이다.

 

하지만 지금은 공부하는 시간이니 조금 더 자세하게 알아보자.

 

스프링 탄생 배경

 

책을 보면 스프링 프레임워크의 가장 처음에 나오는 것이 바로 탄생 배경이다.

 

스프링 프레임워크는 로드 존슨이 2004년에 만든 오픈소스 프레임워크이고, 이 스프링 프레임워크가 등장하기 이전에 자바 기반의 엔터프라이즈 애플리케이션은 대부분 EJB(Enterprise Java Beans)로 개발이 되었다고 한다.

 

자, 생각을 해보자.

 

뭔가가 새로 나온다는 건 이전에 사용하던 것이 불편했다는 것이다.

 

이러저러 단점들 중에 가장 큰 부분을 차지하는 것은 복잡한 디자인 패턴인 것 같다.

 

하지만 스프링 프레임워크에는 이미 많은 디자인 패턴이 적용되어 배포되기 때문에 프레임워크를 사용하는 것만으로도 디자인 패턴을 사용하는 게 되는 것이다.

 

스프링 프레임워크의 특징 

 

맨 위에 있던 문장을 자세하게 알아보자.

 

1. 경량 (Lightweight)

 

스프링을 경량이라고 하는 첫 번째 이유는 스프링은 여러 개의 모듈로, 각 모듈은 하나 이상의 JAR 파일로 구성되어 있는데 이 몇 개의 JAR 파일만 있으면 개발과 실행이 가능하고 배포 역시 매우 빠르고 쉽기 때문에 크기 측면에서 가볍다.

 

두 번째 이유는 스프링이 POJO(Plain Old Java Object) 형태의 객체를 관리하기 때문인데, 여기에서 POJO는 클래스를 구현하는 데 특별한 규칙이 없는 단순하고 가벼운 객체로 기존의 EJB 객체를 관리하는 것보다 훨씬 가볍고 빠르다.

 

2. 제어의 역행 (Inversion of Control) 

 

비즈니스 컴포넌트를 개발할 때, 가장 신경 쓰는 것이 바로 낮은 결합도와 높은 응집도인데, 스프링은 제어의 역행을 통해 애플리케이션을 구성하는 객체 간의 느슨한 결합, 즉 낮은 결합도를 유지한다.

 

IoC 적용 전: 객체의 생성이나 객체와 객체 사이의 의존관계를 개발자가 직접 자바 코드로 처리.

 ( -> 의존관계에 있는 객체를 변경할 때, 반드시 자바 코드를 수정해야 한다)

 

IoC 적용 후: 객체의 생성이나 객체와 객체 사이의 의존관계를 컨테이너가 대신 처리.

 ( -> 소스에 의존관계가 명시되지 않으므로 결합도가 떨어져 유지복수가 편리해진다 )

 

3. 관점지향 프로그래밍 (Aspect Oriented Programming, AOP)

 

관점지향 프로그래밍은 비즈니스 메서드를 개발할 때, 핵심 비즈니스 로직과 각 비즈니스 메서드마다 반복해서 등장하는 공통 로직을 분리함으로써 응집도가 높게 개발할 수 있도록 지원한다.

 

공통 기능을 외부의 독립된 클래스로 분리하고, 해당 기능을 프로그램 코드에 직접 명시하지 않고 선언적으로 처리하여 적용하는 것이 관점지향 프로그래밍의 기본 개념이다.

 

4. 컨테이너 (Container)

 

컨테이너는 특정 객체의 생성과 관리를 담당하며 객체 운용에 필요한 다양한 기능을 제공하는데, 일반적으로 서버 안에 포함되어 배포 및 구동된다.

 

대표적으로 Servlet 객체를 생성하고 관리하는 'Servlet 컨테이너(톰캣 서버에도 포함되어 있음)'와 EJB 객체를 생성하고 관리하는 'EJB 컨테이너'가 있다.

 

애플리케이션 운용에 필요한 객체를 생성하고 객체 간의 의존관계를 관리한다는 점에서 스프링도 일종의 컨테이너라고 할 수 있다.

 

자 여기까지 스프링 프레임워크에 대해 조금 더 자세하게 알아보았다.

 

몇 번을 듣고 직접 봐도 도대체 무슨 말이야? 하는 분이 계시다면 당신만 그런게 아니니 너무 낙담하지 마시길.

 

자연스럽게 머릿속에 들어올 때까지 파이팅!