-
[CS/Spring] Spring Framework / Spring Boot와 Spring Framework의 차이 / 제어의 역전(IoC) / 의존성 주입(DI)CS/Spring 2025. 3. 1. 13:58
• Spring Framework
스프링 프레임워크는 자바 개발을 편리하게 해주는 오픈소스 프레임워크입니다.
- 경량 컨테이너로서 자바 객체를 직접 관리 : 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있습니다.
- 제어의 역전(IoC)이라는 기술을 통해 어플리케이션의 느슨한 결합을 도모 : 컨트롤의 제어권이 사용자가 아닌 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출합니다.
- 의존성 주입(DI, Dependency Injection)을 지원 : 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜 줍니다.
- 관점 지향 프로그래밍(AOP, Aspect-Oriented Programming)을 지원 : 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있습니다.
• Spring Boot와 Spring Framework의 차이점
- 가장 큰 차이점은 Auto Configuration의 차이입니다. Spring은 프로젝트 초기에 다양한 환경 설정을 해야하지만,
- Spring Boot는 설정의 많은 부분을 자동화하여 사용자가 편하게 스프링을 활용할 수 있도록 돕습니다.
- spring boot starter dependency만 추가해주면 설정은 끝나고, 내장된 톰캣을 제공해 서버를 바로 실행할 수 있습니다.
• 제어의 역전(IoC, Inversion of Control)
- 제어의 역전(IoC)이란 모든 객체에 대한 제어권(생성, 라이프사이클 등)을 개발자가 아닌 IoC 컨테이너에게 넘긴 것을 말합니다.
- 스프링에서는 IoC 컨테이너에 객체들을 생성하면 객체끼리 의존성을 주입(DI)하는 역할을 하고,
- 컨테이너에 등록한 객체들을 '빈'이라고 합니다.
• 의존성 주입(DI)
- 의존성 주입은 필요한 객체를 직접 생성하는 것이 아닌 외부로부터 객체를 받아서 사용하는 것입니다.
- 이를 통해 객체 간의 결합도를 줄이고, 코드의 재사용성을 높일 수 있습니다.
- 의존성 주입은 ➀ 생성자 주입, ➁ 필드 주입, ➂ Setter 주입의 세가지 방법이 있습니다.
- 이 중 Spring에서 가장 권장하는 의존성 주입 방법은 생성자를 통한 주입 방법입니다.
- 그 이유는 순환 참조를 방지 / 불변성을 가짐 / 테스트에 용이 하기 때문입니다.
📚 생성자 주입, Setter 주입, 필드 주입 - 생성자 주입 : 생성자 호출 시점에 딱 1번만 호출되는 것을 보장하며 불변, 필수 의존관계에 사용합니다. - Setter 주입 : 선택, 변경 가능성이 있는 의존관계에 사용되며, 스프링 빈을 선택적으로 등록이 가능합니다. - 필드 주입 : `@Autowired`를 사용하는데 외부에서 변경이 불가능하여 테스트하기 힘듭니다. DI 프레임워크 없이는 작동하기 힘들며, 주로 어플리케이션과 관계없는 테스트 코드나 `@Configuration`같은 스프링 설정 목적으로 사용합니다.
* 위 글은 아래 문서를 참고해 작성했습니다.
https://dev-coco.tistory.com/163
신입 개발자 기술면접 질문 정리 - 백엔드
💡 WAS(Web Application Server)와 WS(Web Server)의 차이를 설명해주세요. WAS(Web Application Server) 비즈니스 로직을 넣을 수 있음 Tomcat, PHP, ASP, .NET 등 WS(Web Server) 비즈니스 로직을 넣을 수 없음 Nginx, Apache 등
dev-coco.tistory.com
https://github.com/ksundong/backend-interview-question
GitHub - ksundong/backend-interview-question: 백엔드 개발자로 입사를 준비하며 받았던 질문, 예상했던 질
백엔드 개발자로 입사를 준비하며 받았던 질문, 예상했던 질문, 인터넷 참고한 질문(CC BY-NC) - ksundong/backend-interview-question
github.com
'CS > Spring' 카테고리의 다른 글
[CS/Spring] Spring Bean Scope / Spring의 스코프 프로토 타입 빈 (0) 2025.03.26 [CS/Spring] JPA / JPA N + 1 문제와 해결 방법 (1) 2025.03.13 [CS/Spring] Spring Bean / Spring Bean 등록 방법 / Spring Bean 생명주기 (0) 2025.03.12 [CS/Spring] Spring MVC / MVC의 요청 흐름 처리 방식 / Dispatcher Servlet / Handler Mapping / View Resolver (0) 2025.03.11