스프링
- spring framework, spring boot 등 여러 프로젝트들의 모음
스프링 프레임워크
- 객체 지향의 특징을 잘 활용할 수 있게 해주며 개발자들이 핵심 비즈니스 로직 구현에만 집중할 수 있게 해주는 프레임워크
- 초기 spring 기본 설정을 잘 해놓는다면 스프링 관련 코드를 신경 쓸 필요가 없다.
스프링 부트
- 약간의 설정만으로 spring 어플리케이션을 제작할 수 있게 해주는 스프링 프로젝트
- 다양한 기술을 지원하면서 개발자들이 처리해야 하는 설정 작업이 많아지고 복잡해졌다.
- 특징
- 의존성 관리
- 기존 spring은 개발에 필요한 모듈의 의존성을 각각 다운받아 했고, 버전도 맞춰 주어야 했다. (build.gradle)
- spring-boot-starter를 지원하여 자주 사용하는 모듈간의 의존성과 버전 조합을 제공해준다.
- 자동 설정
- 기존 spring은 많은 환경 설정으르 해야 한다. (Bean 어노테이션, configuration 클래스 작성)
- application.properties 에 간단한 선언으로
- SpringBootApplication, EnableAutoConfiguration(자동 설정), ComponentScan(컴포넌트 어노테이션이 붙은 클래스를 bean으로 등록), SpringBootConfiguration
- 내장 was
- spring을 통해 배포하려면
- war 패키징 -> was 설치(tomcat 등) -> was에 war 파일 올리기
- 모니터링
- actuator를 통해 실행중인 어플리케이션의 관리 및 모니터링 가능
- 어떤 빈이 등록되어있는지, 어플리케이션 cpu사용량, 어플리케이션 상태 정보 등
의존성 주입 (DI, Dependency Injection)
-
한 클래스에서 다른 클래스의 객체를 직접 생성하는 것(강한 결합)을 외부에서 주입 받는 것.
-
@Controller, @Service, @Repository 등을 선언한 클래스들을 IoC 컨테이너에 빈으로 등록하고, 해당 객체가 생성될 때 주입시켜준다.
-
@Autowired 어노테이션을 통해 의존성을 주입한다. (필드 주입)
-
재사용성
-
코드 단순화 (객체 생성 코드가 없으므로)
-
느슨한 결합도, 유연성, 확장성
Autowired vs allArgConstructor
- 생성자 주입의 장점
- 순환 참조 방지
- 테스트 코드 작성 편리
- 품질 좋은 코드
- immutable 특성
- 필드 주입은 객체에 final을 선언할 수 없어 객체가 변할 수 있다.