[Spring] 스프링이란? - 공부방향

Coastby·2022년 11월 1일
0

LIKELION Back-End School

목록 보기
48/61
post-custom-banner

○ 스프링이란?

스프링은 자바 엔터프라즈 애플리케이션 개발에 사용되는 애플리케이션 프레임워크다.

프레임워크는 개발을 빠르고 효율적으로 할 수 있도록 애플리케이션의 바탕이 되는 틀과 공통 프로그래밍 모델, 기술 API 등을 제공한다.

💡 스프링을 사용한다는 것은 이 세가지 요소를 적극적으로 활용해서 애플리케이션을 개발한다는 것이다.

🍃 스프링 컨테이너

  • 스프링은 스프링 컨테이너 또는 애플리케이션 컨텍스트라고 불리는 스프링 런타임 엔진을 제공한다.
  • 설정정보를 참고로 해서 애플리케이션을 구성하는 오브젝트를 생성하고 관리한다.
  • 보통 웹 모듈에서 동작하는 서비스나 서블릿으로 등록해서 사용한다.

따라서, 스프링을 동작하려면 먼저 1) 스프링 컨테이너를 다루는 방법과 스프링 컨테이너가 오브젝트를 이용하도록 2) 설정정보를 작성하는 방법을 알아야 한다.

🍃 공통 프로그래밍 모델

프로그래밍 모델 : 프레임워크는 애플리케이션 코드가 어떻게 작성되어야 하는지에 대한 기준도 제시해준다.

스프링은 세 가지 프로그래밍 모델을 지원한다.

1. IoC/DI
스프링은 유연하고 확장성이 뛰어난 코드를 만들 수 있게 도와주는 객체지향 설계 원칙과 디자인 패턴의 핵심 원리를 담고 있는 IoC/DI를 프레임워크의 근간으로 삼고 있다.

  • IoC : IoC를 적용한 환경에서는 사용할 객체를 직접 생성하지 않고 객체의 생명주기 관리를 외부에 위임한다. 여기서 '외부'는 스프링 컨테이너 (Spring Container) 또는 IoC 컨테이너를 의미한다. 이를 통해 DI, AOP 등이 가능해진다.

  • DI : 사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식이다.

    • 생성자 주입 방식 : 다른 방식과는 다르게 레퍼런스 객체 없이는 객체를 초기화할 수 없게 설계할 수 있기 때문에 가장 권장된다.
    @RestController
    public class controller {
        MyService myService;
            @Autowired      //생략가능
            public controller(MyService myService) {
            this.myService = myService;
          }
    }
    • 필드 객체 선언을 통한 의존성 주입 : 거의 테스트코드에서만 사용
    @RestController
    public class controller {
      @Autowired
      MyService myService;
    
    }

2. 서비스 추상화

스프링을 사용하면 환경이나 서버, 특정 기술에 종속되지 않고 이식성이 뛰어나며 유연한 애플리케이션을 만들 수 있다. 구체적인 기술과 환경에 종속되지 않도록 유연한 추상 계층을 두는 방법이다.

3. AOP (Aspect Oriented Programming)

AOP는 여러 비지니스 로직에서 반복되는 부가 기능을 하나의 공통 로직으로 처리하도록 모듈화해 삽입하는 방식이다.
예를 들어, 핵심적인 관점은 핵심 비지니스 로직이 된다. 또한 부가적인 기능은 이를 위한 데이터베이스 연결, 로깅, 파일 입출력 등이 있다.
AOP를 구현하는 방법은 크게 세 가지가 있다.

  • 컴파일 과정에 삽입하는 방식
  • 바이트코드를 메모리에 로드하는 과정에 삽입하는 방식
  • 프락시 패턴을 이용한 방식
    이 가운데 스프링은 디자인 패턴 중 하나인 프락시 패턴을 통해 AOP 기능을 제공한다.

스프링 AOP의 목적은 OOP와 마찬가지로 모듈화해서
1) 재사용 가능한 구성을 만드는 것이고,
모듈화된 객체를 편하게 적용할 수 있게 함으로써
2)개발자가 비지니스 로직을 구현하는 데에만 집중할 수 있게 도와주는 것이다.

🍃 기술 API

스프링은 엔터프라이즈 애플리케이션을 개발의 다양한 영역에 바로 활용할 수 있는 방대한 양의 기술 API를 제공한다. UI 작성, 웹 프레젠테이션 계층, 비지니스 서비스 계층, 기반 서비스 계층, 도메인 계층, 데이터 액세스 계층 등에서 필요한 주요 기술을 일관된 방식으로 사용할 수 있도록 지원해주는 기능과 전략 클래스 등을 제공한다.

○ 스프링 학습 방향

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

  • 핵심가치를 이해하고, 이를 어떻게 적용해서 만들어졌는지를 이해하자.

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

  • 스프링은 범용적인 프레임워크이고 모든 레이어를 폭넓게 다루고 있다.
  • 그 중에서 어떤 것을 선택할 지는 개발자의 몫이다.
  • 이런 고민때문에 남들이 만들어 놓은 예제를 가져다가 생각 없이 사용하는 일은 피해야한다.
  • 스프링이 제공하는 기술의 종류와 접근 방법에는 어떤 것이 있는지 알고, 선택의 기준을 마련해서 상황에 맞는 최선의 기술과 접근 방법을 선택할 수 있어야 한다.

🍃 스프링의 적용과 확장

  • 스프링의 다양한 기술을 어떻게 실제 어플리케이션 개발에 적용하는지를 공부해야 한다.
  • 또한 그것을 확장하거나 추상화해서 사용하는 방법을 알아야한다.

출처 : 토비의 스프링3, 스프링부트 핵심가이드

profile
훈이야 화이팅
post-custom-banner

0개의 댓글