공부하다죽어라
article thumbnail

스프링은 아마 우리나라 JAVA개발 중에서 가장 많이 사용되는 프레임워크일 것이다.

스프링 프레임워크는 어떤 장점이 있길래 많이 사용되는건지 이번 포스팅을 통해서 알아볼 것이다.

우선 스프링이란 무엇인가 ?

출처 : 나무위키

스프링 프레임워크(영어: Spring Framework)는 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크로서 간단히 스프링(Spring)이라고도 한다. 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있다. 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준프레임워크의 기반 기술로서 쓰이고 있다.

  • 스프링은 경량 컨테이너로서 자바 객체를 직접 관리한다. 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다.

나는 스프링의 특징으로서 대표적으로 세 가지를 꼽았다.

  • 제어 반전(IoC : Inversion of Control)을 지원한다. 컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출한다.
  • 의존성 주입(DI : Dependency Injection)을 지원한다. 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.
  • 관점 지향 프로그래밍(AOP : Aspect-Oriented Programming)을 지원한다. 따라서 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다.

DI : Dependency Injection

각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.

 

Dependency Injection, 직역하자면 '의존성 주입' 이다.

그런데 의존성이란 단어가 잘 와닿지 않는다.

 

의존성이란 말 그대로 내가 어떤 로직을 수행하기 위해 필요한 함수나 클래스가 필요하다는 것 ( 의존 )을 말한다.

이러한 함수나 클래스가 얼마나 필요한지에 따라 의존성이 강하다/낮다를 표한하는 것 같다.

 

우리는 객체를 만들 때

로직을 수행하기 위한 클래스나 함수를 직접 내부에 작성해서 사용한다.

그러나 스프링에서는 외부에서 미리 의존관계가 있는 클래스와 함수를 미리 만들어놓기 때문에 우리는 필요할 때 마다 외부에서 가져온 객체를 직접 주입만 시키면된다.

이처럼 외부에서 만들어진 인스턴스들을 스프링에선 Bean이라 부르고 이 Bean은 모두 싱글톤 패턴이 적용된다.

 

DI의 궁극적인 목적은 의존성을 줄이는 것이다.

  • 디자인패턴 중 팩토리 패턴이 사용된다.

 

 

IOC : Inversion of Control

컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출한다.

 

'제어의 역전' 이라는 말이 무엇인가?

개발자는 인스턴스를 직접 생성하고 관리해왔다. 그러나 스프링에서는 이러한 인스턴스들을 직접관리하지 않고 스프링에 그 권한을 위임하여 사용한다.

스프링에서는 이러한 객체들의 생성/생명주기를 관리할 수 있는데 이를 IoC Container 라고 부른다

 

 

 

AOP : Aspect-Oriented Programming

트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다.

 

 

Aspect-Oriented Programming, 직역하면 관점지향프로그래밍이다.

단어에서 알 수 있듯이, 문제를 바라보는 관점에서 프로그래밍하는 기법이다.

 

OOP 방식으로 프로그래밍하면서 중복성을 최대한 줄여나감에도 불구하고

트랜잭션, 로깅, 성능체크, 보안 등과 같이 공통적으로 중복이되는 코드가 생겨난다.

 

이를 해결하기 위한 방법이 바로 AOP인 것이다.

좀 더 와닿기 쉽게 말하자면 '부가적인 공통기능을 모듈화' 하는 것이다.

 

profile

공부하다죽어라

@슥혁

감사합니다 👍🏻