0. 스프링 부트
스프링의 설정이 매우 복잡하다는 단점을 보완하고자 스프링 부트 등장
- 스프링 프레임 워크를 더 쉽고 빠르게 이용할 수 있도록 만들어주는 도구이다.
- 프로젝트를 빠르게 설정할 수 있고 stater를 사용해 간편하게 의존성 관리가 가능하다.
- 개발자가 조금 더 비즈니스 로직 개발에만 집중할 수 있도록 만들어주는 도구이다.
1. 스프링 부트의 주요 특징
- 톰캣, 제티, 언더토우 같은 웹 애플리케이션 서버(WAS)가 내장되어 있어서 따로 설치하지 않아도 된다.
- 빌드 구성을 단순화하는 스프링 부트 스타터를 제공한다.
- XML 설정을 하지 않고 자바 코드로 모두 작성할 수 있다.
- JAR을 이용해서 자바 옵션만으로도 배포가 가능하다
- 애플리케이션의 모니터링 및 관리 도구인 spring actuator를 제공한다.
1-1. 스프링 vs 스프링 부트
차이점 1. 구성의 차이
스프링 : 애플리케이션 개발에 필요한 환경을 수동으로 구성하고 정의해야 함
스프링부트 : 스프링 코어와 스프링 MVC의 모든 기능을 자동으로 로드 -> 수동으로 개발 환경 구성할 필요 X
차이점 2. 내장 WAS의 유무
스프링 | 스프링 부트 | |
---|---|---|
목적 | 엔터프라이즈 애플리케이션 개발을 더 쉽게 만들기 | 스프링의 개발을 더 빠르고 쉽게 하기 |
설정 파일 | 개발자가 수동으로 구성 | 자동 구성 |
XML | 일부 파일은 XML로 직접 생성하고 관리 | 사용 X |
인메모리 데이터베이스 지원 | 지원 X | 인메모리 데이터베이스 자동 설정 지원 |
서버 | 프로젝트를 띄우는 서버(톰캣, 제티)를 별도로 수동 설정 | 내장형 서버를 제공해 별도의 설정이 필요 없음 |
2. 스프링 Concept
스프링이라는 프레임 워크가 돌아가는 원리를 이해하자.
2-1. 제어의 역전(IoC)과 의존성 주입(DI)
스프링의 모든 기능의 기반을 IoC와 DI에 두고 있다.
IoC란?
Inversion of Control : 제어의 역전
public class A{
b = new B();
}
위의 코드는 클래스 B 객체를 사용하기 위해 클래스 A에서 객체를 직접 생성하는 코드이다.
IoC는 다른 객체를 직접 생성하거나 제어하는 것이 아니라 외부에서 관리하는 객체를 가져와 사용하는 것이다.
위 코드에서 IoC를 사용하면 다음과 같이 코드의 형태로 바뀐다.
public class A{
private B b;
}
코드에서 객체를 생성하지 않는다 -> 어디선가 받아온 객체를 b에 할당
이전과는 다르게 클래스 B 객체를 직접 생성하는 것이 아니므로, 어딘가에서 받아와 사용
DI란?
Dependancy Injection : 의존성 주입
DI는 어떤 클래스가 다른 클래스에 의존한다는 뜻이다.
스프링에서는 객체들을 관리하기 위해 제어의 역전을 사용한다.
DI는 제어의 역전을 구현하기 위해 사용하는 방법이다.
public class A{
// A에서 B를 주입 받음
@Autowired
B b;
}
위는 IoC/DI를 기초로 하는 스프링 코드이다.
여기에서 사용하는 @Autowired라는 애너테이션은 스프링 컨테이너에 있는 빈이라는 것을 주입하는 역할이다.
" 빈? : 스프링 컨테이너에서 관리하는 객체
정리
- 기존의 자바 코드는 클래스 A에서 B객체를 쓰고 싶은 경우 직접 생성했지만,
- 스프링의 경우 클래스 A에서 B 객체를 쓰고 싶은 경우 객체를 직접 생성하는 것이 아니라 스프링 컨테이너에서 객체를 주입받아 사용한다.
2-2. 빈과 스프링 컨테이너
스프링 컨테이너란?
빈을 생성하고 관리하는 주체
즉, 빈이 생성되고 소멸되기까지의 생명주기를 스프링 컨테이너가 관리하는 것이다.
@Autowired 같은 애너테이션을 사용해 빈을 주입받을 수 있게 DI를 지원함
빈이란?
빈은 스프링 컨테이너가 생성하고 관리하는 객체이다
public class A{
// A에서 B를 주입 받음
@Autowired
B b;
}
>> 해당 코드에서 B가 바로 빈
스프링은 빈을 스프링 컨테이너에 등록하기 우해 XML 파일 성정 애너테이션 추가 등의 방법을 제공
ex)
- MyBean이라는 클래스에 @Component 애너테이션을 붙이면 MyBean클래스가 빈으로 등록됨
- 이후 스프링 컨테이너에서 이 클래스를 관리함 >> 이때 빈의 이름은 클래스 이름의 첫 글자를 소문자로 바꿔 관리
@Component // 클래스 MyBean 빈으로 등록
public class MyBean{
}
관점 지향 프로그래밍(AOP)
AOP : Aspect Oriented Programming
프로그래밍에 대한 관심을 핵심 관점, 부가 관점으로 나누어서 관심 기준을 모듈화 하는 것을 의미함.
예를 들어, 계좌 이체 프로그램이 있을 때,
핵심 관점: 계좌 이체
부가 관점: 로깅, 데이터베이스 연결
부가 관점 코드를 핵심 관점 코드에서 분리할 수 있게 해 준다.
이를 통해 프로그램의 변경과 확장에도 유연하게 대응할 수 있다.
이식 가능한 서비스 추상화 (PSA)
PSA: Portable Service Abstraction
스프링에서 제공하는 다양한 기술들을 추상화해 개발자가 쉽게 사용하는 인터페이스
예시
- 클라이언트의 매핑과 클래스, 메서드의 매핑을 위한 애너테이션
- 데이터베이스에 접근하도록 하는 인터페이스
'JAVA > SpringBoot 3' 카테고리의 다른 글
[스프링 부트 3] 블로그 만들기 - 1 (블로그 글 작성 API 구현) (4) | 2024.08.07 |
---|---|
[스프링 부트 3] ORM, JPA, 하이버네이트 (0) | 2024.07.30 |
[스프링 부트 3] 테스트 코드란? / 테스트 코드 작성하기 (0) | 2024.07.29 |
[스프링 부트 3] 구조 이해하기 (프레젠테이션, 비즈니스, 퍼시스턴스 계층) (0) | 2024.07.25 |
[스프링 부트 3] 초기 세팅 (IntelliJ) & Hello World 출력하기 (1) | 2024.07.24 |