[Spring] ⚡️ Spring MVC와 Spring Boot 개념 정리 ⚡️

2025. 1. 19. 18:39·Spring
728x90

필자는 최근에 실무에서 가장 많이 사용된다는 Spring MVC와 Spring Boot를 접하게 되었고,

이 둘을 공부하면서 배운 내용들을 정리해보려고 한다.


Spring MVC란?

Swift, React를 공부하며 MVC 자체 대한 공부를 많이 했던지라 Spring MVC를 접했을 때 마냥 막막하지는 않았다.

하지만 백엔드 관련해서의 MVC는 어떻게 접근해야되는지 이해하기가 힘들었던 것 같다.

 

일단 MVC 패턴이란 무엇일까?

MVC 패턴은 애플리케이션을 세 가지 역할로 구분한 개발 방법론이다.

  • Model: 데이터와 비즈니스 로직을 담당
  • View: 사용자에게 보여지는 화면
  • Controller: Model과 View를 연결하는 다리 역할

Spring MVC의 동작 원리는 무엇일까?

Spring MVC는 프론트 컨트롤러 패턴을 기반으로 동작한다.

모든 요청은 하나의 프론트 컨트롤러(DispatcherServlet)를 통과하며, 이를 통해 일관된 요청 처리가 가능해진다고 보면 된다.

먼저 코드를 살펴보자. Spring MVC의 요청 처리 흐름은 다음과 같다.

// 1. Controller 정의
@Controller
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserService userService;  // 서비스 계층 주입
    
    // 2. 요청 매핑 메서드 정의
    @GetMapping("/{id}")
    public String getUserDetails(@PathVariable Long id, Model model) {
        // 3. 비즈니스 로직 처리
        User user = userService.findById(id);
        
        // 4. Model에 데이터 추가
        model.addAttribute("user", user);
        
        // 5. 뷰 이름 반환
        return "user/details";  // ViewResolver가 실제 뷰 경로를 찾음
    }
}
  1. 클라이언트의 요청이 들어오면
  2. DispatcherServlet이 요청을 받아
  3. HandlerMapping이 요청을 처리할 적절한 Controller를 찾고 (URL과 매핑되는 Controller를 찾음)
  4. Controller가 비즈니스 로직을 처리한 후 Model 객체에 데이터를 담아 View에 전달하고
  5. ViewResolver를 통해 View를 찾아 응답 (Controller가 반환한 뷰 이름을 식제 View 객체로 변환한다)

위 순서로 동작한다고 보면된다.

최종적으로는 클라이언트에게 보여질 화면이 생성되고, Model 데이터를 사용하여 화면이 렌더링된다고 보면 된다.

 

요청 처리 시퀀스를 정리해보겠다.

Client -> DispatcherServlet -> HandlerMapping -> HandlerAdapter 
-> Controller -> Service -> Repository -> DB
-> Controller -> ViewResolver -> View -> Client

Spring Boot란?

Spring Boot를 처음 접했을 때 "이게 뭐가 다르지?"라는 의문이 들었다.

하지만 공부를 하면 할수록, Spring Boot가 얼마나 좋은 도구인지 깨닫게 되었다!

특징들을 알아볼까?

 

1. 자동 설정(Auto Configuration)

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

 

단 몇 줄의 코드로 애플리케이션이 실행된다!

@SpringBootApplication 어노테이션은 다음 세 가지 어노테이션을 포함한다.

  • @EnableAutoConfiguration: 자동 설정 활성화
  • @ComponentScan: 컴포넌트 스캔
  • @Configuration: 설정 클래스임을 명시

자동 설정의 예시는 아래와 같다!

// 데이터베이스 설정도 application.properties에서 간단히!
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=user
spring.datasource.password=password

// JPA 설정도 자동으로!
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

 

 

JPA란? 🤔

JPA는 개발자가 SQL을 직접 작성하는 대신 Java 객체를 통해 데이터베이스를 다룰 수 있게 해주는 ORM 기술로,

Hibernate를 기본 구현체로 사용하며 @Entity, @Repository 등의 어노테이션으로 객체-테이블 매핑을 자동화하고

findById(), save() 같은 메서드로 CRUD 작업을 단순화하는 기술이다.

2. 내장 서버

Spring Boot는 애플리케이션 서버가 내장되어 있어 별도의 설정이 필요 없다! (톰캣 없이도 실행 가능하다는 뜻!)

// 서버 포트 변경도 간단히
server.port=8080

// HTTPS 설정
server.ssl.key-store=classpath:keystore.jks
server.ssl.key-store-password=password

// 커스텀 설정도 가능
@Configuration
public class ServerConfig {
    @Bean
    public ConfigurableServletWebServerFactory webServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
        factory.setPort(9000);
        factory.addConnectorCustomizers(connector -> {
            // 커넥터 설정
        });
        return factory;
    }
}

3. starter 중속성

스프링 부트 스타터는 의존성 관리를 훨씬 편리하게 만들어준다.

<!-- 이 하나로 웹 개발에 필요한 모든 의존성이 포함됨 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

 

위 코드는 웹 애플리케이션 개발용 스타터의 예시이다.

 

주요 스타터를 살펴보자면

  • spring-boot-starter: 핵심 스타터, 자동 설정과 로깅 등 기본 기능
  • spring-boot-starter-web: 웹 애플리케이션 개발용 스타터
  • spring-boot-starter-data-jpa: JPA 사용을 위한 스타터
  • spring-boot-starter-security: 보안 기능을 위한 스타터
  • spring-boot-starter-test: 테스트를 위한 스타터

들이 있다!

 

스타터가 있기에 의존성 버전 관리가 자동으로 될 뿐만 아니라

필요한 모든 의존성과 호환성이 보장된 라이브러리 조합을 한 번에 추가하고 제공해준다.

프로젝트 설정 시간이 이로서 대폭 감소한다는 것을 체감할 수 있을것이다!!!

 

728x90

'Spring' 카테고리의 다른 글

[Spring] JdbcTemplate으로 데이터베이스 접근하기!  (1) 2025.01.20
[Spring] 🔎 DataSource와 트랜잭션 개념정리 🔎  (2) 2025.01.20
[Spring] Controller의 Return Type과 Parameter 가이드 👍  (1) 2025.01.20
[Spring] Spring Singleton Pattern과 주요 어노테이션 정리 ✅  (1) 2025.01.20
[Spring] POJO, IoC, DI, AOP, Filter 핵심 개념 완벽 정리 🧹  (2) 2025.01.19
'Spring' 카테고리의 다른 글
  • [Spring] 🔎 DataSource와 트랜잭션 개념정리 🔎
  • [Spring] Controller의 Return Type과 Parameter 가이드 👍
  • [Spring] Spring Singleton Pattern과 주요 어노테이션 정리 ✅
  • [Spring] POJO, IoC, DI, AOP, Filter 핵심 개념 완벽 정리 🧹
프론트 개발자 김현중
프론트 개발자 김현중
👋반갑습니다 저는 나눔을 실천하는 개발자 꿈나무 김현중입니다⌨️🚀
  • 프론트 개발자 김현중
    삥구의 개발블로그
    프론트 개발자 김현중
  • 전체
    오늘
    어제
    • 분류 전체보기 (92)
      • 알고리즘 (5)
      • Swift (3)
      • 컴퓨터네트워크 (1)
      • React (38)
      • Docker (1)
      • SQL (8)
      • Database (2)
      • 배포 (1)
      • Spring (9)
      • TypeScript (5)
      • Next.js (12)
      • Git (1)
      • 회고 (1)
      • 컴퓨터그래픽스 (2)
      • Python (1)
      • Brew (1)
      • LangChain (1)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    Spring
    MySQL
    백준
    java
    database
    알고리즘
    ReactHooks
    typescript
    Backend
    Next.js
    springboot
    react
    코딩테스트
    appRouter
    nextjs
    javascript
    데이터베이스
    frontend
    프론트엔드
    웹개발
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.1
프론트 개발자 김현중
[Spring] ⚡️ Spring MVC와 Spring Boot 개념 정리 ⚡️
상단으로

티스토리툴바