여러 객체를 삭제할 때 쿼리 줄이기
·
프로젝트/COTATO.KR
현재 문제 업로드를 할 때 임시저장 기능 구현을 아래와 같이 하고 있는데, 임시저장과 최종 업로드 하는 기능을 같은 API로 사용하고 있다.사용자가 저장하기 버튼을 누르면 아래와 같은 작업이 수행된다.현재 해당 교육에 업로드된 모든 퀴즈를 삭제한다.요청 온 퀴즈를 다시 업로드한다.문제 상황현재 로직@Transactionalpublic void createQuizzes(Long educationId, CreateQuizzesRequest request) { Education findEducation = findEducationById(educationId); checkQuizBefore(findEducation); validateDuplicateNumber(request); q..
MethodArgumentNotValidException 처리하기
·
프로젝트/COTATO.KR
클라이언트가 RequestBody에 Request DTO에 값을 넣어보낼때 이 값을 @Valid 어노테이션을 사용해서 검사한다. 들어와야하는 값이 들어오는지에 따라 다음 3가지 어노테이션을 주로 써서 검사를 한다. @NotNull : 요청된 값이 null이면 거절, “” 또는 “ “는 허용 @NotEmpty : 요청된 값이 null 또는 “”이면 거절, “ “는 허용 @NotBlank : 요청된 값이 null, “”, “ “이면 거절 이 외에도 @Min , @Max, @Email 등을 통해 길이나 형식 등을 DTO를 검증할 수 있다. 현재 서버의 API에서 발생하는 에러는 DTO Validation에서 발생하는 에러와, Controller 이후에서 발생하는 에러, Filter에서 발생하는(JWT 검증 및..
Controller 리팩토링
·
프로젝트/COTATO.KR
SpringBoot를 활용해 Rest API를 짤 때 Controller에서 ResponseEntity를 사용해 적절한 데이터를 반환한다. 기존 프로젝트를 진행할 때 나는 아래와 같은 방식으로 진행했다. 반환형 → 와일드 카드 사용 개발 초기 반환할 값을 설계하는 과정에서 와일드 카드를 하나씩 수정하는 것이 불편하다고 생각했음 body와 서비스 메서드 분리 (인라인화 하지 않음)List 를 한줄 써서 반환할 타입을 명시하고, activeMembers 를 body에 넣어주는 방식을 사용함. 성공한 응답 코드 OK로 통일세션 추가 요청 → 200OK, 성공했지만 반환할 값 없음 → 200OK 요청이 성공했을때 200번대의 HttpStatus코드를 구분하지 않고 200으로 통일해서 사용함. @GetMappin..
ErrorResponse로 전달할 필드에 대한 고민
·
프로젝트/COTATO.KR
프로젝트를 본격적으로 운영하며 예외처리에 대한 고민이 되기 시작한다. 예외가 발생하면 ErrorResponse를 통해 클라이언트가 해당 요청에서 무엇이 잘못되었는지를 알려줘야하고 또한 서버에도 적절한 로그를 남겨 어떤 문제가 발생했는지를 기록해야한다. 즉, 예외가 발생했을때 적절한 처리를 통해 2가지 목적을 달성해야한다. 클라이언트에 발생한 정보를 정확하게 전달해서 클라이언트가 적절한 예외처리를 할 수 있게 하자. 서버에 로그를 남겨 어디서, 왜 에러가 발생했는지를 기록해야한다. 이 글에선 비즈니스 로직 내부에서 발생한 에러에 대한 ErrorResponse에 들어갈 필드가 어떤 역할을 해야하는지를 고민하고 글을 정리할 계획이다. 기존 반환 값 현재 전달하고 있는 ErrorResponse는 다음과 같다. ..
유쓰응
'프로젝트' 카테고리의 글 목록 (2 Page)