본문 바로가기
부트캠프/코드스테이츠 백엔드부트캠프 43기

코드스테이츠 백엔드 부트캠프 43기 (SpringMVC - DTO - API 계층)

by 고구마는호박고구마 2023. 2. 14.

 

DTO, 유효성 검증

dto 를 설명하기에 앞서 클라이언트에서 서버로 데이터 전달 방식에는 2가지 방식 이있다.

1.쿼리 파리미터를 통한 데이터 전송 방식

url 을 살펴보면 주렁주렁 정보들이 달려있는 방식이 쿼리 파라미터를 통한 데이터 전송 방식

GET 요청을 보낼때 사용된다.

 

2. 메시지 바디를 통한 데이터 전송 방식 (JSON 형식)

JSON : 서버와의 통신을 할 때 DATA 교환 형식  -> 파일포맷

객체의 정보를 수정, 입력 등 정보를 다루어야 할 때 주로 사용

POST, PUT, PATCH 요청을 보낼 때 사용

 

 


클라이언트 측에서 보낸 데이터를 서버에서 받는 과정은 크게 

API 계층(프레젠테이션 계층) = 클라이언트 요청 및 응답 처리 

비지니스 계층 = 비지니스 로직 처리, 트랜잭션 관리

데이터 액세스 계층 = DB에 data를 CRUD

 

 

API 계층에서 json 형식의 값이 넘어올 경우를 살펴보자.

DTO 객체 만들기 

디스패처 서블릿을 통하여 위치를 찾는다.

 

@RequestBody 어노테이션을 통하여 SongPostDto 라는 클래스가 있다면 자동으로 키와 값에 맞게 매핑이 되어 객체를 생성해 준다.

 

SongPostDto 에는 4개의 데이터가 있지만 Json으로 2개밖에 안들어온다면 안들어온 2개의 값은 null로 저장이 된다.

 

 

 

MVC 모델에서 API 계층은 주소를 매핑하고 다른 계층으로 값을 전달하여 처리한다.

JSON의 값을 보면 여러개가 있으므로 이 값을 하나하나 받아서 넘기고 처리하는것은 매우 불편하다.

그래서 @RequestBody 라는 어노테이션을 통하여 JSON 값을 객체로 만들어서 객체를 다른 계층으로 넘겨 줄 수 있다.

 

@RequestBody = 객체를 자동으로 생성할 수 있게 해줌

(@RequstParam = 객체 생성 x  , 주로 Json 형식이 아닌 쿼리파라미터로 넘어온 값 저장 )

json 형식은 @RequestBody 어노테이션을 설정하면 전달받은 json 형식을 설정한 객체에 매핑해줘서 자동으로 객체를 생성 해준다. 이렇게 받은 데이터를 오브젝트로 변환하는 과정을  (DataTransferObject) 라고 한다.

 

(이 처럼 JSON 데이터를 -> 객체로 변환하는 것을 역직렬화)

(이 처럼 객체를 -> SON 데이터로 변환하는 것을 직렬화)

 

또한 DTO를 통하여 객체를 생성하면 데이터의 유효성 검증이 단순해진다.

 

DTO 유효성 검증

위 그림 처럼 키와 값에 따라 매핑이 되서 객체가 만들어 진다.

하지만 서버에서 사용자가 영어이름을 소문자만 입력받기를 원한다면 ? 그것 또한 처리가 가능하다.

 

build.gradle 파일의 dependencies 항목에 아래의 문장을 추가한다.

java.validation 어노테이션에는 다양한 어노테이션이 존재하고 우리는 활용을 할 수 있다.

그러면 DTO 클래스의 원하는 유효성을 검증할 변수 위에 어노테이션을 추가한다.

@Pattern 은 '이러한 정규식을 만족하는가?' 를 설정하는 어노테이션이다.

(밑에 그림에 1. java.validation 어노테이션 설명이 있음)

들어오는 값이 소문자 a-z 가 아니면 만족하지 못하기 때문에 오류를 리턴하게 된다.

(값이 null 값이면 유효성 체크를 안한다 -> 그냥 null로 저장)

 

이처럼 유효성을 검사하려면 컨트롤러에서 

@RequestBody 옆에 @Valid 라는 어노테이션을 추가해줘야된다.

 

이렇게 API 계층에서 깔끔하게 DTO 객체를 만들면 이 객체를 서비스 계층이나 데이터 계층으로 보내어 깔끔하게 데이터를 처리 할 수 가 있다.


1. java.validation 어노테이션 설명

출처 : https://bamdule.tistory.com/35

댓글