스프링과 스프링 부트
스프링 프레임 워클르 알아보고, 차이를 알아보자
스프링의 등장
- 엔터프라이즈 애플리케이션 : 대규모의 복잡한 데이터를 관리하는 애플리케이션
- 엔터프라이즈 애플리케이션은 많은 사용자의 요청을 동시에 처리해야 하므로 서버 성능과 안정성, 보안이 매우 중요합니다.
- 스프링 탄생의 배경 : 서버 성능과 안정성, 보안이 중요하다
- 설정이 복잡하여 개발자들의 피로도 또한 증가
- 스프링 프레임워크는 앞서 언급한 서버 성능, 안정성, 보안을 매우 높은 수준으로 제공하는 도구
- 개발자들은 기능 개발에 집중 가능
스프링을 더 쉽게 만들어주는 스프링 부트
엔터 프라이즈 -> 스프링 -> 스프링 부트
- 스프링은 장점이 많은 개발도구이지만 설정이 매우 복잡하다는 장점
- 그래서 스프링을 개발팀에서도 이런 단점을 인식하고
- 단점을 보완하고자 스프링 부트를 출시했습니다.
- 스프링 프로젝트를 설정할 수 있고 의존성 세트라고 불리는 스타터를 사용해 간편하게 의존성을 사용 관리 할수 있다.
- 스프링 부트는 개발자가 조금 더 비즈니스 로직 개발에만 집중할 수 있도록 만들어주는 도구
스프링 부트의 주요 특징
1. 톰캣, 제티, 언더토우 같은 웹 애플리케이션 서버( web application server, WAS)가 내장되어 있어서 따로 설치를 하지 않아도 독립적으로 실행할 수 있다.
2. 빌드 구성을 단순화하는 스프링 부트 스타터를 제공
3. XML 설정을 하지 않고 자바 코드로 모두 작성할 수 있다.
4. JAR를 이용해 자바 옵션만으로도 배포가 가능하다.
5. 애플리케이션의 모니터링 및 관리 도구인 스프링 액츄에이터(spring actuator)를 제공
* XML(Extensible Markup Lenguage) : 데이터를 정의하는 규칙을 제공하는 마크업 언어
* JAR (Java Archive) : 클래스파일 + 리소스 메타파일을 하나의 파일로 모아서 자바 플랫폼에 라이브러리를 배포하기위한 소프트웨어 패키지 파일 포멧
스프링 부트는 스프링에 속한 도구이다.
- 차이점 (구성의 차이, 내장 WAS의 유무)
- 스프링은
- 애플리케이션 개발에 필요한 환경을 수동으로 구성하고 정의해야 한다.
- 스프링 애플리케이션은 일반적으로 톰캣과 같은 WAS에서 배포
- WAS란 간단히 웹 애플리 케이션을 실행하기 위한 장치를 말한다.
- 스프링 부트는
- 스프링 코어와 스프링. MVC의 모든 기능을 자동으로 로드하므로 수동으로 개발 환경을 구성할 필요가 없다.
- 스프링 부트는 WAS를 자체적으로 가지고 있다.
- jar 파일만 만들면 별도의 WAS 설정을 하지 않아도 애플리케이션을 실행할 수 있다.
- 스프링 부트의 내장 WAS에는 통캣, 제티, 언더토우가 있어 상황에 필요한 WAS를 선택가능
스프링 스프링 부트 목적 엔터프라이즈 애플리케이션 개발을 더 쉽게 만들기 스프링의 개발을 더 빠르고 쉽게 하기 설정 파일 개발자가 수동으로 구성 자동 구성 XML 일부 파일은 XML로 직접 생성하고 관리 사용하지 않음 인메모리 데이터베이스 지원 지원하지 않음 인메모리 데이터베이스 자동 설정 지원 서버 프로젝트를 띄우는 서버 (톰캣, 제티)를 별도로 수동 설정 내장형 서버를 제공해 별도의 설정이 필요 없음 - 스프링은
- 제어의 역전과 의존성 주입 (IOC, DI)
스프링은 모든 기능의 기반을 제어의 역전(IOC)과 의존성 주입(DI)에 두고 있다.
제어의 역전은 IOC(Inversion of Control)로, 의존성 주입은 DI (Dependency Injection)이라 부르겠다.
IOC (Inversion of Control), 제어의 역전이란
코드를 작성해 객체를 생성할 때는 객체가 필요한 곳에서 직접 생성했을 것이다.
public calss A { // 기본적인 클래스 내부에서의 객체생성
b = new B(); // 클래스 A에서 new 키워드로 클래스 B의 객체 생성
}
제어의 역전은 다른 캑체를 직접 생성하지 않고, *외부에서 관리하는 객체를 가져와서 사용하는 것을 말한다. *
실제로 스프링은 스프링 컨테이너가 객체를 관리, 제공하는 역활을 한다.
public class A{ // IOC 제어의 역전을 사용하여 외부에서의 객체를 가져와 관리한다.
private B b; // 코드에서 객체를 생성하지 않음, 어디선가 받아온 캑체를 b에 할당
}
DI (Dependency Injection) 의존성 주입
- 스프링에서는 객체들을 관리하기 위해 제어의 역전을 사용한다.
- 제어의 역전을 구현하기 위해 사용하는 방법이 DI이다.
- Dependency Injection , 의존성 주입이다.
- DI는 어떤 클래스가 다른 클래스에 의존한다는 뜻이다.
- 밑에의 코드는 @Autowired라는 애너테이션은 스프링 컨테이너에 있는 빈이라는 것을 주입하는 역할을 한다.
- 빈은 쉽게 말해 스프링 컨테이너에서 관리하는 객체를 말한다.
- B객체를 생성했지만 다음코드는 어딘가에서 B b; 라고 선언했을 뿐 직접 객체를 생성하지는 않고 있다.
- 다시말해 객체를 주입받고 있다.
public class A { // DI(의존성 주입)을 이용한 IOC(의존성 역전)을 사용하는 예제
// A에서 B를 주입받음
@Autowired // 스프링 컨테이너에 잇는 빈이라는 것을 주입하는 역할
B b; // 스프링 컨테이너에서 관리하는 bin을 이용해 객체 b을 주입한다.
}
'개인공부 > 스프링 부트 3 백엔드 개발자 되기' 카테고리의 다른 글
스프링 부트 - 3장_스프링부트3 구조 이해하기 (0) | 2023.06.25 |
---|---|
스프링 부트 - 2장_3_스프링부트3 둘러보기 (0) | 2023.06.25 |
스프링 부트 - 2장_2 스프링 부트 3시작하기 (0) | 2023.06.23 |
스프링 부트 3 백엔드 개발자 되기 - 1장 이론 (0) | 2023.06.22 |
Build system 의 그레이들과 메이븐의 차이는 무엇인가요 - p24 (0) | 2023.06.22 |