[Spring] Spring Framework Modules - 스프링 프레임워크 큰 그림 이해하기

2022. 11. 30. 04:37BackEnd

요즘 토비의 스프링을 파보고 있는 백엔드 뉴비입니다. 힘드네요. ^^ 3년전 첫 취업으로 국비 배울때 Spring을 했었는데, 임베디드 C언어 개발자가 되고 다시 백엔드로 돌아오려고하니 Spring이 조금 발목이 잡힙니다. 로그 파싱 목적이나 데이터를 취합하는 과정에서 C언어보다는 자바 기반의 스프링 프레임워크가 솔직히 DB 접근이나 클래스단위로 파싱된 내용을 Row단위로 잘 저장가능하다 보니 업무에서도 종종 쓰긴 했는데, 엔터프라이즈 단위의 프로덕션을 개발하려고 생각하니 사실 조금 더 깊이 알아야겠다는 생각이듭니다.

 

김영한님 강의 중 언급한 말씀을 조금 언급하자면, 정말 스프링을 다시금 접한 저는 망망대해에 표류중인 돛단배 같습니다. 그래서 어디부터 시작하면 좋을까하고 일단 '토비의 스프링'을 딱 펼쳤는데.... 무슨 말인지 정리가 안됩니다. 그렇다고 망했다 생각하고 포기할 수는 없죠. 그렇다고 스프링 프레임워크로 동작하는 구현체를 못만드는 것은 아니니까요. ( 잘 못할뿐... )

 


첫 단추로 Spring Framework에서 제공하는 모듈을 봐야겠다고 생각했습니다. 스프링 공식 도큐먼트에서 제공하는 그림입니다.

 

https://docs.spring.io/spring-framework/docs/3.0.x/spring-framework-reference/html/overview.html

뭐하나 안중요한 부분이 없기는합니다만... (이게 문제네요. 안중요한게 없습니다.) 일단 뉴비라도 꼭 알아야 되는 모듈 단위로 먼저 파악을 좀 해보고자 합니다.

 

1. Core Container ( 토비의 스프링 2권 1장 - IoC 컨테이너와 DI )

- Core 및 Beans 모듈은 IoC 및 종속성 주입 기능을 포함하여 프레임워크의 기본 부분을 제공한다고 합니다.

- 실제 프로그램 논리에서 종속성의 구성 및 사양을 분리하는 기능을 제공합니다.

 

2. Data Access/Integration ( 토비의 스프링 2권 2장 - 데이터 액세스 기술 )

- 쉽게 요약하면 DB와 연관된 부분으로 데이터 액세스 및 통합 모듈입니다.

- 이를 지원하기 위해 JDBC, ORM, OXM, JMS 및 트랜잭션 모듈로 구성이 된다고합니다. ( 아마도 일단은 ORM 위주로 공부하게 되지 않을까 싶습니다. )

 

3. Web ( 토비의 스프링 2권 3장, 4장 )

- 웹 계층은 Web, Web-Servlet, Web-Struts 및 Web-Portles 모듈로 구성되어 있습니다.

- MVC 구현이 Spring에서 어떻게 되어있는지 파악을 잘 해야되는 부분입니다.

 

4. AOP ( 토비의 스프링 2권 5장 )

- Spring의 AOP 모듈은 AspectJ와는 조금 차이가 있습니다만, 분리되어야 하는 기능을 구현하는 코드를 객체지향적으로 완전히 분리하기 위해 메서드 인터셋터 및 포인트 컷을 정의할 수 있도록하는 AOP Alliance 호환 측면 지향 프로그래밍 구현을 제공합니다.

 

5. Test ( 토비의 스프링 2권 6장 )

- Test 모듈은 JUnit을 거의 사용하는데, 이를 사용하여 Spring 구성 요소 테스트를 어떻게 지원하는지 파악을 해야됩니다.

- Spring ApplicationContexts의 일관된 로딩과 해당 컨텍스트의 캐싱을 제공하며, Mockito와 같은 모의 개체를 제공합니다.

 


 

 

위 모듈을 가지고 스프링이 뭘 하고 싶은걸까?

 

우리가 스프링을 쓰는 이유는 간단합니다. 쉽고 간편하게 비즈니스 로직에 집중해서 개발을 하기위해 프레임워크를 사용합니다. 그리고 위 모듈은 위 목적을 달성하기 쉽게 해주기 위해서 필요한 모듈이겠지요.

 

비즈니스 로직을 개발한다는 것은 큰 틀에서 아래 그림과 같을 것입니다. 아래 그림에서 처리 과정에서 이제 개발자가 고려해야 될 부분이 많을 것입니다.

 

제가 생각했을 때는 그런 고민의 산물이 정확하게 딱딱 이러한 단계를 거쳐간것은 아니지만 '객체 지향 프로그래밍' -> 'Design Pattern' -> 'Dependency Injection' -> '이 모든것이 반영 된 모범사례' 이렇게 발전하지 않았을까 합니다. 그리고 그 모범사례가 Spring FrameWork와 Kotlin이 아닐까 조심스례 생각해 봅니다. 실제로 기술 발전의 역사를 보면 위와 비슷한 맥락으로 가거나, 동시에 이런 것들이 개발되고 있었다는 생각이 듭니다.

 

 


정리

스프링 프레임워크는 개발 과정에서 비즈니스 로직 처리에 집중할 수 있도록 편의를 제공합니다. 이런 편의를 제공하는 3가지 핵심 요소는 IoC, AOP, PSA입니다. 그리고 이 3가지를 지탱하는 모듈은 크게 5가지로 Core Container, Data Access, Web, AOP, Test라고 할 수 있습니다.

 

이제 이 요소들이 어떻게 구성되어 있는지 세부 내용들을 하나씩 정리해보겠습니다.