수달이네 기술 블로그

2. Spring으로 MVC패턴 구축하기1 본문

웹/Spring

2. Spring으로 MVC패턴 구축하기1

슬픈 수달이 2025. 12. 9. 21:59

SpringBoot프레임워크의 주요 특징

POJO 기반: 순수 자바 객체를 사용하므로 기존 코드들을 재사용 가능하며, 테스트와 유지보수에 유리하다

DI 기반(Dependency Injection) : 의존성 주입 스프링의 핵심 기능이며 클래스들간의 의존성을 낮춰주고 코드 재사용성을 높인다

AOP(Aspect-Oriented Programming)지원: 관점 지향 프로그래밍 공통되고 반복되는 관심사 분리, 모듈화

트랜잭션관리 xml, 어노테이션으로 트랜잭션 쉽게 설정

편리한 MVC 구조: 자체적으로 MVC프레임워크를 제공하여 불필요한 코드 감소

WAS에 종속적이지 않음.

  • 스프링 프레임워크를 사용한 프로젝트는 특정 WAS만 사용가능하지 않고, 다양한 서버에서 동작 가능
  • WAS없이도 독립적 테스트가 가능하고, 테스트가 빠르고 쉽다.
    • WAS를 실행하지 않고 독립적으로 테스트하는 방법
  • 단위 테스트

IoC(Inversion of Control): 제어권의 역전

  • 객체의 입장에서 사용할 다른 객체를 직접 생성하여 제어한다.
  • 제어권의 역전은 이런 흐름을 반대로 뒤집음
  • 객체가 사용하는 다른 객체를 직접 생성하지 않고, 자기 자신도 어디서 사용되는지 알 수 없음.
  • 특별한 권한을 가진 다른 객체에 의해 결정되고 만들어짐.
    • 스프링에서 객체 생성, 관리, 의존성 주입을 담당하는 주요 컴포넌트
    • IoC컨테이너는 논리적 구조임
    • 실체가 아닌 IoC컨테이너라는 논리적 구조를 바탕으로만듦
    • 스프링에서 사용하는 실제 구현 객체는 BeanFactory와 ApplicationContext객체임
    • BeanFactory는 가장 기본적인 IoC컨테이너 기능을 제공하며 ApplicationContext는 좀더 업그레이드 되어 추가 기능을 제공한다.
  • IoC컨테이너

Spring MVC동작 흐름

  • 자동차를 다루기 위한 핸들 = Handler = Controller
    • 요청 발생시 요청을 처리하기 위한 객체
  • DispatcherServlet = Spring MVC의 중심으로 교통정리 역할.
  • HandlerMapping: 어떤 메소드를 호출해야하는지 매핑되어있음(요청 URL)
  1. 클라이언트의 요청(request) > dispather servlet이 받음.(모든 요청을 먼저 받음.)
  2. HandlerMapping조회: dispatcher Servlet이 HandlerMapping을 통해 어떤 Handler가 이 요청을 처리할지 찾음. (@GetMapping(”/hello”), HelloController의 /hello로 매핑) /user/login → UserController.login() (즉 어떤 메서드를 가져올지 정함)
    • 동작흐름
      1. 클라이언트가 /user/login 요청
      2. DispatcherServlet이 HandlerMapping에게 이 URL(/user/login)을 처리할 HandlerMethod가 있니?
      3. HandlerMapping이 찾아서 HandlerAdapter와 함께 반환
      4. Dispatcher이 해당 Controller의 메소드를 호출
        • 여기서 사용되는 정보는 컨트롤러의 이름이 아닌 URL→HandlerMethod매핑정보
  3. HandlerAdapter실행: 실제 컨트롤러 메소드를 호출할 수 있도록 중간처리 (컨트롤러 호출방식을 통일해주는 어댑터)
  4. Handler(Controller)실행결과 dispatcherServlet으로 반환:” HandlerAdapter가 컨트롤러를 실행하면 컨트롤러는 비즈니스 로직을 수행한 후 결과(데이터, 뷰이름 등 반환) ModelAndView객체가 주로 사용됨(Model: 화면에 전달할 데이터, View: 어떤 화면을 렌더링할지에 대한 논리적 이름)
  5. ViewResolver 호출: DIspatcherServlet이 어떤 화면이 필요한지(Handler에서 반환된 뷰이름) ViewResolver에게 전달 > 논리적 뷰이름을 실제 물리 뷰 파일 경로로 변환(매핑)
  6. 실제 물리뷰 파일 경로를 반환
  7. View렌더링 및 응답 : DispatcherServlet은 View객체에 모델 데이터를 기반으로 html을 만들어 클라이언트에게 보냄 View는 JSP, Thymeleaf, Freemarker등 다양한 뷰 기술이 될 수 있음.

구현 흐름(Spring Boot + MVC + Repository, Service)

하위계층에서 상위계층으로 만들어 가는것이 가장 안정적임.

1. DB설계 & Entity/DTO 만들기

서비스, 컨트롤러를 만들기 위해선 데이터 구조가 먼저 정해져야 하기 때문.

  1. DB 테이블 정의
  2. UserDTO.java생성

2. Repository 생성

DB 연동 구조를 확보(컨트롤러가 데이터를 저장/조회하려면 Repository가 필요함)

JDBC 사용 > JdbcUserRepository.java(클래스), UserRepository.java(인터페이스)

3. Service / ServiceImpl 만들기

비즈니스 로직 구현 단계(Repository호출하여 실제 기능 작성)

UserServiceImpl.java(클래스),UserService.java(인터페이스)

  • 회원가입, 로그인 로직 구현

4. Controller 만들기

화면과 API를 연결하는 마지막 단계

Service에서 기능이 준비되어있어야 Controller에서 사용가능 따라서 먼저 구현한 것.

5. Templet만들기(화면 생성)

Controller가 연결되었으니 화면 작업

login.html, join.html →HTML에서 form action을 Controller로 연결

6. css/js추가

마지막에 화면 꾸밀 때 진행하면 됨

' > Spring' 카테고리의 다른 글

3. MVC패턴을 이용한 로그인 회원가입 구  (1) 2025.12.12
1. SpringBoot 기초  (0) 2025.12.08
0. SpringBoot  (1) 2025.12.04