마트철수
[062] 스프링 MVC의 Controller 본문
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)

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



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

@RequiredArgsConstructor → 생성자 1개,
@AllArgsConstructor → 위 Required~ 생성자와는 다름
Spring의 의존성 주입에 대해 배움
CH03.1 스프링 MVC의 기본 구조
스프링 MVC 프로젝트의 내부 구조
- 프로젝트 구조: ServletCongib.class와 RootConfig.class 2개가 만들어짐

- 모델 2

- 스프링 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 수정


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;
'KB IT's Your Life > 교육' 카테고리의 다른 글
| [064] MyBatis와 스프링 연동 + CRUD 연동 (0) | 2024.08.07 |
|---|---|
| [063] MyBatis와 스프링 연동 !! (0) | 2024.08.06 |
| [061] 알고리즘: 백트래킹 (1) | 2024.08.02 |
| [060] FrontController 그리고 Spring 시작 (1) | 2024.08.01 |
| [059] EL과 JSTL (0) | 2024.07.31 |