Spring에 대해서

조현근·2022년 12월 16일
0
post-thumbnail

Spring에 대한 이해와 입문

스프링은 자바 기반의 웹 애플리케이션 개발을 위한 프레임워크이다. 스프링은 객체지향 개발을 매우 용이하게 할 수 있도록 도와주며, 애플리케이션을 빠르고 효율적으로 개발할 수 있도록 기본 틀과 공통 프로그래밍 모델, API 등을 제공한다. 스프링 개발자라면 최소한 이 3가지 프로그래밍 모델만큼은 잘 이해하고 자유롭게 응용할 수 있어야 한다.

  1. spring container
  2. 공통 프로그래밍 모델
    • Ioc/DI
    • PSA
    • AOP
  3. API

1. Spring Container

스프링은 스프링 컨테이너 또는 애플리케이션 컨텍스트라고 불리는 런타임 엔진을 제공한다. 스프링 컨테이너는 설정 정보를 참고하여 애플리케이션을 구성하는 오브젝트(빈)을 생성하고 관리한다. 그리고 의존성을 갖는 객체에 대해 의존성 주입(DI)를 통해 두 객체의 결합도를 낮추도록 도와준다.

2. 공통 프로그래밍 모델

프레임워크는 애플리케이션을 구성하는 객체(빈)가 생성되고 동작되는 틀을 제공해줄 뿐만 아니라, 애플리케이션 코드를 어떻게 작성해야 하는지에 대한 기준도 제공한다. 이를 일반적으로 프로그래밍 모델이라고 부르는데, 스프링에서는 크게 3가지 핵심 프로그래밍 모델을 지원하며, 이에 맞춰 개발할 것을 권장하고 있다.

  • IoC/DI
  • 서비스 추상화
  • AOP

IoC/DI

IoC/DI는 오브젝트의 생명주기와 의존 관계에 대한 프로그래밍 모델이다.
**[IoC]
Inversion of Control, 즉 제어의 역전

직접 객체를 생성하여 코드를 "제어"하는 코드

public class A {
	private B b;
 
 	pubic A() {
    	this.b = new B();
    }
}

프로그램의 제어 흐름이 직접 제어하는 것이 아니라 외부에서 관리하는 것

public class A {
	private B b;
    
    public A(B b) {
    	this.b = b;
    }
}

IoC가 필요한 이유
직접 객체를 생성해 코드를 제어하는 코드에선 만약 B객체가 변해야 하면 A클래스 코드를 수정해야 하는 문제가 발생한다.
하지만 IoC가 적용된 코드에선 외부에서 주입하는 객체만 바꾸어주면 A클래스 코드 수정 없이 문제를 해결할 수 있다(다형성을 사용한다면).
즉 외부에서 제어를 받으면서 변경에 자유로운 코드를 작성할 수 있게된다.
결과적으로 역할과 관심을 분리해(어떤 B객체를 사용할지와 B객체를 어떻게 사용할지) 응집도를 높이고 결합도를 낮추어 변경에 유연한 코드를 작성할 수 있어 객체지향 원칙을 잘 지킬수 있게된다.

DIP
Dependency Inversion Principle(의존 역전 원칙)
즉 구현체에 의존하는게 아니라 인터페이스에 의존해야 한다는 원칙.
A라는 클래스가 인터페이스에 의존하고 구현체를 외부에서 주입받는다면 구현체가 변경되더라도 A 클래스 코드엔 변경이 일어나지 않는다.

DI
IoC라는 원칙을 구현하기 위한 패턴 중 하나.
다음과 같은 3가지 의존성 주입 패턴이 있음
1. 생성자 주입
의존성에 필요한 객체를 생성자를 통해 주입받는 방법
2. Setter 주입
의존성을 입력받는 setter메서드를 만들고 setter메서드를 호출해 의존성 주입

Spring에서 DI
1. 생성자 주입
2. Setter 주입
3. 필드 주입

생성자 주입을 쓰는 이유

PSA(Portable Service Abstraction)

Spring을 사용하면 서비스 추상화를 통해 특정 환경이나 서버, 기술에 종속되지 않으며 유연한 애플리케이션을 개발할 수 있다. Spring에서는 추상화 계층을 통해 구체적인 기술과 환경에 종속되지 않도록 한다. 예를들어 Spring에서 제공하는 @Transactional은 선언하는 것 만으로 별도의 추가 코드 없이 트랜잭션을 사용할 수 있게 된다. JDBC를 사용하던 JPA를 사용하던 @Transactional 하나로 모두 해결되는데 이렇게 하나의 추상화로 여러 서비스를 묶어둔 것을 Spring에서 PSA라고 한다.

AOP(Aspect-Oriented Programming)

포스트에 정리해놓았다.

API

Spring은 다양한 영역에 바로 활용할 수 있는 api를 제공한다. 예를들어 클라이언트로부터 GET요청을 받아 처리하기 위해 @GetMapping과 같은 api를 제공하고 있다.

출처
https://mangkyu.tistory.com/156
https://www.youtube.com/watch?v=8lp_nHicYd4

profile
안녕하세요!

0개의 댓글