2023/05/08 spring

김홍규·2023년 5월 9일
0

최종 프로젝트

JSP 프로젝트 -> 스프링 부트 프로젝트

동진샘 IOT 수업 - 10 11 12 17 18 19 + @

기간 - 위 수업 제외 5월 15일 ~ 6월 5일까지

빈시간/쉬는시간/저녁시간 - 프로젝트 준비
DB -> 그대로 사용 (수정 할 필요 있으면 수정)
MGR -> MyBatis 세팅
로직 -> JSP에서 모두 제거하고
Repository / Service / Controller로 이관
로그인/권한 -> 스프링 시큐리티 (예정)
앱 개발 선택사항, 이전에 만들었던 앱 github 링크 제출

validation (유효성 검사)

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 파일 따로 추가

0개의 댓글

관련 채용 정보