스프링의 주요 특징

백종석·2022년 5월 27일
0

TIL

목록 보기
6/9
post-thumbnail

스프링의 주요 특징

  • POJO 기반의 구성
  • 의존성 주입(DI)을 통한 객체 간의 관계 구성
  • AOP(Aspect-Oriented-Programming) 지원
  • 편리한 MVC 구조
  • WAS의 종속적이지 않은 개발 환경

1.POJO 기반의 구성

  • 스프링의 성격 자체가 가벼운(light-weight) 프레임워크지만, 그 내부에는 객체 간의 관계를 구성할 수 있는 특징을 가지고 있다.
  • 스프링은 다른 프레임워크들과 달리 이 관계를 구성할 때 별도의 API 등을 사용하지 않는 POJO(Plain Old Java Object)의 구성 만으로 가능하도록 제작되어 있다. 쉽게 말해서 일반적인 Java 코드를 이용해서 객체를 구성하는 방식을 그대로 스프링에서 사용할 수 있다.
  • 이것이 중요한 이유는 코드를 개발할 때 개발자가 특정한 라이브러리나 컨테이너의 기술에 종속적이지 않다는 것을 의미하기 때문이다.
  • 개발자는 가장 일반적인 형태로 코드를 작성하고 실행할 수 있기 때문에 생산성에서도 유리하고 코드에 대한 테스트 작업 역시 좀 더 유연하게 할 수 있다는 장점이 생긴다.

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

  • 스프링에 대한 얘기를 하면서 빠지지 않는 개념이 '의존성 주입'이라는 개념이다.
  • 의존성(Dependency)이라는 것은 하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없다는 것을 의미한다.
  • 의존성하나의 객체가 다른 객체의 상태에 따라 영향을 받는 것을 의미한다. 흔히 A 객체가 B 객체 없이 동작이 불가능한 상황을 'A가 B에 의존적이다'라고 표현한다.
  • 주입(Injection)은 말 그대로 외부에서 '밀어 넣는 것'을 의미한다.
  • 필요한 객체를 얻는 방식에 따라서 주체가 능동적인지 수동적인지에 대한 차이가 있다.
  • 의존성과 주입을 결합해서 생각해 보면 '어떤 객체가 필요한 객체를 외부에서 밀어 넣는다'는 의미가 된다.
  • 그렇다면 '왜 외부에서 객체를 주입하는 방식'을 사용하는지 알아볼 필요가 있다.
  • 예를 들어 음식점에서 직접 식재료를 사지 않고, 대행업체에서 배송해 주는 것을 사용하는 경우에 얻는 장점이 무엇인가에 대해서 고민해보면 역시 '편리하다', '장사에만 집중할 수 있다'와 같은 장점들을 생각해 볼 수 있다.
  • 이것을 코드에 대입해서 살펴보면 '주입을 받는 입장에서는 어떤 객체인지 신경 쓸 필요가 없다', '어떤 객체에 의존하든 자신의 역할은 변하지 않는다'를 그림으로 표현하면 다음과 같은 형태가 될 수 있다.

  • '의존성 주입' 방식을 사용하려면 두번째 그림의 오른쪽 도형처럼 추가적인 하나의 존재가 필요하게 된다. 이 존재는 의존성이 필요한 객체에 필요한 객체를 찾아서 '주입'하는 역할을 하게 된다.
  • 스프링은 이러한 구조를 만드는 데 적합한 구조로 설계되어 있다.
  • 스프링에서는 'ApplicationContext'라는 존재가 필요한 객체들을 생성하고, 필요한 객체들을 주입하는 역할을 해 주는 구조이다.
  • 따라서 스프링을 이용하면 개발자들은 기존의 프로그래밍과 달리 객체와 객체를 분리해서 생성하고, 이러한 객체들을 엮는(wiring) 작업을 하는 형태의 개발을 하게 된다.
  • 스프링에서는 ApplicationContext가 관리하는 객체들을 '빈(Bean)'이라는 용어로 부르고, 빈과 빈 사이의 의존관계를 처리하는 방식으로 XML 설정, 어노테이션 설정, Java 설정 방식을 이용할 수 있다.

3.AOP의 지원

  • 좋은 개발환경의 중요 원칙은 '개발자가 비즈니스 로직에만 집중할 수 있게 한다.'이다.
  • 이 목표를 이루기 위해 몇 가지 중요 원칙이 있지만, 가장 쉽게 생각할 수 있는 것이 '반복적인 코드의 제거'라고 할 수 있다.
  • 스프링은 프레임워크를 이용한 개발에도 이러한 반복적인 코드를 줄이고, 비즈니스 로직에만 집중할 수 있는 방법을 제공한다.
  • 대부분의 시스템이 공통으로 가지고 있는 보안이나 로그, 트랜잭션과 같이 비즈니스 로직은 아니지만, 반드시 처리가 필요한 부분을 스프링에서는 '횡단 관심사(cross-concern)'라고 한다.
  • 스프링은 이러한 횡단 관심사를 분리해서 제작하는 것이 가능한데, AOP(Aspect Oriented Programming)관점지향 프로그래밍이라고도 불리며 이러한 횡단 관심사를 모듈로 분리하는 프로그래밍의 패러다임이다.
  • 관점 지향은 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다.

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

    1) 핵심 비즈니스 로직에만 집중해서 코드를 개발할 수 있게 되었고,

    2) 각 프로젝트마다 다른 관심사를 정용할 때 코드의 수정을 최소화시킬 수 있었으며

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


4.트랜잭션의 지원

  • 데이터베이스를 이용할 때 반드시 신경 써야 하는 부분은 하나의 업무가 여러 작업으로 이루어지는 경우의 트랜잭션 처리이다.
  • 이 트랜잭션 처리는 상황에 따라서 복잡하게 구성될 수도 있고, 아닐 수도 있는데, 그때마다 코드를 이용해서 처리하는 작업은 개발자에게는 상당히 피곤한 일이다.
  • 스프링은 이런 트랜잭션의 관리를 어노테이션(@)이나 XML로 설정할 수 있기 때문에 개발자가 매번 상황에 맞는 코드를 작성할 필요가 없도록 설계되었다.

출처:

https://engkimbs.tistory.com/746 [새로비:티스토리]
코드로 배우는 스프링 웹프로젝트 / 구멍가게 코딩단

profile
항해중인 우당탕탕 코린이

0개의 댓글