최종 프로젝트
동진샘 IOT 수업 - 10 11 12 17 18 19 + @
빈시간/쉬는시간/저녁시간 - 프로젝트 준비
DB -> 그대로 사용 (수정 할 필요 있으면 수정)
MGR -> MyBatis 세팅
로직 -> JSP에서 모두 제거하고
Repository / Service / Controller로 이관
로그인/권한 -> 스프링 시큐리티 (예정)
앱 개발 선택사항, 이전에 만들었던 앱 github 링크 제출
validation 라이브러리는 꼭 필요하지만 귀찮은 유혀성 체크를 어노테이션으로 쉽게 처리하도록 도와준다.
Size - 문자길이 측정
NotNull - Null 불가
NotEmpty - null,""불가
NotBlank - null, "" , " "불가
Past 과거 날짜
PastonPresent 오늘이거나 과거날짜
Future
Max - 최대값
Min - 최소값
AssertTrue/False - 별도 로직 생성
Valid - 해당 object validation 실행
사용 예
ex)로그인 시 아이디와 비밀번호를 치고 요청을 보내는 지 확인, 입력 안됐을 때 모달창 띄우기
1.html 화면에서 한 번
2.서버에서 한 번 더(서버는 요청 데이터를 신뢰하지 않는다.)
-postman 같은 html이 아닌 다른 방법을 통해 보낸데이터는 걸러지지 않는 경우가 있기에 서버에서 거른다.
성능
에러처리 - DB INSERT하다가 터짐
↓ 더 좋다
Valitdation - DB 조회 전(데이터베이스에 데이터가 접근되기 전에 거르기가 가능하다.)
postman test
데이터 삽입
1.post로 설정
json 형태로 data 넣기
-아무런 처리가 안되어 있기 때문에 잘들어감.
@PostMapping
public ResDTO<?> insert(@RequestBody TodoDTO.ReqBasic reqDto) {
return todoServiceApiV2.insert(reqDto);
}
if 문을 사용해서 예외 처리
-null값이 들어가면 message 출력됨.
적용 코드
@PostMapping
public ResDTO<?> insert(@RequestBody TodoDTO.ReqBasic reqDto) {
if (reqDto.getContent() == null || reqDto.getContent().equals("")) {
return ResDTO.builder()
.code(-1)
.message("내용을 입력해 주세요")
.build();
}
return todoServiceApiV2.insert(reqDto);
}
validation 사용
-서버단계에서 사전에 차단함
적용 코드
public static class ReqBasic {
//validation 으로 인해 추가된 @notbalnk 사용
@NotBlank(message = "내용을 입력해 주세요.")
private String content;
public TodoEntity toEntity() {
return TodoEntity.builder()
.content(content)
.doneYn('N')
.deleteYn('N')
.createDate(LocalDateTime.now())
.build();
}
}
@PostMapping
public ResDTO<?> insert(@Validated @RequestBody TodoDTO.ReqBasic reqDto) {
// @validated 추가
return todoServiceApiV2.insert(reqDto);
}
-validation 라이브러리 추가해서 설정(maven에서 링크)
-build.gradle에 라이브러리 추가, 프로젝트 다시 로드
-데이터를 받아오는 객체 필드 값에 @NotBlank 등 조건 추가
-컨트롤러에서 매개변수에 @Validated 추가
1.여러 곳에서 에러가 발생한다.
클래스에 추가 어노테이션
@RestControllerAdvice
함수에 추가 어노테이션
@ExceptionHandler
함수에서
exception.getBindingResult().getFieldErrors() 를 이용해서 에러 메시지를 가공해서 전달 한다.
yml파일내부에 추가
# 로그 관련 설정 .yml 파일
logging:
file:
# / 를 붙이면 c 드라이브 하위 폴더 생성됨
# / 를 안붙이면 프로젝트 내부에 폴더 생성됨
name: log/todo.log
# level은 로그를 남길 데이터의 위험도,우선도
# TRACE < DEBUG < INFO < WARN < ERROR < FATAL
level:
root: warn
charset:
file: UTF-8
-로그를 남기고 싶은 클래스에 @slf4j 추가
-간단한 로깅은 application.yml
-복잡한 로깅은 xml 파일 따로 추가