[Spring] 기본

박원준·2026년 2월 11일

Spring 입문

목록 보기
1/3

1️⃣ MVC 디자인 패턴

MVC(Model-View-Controller)는 소프트웨어 디자인 패턴 중 하나로,\
애플리케이션을 Model, View, Controller로 분리하여 역할을 나누는
구조입니다.

🔹 Model

  • 데이터 및 비즈니스 로직 담당
  • DB 연동
  • 핵심 로직 처리

🔹 View

  • 사용자 인터페이스(UI)
  • HTML, JSP, Thymeleaf 등

🔹 Controller

  • 사용자 요청 처리
  • Model과 View 연결
  • 요청 → 처리 → 응답 흐름 제어

✅ MVC 장점

  • 관심사 분리 (Separation of Concerns)
  • 유지보수성 향상
  • 테스트 용이
  • 협업 효율 증가

2️⃣ Spring MVC란?

Spring Web MVC는 Servlet API 기반 웹 프레임워크입니다.\
중앙에서 모든 요청을 처리하는 DispatcherServlet을 사용합니다.

→ Front Controller 패턴 적용

공식 문서 요약:\
DispatcherServlet이 중앙에서 HTTP 요청을 처리하며, Front Controller
패턴으로 설계됨.


3️⃣ Servlet 동작 과정

Servlet(서블릿) 은 자바를 사용하여 웹 페이지를 동적으로 생성하는 서버 측 프로그램 혹은 그 사양을 말합니다.

  1. Client가 HTTP 요청 전송
  2. Servlet 컨테이너가 HttpServletRequest / HttpServletResponse 생성
  3. 매핑된 Servlet 탐색
  4. service() 호출
  5. doGet() / doPost() 실행
  6. 응답 반환 후 객체 소멸

❗ 문제점: API마다 Servlet 클래스를 생성해야 함 → 비효율


4️⃣ DispatcherServlet (Front Controller 흐름)

  1. Client 요청 수신
  2. HandlerMapping → Controller 탐색
  3. Controller 실행
  4. Model & View 반환
  5. ViewResolver 처리
  6. 최종 View를 Client에 응답

📌 Handler Mapping 예시

GET /api/hello → HelloController.hello()\
GET /user/login → UserController.login()\
POST /user/signup → UserController.registerUser()


5️⃣ Controller 이해하기

Servlet 방식 예시

@WebServlet(urlPatterns = "/user/login")
public class UserLoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) {
        // ...
    }
}

API마다 클래스 필요 → 관리 어려움


Spring Controller 방식

@Controller
@RequestMapping("/user")
public class UserController {

    @GetMapping("/login")
    public String login() { }

    @GetMapping("/logout")
    public String logout() { }

    @GetMapping("/signup")
    public String signup() { }

    @PostMapping("/signup")
    public String registerUser(SignupRequestDto requestDto) { }
}

✔ 하나의 Controller에서 관련 API 관리 가능\
✔ 메서드 이름 자유롭게 설정 가능


6️⃣ HTTP Method 매핑 애너테이션

GET

@GetMapping("/api/get")
@ResponseBody
public String get() {
    return "GET Method 요청";
}

POST

@PostMapping("/api/post")
@ResponseBody
public String post() {
    return "POST Method 요청";
}

PUT

@PutMapping("/api/put")
@ResponseBody
public String put() {
    return "PUT Method 요청";
}

DELETE

@DeleteMapping("/api/delete")
@ResponseBody
public String delete() {
    return "DELETE Method 요청";
}

7️⃣ @RequestMapping

공통 URL 경로를 묶어 중복 제거

@Controller
@RequestMapping("/api")
public class HelloController {

    @GetMapping("/hello")
    @ResponseBody
    public String hello() {
        return "Hello World!";
    }
}

8️⃣ 정적 페이지 처리 (Static)

📁 위치\
resources/static/hello.html

🌐 접속\
http://localhost:8080/hello.html

Spring Boot는 static 폴더의 파일을 자동 반환합니다.

Controller를 통한 반환

@GetMapping("/static-hello")
public String hello() {
    return "hello.html";
}

⚠ thymeleaf dependency가 있으면 templates 경로를 먼저 찾음


Redirect 방식

@GetMapping("/html/redirect")
public String htmlStatic() {
    return "redirect:/hello.html";
}

redirect: 접두어 → 클라이언트 재요청 발생


9️⃣ Template Engine (Thymeleaf)

기본 설정

prefix: classpath:/templates/\
suffix: .html

@GetMapping("/html/templates")
public String htmlTemplates() {
    return "hello";
}

→ resources/templates/hello.html 반환


🔟 동적 페이지 처리

private static long visitCount = 0;

@GetMapping("/html/dynamic")
public String htmlDynamic(Model model) {
    visitCount++;
    model.addAttribute("visits", visitCount);
    return "hello-visit";
}

hello-visit.html

<div>
  (방문자 수: <span th:text="${visits}"></span>)
</div>

🔄 동적 처리 흐름

  1. Controller에서 Model 데이터 저장
  2. Template Engine이 Model 적용
  3. 동적 HTML 생성
  4. Client 응답

1️⃣1️⃣ Static vs Dynamic 비교

구분 Static Dynamic


위치 static templates
Controller 필요 ❌ ✅
데이터 바인딩 불가 가능


✅ 최종 정리

  • MVC는 역할 분리 패턴
  • Spring MVC는 Servlet 기반 프레임워크
  • DispatcherServlet이 모든 요청을 중앙 처리
  • HTTP Method별 매핑 애너테이션 제공
  • @RequestMapping으로 URL 관리 가능
  • static은 정적 리소스 자동 반환
  • templates는 동적 페이지 처리
  • Model을 통해 View에 데이터 전달
  • Front Controller 패턴으로 확장성과 유지보수성 확보

0개의 댓글