마트철수

[062] 스프링 MVC의 Controller 본문

KB IT's Your Life/교육

[062] 스프링 MVC의 Controller

마트스 2024. 8. 5. 17:47

 

2024.08.05(월)
 
Spring 2일차

Spring의 이론적 구조를 본 후,

실제 사용되는 것을 구현해볼 예정이다.

 

03.2 스프링 MVC의 Controller 부분이

제일 중요하다고 하셨다!

 

Spring 생각보다 만만치 않다 ..

 


 

Spring


 

PART01 00

  • CH02. 스프링의 특징과 의존성 주입
  • CH03.1 스프링 MVC의 기본 구조
  • CH03.2 스프링 MVC의 Controller 1

CH02. 스프링의 특징과 의존성 주입

 

스프링 프레임워크의 간략한 역사

  • 경량 프레임워크(light-weight Framework)

경량 프레임워크(light-weight Framework) 출처: 한빛미디어

  • 스프링의 주요 특징
    • POJO(Plain Old Java Object) 기반의 구성
      # 상속이나 인터페이스 구현을 강제화하지 않는다
    • 의존성 주입 (★)
      # 필요한 객체가 있으면 제시만 하자! 조립은 Spring이 한다.
    • AOP 지원
    • 편리한 MVC
    • WAS에 종속적이지 않은 개발 환경

의존성 주입 테스트

  • Chef.java
    @Component를 통해 Bean 객체 등록
package org.scoula.controller;

import org.springframework.stereotype.Component;

@Component // Bean 객체 등록
public class Chef {
}

 

  • Restaurant.java
    reflaction 기능을 사용해서 private 객체에도 접근 가능(setter 없어도)
package org.scoula.controller;

import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
@Data
public class Restaurant {
    @Autowired
    private Chef chef;
}

 

  • RootConfig.java
    @ComponentScan(basePackages = {"org.scoula"}) 코드로 등록
package org.scoula.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

// @Configuration: 설정
@Configuration
@ComponentScan(basePackages = {"org.scoula"})
public class RootConfig {
}

 

  • Test

위와 같이 Restaurant Test 생성

 

위와 같은 Test 결과가 나와야함

 

※ 주의사항: project 만들때마다 annotaion을 ON해야함

 

@RequiredArgsConstructor → 생성자 1개, 
@AllArgsConstructor → 위 Required~ 생성자와는 다름


Spring의 의존성 주입에 대해 배움

 

CH03.1 스프링 MVC의 기본 구조

 

스프링 MVC 프로젝트의 내부 구조

  • 프로젝트 구조: ServletCongib.class와 RootConfig.class 2개가 만들어짐

 

  • 모델 2

Controller는 FrontController 임

 

  • 스프링 MVC → 해당 이미지 확인하기
    (2) url 물어보면
    (3.1) Handler Mapping에서 Controller 메서드를 알려줌
    (3.2) Handler Adapter (★) → getRequestParameter()로 DTO 객체 생성
    (4) B,L 그리고 결과를 스코프에 저장

 

  • Spring MVC 라이프 사이클
    보라색, View 파트만 신경쓰면 됨

 

 

 

 

CH03.2 스프링의 MVC의 Controller

 

  • 기본세팅 3개(settions.gradle → setting의 annotaion → tomcat 설정)
  • log4j.xml debug 수정

Spring 기본 준비 과정(세팅)

 

Controller의 파라미터 수집

  • 요청의 쿼리 파라미터 수집
  • request.getParameter()를 대체

SampleController.java

  • DTO 기본생성자 생성
  • property 설정해서 setter 호출
  • 파라미터를 추출
  • setter를 이용해 DTO의 프로퍼티 설정

리스트 배열 처리

  • 동일한 이름의 파라미터가 여러 개 전달되는 경우
  • ArrayList<>나 배열 사용

객체 리스트

  • 객체 리스트를 쿼리 파라미터로 받기

@DateTimeFormat

  • 커스텀 바인딩이 가장 많이 사용되는 타입 → Date
  • DTO 객체의 Date 타입 필드에 @DateTimeFormat을 지정
package org.scoula.dto;

import lombok.Data;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;

@Data
public class TodoDTO {
    private String title;

    @DateTimeFormat(pattern = "yyyy/MM/dd")
    private Date dueDate;
}

 

작업하기 쉬운 형태로 제작할 때..

1) DTO 객체 제시 → View로 전달 / 추가 작업 필요 없음

2) @RequestParam() → View로 작업 불가

 

변수명이 달라지면 @RequestParam() 필수로 넣어야 하지만,

변수명이 동일하면 위 파라미터는 생략 가능

 

실습

 

  • 기본 코드
// @Configuration: 설정
@Configuration
@Data // 기본생성자, Getter+Setter
// @RequiredArgsConstructor // final이 붙은 필드를 무조건 생성자에 넣겠다
public class Restaurant {
    // Chef가 빈으로 등록되어있어야 함
    @Autowired // 외부에서 의존성 주입해서 자동 연결하겠다
    private Chef chef;