[TIL-260320] 스프링 프레임워크 기초: Spring WebMVC 실습, bean config 설정 분리

2026. 3. 20. 18:34·Backend/Spring

월요일에 TIL을 올린 이후 4일만에 TIl을 올리게 되었다.

그동안 수업을 짼(?) 건 아니고, 내용이 너어어어무 어려워서 정리가 안돼서 글을 못 올렸었다.

오늘까지 수업을 듣고 보니, 화수목에 배운 내용이 조금씩 정리가 되어서 오늘은 TIl을 올리게 되었다.

Spring WebMVC 실습

스프링 MVC 프로젝트 폴더 구조

스프링 mvc 프로젝트를 만들면 기본으로 여러 라이브러리와 폴더들, 설정 파일들이 만들어진다.

실습에 필요한 기본 설정, 여러 xml 파일들 수정, DB 설정, 스켈레톤 코드 복사 붙여넣기 등등은 따로 이야기하지 않고 넘어 가겠다. (중요하지 않은 내용이라 글이 쓸데없이 길어질 것 같아 생략)

기본 설정이 완료된 폴더 구조를 보면 다음과 같다.

스프링 MVC 프로젝트 폴더 구조

 

뭐... 엄청나다.

이 모든 파일들의 내용을 다 이해하기엔 시간이 걸릴 것 같고 굳이 그럴 필요도 없어서, 스프링 애플리케이션이 동작하는 전체 흐름만 알면 될 것 같다.

 

스프링 웹 애플리케이션 동작 흐름

1. 웹 브라우저에서 `http://localhost:8080/myapp/`을 요청한다.

2. 해당 요청을 DispatcherServlet이 받는다.

3. HandlerMapping이 URL과 매핑되는 컨트롤러를 검색한다.

-> servlet-context.xml에 등록된 `@Controller` Bean 중 `@RequestMapping("/")`이 등록된 MemberController를 찾는다.

4. DispatcherServlet이 HandlerAdapter를 통해 MemberController에 `@RequestMapping("/")`이 등록된 메서드 main()을 실행한다.

5. Interceptor(ViewNameInterceptor)가 먼저 실행되어 요청 URL(/)을 기반으로 viewName을 생성하고 request에 저장한다.
(viewName = null)

6. Controller의 main() 메서드는 request에서 viewName을 가져와 ModelAndView("")을 생성하여 반환한다.

7. HandlerAdapter 는 ModelAndView를 DispatcherServlet에게 전달한다.

8. DispatcherServlet은 ViewResolver (TilesViewResolver)를 통해 ""과 일치하는 Tiles definition을 검색한다.

9. Tiles 설정(tiles_member.xml)에서 <definition name="">을 찾는다.

10. 해당 definition은 baseLayout을 상속하므로 /WEB-INF/views/common/layout.jsp를 템플릿으로 사용한다.

11. Tiles는 정의된 attribute에 따라 header.jsp, side.jsp, body(= main.jsp), footer.jsp를 설정한다.

12. layout.jsp에서 tiles:insertAttribute를 통해 위 JSP들이 하나의 화면으로 조립된다.

13. 최종적으로 header + side + main.jsp + footer가 합쳐진 HTML이 생성된다.

14. DispatcherServlet이 해당 응답을 브라우저로 전달한다.

15. 웹 브라우저에는 상단(header) + 좌측(side) + 중앙(main) + 하단(footer) 화면이 렌더링된다.

 

실행 화면

 

bean config 설정 분리

bean의 설정이 디스패처 서블릿에 모두 설정이 되면 파일이 너무 커져 관리의 불편함이 있다. 따라서 관련된 bean들을 한 곳에 정의하고 Listener를 통해 모두 Loading한다.

web.xml 설정

<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/action-mybatis.xml</param-value>
    </context-param>

    <!-- Creates the Spring Container shared by all Servlets and Filters -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

 

  • servlet-context.xml (applicationContext.xml)
    • 애플리케이션 내의 URL 관련 설정을 작성한다.
    • annotation-driven
    • resources
    • viewResolver
    • multipartResolver
    • propertyPlaceHolder
    • Controller (Controller가 늘어갈 수록 servlet-context.xml이 무거워진다.)
  • rootContext.xml (내 코드에서는 action-mybatis.xml)
    • Database 연동 설정을 작성한다.
    • dataSource
    • jdbcTemplate
  • boardContext.xml (Context.xml)
    • 패키지 별 Context를 작성한다.
    • boardDaoImpl
    • boardServiceImpl

❕느낀점

스켈레톤 (뼈대) 코드를 넣고 실제로 브라우저에서 URL을 입력해 화면에 출력을 해보니 조금씩 이해가 되는 것 같다.

한 기술을 배우고 겨우 이해하면 더 좋은 기술을 배우고, 또 그걸 겨우 이해하면 더 좋은 기술을 배우는 것 같다..

그래서 더 어려웠고, 내용을 다 이해해서 사용할 줄 알아야 한다는 부담감에 공부하는게 힘들어졌던 것 같다.

하지만 그럴 필요 없이 전체적인 흐름을 이해하는 것이 중요하다는 것을 알게 되었다. 그냥 예전에는 힘들게 서블릿, JSP를 썼고, 그 이후에 프레임워크인 스프링이 나왔고, 그 이후에 더 간단하게 설정할 수 있는 스프링 부트가 나왔다. 이런 흐름을 이해하는 게 중요할 것 같다. 코드 한 줄 한 줄 분석하는데 시간 쓰지 말고, 개발 방식의 변화에 초점을 맞춰서 넓은 관점에서 공부해야겠다.

스프링 파이팅!

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

[TIL-260331] Spring Boot 기초: Spring Data JPA  (0) 2026.04.01
[TIL-260330] Spring Boot 기초: 개요, 실습, Lombok  (0) 2026.03.31
[TIL-260325] 스프링 프레임워크 기초: Ajax Response, RESTful 컨트롤러, MyBatis  (0) 2026.03.26
[TIL-260324] 스프링 프레임워크 기초: Session, Interceptor, 로그인/로그아웃 기능  (0) 2026.03.24
[TIL-260316] 스프링 프레임워크 기초: Spring 개념과 개발 환경 구성  (0) 2026.03.17
'Backend/Spring' 카테고리의 다른 글
  • [TIL-260330] Spring Boot 기초: 개요, 실습, Lombok
  • [TIL-260325] 스프링 프레임워크 기초: Ajax Response, RESTful 컨트롤러, MyBatis
  • [TIL-260324] 스프링 프레임워크 기초: Session, Interceptor, 로그인/로그아웃 기능
  • [TIL-260316] 스프링 프레임워크 기초: Spring 개념과 개발 환경 구성
hee-on
hee-on
작은 기록을 모아 꾸준히 성장해 나가는 개발 기록 공간입니다💻
  • hee-on
    희온의 dev log
    hee-on
  • 전체
    오늘
    어제
    • 전체 글 (52) N
      • About (2)
      • Backend (33) N
        • Java (15)
        • Spring (6)
        • DB (8) N
        • Architecture & Design (4) N
      • Frontend (6)
      • CS (6)
        • Algorithm (2)
        • Do it 알고리즘 코딩테스트 (자바편) (4)
        • Network (0)
        • Operating System (0)
      • DevOps (1)
        • Git (1)
        • CI-CD (0)
        • Docker (0)
        • AWS (0)
      • AI (1)
      • 일상 || 잡담 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백엔드
    ClaudeAPI
    블로그
    Spring
    알고리즘
    MVC
    JavaScript
    SQL
    개발자
    SpringBoot
    til
    react
    백준
    db
    JSP
    소개
    Java
    Servlet
    코테
    취준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
hee-on
[TIL-260320] 스프링 프레임워크 기초: Spring WebMVC 실습, bean config 설정 분리
상단으로

티스토리툴바