1. 스프링 프레임워크[Spring Boot]

JuJaeng2·2023년 11월 22일

스프링은 목적에 따라 다양한 프로젝트를 제공하는데, 그중 하나가 스프링 부트(Spring Boot)이다. 스프링부트를 들어가기 전 이것의 기반이 되는 스프링 프레임 워크를 먼저 알아보도록 한다.

✅ 스프링 프레임 워크

  • 자바에서 가장 많이 사용되는 프레임 워크
  • 자바 언어를 이용해 엔터프라이즈급 개발을 편리하게 만들어주는 "오픈소스 경량급 어플리케이션 프레임워크"

✅ 스프링의 특징과 구조

1. 제어 역전(IOC)

IOC - Inversion Of Control

  • 객체의 관리를 스프링 컨테이너(Spring Container) 또는 IoC컨테이너(IoC Container)에 맡겨 제어권이 넘어간 것을 제어 역전(IoC)이라고 한다.

이를 통해 의존성 주입(DI), 관점 지향 프로ㅡ래밍(AOP)등이 가능해진다.

2. 의존성 주입(DI)

DI - Dependency Injection

  • 제어 역전(IoC)의 방법중 하나
  • 사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식이다.

의존성을 주입받는 세가지 방법

1. 생성자를 통한 의존성 주입

@RestController
public class DIController{

	MyService myService;
    
    @Autowired
    public DI(Controller(MyService myservice){
    	this.myService = myService;
    }
    
    @GetMapptin("/di/hello")
    public String getHello(){
    	return mySerivce.getHello();
    }
}

2. 필드 객체 선언을 통한 의존성 주입

@RestController
public class FieldInjectionController{
    
    @Autowired
    private MyService mySerice;
}

3. Setter 메서드를 통한 의존성 주입

@RestController
public class DIController{

	MyService myService;
    
    @Autowired
    public void setMyService(MyService mySerive){
    	this.myService = myService;
    }
}

3가지 의존성 주입이 있지만 스프링 공식분서에서 권장하는 의존성 주입 방법은 첫번째에 있는 생성자를 통한 의존성 주입 방식이다.

  • 다른 방식과는 다르게 생성자를 통해 의존성을 주입받는 방식은 레퍼런스 객체 없이는 객체를 초기화 할 수 없게 설계할 수 있기 때문
  • 다시 말하면, 해당 클래스의 인스턴스를 사용하려면 필요한 의존성이 제공되어야 하며, 이를 통해 객체를 초기화할 수 있습니다
  • 해당 객체를 생성할 때 외부에서 필요한 인스턴스를 전달해 주어야만 하고 이것이 객체의 일관성을 유지하는데 도움을 준다.

3. 관점지향 프로그래밍(AOP)

AOP - Aspect Oriental Programming

관점을 기준으로 묶어 개발하는 방식을 말한다.
그렇다면 여기서 말하는 관점은 무엇일까?

관점(aspect)

기능을 구현할 때 그 기증을 '핵심 기능', '부가 기능'으로 구분해 각각을 하나의 관점으로 보는것을 말한다.

  • 핵심 기능
    • 비즈니스 로직이 처리하려는 목적 기능
  • 부가 가능
    • 부가기능은 핵심 기능이 어떤 기능인지에 무관하게 로직이 수행되기 전 또는 후에 수행되기만 하면 된다.

즉, 비즈니스 로직에서 반복되는 부가 가능을 하나의 공통 로직으로 처리하도록 모듈화해 삽입하는 방식을 AOP라고 한다.

AOP는 왜 사용하는 것일까?

AOP의 목적

  • 모듈화를 통해 재사용 가능한 구성을 만들고 모듈화된 객체를 편하게 적용할 수 있게 함으로써 개발자가 비즈니스 로직을 구현하는 데만 집중할 수 있게 도와주기 위함이다.

✅ 스프링의 다양한 모듈

다음은 스프링 공식 문서에서 제공하는 다이어 그램이다.


✅ 스프링 프레임워크 VS 스프링 부트

설정

  • 스프링 : 복잡한 설정
  • 스프링 부트 : 스프링의 복잡한 설정 문제 해결

의존성 관리

  • 스프링
    • 필요한 각 모듈의 의존성을 직접 설정하고 호환되는 버전을 명시해야 정상 동작한다.
    • 연관된 다른 버전까지도 고려해야 한다.
  • 스프링 부트 :
    • 'spring-boot-starter'라는 의존성 제공
      • 각 라이브러리의 기능과 관련해서 자주 사용되고 서로 호환되는 버전의 모듈 조합을 제공한다.
      • 이를 통해 라이브러리 호환 문제를 해결할 수 있다.
> 'spring-boot-starter'의 여러 라이브러리를 함께 사용할 떄 의존성이 겹칠수 있고 이때문에 버전 충돌이 발생할 수 있지만, 'spring-boot-starter-parent'가 검증된 조합을 제공함으로써 의존성 조합 충동 문제가 없도록 해준다. 

자동 설정

  • 스프링
    • X
  • 스프링 부트
    • 자동 설정 지원(Auto Configuration)
      • 어플리케이션에 추가된 라이브러리를 실행하는 데 필요한 환경 설정을 알ㅇ서 찾아준다.
      • 필요한 의존성을 추가하면 프레임워크가 알아서 자동으로 이를 관리해준다.

내장 WAS

  • 스프링
    • X
  • 스프링 부트
    • 내장 WAS(Web Application Server)가 존재한다.
    • 'spring-boot-starter-web'이라는 의존성에 'tomcat'을 포함하고 있다.
    • 따라서 특별한 설정 없이도 톰캣을 실행할 수 있다.

모니터링

  • 스프링 : X
  • 스프링 부트
    • 스프링 부트 액추에이터(Spring Boot Actuator)라는 자체 모니터링 도구가 있다.
profile
다 잘하고 싶은 개발자

0개의 댓글