개발일지

[Java][Spring] 스프링의 특징과 의존성 주입 본문

JAVA

[Java][Spring] 스프링의 특징과 의존성 주입

강강강 2022. 12. 8. 13:50

코드로 배우는 스프링 웹 프로젝트

 

[목표] 
- 스프링 프레임 워크를 이용해서 의존성 주입에 대한 이해
- 스프링에서 XML 을 이용하는 객체 관리 방법
- 스프링 환경 구축

스프링의 주요 특징 

- Plain Old Java Project; POJO 기반의 구성

스프링은 다름 프레임워크와 달리 관계를 구성할 때 별도의 API 를 사용하지 않는다. 쉽게 말해 일반적인 JAVA 코드를 이용해 객체를 구성하는 방식을 그대로 스프링에서 사용할 수 있다는 것이다. 

이게 중요한 이유는 코드를 개발할 때 개발자가 특정한 라이브러리, 컨테이너의 기술에 종속적이지 않다는 것을 의미한다. 

이렇게 되면 개발자는 가장 일반적인 형태로 코드를 작성하고 실행할 수 있어 생산적으로 일할 수 있다. 

 

- 의존성 주입을 통한 객체간의 관계 구성

"의존성" 이라는 것은 하나의 객체가 다른 객체 없이 제대로된 역할을 할 수 없다는 것을 의미한다. 

"주입" 이라는 것은 그대로 외부에서 밀어 넣는 것을 의미한다. 

그래서 "의존성 주입" 은 어떤 객체가 필요한 객체를 외부에서 밀어넣는다 라는 의미가 된다. 

그러면 왜 외부에서 객체를 주입하는 방식을 사용할까?

-> 코드에 대입해보면 주입받는 입장에서는 어떤 객체인지 신경 쓸 필요가 없고 어떤 객체에 의존하든 자신은 변하지 않는다. 

spring 은 이러한 구조를 만드는데 적합한 구조로 설계되어 있다. 

'ApplicationContext' 라는 존재가 필요한 객체들을 생성하고 필요한 객체들을 주입하는 역할을 해주는 구조다.

그래서 spring 을 이용하면 개발자들은 기존 프로젝트와 달리 객체와 객체를 분리해 생성하고 이러한 객체들을 엮는 작업을 하는 형태의 개발을 하게 되는 것이다!

 

- Aspect-Oriented-Programming; AOP 지원

좋은 개발환경 원칙은 개발자가 비즈니스 로직에만 집중할 수 있게 한다. 이다. 

spring 은 AOP 를 AspectJ 문법을 통해 작성할 수 있는데 이를 통해

개발자는 핵심 비즈니스 로직에만 집중해서 코드를 개발할 수 있고

각 프로젝트마다 다른 관심사를 적용할 때 코드의 수정을 최소화 시킬 수 있고

원하는 관심사의 유지보수가 수월한 코드를 구성할 수 있다.

 

 

- 트랜잭션 지원

트랜잭션 처리는 상황에 따라 복잡하게 구성될 수도 있고 아닐 수도 있는데 그때마다 코드를 이용해 처리하는 작업은 개발자에게 상당히 피고한 일이다. 

spring 은 이 트랜잭션 관리를 어노테이션, xml 로 설정할 수 있어 개발자가 매번 상황에 맞는 코드를 작성할 필요가 없도록 설계되어있다.