본문 바로가기

Computer Science/Spring

[Spring]Spring 의 주요 특징

◎스프링(Spring) 의 주요 특징



① POJO 기반의 구성

② 의존성 주입(DI)을 통한 객체 간의 관계 구성

③ AOP(Aspect-Oriented-Programming) 지원



1. POJO(Plain Old Java Object) 기반의 구성

 스프링 내부의 객체 관계를 특정한 라이브러리나 컨테이너의 기술에 종속적이지 않고 기존 JAVA 코드를 이용해서 구성할 수 있다.

코드 생산성에도 유리하고, 코드에 대한 테스트 작업 역시 더 유연하다.



2. 의존성 주입 (Dependency Injection)

 스프링을 얘기하면서 빠지지 않는 이야기, 의존성 주입!


의존성(Dependency) 란?

- 하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없다는 것을 의미한다.

- A 객체가 B 객체 없이 동작이 불가능한 상황 = "A가 B에 의존적이다." 라고 표현.


주입 (Injection)이란?

- 말 그대로 외부에서 '밀어 넣는 것'을 의미합니다. 


의존성 주입이란?

- '어떤 객체가 필요한 객체를 외부에서 밀어 넣는다'는 의미가 됩니다.


도대체 왜 외부에서 밀어 넣을까요???


 우리가 음식점을 운영한다고 해보죠. 식재료를 직접 구매하는 것과 외부 대행업체를 통해 구매하는 것은 차이가 있습니다. 대행업체를 통해 구입하면 '편리'하고 장사에만 '집중'할 수 있다는 것이죠. 코드도 마찬가지로 내가 의존성 있는 객체를 따로 선언하지 않고 필요한 객체를 주입해주는 누군가가 있다면 훨씬 편하겠죠?

A가 B객체를 직접 생성한다.


A 는 B 가 필요로 하다는 신호를 보내고, B객체는 외부에 있는 something이 알아서 주입.



스프링은 이러한 구조를 만드는 데 적합하게 설계되어 있어요. 스프링의 'ApplicationContext'라는 존재가 필요한 객체들을 생성하고, 필요한 객체들을 주입하는 역할을 해 주는 구조에요.


따라서, 스프링을 통한 개발은 객체와 객체를 분리해서 생성하고, 이들을 엮어주는(wiring)방식으로 개발합니다.

ApplicationContext에서 관리하는 객체들을 Bean 이라고 부르고, 빈과 빈사이의 의존 관계를 처리하는 방식으로 XML 설정, 어노테이션 설정, JAVA설정 방식을 이용해요.



3. AOP (Aspect Oriented Programming) 지원

 좋은 개발환경 = '개발자가 비즈니스 로직에만 집중할 수 있게 한다.' 입니다. 이를 이루기 위해서는 중요한 원칙이 있는데 그 중 하나가 '반복적인 코드의 제거' 라고 할 수 있습니다. 스프링은 이 부분을 개발자에게 제공합니다.


스프링은 '횡단 관심사(cross-concern)'를 분리해서 작업하는 것이 가능합니다. '횡단 관심사(cross-concern)'란 시스템이 가지고 있는 보안이나 로그, 트랜잭션 처럼 비즈니스 로직은 아니지만, 반드시 처리가 필요한 부분을 말합니다. 로그, 트랜잭션, 보안 등은 다수의 모듈에서 반복적으로 나타나는 부분입니다.  세로의 글 등록, 댓글 달기, 글 삭제하기 등은 핵심 관심사라고 합니다.



위에 그림에서 db 연결부터 시작해서 try catch finally에 해당되는 것들은 모두 횡단 관심사라고 할 수 있고, insert 등의 쿼리문을 수행하는 것은 핵심 관심사라고 할 수 있습니다.

 AOP를 AspectJ 문법을 통해서 작성할 수 있다고 합니다. 이로 인해 개발자는 1) 비즈니스 로직에만 집중해서 코드를 개발할 수 있게 되었고, 2) 각 프로젝트마다 다른 관심사를 적용할 때 코드의 수정을 최소화시켰으며 3) 원하는 관심사의 유지 보수가 수월한 코드를 구성할 수 있습니다.

반응형