[Spring] core5 - AOP, Transactional

호호빵·2022년 6월 23일
0

Spring

목록 보기
9/24

스크래치

AOP (Aspect Oriented Programming)

  • 부가기능을 모듈화, 부가기능은 핵심기능과 관점이 다름
  • advice : 부가기능
  • pointcut : 부가기능을 적용할 위치
  • 핵심기능 : API 별 수행해야 할 비지니스 로직 (Service)
  • 부가기능 : 핵심기능의 수행시간을 기록(핵심기능의 위아래)

Transaction

  • 데이터베이스에서 데이터에 대한 하나의 논리적 실행단계

  • ACID (원자성, 일관성, 고립성, 지속성) : 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어

  • 더 이상 쪼갤 수 없는 최소 단위의 작업

  • 모두 저장되거나, 아무 것도 저장되지 않거나를 보장

스프링 예외처리

javascript 에서 처리
ApiException
FolderController

// javascript
function addFolder() {
    const folderNames = $('.folderToAdd').toArray().map(input => input.value);
    folderNames.forEach(name => {
        if (name == '') {
            alert('올바른 폴더명을 입력해주세요');
            return;
        }
    })
    $.ajax({
        type: "POST",
        url: `/api/folders`,
        contentType: "application/json",
        data: JSON.stringify({
            folderNames
        }),
        success: function (response) {
            $('#container2').removeClass('active');
            alert('성공적으로 등록되었습니다.');
            window.location.reload();
        },
        error: function (response) {
            // 서버에서 받은 에러 메시지를 노출
            if (response.responseJSON && response.responseJSON.message) {
                alert(response.responseJSON.message);
            } else {
                alert("알 수 없는 에러가 발생했습니다.");
            }
        }
    })
}

// ApiException
@AllArgsConstructor
@Getter
public class ApiException {
    private final String message;
    private final HttpStatus httpStatus;  // 500,400
}

# try-catch로 잡을수도 있지만 최대한 핵심기능은 건들이지 않기 위해 
# FolderController에 추가해줌
								공통적으로 이 에러가 발생하면
    @ExceptionHandler({ IllegalArgumentException.class })
    public ResponseEntity<Object> handle(IllegalArgumentException ex) {
        ApiException apiException = new ApiException(
                ex.getMessage(),
                // HTTP 400 -> Client Error
                HttpStatus.BAD_REQUEST
        );

        return new ResponseEntity<>(
                apiException,
                HttpStatus.BAD_REQUEST
        );
    }

Global 예외처리

# ApiRequestException

# FolderService

# ApiExceptionHandler
package com.sparta.springcore.exception;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class ApiExceptionHandler {
    
    @ExceptionHandler(value = { ApiRequestException.class })
    public ResponseEntity<Object> handleApiRequestException(ApiRequestException ex) {
        ApiException apiException = new ApiException(
                ex.getMessage(),
                // HTTP 400 -> Client Error
                HttpStatus.BAD_REQUEST
        );

        return new ResponseEntity<>(
                apiException,
                // HTTP 400 -> Client Error
                HttpStatus.BAD_REQUEST
        );
    }
}


profile
하루에 한 개념씩

0개의 댓글