나는 야생형 코딩을 좋아한다. 그래서 항상 새로운 기술을 배울 때 원리 보다는 어떻게 사용하는지 부터 배웠다. 그렇다보니 기초 지식이 부족했고 결국 수많은 오류와 다시 처음부터 공부하여 많은 시간을 소요하며 학습하는 단점이 들어났다. 그래서 이번엔 Java 프레임워크인 Spring의 개념과 동작 원리에 대해서 포스팅 하겠다.
프레임워크란 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것을 말한다.
스프링 프레임워크(Spring Framework)는 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크로서 간단히 스프링(Spring)이라고도 한다. 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있다. 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준프레임워크의 기반 기술로 쓰이고 있다.
스프링 프레임워크를 기반으로 한, 단순하고 간편한 방법으로 스프링 기반의 애플리케이션을 개발할 수 있도록 도와주는 도구이다. 보통 현업에서 스프링을 쓴다고 하면 스프링 부트를 주로 사용하고 스프링을 학습할때 스프링 부트 사용을 추천한다.
경량 컨테이너 (Lightweight Container): 스프링은 IoC (Inversion of Control) 컨테이너를 제공하여 객체의 라이프사이클과 의존성 주입을 관리. 이를 통해 개발자는 객체 생성 및 관리에 대한 부담을 줄일 수 있다.
의존성 주입 (Dependency Injection): 스프링은 의존성 주입을 통해 객체 간의 결합도를 낮춘다. 이는 코드의 유지보수성을 향상시키고 테스트 용이성을 높이는 데 도움이 된다.
AOP (Aspect-Oriented Programming): 관점 지향 프로그래밍을 지원하여 핵심 비즈니스 로직과 횡단 관심사를 분리할 수 있다. 이는 코드의 모듈성과 재사용성을 높이며, 특히 로깅, 트랜잭션 관리 등과 같은 부가적인 기능을 중앙에서 제어할 수 있게 해준다.
트랜잭션 관리: 스프링은 선언적 트랜잭션 관리를 지원하여 데이터베이스 트랜잭션을 쉽게 처리할 수 있게 합니다. 개발자는 어노테이션이나 XML 구성을 통해 트랜잭션을 정의할 수 있다.
모듈성과 재사용성: 스프링은 다양한 모듈로 구성되어 있어 필요한 기능만 선택적으로 사용할 수 있다. 이는 개발자가 프로젝트에 필요한 부분만 선택하여 사용할 수 있게 하며, 모듈성과 재사용성을 높인다.
POJO (Plain Old Java Object): 스프링은 일반적인 자바 객체를 사용하여 개발할 수 있도록 지원. 이는 별도의 인터페이스나 상속을 강제하지 않고, 기존 코드를 재사용하기 용이하게 만든다.
높은 확장성: 스프링은 다양한 확장 포인트를 제공하여 사용자가 필요에 따라 프레임워크를 확장하고 커스터마이징할 수 있다.
스프링은 다양한 생태계를 구성하는 여러 모듈이 있다. 이번엔 웹 계층에 서블릿(Servlet) API를 기반으로 클라이언트의 요청을 처리하는 모듈인 스프링 웹 MVC(spring-web-mvc) 또는 스프링 MVC의 동작 방법을 설명하겠다.
MVC 패턴이란?
모델(Model): 애플리케이션의 비즈니스 로직과 데이터를 담당하는 부분. 모델은 특정 비즈니스 객체나 데이터를 나타내며, 이를 통해 뷰와 컨트롤러 간의 상호 작용이 이루어진다.
뷰(View): 사용자에게 데이터를 표시하고 사용자의 입력을 받는 부분. HTML, JSP, Thymeleaf 등과 같은 템플릿 엔진을 사용하여 사용자 인터페이스를 생성하고, 모델에서 전달된 데이터를 표시한다.
컨트롤러(Controller): 사용자의 요청을 처리하고, 모델을 업데이트하며, 적절한 뷰를 호출하는 부분. 클라이언트의 요청을 받아 해당 요청에 대한 처리를 수행하고 결과를 뷰에 전달한다.
클라이언트(브라우저)에서 HTTP 요청이 발생
DispatcherServlet은 HandlerMapping을 사용하여 어떤 컨트롤러가 이 요청을 처리할지 결정.
컨트롤러는 모델과 사용할 뷰의 정보를 포함한 ModelAndView 객체를 HandlerAdapter에게 반환.
DispatcherServlet은 ViewResolver를 사용하여 뷰를 선택하고, 모델을 전달.
뷰는 모델의 데이터를 사용하여 클라이언트에게 응답을 생성
이론 열심히 상상하면서 이해해봐도 조금만 상황이 달라지면 야생으로 깨지면서 하게 되더라고용. 야생으로 배웠기에 더 기억에 오래남는 공부가 되지 않을까요? 파이팅합시다 ㅎㅎ
글 잘 일고 갑니당~!