지난 포스팅에서 기본에 대해서 제대로 다잡고 가야겠다는 이야기를 했었다.
이번 포스팅은 그 때보다 더 초심으로 돌아가, 스프링 프레임워크는 무엇이며, 스프링은 무슨 일을 하고 흐름 및 동작 원리를 가지고 동작하는지 등을 정리해보려 한다.
1) 의존성 주입
DInew 를 사용하지 않고 스프링 컨테이너에서 알아서 주입XML, Java Config ...)이나 어노테이션을 통해 객체의 생성 및 주입2) IoC 컨테이너 / Inversion of Control Container
3) AOP / Aspect-Orient Programming
@Aspect 어노테이션으로 지정@Transactional 로 지정된 메서드도 사실상 AOP 를 기반으로 작동@Transcational 메서드가 호출되면, Proxy 객체가 이를 중간에 인터셉트AOP4) 트랜잭션 관리
@Transactional 이 붙어있는 메서드 및 클래스를 관리@Transactional 이 클래스 내에 하나라도 붙어있으면, 프록시 객체를 생성5) 웹 애플리케이션 개발 지원
6) 데이터 접근 지원
JDBC , JPA 와 같은 데이터 접근 기술과의 통합을 제공DB 와의 상호작용을 간소화7) 보안
1) 유연성
2) 테스트 용이성
DI 로 인해 단위 테스트 및 통합 테스트가 쉬움3) 모듈화
4) 풍부한 커뮤니티 및 문서
1) 애플리케이션 실행
2) 빈 등록
3) 빈 생성 및 관리
DI 를 통해 등록된 빈 간의 관계를 설정4) AOP 적용
@Advice 등을 통해 지정된 Pointcut 에서 AOP 로직 적용5) 요청 처리
DispatcherServlet 이 받아서 적절한 핸들러(Controller)에 전달6) 응답 반환
MVC 흐름으로 진행@Component 로 등록할 수 있으며, @Controller , @Service, @Repository 등 또한 이를 포함하는 어노테이션@Component 및 같은 역할을 하는 클래스들을 자동으로 빈으로 등록@Configuration
@ComponentScan(basePackages = "com.ll")
public class AppConfig {
}
basePackages 속성으로 스캔할 패키지 및 범위를 지정com.ll 패키지 내의 @Component 들을 모두 스캔하여 빈으로 등록✔️ Tip) @SpringBootApplication
public static void main(String[] args) 메서드를 포함한 메인 클래스에 지정된 어노테이션@ComponentScan 어노테이션 및, 총 세 가지 중요한 어노테이션을 포함1) @EnableAutoConfiguration : 스프링부트가 자동 설정을 활성화하도록 함
2) @ComponentScan : 스프링이 @Component 등 컴포넌트로 정의된 클래스들을 자동으로 스캔하여 빈으로 등록
3) @Configuration : 해당 클래스가 스프링의 설정 클래스임을 나타냄
‼️ 스프링 프레임워크 자체가 포함하고 있는, 스프링을 작동시키기 위한 모듈(라이브러리)
1) spring-core
IOC 와 DI 관련 기능을 제공2) spring-context
spring-beans 에서 관리3) spring-aop
AOP 기능을 지원4) spring-transaction
AOP 를 이용해서 구현5) spring-beans
BeanFactory 와 관련된 기능을 제공하며, 빈의 생명주기 관리를 처리6) spring-web
7) spring-orm
JPA , Hibernate 등 ORM 프레임워크와의 통합 기능 제공8) spring-jdbc
JDBC 기반으로 DB 와 연동하는 기능을 제공9) spring-messaging
☑️ 그 외 필요한 라이브러리들은
build파일에 의존성을 추가하여 가져올 수 있음
이 때,Maven Repository가 주로 사용됨
참고) OpenAI. (2024).ChatGPT(4o)[Large language model].https://chatgpt.com/