Spring으로 개발을 하다 보면 DTO 또는 객체를 검증해야 하는 경우가 있다. 객체의 검증을 손쉽게 하는 방법 @Valid, @Vaildated 에 대해 알아보자! 


1. @Valid를 이용한 유효성 검증

① @Valid의 개념 및 사용법

  • @Valid는 JSR-303 표준 스펙(자바 진영 스펙)으로써 빈 검증기(Bean Validator)를 이용해 객체의 제약 조건을 검증하도록 지시하는 어노테이션이다. JSR 표준의 빈 검증 기술의 특징은 객체의 필드에 달린 어노테이션으로 편리하게 검증을 한다는 것이다.
  • Spring에서는 일종의 어댑터인 LocalValidatorFactoryBean가 제약 조건 검증을 처리한다. 이를 이용하려면 LocalValidatorFactoryBean을 빈으로 등록해야 하는데, SpringBoot에서는 아래의 의존성만 추가해주면 해당 기능들이 자동 설정된다.

 

② @Valid의 동작 원리

  • 모든 요청은 프론트 컨트롤러인 디스패처 서블릿을 통해 컨트롤러로 전달된다. 전달 과정에서는 컨트롤러 메소드의 객체를 만들어주는 ArgumentResolver가 동작하는데, @Valid 역시 ArgumentResolver에 의해 처리가 된다.
  • 대표적으로 @RequestBody는 Json 메세지를 객체로 변환해주는 작업이 ArgumentResolver의 구현체인  RequestResponseBodyMethodProcessor가 처리하며, 이 내부에서 @Valid로 시작하는 어노테이션이 있을 경우에 유효성 검사를 진행한다. (이러한 이유로 @Valid가 아니라 커스톰 어노테이션인 @ValidMangKyu여도 동작한다.) 
  • 만약 @ModelAttribute를 사용중이라면 ModelAttributeMethodProcessor에 의해 @Valid가 처리된다.그리고 검증에 오류가 있다면 MethodArgumentNotValidException 예외가 발생하게 되고, 디스패처 서블릿에 기본으로 등록된 예외 리졸버(Exception Resolver)인 DefaultHandlerExceptionResolver에 의해 400 BadRequest 에러가 발생한다.
  • 이러한 이유로 @Valid는 기본적으로 컨트롤러에서만 동작하며 기본적으로 다른 계층에서는 검증이 되지 않는다. 다른 계층에서 파라미터를 검증하기 위해서는 @Validated와 결합되어야 한다.

 

 

2. @Validated를 이용한 유효성 검증

① @Validated의 개념 및 사용법

  • 입력 파라미터의 유효성 검증은 컨트롤러에서 최대한 처리하고 넘겨주는 것이 좋다. 하지만 개발을 하다보면 불가피하게 다른 곳에서 파라미터를 검증해야 할 수 있다. Spring에서는 이를 위해 AOP 기반으로 메소드의 요청을 가로채서 유효성 검증을 진행해주는 @Validated를 제공하고 있다. @Validated는 JSR 표준 기술이 아니며 Spring 프레임워크에서 제공하는 어노테이션 및 기능이다.
  • 클래스에 @Validated를 붙여주고, 유효성을 검증할 메소드의 파라미터에 @Valid를 붙여주면 유효성 검증이 진행된다.

 

② @Validated의 동작 원리

  • 특정 ArgumnetResolver에 의해 유효성 검사가 진행되었던 @Valid와 달리, @Validated는 AOP 기반으로 메소드 요청을 인터셉터하여 처리된다. @Validated를 클래스 레벨에 선언하면 해당 클래스에 유효성 검증을 위한 AOP의 어드바이스 또는 인터셉터(MethodValidationInterceptor)가 등록된다. 그리고 해당 클래스의 메소드들이 호출될 때 AOP의 포인트 컷으로써 요청을 가로채서 유효성 검증을 진행한다.
  • 이러한 이유로 @Validated를 사용하면 컨트롤러, 서비스, 레포지토리 등 계층에 무관하게 스프링 빈이라면 유효성 검증을 진행할 수 있다. 대신 클래스에는 유효성 검증 AOP가 적용되도록 @Validated를, 검증을 진행할 메소드에는 @Valid를 선언해주어야 한다.
  • 이러한 이유로 @Valid에 의한 예외는 MethodArgumentNotValidException이며, @Validated에 의한 예외는  ConstraintViolationException이다. 이를 알고 있으면 나중에 예외 처리를 할 때 도움이 된다.

 

 

 


참고 자료 : https://mangkyu.tistory.com/174

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

[15] JPA (2) 심화  (0) 2022.12.07
[14] JPA (1)  (0) 2022.12.06
[12] 정규식(regex, rational expression)  (0) 2022.12.06
[11] Database 와 SQL  (0) 2022.12.06
[10] Spring Boot 어노테이션 정리  (0) 2022.12.06
  • 로그인 회원가입에 여러가지 조건을 넣으면서 정규식 표현을 사용하게 되었다.
  • 여러 블로그 자료는 많은데, 다들 사용법이 다 달라서 한번 정리해보려 작성하는 글 : ) 

정규식이란?

  • 정규식(正規式)은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다. 
  • 정규 표현식은 많은 텍스트 편집기와 프로그래밍 언어에서 문자열의 검색과 치환을 위해 지원하고 있다.
  • 검색 엔진, 워드 프로세서와 문서 편집기의 찾아 바꾸기 대화상자, 그리고 sed, AWK와 같은 문자 처리 유틸리티, 어휘 분석에 사용된다.
  • 정규 표현식이라는 문구는 일치하는 텍스트가 준수해야 하는 "패턴"을 표현하기 위해 특정한 표준의 텍스트 신택스를 의미하기 위해 사용된다. 
  • 정규 표현식은 유효성 검사 코드 작성 시 가장 효율적인 방법이다.

 

사용규칙

 

문자 클래스, "["와 "]" 사이에 포함된 문자 집합 외부에서는 12개의 문자가, 내부에서는 오직 4개의 문자("\", "^", "-", "]", 자바 닷넷은 "["를 포함)만 특수문자를 의미한다. 아래는 POSIX 기본 및 확장 표준의 문법이다.

 

POSIX 확장 문법

 

문자 클래스

 

 

 

자주 쓰는 정규 표현식

 

https://hbase.tistory.com/160

 

정규식 사용법 및 사용예

  • 정규 표현식을 작성하는 방법은 자바 API java.util.regex 패키지를 사용해야 한다.
  • 자바에서 정규표현식을 사용할때에는 java.util.regex 패키지 안에 있는 Pattern클래스와 Matcher클래스를 주로 사용한다.

① Pattern 클래스

  • 정규 표현식에 대상 문자열을 검증하는 기능은  matches()메소드를 활용하여 검증할 수 있다. 
  • matches() 메서드의 첫번째 매개값은 정규표현식이고 두번째 매개값은 검증 대상 문자열이다.
  • 검증 후 대상문자열이 정규표현식과 일치하면 true, 그렇지 않다면 false값을 리턴한다.

 

Pattern 클래스 주요 메서드
compile(String regex) : 주어진 정규표현식으로부터 패턴을 만듭니다.
matcher(CharSequence input) : 대상 문자열이 패턴과 일치할 경우 true를 반환합니다.
asPredicate() : 문자열을 일치시키는 데 사용할 수있는 술어를 작성합니다.
pattern() : 컴파일된 정규표현식을 String 형태로 반환합니다.
split(CharSequence input) : 문자열을 주어진 인자값 CharSequence 패턴에 따라 분리합니다.

Parttern 플래그 값 사용(상수)
Pattern.CANON_EQ : None표준화된 매칭 모드를 활성화합니다.
Pattern.CASE_INSENSITIVE : 대소문자를 구분하지 않습니다. 
Pattern.COMMENTS : 공백과 #으로 시작하는 주석이 무시됩니다. (라인의 끝까지).
Pattern.MULTILINE : 수식 ‘^’ 는 라인의 시작과, ‘$’ 는 라인의 끝과 match 됩니다.
Pattern.DOTALL : 수식 ‘.’과 모든 문자와 match 되고 ‘\n’ 도 match 에 포함됩니다.
Pattern.UNICODE_CASE : 유니코드를 기준으로 대소문자 구분 없이 match 시킵니다.
Pattert.UNIX_LINES : 수식 ‘.’ 과 ‘^’ 및 ‘$’의 match시에 한 라인의 끝을 의미하는 ‘\n’만 인식됩니다.

 

 

② Matcher 클래스

  • Matcher 클래스는 대상 문자열의 패턴을 해석하고 주어진 패턴과 일치하는지 판별할 때 주로 사용된다.
  • Matcher 클래스의 입력값으로는 CharSequence라는 새로운 인터페이스가 사용되는데 이를 통해 다양한 형태의 입력 데이터로부터 문자 단위의 매칭 기능을 지원 받을 수 있다.
  • Matcher객체는 Pattern객체의 matcher() 메소드를 호출하여 받아올 수 있다.

 

Matcher 클래스 주요 메서드


matches() : 대상 문자열과 패턴이 일치할 경우 true 반환합니다.
find() : 대상 문자열과 패턴이 일치하는 경우 true를 반환하고, 그 위치로 이동합니다.
find(int start) : start위치 이후부터 매칭검색을 수행합니다.
start() : 매칭되는 문자열 시작위치 반환합니다.
start(int group) : 지정된 그룹이 매칭되는 시작위치 반환합니다.
end() : 매칭되는  문자열 끝 다음 문자위치 반환합니다.
end(int group) : 지정되 그룹이 매칭되는 끝 다음 문자위치 반환합니다.
group() : 매칭된 부분을 반환합니다.
group(int group) : 매칭된 부분중 group번 그룹핑 매칭부분 반환합니다. 
groupCount() : 패턴내 그룹핑한(괄호지정) 전체 갯수를 반환합니다.

 

 

 

③ 회원가입 구현 시 사용한 정규식 방법

 

1. build.gradle 코드 추가

 

2. RequestDto

@Size 어노테이션과 @Pattern 어노테이션이 사용되었다.

 

 

3. Contoller 

@Valid 어노테이션이 사용되었다.

@Valid 어노테이션 또한 유효성 검증과 관련이 있는데, 다음 게시물에서 정리하는 걸로 ! 

 

 


참고 자료:

https://coding-factory.tistory.com/529

https://ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C_%ED%91%9C%ED%98%84%EC%8B%9D

https://hbase.tistory.com/160

 

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

[14] JPA (1)  (0) 2022.12.06
[13] @Valid, @Validated (작성중. 수정필요)  (0) 2022.12.06
[11] Database 와 SQL  (0) 2022.12.06
[10] Spring Boot 어노테이션 정리  (0) 2022.12.06
[09] 스프링 MVC 이해  (0) 2022.12.04

Database

  • Database를 한 마디로 정의하면 ‘데이터의 집합’ 이라고 할 수 있습니다.
  • DB는 우리가 매일 사용하는 카톡 메시지, 인스타그램의 사진등의 정보를 저장하고 관리해 줍니다.

 

① DBMS

  • DBMS 는 ‘Database Management System’ 의 약자로 Database를 관리하고 운영하는 소프트웨어를 의미합니다.

② RDBMS

  • RDBMS는 ‘Relational DBMS’의 약자로 관계형 데이터베이스라고 불립니다.
  • RDBMS는 테이블(table)이라는 최소 단위로 구성되며, 이 테이블은 열(column)과 행(row)으로 이루어져 있습니다.
  • RDBMS의 종류 : 각 제품 간 차이가 크지 않아서 사실 어떤 걸 사용하든 좋습니다. 유료인 Oracle을 제외하고 보통 MySQL, PostgreSQL 중에서 많이 고르는 편입니다.

 

 

SQL

  • SQL은 ‘Structured Query Language’ 의 약자로 RDBMS에서 사용되는 언어입니다.
  • 수 많은 정보를 Database에서 조작하고 관리하기 위해서는 SQL 언어를 사용해야합니다.
  • 국제표준화기구에서 SQL에 대한 표준을 정해서 발표하고 있습니다.
  • 하지만, DBMS를 만드는 회사가 여러 곳이기 때문에 DBMS 마다 표준 SQL을 준수하되, 각 제품의 특성을 반영하기 위한 약간의 차이가 존재합니다. 

① DDL

Data Definition Language’ 의 약자로 테이블이나 관계의 구조를 생성하는데 사용합니다

 

  • CREATE : 새로운 데이터베이스 및 테이블을 생성해 줍니다.

 

 

  • ALTER : 데이터베이스와 테이블의 내용을 수정할 수 있습니다.

  • DROP : 데이터베이스와 테이블을 삭제할 수 있습니다. 데이터 및 테이블 전체를 삭제합니다.

  • TRUNCATE : 데이터베이스와 테이블을 삭제할 수 있습니다. 최초 테이블이 만들어졌던 상태 즉, 컬럼값만 남깁니다.


② DCL

 ‘Data Control Language’ 의 약자로 데이터의 사용 권한을 관리하는데 사용합니다.

 

  • GRANT : 사용자 또는 ROLE에 대해 권한을 부여할 수 있습니다. 

  • REVOKE : 사용자 또는 ROLE에 부여한 권한을 회수할 수 있습니다.


③ DML

 ‘Data Manipulation Language’ 의 약자로 테이블에 데이터를 검색, 삽입, 수정, 삭제하는데 사용합니다.

 

  • INSERT : 테이블에 새로운 row를 추가할 수 있습니다.

  • SELECT : 테이블의 row를 선택할 수 있습니다.

  • UPDATE : 테이블의 row의 내용을 수정할 수 있습니다.

  • DELETE : 테이블의 row를 삭제할 수 있습니다.

 

 

PRIMARY KEY vs FOREIGN KEY

 


참고 자료 :

스파르타 코딩클럽 스프링 입문주차 강의

https://teamsparta.notion.site/Database-SQL-c1399284be2f4638bce8d38f8d2c71ed

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

[13] @Valid, @Validated (작성중. 수정필요)  (0) 2022.12.06
[12] 정규식(regex, rational expression)  (0) 2022.12.06
[10] Spring Boot 어노테이션 정리  (0) 2022.12.06
[09] 스프링 MVC 이해  (0) 2022.12.04
[08] 웹 동작방식  (0) 2022.12.04

Annotation이란?

  • 사전적 의미로는 주석이라는 뜻이다.
  • 자바에서 Annotation은 코드 사이에 주석처럼 쓰이며 특별한 의미, 기능을 수행하도록 하는 기술이다.
  • 프로그램에게 추가적인 정보를 제공해주는 메타데이터라고 볼 수 있다

 

Anotation 제약조건
@ComponentScan
  • @Component와 @Service, @Repository, @Controller, @Configuration이 붙은 클래스 Bean들을 찾아서 Context에 bean등록을 해주는 Annotation이다.
  • @Component Annotation이 있는 클래스에 대하여 bean 인스턴스를 생성
  • Spring에서 @Component로 다 쓰지 않고 @Repository, @Service, @Controller등을 사용하는 이유는, 예를들어 @Repository는 DAO의 메소드에서 발생할 수 있는 unchecked exception들을 스프링의 DataAccessException으로 처리할 수 있기 때문이다.
@Component
  • @Component 은 개발자가 직접 작성한 Class를 Bean으로 등록하기 위한 Annotation이다.
  • Component에 대한 추가 정보가 없다면 Class의 이름을 camelCase로 변경한 것이 Bean id로 사용된다.
  • @Component는 @Bean과 다르게 name이 아닌 value를 이용해 Bean의 이름을 지정한다.
@Bean
  • @Bean은 개발자가 직접 제어가 불가능한 외부 라이브러리등을 Bean으로 만들려할 때 사용되는 Annotation이다.
@Autowired
  • 무조건적인 객체에 대한 의존성을 주입시킨다.
  • @Autowired를 사용할 시, 스프링이 자동적으로 값을 할당한다.
  • Controller 클래스에서 DAO나 Service에 관한 객체들을 주입 시킬 때 많이 사용한다.
@Controller
  • Spring MVC에서 Controller클래스에 쓰인다.
  • Spring의 Controller를 의미한다.
@RestController
  • Spring에서 Controller 중 View로 응답하지 않는, Controller를 의미한다.
  • method의 반환 결과를 JSON 형태로 반환한다.
  • 이 Annotation이 적혀있는 Controller의 method는 HttpResponse로 바로 응답이 가능하다.
  • @ResponseBody 역할을 자동적으로 해주는 Annotation이다.
  • @Controller + @ResponseBody를 사용하면 @ResponseBody를 모든 메소드에서 적용한다.

@Controller 와 @RestController 의 차이

@Controller
API와 view를 동시에 사용하는 경우에 사용한다.
대신 API 서비스로 사용하는 경우는 @ResponseBody를 사용하여 객체를 반환한다.
view(화면) return이 주목적이다.

@RestController
view가 필요없는 API만 지원하는 서비스에서 사용한다.
Spring 4.0.1부터 제공
@RequestMapping 메서드가 기본적으로 @ResponseBody 의미를 가정한다.
data(json, xml 등) return이 주목적이다.
즉 @RestController = @Controller + @ResponseBody 이다.

@Service
  • 비즈니스 로직을 수행하는 Class라는 것을 나타내는 용도이다.
@Repository
  • DataBase에 접근하는 method를 가지고 있는 Class에서 쓰인다.
@SpringBootApplication
  • @Configuration, @EnableAutoConfiguration, @ComponentScan 3가지를 하나의 애노테이션으로 합친 것이다.
@RequestMapping
  • 요청 URL을 어떤 method가 처리할지 mapping해주는 Annotation이다.
  • Controller나 Controller의 method에 적용한다.
  • 요청을 받는 형식인 GET, POST, PATCH, PUT, DELETE 를 정의하기도 한다.
  • 요청 받는 형식을 정의하지 않는다면, 자동적으로 GET으로 설정된다.
@GetMapping
  • @RequestMapping(Method=RequestMethod.GET)과 같다.
  • @PostMapping, @PutMapping, @PatchMapping, @DeleteMapping 등 도 있다.
@Valid
  • 유효성 검증이 필요한 객체임을 지정한다.
@RequestAttribute
  • Request에 설정되어 있는 속성 값을 가져올 수 있다.
@RequestBody
  • 요청이 온 데이터(JSON이나 XML형식)를 바로 Class나 model로 매핑하기 위한 Annotation이다.
@RequestHeader
  • Request의 header값을 가져올 수 있다. 메소드의 파라미터에 사용한다.
@RequestParam
  • url 뒤에 붙는 parameter 값을 가져올 때 사용한다.
  • ?moviename=thepurge 와 같은 쿼리 파라미터를 파싱해준다.
@ResponseBody
  • HttpMessageConverter를 이용하여 JSON 혹은 xml 로 요청에 응답할수 있게 해주는 Annotation이다.
@PathVariable

  • method parameter 앞에 사용하면서 해당 URL에서 {특정값}을 변수로 받아 올 수 있다.
  • REST API에서 값을 호출할 때 주로 많이 사용한다.

 

Lombok Annotation

Anotation 제약조건
@NoArgsConstructor
  • 기본생성자를 자동으로 추가한다.
  • Entity Class를 프로젝트 코드상에서 기본생성자로 생성하는 것은 금지하고, JPA에서 Entity 클래스를 생성하는것은 허용하기 위해 추가한다.
@AllArgsConstructor
  • 모든 필드 값을 파라미터로 받는 생성자를 추가한다.
@RequiredArgsConstructor
  • final이나 @NonNull인 필드 값만 파라미터로 받는 생성자를 추가한다.
@Getter
  • Class 내 모든 필드의 Getter method를 자동 생성한다.
@Setter
  • Class 내 모든 필드의 Setter method를 자동 생성한다.
  • Controller에서 @RequestBody로 외부에서 데이터를 받는 경우엔 기본생성자 + set method를 통해서만 값이 할당된다.
  • 그래서 이때만 setter를 허용한다.
  • Entity Class에는 Setter를 설정하면 안된다.
  • 차라리 DTO 클래스를 생성해서 DTO 타입으로 받도록 하자
@Builder
  • 빌더에 포함된다.

 

JPA Annotation

  • JPA를 사용하면 DB 데이터에 작업할 경우 실제 쿼리를 사용하지 않고 Entity 클래스의 수정을 통해 작업한다
Anotation 제약조건
@Entity
  • 실제 DB의 테이블과 매칭될 Class임을 명시한다.
@Table
  • Entity Class에 매핑할 테이블 정보를 알려준다.
@Id
  • 해당 테이블의 PK 필드를 나타낸다.
@GeneratedValue
  • PK의 생성 규칙을 나타낸다.
  • 가능한 Entity의 PK는 Long 타입의 Auto_increment를 추천
  • 스프링 부트 2.0에선 옵션을 추가하셔야만 auto_increment가 된다.
  • 기본값은 AUTO로, MySQL의 auto_increment와 같이 자동 증가하는 정수형 값이 된다.
@Column
   테이블의 컬럼을 나타내며, 굳이 선언하지 않더라도 해당 Class의 필드는 모두 컬럼이 된다.

  • @Column을 생략하면 필드명을 사용해서 컬럼명과 매핑
  • @Column을 사용하는 이유는, 기본값 외에 추가로 변경이 필요한 옵션이 있을 경우 사용한다.
  • 문자열의 경우 VARCHAR(255)가 기본값인데, 사이즈를 500으로 늘리고 싶거나(ex: title),
    타입을 TEXT로 변경하고 싶거나(ex: content) 등의 경우에 사용

 

Validation Annotation ( @Valid)

Anotation 제약조건
@NotNull Null 불가
@Null Null만 입력 가능
@NotEmpty Null, 빈 문자열 불가
@NotBlank Null, 빈 문자열, 스페이스만 있는 문자열 불가
@Size(min=,max=) 문자열, 배열등의 크기가 만족하는가?
@Pattern(regex=) 정규식을 만족하는가?
@Max(숫자) 지정 값 이하인가?
@Min(숫자) 지정 값 이상인가
@Future 현재 보다 미래인가?
@Past 현재 보다 과거인가?
@Positive 양수만 가능
@PositiveOrZero 양수와 0만 가능
@Negative 음수만 가능
@NegativeOrZero 음수와 0만 가능
@Email 이메일 형식만 가능
@Digits(integer=, fraction = ) 대상 수가 지정된 정수와 소수 자리 수 보다 작은가?
@DecimalMax(value=)  지정된 값(실수) 이하인가?
@DecimalMin(value=) 지정된 값(실수) 이상인가?
@AssertFalse false 인가?
@AssertTrue true 인가?

 

 


참고자료:

https://velog.io/@ruinak_4127/Annotation%EC%9D%B4%EB%9E%80

 

@ Annotation이란?

@Annotation, @Reflection, @Lombok Annotation, @JPA Annotation

velog.io

https://bamdule.tistory.com/35

 

[Spring Boot] @Valid 어노테이션으로 Parameter 검증하기

java.validation의 @Valid 어노테이션 사용법 정리 글입니다. Spring Boot 라이브러리에서 기본적으로 탑재된 기능이며 따로 dependency해 줄 필요가 없습니다. Spring Boot Version은 2.2.2.RELEASE 입니다. 1. java.valid

bamdule.tistory.com

 

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

[12] 정규식(regex, rational expression)  (0) 2022.12.06
[11] Database 와 SQL  (0) 2022.12.06
[09] 스프링 MVC 이해  (0) 2022.12.04
[08] 웹 동작방식  (0) 2022.12.04
[07] 항해99 주특기 입문 1주차 - 주특기 시험 (API 구현)  (3) 2022.12.01

스프링 MVC 이해 - Response

스프링 MVC : MVC (Model - View - Controller) 디자인 패턴

  • View: 동적 HTML 파일
  • Model: View 에 적용할 정보들

 

Server 에서 HTML 을 내려 주는 경우

 

① 정적 (static) 웹 페이지

 

 

  • Controller
    • Client 의 요청을 Model 로 받아 처리
    • 예) 회원가입을 위한 개인 정보들 (id, password, name)
    • Client 에게 View (정적 웹 페이지, HTML) 를 내려줌

 

② 동적 (dynamic) 웹 페이지

 

  • Controller
    • Client 의 요청을 Model 로 받아 처리
    • Template engine 에게 View, Model 전달
    • Template engine
      • View 에 Model 을 적용 → 동적 웹페이지 생성 ,
      • 예) 로그인 성공 시, "로그인된 사용자의 id" 를 페이지에 추가
    • Template engine 종류: 타임리프 (Thymeleaf), Groovy, FreeMarker, Jade 등 (스프링에서 JSP 이용은 추천하지 않고 있음)
    • Client 에게 View (동적 웹 페이지, HTML) 를 내려줌

 

 

Controller 와 HTTP Response 메시지

 

 

@Controller

 

@Controller 는 스프링 서버 개발자 입장에서는 시작점과 끝점으로 보이지만, 사실 스프링이 뒤에서 많은 부분을 보이지 않게 처리한다.

 

 

① Client → DispatcherServlet

  1. 가장 앞 단에서 요청을 받아 FrontController 라고도 불림

② DispatcherServlet → Controller

  • API 를 처리해 줄 Controller 를 찾아 요청을 전달
  • Handler mapping 에는 API path 와 Controller 함수가 매칭되어 있음

③ Controller → DispathcerServlet

  1. Controller 가 Client 으로 받은 API 요청을 처리
  2. 'Model' 정보와 'View' 정보를 DispatcherServlet 으로 전달

④ DispatcherServlet → Client

  1. ViewResolver 통해 View 에 Model 을 적용
  2. View 를 Client 에게 응답으로 전달

 

스프링 MVC 이해 - Request

< Controller 와 HTTP Request 메시지 >

 


자료 출처 : 스파르타 코딩클럽 - 스프링 숙련주차 강의자료

+ Recent posts