POJO 기반의 구성

 

스프링은 다른 프레워크들과 달리 이 관계를 구성할 때 별도의 API등을 사용하지 않는 POJO(Plain Old Java Object)의

구성만으로 가능하도록 제작되어 있습니다.

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

개발자는 가장 일반적인 형태로 코드를 작성하고 실행할 수 있기 때문에 생산성에서도 유리하고, 코드에 대한 테스트 작업 역시 좀 더 유연하게 할 수 있다는 장점이 생깁니다.

 

의존성 주입(DI)과 스프링

 

의존성(Dependency)라는 것은 하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없다는 것을 의미합니다.

음식점을 예로 들자면 서빙을 담당하는 직원이 갑자기 하루 못나오는 상황이 있어도 장사는 할 수 있지만,

주방장에게 문제가 생겨서 못나오면 장사를 할 수 없는 일이 발생합니다.

의존성은 이처럼 하나의 객체가 다른 객체의 상태에 따라 영향을 받는것을 의마하며

흔히 A 객체가 B 객체 없이 동작이 불가능한 상황을 'A가 B에 의존적이다'라고 표현합니다.

 

주입(Injection)은 말 그대로 외부에서 '밀어 넣는 것'을 의미합니다.

예를들어 일반 음식점과 프랜차이즈 음식점이 있다고 한다면

일반 음식점은 재료를 직접사고 오고 하지만

프랜차이즈 음식점은 장사에만 집중할 수 있도록 먼저 파악해서 재료들을 보내줍니다.

 

 

AOP의 지원

 

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

이 목표를 이루기 위해서는 몇 가지 중요한 원칙이 있지만, 가장 쉽게 생각할 수 있는것이 반복적인 코드의 제거입니다.

대부분의 시스템이 공통으로 가지고 있는 보안이나 로그, 트랜잭션과 같이 비즈니스 로직은 아니지만, 

반드시 처리가 필요한 부분을 스프링에서는 '횡단 관심사(cross-concern)'라고 합니다.

스프링은 이러한 횡단 관심사를 분리해서 제작하는 것이 가능합니다.

AOP(Aspect Oriented Programming)는 이러한 횡단 관심사를 모듈로 분리하는 프로그래밍의 패러다임 입니다.

 

스프링은 AOP를 AspectJ의 문법을 통해 작성할 수 있는데, 이를 통해서 개발자는

 

1. 핵심 비즈니스 로직에만 집주애서 코드 개발

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

3. 원하는 관심사의 유지보수가 수월한 코드 구성

을 할 수 있습니다.

 

 

트랜잭션의 지원

 

데이터베이스를 이용할 때 반드시 신경 써야 하는 부분은 하나의 업무가 여러 작업으로 이루어지는 경우의 트랜잭션 처리입니다.

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

스프링은 이런 트랜잭션의 관리를 어노테이션이나 xml로 설정할 수 있기 때문에 개발자가 매번 상황에 맞는 코드를

작성할 필요가 없도록 설계되었습니다.

+ Recent posts