Spring-Boot

스프링 부트란?

뚜코맨 2023. 7. 8. 21:54

스프링 부트? 스프링?
스프링을 더 쉽게 만들어주는 스프링 부트!

스프링은 장점이 많은 도구이지만 설정이 매우 복잡하다는 단점이 있다.

스프링 개발팀에서도 이런 단점을 인식하고 단점을 보완하고자 스프링 부트를 출시했다.

의존성세트라고 불리는 스타터를 사용하여 간편하게 의존성을 사용하거나 만들어주는 도구이다.

 

스프링부트의 주요 특징

  • 톰캣, 제티, 언더토우 같은 웹 어플리케이션 서버(web application server, WAS)가 내장되어 있어서 따로 설치를 하지 않아도 독립적으로 실행할 수 있다.
  • 빌드 구성을 단순화하는 스프링 부트 스타터를 제공한다.
  • XML 설정을 하지않고 자바 코드만으로 모두 작성할 수 있다.
  • JAR를 이용해서 자바 옵션만으로도 배포가 가능하다
  스프링 스프링 부트
목적 엔터프라이즈 애플리케이션 개발을 더 쉽게 만들기 스프링의 개발을 더 빠르고 쉽게 하기
실행파일
개발자가 수동으로 구성 자동 구성
XML 일부 파일은 XML로 생성/관리 사용하지 않음
인메모리 데이터베이스 지원 지원하지 않음 자동 설정 지원
서버 프로젝트를 띄우는 서버(예: 톰캣, 제티)를 별도로 수동 설정 내장형 서버를 제공해 별도의 설정이 필요 없음

스프링의 가장 중요한 특징

IoC/DI, AOP, PSA

스프링은 모든 기능의 기반을 제어의 역전(IoC), 의존성 주입에 두고 있다.

 

IoC란?

IoC는 Inversioin of Control을 줄인 표현이다. 직역하면 제어의 역전.

지금까지 자바 코드로 작성하여 객체를 생성할 때는 객체가 필요한 곳에서 직접 생성하였다. 다음의 예시를 보자

 

public class A {
  b = new B(); //클래스 A에서 new 키워드로 클래스 B의 객체 생성
}

제어의 역전은 다른 객체를 직접 생성하거나 제어하는 것이 아니라 외부에서 관리하는 객체를 가져와 사용하는 것을 말한다.

위 예제에서 제어의 역전을 적용하면 다음과 같은 형태로 바뀐다.

public calss A {
  private B b; //코드에서 객체를 생성하지 않음, 어디선가 받아온 객체를 b에 할당
}

실제로 스프링 컨테이너가 객체를 관리, 제공하는 역할을 하고 있다.

 

DI란?

앞에서 설명한 것처럼 스프링에서는 객체들을 관리하기 위해 제어의 역전을 사용한다.제어의 역전을 구현하기 위해 사용하는 방식이 DI이다. DI는 Dependency Injection를 줄인 표현이고, 직역하면 의존성 주입.

 

DI는 어떤 클래스가 다른 클래스에 의존한다는 뜻이다. 다음은 IoC/DI를 기초로 하는 스프링 코드이다. 

public class A {
    // A에서 B를 주입 받음
    @Autowired
    B b;
}

여기서 @Autowired라는 어노테이션은 스프링 컨테이너에 있는 빈이라는 것을 주입하는 역할이다.

빈이란? 스프링 컨테이너에서 관리하는 객체를 말한다.

이전 코드에서는 개발자가 직접 B 객체를 생성했지만 이번 코드는 어딘가에서 B b;라고 선언했을 뿐 직접 객체를 생성하지는 않고 있다. 다시 말해 객체를 주입받고 있다.

 

스프링 컨테이너란?

앞서 언급한 것처럼 스프링은 스프링 컨테이너를 제공한다. 스프링 컨테이너는 앞서 본 것처럼 빈을 생성하고 관리한다.

즉, 빈이 생성되고 소멸되기까지의 생명주기를 이 스프링 컨테이너가 관리하는 것이다.

개발자가 @Autowired 같은 어노테이션을 사용해 빈을 주입받을 수 있게 DI를 지원하기도 한다.

빈은 무엇일까

 

빈이란?

빈은 스프링 컨테이너가 생성하고 관리하는 객체이다. 바로 이전의 코드에서 B가 바로 빈이다.

스프링은 빈을 스프링 컨테이너에 등록하기 위해 XML 파일 설정, 어노테이션 추가 등 여러 방법을 제공한다.

@Component // 클래스 MyBean를 빈으로 등록
public class MyBean {
}

 

AOP란?

AOP는 Aspect Oriented Programming을 줄인 표현이다. 직역하면 관점 지향 프로그래밍.

핵심 관점 코드에만 집중할 수 있게되고 프로그램의 변경과 확장에도 유연하게 대응할 수 있어서 좋다.

 

PSA란?

PSA는 Portable Service Abstraction을 줄인 표현이다. 직역하면 이식 가능한 서비스 추상화.

스프링에서 제공하는 다양한 기술들을 추상화해 개발자가 쉽게 사용하는 인터페이스를 말한다

 

대표적인 PSA의 예는 클라이언트의 매핑과 클래스, 매핑을 위한 어노테이션이다.

스프링에서는 데이터베이스에 접근하기 위한 기술로는 JPA, MyBatis, JDBC 같은 것들이 있다.

어떤 기술을 사용하든 일관된 방식으로 데이터베이스에 접근하도록 인터페이스를 지원한다.

 

지금까지 스프링의 가장 중요한 특징들인 IoC/DI, AOP, PSA에 대해 알아보았다.

 

'Spring-Boot' 카테고리의 다른 글

[Spring-Boot] 테스트케이스의 @Transactional  (0) 2024.01.12
메이븐(maven) vs 그래들(gradle) 비교  (1) 2023.12.20
ORM이란?  (1) 2023.10.25
OAuth란?  (0) 2023.07.27
스프링 시큐리티(Spring Security)  (0) 2023.07.15