엔터프라이즈용 Java 애플리케이션 개발을 편하게 할 수 있게 해주는 오픈소스 경량급 애플리케이션 프레임워크
프레임 워크란?
Frame(틀) + Work(일하다)
즉, 어떠한 목적을 쉽게 달성할 수 있도록 "프로그램을 개발하기 위해 사용할 틀"
API란?
Application Programming Interface
2개 이상의 소프트웨어 컴포넌트 사이에서 상호작용할 수 있도록 정의된 인터페이스(다른 개발자들이 사용가능하게 함수,메서드 정의)
FrameWork vs API 둘의 차이점은?
프레임워크는 우리가 개발을 시도할 때, 우리가 표준화된 상황 하에서 개발할 수 있도록 도와준다. 이미 구조적으로 짜여져 있는 틀을 제공하기에 우리의 개발 속도를 향상시켜준다.
한편, API는 조금 더 세부적인 함수,클래스 등을 제공한다. 프레임워크와 마찬가지로 외부에서 가져오지만 프레임워크 보다는 조금 더 세부적인 툴을 제공한다.
요리로 예를 들자면, 프레임워크는 요리 전반의 레시피, API는 그 요리속 세부 요소들의 레시피이다.
Spring IoC 컨테이너란?
Ioc = Inversion of Control
Ioc(제어 반전)이란, 객체의 생성, 생명주기 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 의미한다.
즉, Spring Ioc Container는
객체의 생명주기 관리를 개발자가 아닌 Spring 프레임워크가 담당하는 개념이다.
이를 통해 객체관리 주체가 프레임워크(Container)가 되어 개발자는 로직에 집중 할 수 있다.

IoC 컨테이너의 작동 방식
1. 객체를 class로 정의한다
2. 객체들 간의 연관성 지정 : Spring 설정파일 or 어노테이션을 통해 객체들에게 의존성을 주입한다
3. IoC 컨테이너가 이 정보를 바탕으로 객체를 생성,필요한 곳에 주입
IoC 컨테이너의 목표
IoC 컨테이너를 이용하면 POJO 기반의 개발이 가능하다.
POJO란?
Plain Old Java Object로, 특정 프레임워크에 종속적이지 않은 순수 자바 객체
Spring은 POJO 기반의 개발을 지향하며, 프레임 워크에 종속적이지 않고 일반적인 자바 객체를 사용하여 우리의 비즈니스 로직을 구현할 수 있다.
예시)
// java
// UserService : POJO 클래스
public class UserService {
private UserRepository userRepository;
// 의존성 주입 방법 = 생성자
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public User findUserById(Long id){
return userRepository.findById(id);
}
}
: UserService는 어느 특정한 프레임워크나 라이브러리에 의존하지 않는 순수한 POJO
: Spring IoC 컨테이너가 UserRepository 객체를 자동으로 주입한다.
: 직접 의존성 객체(UserRepository)를 관리하지 않고도, 간결한 POJO로 비즈니스 로직을 구현할 수 있다
일단, 콩은 아니구요
Spring IoC 컨테이너에 의해 생성되고 관리되는 자바의 객체를 의미합니다.
주로 비즈니스 로직 구현, 데이터 접근 등을 위한 다양한 객체로 사용되며,
XML 혹은 자바 기반의 설정 클래스, 어노테이션(@)을 통해 정의된다.
예시)
자바로 클래스 만들고, 객체 생성
public class UMC7thMember{
private int age;
private String nickname;
private String school;
private String studyPart;
public UMC7thMember(){
}
public UMC7thMember(int age,String nickname,String school,String studyPart){
this.age = age;
this.nickname = nickname;
this.school = school;
this.studypart = studyPart;
}
}
1. 객체를 직접 생성하는 방식 (new 생성자)
UMC7thMember umc7thMember = new UMC7thMember(24,"덕규","UMC대학교","Server(SpringBoot)");
-> UMC7thMember 객체를 빈으로 등록해 대체 가능
2. Bean으로 등록하여 관리하는 방식
2-1) @Component -> @Autowired : 묵시적 빈 정의
@Component
public class UMC7thMember {
private int age;
private String nickname;
private String school;
private String studyPart;
public UMC7thMember(){
}
public UMC7thMember(int age,String nickname,String school,String studyPart){
this.age = age;
this.nickname = nickname;
this.school = school;
this.studypart = studyPart;
}
} 2-2) @Configuration -> @Bean : 명시적 빈 정의
- Spring 설정 파일에 Configuration 어노테이션을 추가하고, Bean 어노테이션을 붙여 명시적으로 빈을 지정한다.
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UMCService {
private final UMC7thMember umc7thMember;
@Autowired
public UMCService(UMC7thMember umc7thMember){
this.umc7thMember = umc7thMember;
}
public void printMemberInfo(){
System.out.println("나이:" + umc7thMember.getAge());
System.out.println("너디너리 닉네임:" + umc7thMember.getNickname());
}
}
3. Bean의 스코프