독서/토비의 스프링

토비의 스프링 Vol.1 8장 스프링이란 무엇인가

Debin 2023. 2. 21.
반응형

8.1 스프링이란 무엇인가?

스프링에 대해 가장 잘 알려진 정의는 '자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크'다.

이 문장을 풀어서 살펴보자.

애플리케이션 프레임워크 경량급 자바 엔터프라이즈 개발을 편하게 오픈소스

애플리케이션 프레임워크는 특정 계층이나, 기술, 업무 분야에 국한되지 않고 애플리케이션의 전 영역을 포괄하는 범용적인 프레임워크를 말한다. 애플리케이션 프레임워크는 애플리케이션 개발의 전 과정을 빠르고 편리하며 효율적으로 진행하는데 일차적인 목표를 두는 프레임워크다. 

경량급

스프링이 가볍다는 건 기술수준이 가볍다거나, 스프링이 유치하고 용도가 제한적이라는 의미가 아니다.

불필요하게 무겁지 않고 가볍고 단순한 환경에서도 엔터프라이즈 개발의 고급 기술을 대부분 사용할 수 있다.

빠르고 간편하게 코드를 작성하게 해줌으로써 생산성과 품질 면에서 유리하다는 것이 바로 경량급이라는 표현이다.

자바 엔터프라이즈 개발을 편하게

스프링은 근본적인 부분에서 엔터프라이즈 개발의 복잡함을 제거해내고 진정으로 개발을 편하게 해주는 해결책을 제시한다.

애플리케이션 개발이란 개발자가 복잡하고 실수하기 쉬운 로우레벨 기술에 많은 신경을 쓰지 않으면서도 애플리케이션의 핵심인 사용자의 요구사항, 즉 비즈니스 로직을 빠르고 효과적으로 구현하는 것을 말한다.

 

스프링은 애플리케이션 개발자들이 스프링이라는 프레임워크가 제공하는 기술이 아니라 자신이 작성하는 애플리케이션의 로직에 더 많은 괌심과 시간을 쏟게 해준다. 초기에 스프링의 기본 설정과 적용 기술만 잘 선택핟고 준비해두면, 이후로 애플리케이션 개발 중에는 스프링과 관련된 코드나 API에 대해 개발자가 신경 쓸 일이 거의 없다.

오픈 소스

오픈소스란 말 그대로 소스가 모두에게 공개되고, 특별한 라이선스를 취득할 필요 없이 얼마든지 가져다 자유롭게 이용해도 된다는 뜻이다.

8.2 스프링의 목적

엔터프라이즈 개발의 복잡함의 근본적인 이유

  1. 기술적인 제약조건과 요구사항이 늘어나기 때문이다.
  2. 엔터프라이즈 애플리케이션이 구현해야 할 핵심기능인 비즈니스 로직의 복잡함이 증가하기 때문이다.

기술적 복잡함을 상대하는 스프링의 전략

  • 일관성 없는 기술과 서버 환경의 변화에 대한 스프링의 공략 방법은 바로 서비스 추상화다.
  • 기술적인 처리를 담당하는 코드가 성격이 다른 코드에 섞여서 등장한다. 우리가 살펴본 트랜잭션과 로그 등이 그런 부류의 코드다.
    이런 기술과 비즈니스 로직의 혼재로 발생하는 복잡함을 해결하기 위해 스프링이 선택한 방법이 바로 AOP다.

비즈니스와 애플리케이션 로직의 복잡함을 상대하는 전략

  • 이 부분은 스프링이 관여하지 않는다.
  • 비즈니스 로직의 복잡함을 상대하는 전략은 자바라는 객체지향 기술 그 자체다.
  • 스프링은 단지 객체지향 언어의 장점을 제대로 살리지 못하게 방해했던 요소를 제거하도록 도와줄 뿐이다.

핵심 도구: 객체지향과 DI

  • 기술과 비즈니스 로직의 복잡함을 해결하는 데 스프링이 공통적으로 사용하는 도구가 있다. 바로 객체지향이다.
  • 스프링의 모토는 결국 "기본으로 돌아가자"이다. 자바의 기본인 객체지향에 충실한 설계가 가능하도록 단순한 오브젝트로 개발할 수 있고, 객체지향의 설계 기법을 잘 적용할 수 있는 구조를 만들기 위해 DI 같은 유용한 기술을 편하게 적용하도록 도와주는 것이 스프링의 목적이다.
  • 지금까지 살펴본 기술적입 복잡함을 효과적으로 덜어주는 기법은 모두 DI를 바탕으로 하고 있다.
  • 정리하면 스프링의 기술과 전략은 객체지향이라는 자바 언어가 가진 강력한 도구를 극대화해서 사용할 수 있도록 돕는 것이라고 볼 수 있다.

8.3 POJO 프로그래밍

POJO란?

POJO란 Plain Old Java Object의 약어다.

POJO의 조건

  • 특정 규약에 종속되지 않는다. 자바 언어와 꼭 필요한 API외에는 종속되지 않아야 한다.
  • 특정 환경에 종속되지 않는다.
  • 진정한 POJO란 객체지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트를 말한다.

POJO의 장점

  • 특정한 기술과 환경에 종속되지 않는 오브젝트는 그만큼 깔끔한 코드가 될 수 임ㅆ다.
  • 또 POJO로 개발된 코드는 자동화 테스트에 유리하다.
  • 객체지향적인 설계를 자유롭게 적용할 수 있다는 것도 큰 장점이다.

POJO 프레임워크

  • 스프링은 비즈니스 로직의 복잡함과 엔터프라이즈 기술의 복잡함을 분리해서 구성할 수 있게 도와준다.
  • 하지만 자신은 기술영역에만 관여하지 비즈니스 로직을 담당하는 POJO에서는 모습을 감춘다.
  • 스프링을 사용하면 복잡한 엔터프라이즈 기술보다 객체지향적인 설계와 개발의 원리에 좀 더 집중할 수 있도록 기회를 준다.

8.4 스프링의 기술

제어의 역전 (IOC)/ 의존관계 주입(DI)

DI의 활용 방법

  • 핵심 기능의 변경
  • 핵심 기능의 동적인 변경
  • 부가기능의 추가
  • 인터페이스의 변경
  • 프록시
  • 템플릿과 콜백
  • 싱글톤과 오브젝트 스코프
  • 테스트

애스펙트 지향 프로그래밍(AOP)

AOP 적용 기법

  • 스프링과 같이 다이내믹 프록시를 사용한다.
  • 자바 언어의 한계를 넘어서는 언어의 확장을 이용하는 방법이 있다. Aspect J

AOP의 적용 단계

  1. 미리 준비된 AOP 이용
  2. 전담팀을 통한 AOP 적용
  3. AOP의 자유로운 이용

포터블 서비스 추상화(PSA)

 

이상으로 포스팅을 마칩니다. 감사합니다.

 

참고 자료

토비의 스프링 3.1 Vol. 1 (8장 스프링이란 무엇인가?)

반응형

댓글