0. 스프링이란 무엇인가

토비의 스프링 정리 프로젝트 #0 들어가기 전에 - 스프링이란 무엇인가?

스프링이란?

  • 자바 애플리케이션 개발을 도와주는 프레임워크이다.

  • 애플리케이션의 틀, 공통 프로그래밍 모델, 기술 API 등을 제공한다.

스프링 컨테이너

  • 스프링 컨테이너 혹은 애플리케이션 컨텍스트로 불리는 스프링 런타임 엔진이다.

  • 설정 정보(configuration)를 참고하여 오브젝트를 만들고 관리한다.

  • 독립적으로 사용 가능하나, 웹 모듈에서 동작하는 서비스, 서블릿으로 등록해 사용한다.

공통 프로그래밍 모델 - IoC/DI, 서비스 추상화, AOP

  • 공통 프로그래밍 모델

    • 스프링은 공통 프로그래밍 모델을 통해 애플리케이션 코드가 어떻게 작성돼야 하는지에 대한 기준(틀)을 제공한다.

  • IoC/DI

    • IoC/DI는 스프링이 제공하는 모든 기술, API, 컨테이너의 기반이 되는 기술이다.

  • 서비스 추상화

    • 환경, 서버, 특정 기술에 종속되지 않는 이식성 뛰어난 유연한 애플리케이션을 작성하는 토대이다. 주로, 유연한 추상 계층을 둠으로써 구현된다.

    • ex) 자바의 다형성을 기반으로 구현할 수 있다.

  • AOP (Aspect Oriented Programming)

    • 애플리케이션 코드에 산재해서 나타나는 부가적인 기능을 독립적으로 모듈화하는 프로그래밍 모델이다.

    • ex) 모든 메소드에 적용되는 로깅, 소요시간 측정 등에 적용할 수 있다.

기술 API

  • 웹 프레젠테이션, 비즈니스 서비스, 기반 서비스, 도메인, 데이터 액세스 계층 등에서 필요한 주요 기술 및 전략 클래스 등을 스프링에서 일관된 방식으로 사용할수 있도록 지원한다.

  • 스프링의 모든 기술은 표준 자바 EE에 기반을 두고 있다.

종합 정리

  • IoC/DI: 스프링 컨테이너 위에 직접 작성한 클래스를 오브젝트로 올려 활용할 수 있다.

  • 공통 프로그래밍 모델: 스프링의 공통 프로그래밍 모델을 따라 스프링이 지향하는 방향으로 코드를 작성할 수 있다.

  • 기술 API 및 서비스: 엔터프라이즈 기술을 사용할 때 활용한다.

스프링의 성공 요인

  • 자바 엔터프라이즈 개발의 핵심 가치에 충실하여 베스트 프랙티스 적용에 용이

  • 이상적인 개발철학, 프로그래밍 모델은 이해에 도움이 되고 좋은 개발 습관을 만듦

  • 가장 중요한 두가지 가치인 단순함과 유연성을 강조했음

단순함

  • 기존 EJB라는 표준 기술의 복잡함을 타파함. 스프링은 가장 단순한 객체지향적인 개발 모델인 POJO 프로그래밍을 지향함

유연성

  • 항상 "프레임워크 기반의 접근 방법을 사용하는 것"이 핵심 철학임

    • 많은 서드파티 프레임워크의 지원을 받지만 코드베이스가 흔들리거나 새로 만드는 일이 없었음

스프링 학습 방법

스프링의 핵심 가치와 원리에 대한 이해

  • 핵심 가치를 이해하고, 핵심 가치를 이룰 수 있도록 도와주는 세 가지 핵심 기술을 이해하라.

  • 스프링이 강조하는 중요한 프로그래밍 모델을 이해하고, 스프링을 일관된 방식으로 이해할 수 있는 눈을 갖춰라.

스프링 기술에 대한 지식과 선택 기준 정립

  • 다양한 선택의 문제를 각 기술 영역별로 효과적으로 다루는 방법을 배워야 한다.

    • 스프링은 애플리케이션의 모든 레이어를 폭 넓게 다루며 영역별로 다양한 접근 방법을 제공한다.

    • 많은 방법 중 어떤 것을 선택할 것인지, 어떤 것을 연동할 것인지, 어떤 스타일을 사용할 것인지

    • 상황에 따른 최선의 방법을 선택할 수 있어야 한다.

스프링의 적용과 확장

  • 스프링이 제공하는 기능을 확장, 추상화할 줄 알아야 한다.

  • 스프링을 기반으로 새로운 프레임워크를 만들 수 있으면 바람직하다.

  • 때론 스프링의 자유도를 줄이고, 현장 상황에 맞는 접근방법을 정립해줄 수 있어야 한다.

  • 스프링이 지원하지 않는 기술을 스프링에 맞게 통합할 수도 있어야 한다.

스프링의 핵심

  • 기본으로 돌아가 객체지향 프로그래밍이 제공하는 폭 넓은 혜택을 누리자

  • 객체지향 기술과 설계, 구현에 관한 실용적인 전략과 검증된 베스트 프랙티스를 평범한 개발자도 자연스럽고 손쉽게 이용할 수 있게 만들자

Last updated