본문 바로가기
Development/Spring

Spring? Spring Boot? Spring MVC?

by 메정 2021. 9. 23.

Spring

Spring은 Spring Framework, Spring Boot, Spring data 등 여러 프로젝트들의 모음이다
Spring Framework을 이용하면 웹개발 뿐만 아니라 클라우드 등 다양한 프로젝트 개발 가능하다.

Spring의 핵심요소는 앱 수준의 인프라 지원이다.

  • 앱 수준의 비즈니스 로직에 집중할 수 있게 하는 다양한 방법을 제공
  • JDBC, JSP 및 Java Servlet과 같은 기존 Java 프레임워크 및 API에 비해 웹 애플리케이션 개발이 훨씬 쉬워짐
  • DI와 IoC를 통해 객체간의 결합도를 느슨하게 만들어주어 코드의 재사용성을 높이고, 단위테스트를 용이하게 해줌
    • AOP (Aspect-Oriented Programming), POJO (Plain Old Java Object) 및 DI (dependency injection)와 같은 다양한 새로운 기술을 사용하여 엔터프라이즈 애플리케이션을 개발
  • Spring 개체 관계형 매핑(Spring ORM), Spring Web Flow 및 Spring Web MVC 등 다양한 모듈 제공
    • 모듈을 별도로 사용할 수 있음
    • 모듈은 웹 응용 프로그랭메서 더 나은 기능을 제공하기 위해 그룹화 가능

Spring Boot

Spring Framework 기반 (기존 Spring 위에 구축)

  • 스프링의 모든 기능을 제공하면서 보다 쉽게 사용 가능
    • 개발에 필요한 모듈의 라이브러리 조합이 자동으로 되어있음
  • 모든 것이 자동으로 구성
    • Spring Framework는 Bean으로 등록해주어야 하지만, Spring Boot는 의존성만 추가해준다면 yml파일을 동해 자동으로 주입시켜 설정해줌
  • 마이크로 서비스 기반 프레임 워크 (짧은 시간 내에 프로덕션 준비 애플리케이션 생성)
  • REST API를 이용하여 개발 시 유용하게 사용 가능
  • war, jar 파일로 변환하는 기능 제공
  • 자주 사용하는 라이브러리가 미리 조합되어 있음
  • 복잡한 설정이 자동 처리
  • 내장서버를 포함(톰캣)하여 별도로 웹서버를 추가하지 않아도 바로 개발 가능
  • WAS에 배포하지 않고도 실행 가능한 jar 파일로 웹앱 개발 가능

Spring MVC

Spring MVC Framework는 Model, View, Controller로 분리하여 개발 가능하게 하고, 애플리케이션 통합을 원할하게 처리해준다.

  • MVC : Model-View-Controller
    • Model : 데이터
    • View : 렌더링되어 보여지는 페이지
    • Controller : 사용자의 요청을 받아 응답을 주는 로직 담당
  • Model 객체는 Map을 사용하여 View와 Controller 간 전달 가능하다.

Spring MVC, Spring JDBC 등등은 Spring 프로젝트 내 하위 프로젝트(모듈)이다.

Spring MVC 동작원리

전체흐름
요청 → 프론트 컨트롤러 → 핸들러 매핑 → 핸들러 어댑터 → 컨트롤러 → 로직 수행 → 컨트롤러 → 뷰 리졸버 → 응답

Spring MVC 동작원리

프론트 컨트롤러 : 맨 앞단에서 유저의 요청을 받는 컨트롤러

  • DispatcherServlet 이 역할 수행
  • 모든 요청을 받아 핸들러 매핑에게 전달
    HandlerMapping: 컨트롤러를 찾아서 반환
    HandlerAdapter: 컨트롤러의 메소드를 호출하여 로직 수행 → 수행 결과를 Model & View 객체로 변환 → DispatcherServlet 으로 전달 → DispatcherServlet 가 ViewResolver를 이용하여 뷰를 찾거나 생성 → 그 뷰에 객체로 받아온 Model을 넣어 응답 결과를 생성하여 유저에게 전달

레이어드(Layered) 아키텍처

여러 모듈들을 일종의 레이어 단위로 나누는 설계 방식

레이어드 아키텍처

Presentation Layer
화면 조작 or 사용자 입력을 처리하는 레이어

Service Layer(Domain)
비즈니스와 관련된 도메인 로직을 처리하는 레이어
하나의 비즈니스 로직은 하나의 트랜잭션 단위로 동작

Repository Layer(Data Source)
도메인에서 필요로 하는 데이터 조작을 위한 레이어

참고자료

[부스트코스 웹 프로그래밍] 스프링 MVC

댓글