[내일배움캠프 사전캠프] 4회차 TIL(6/25 목) - Global 예외처리, Error 메시지 관리, 용어 정리

2026. 6. 25. 14:07·심화_AI를 활용한 백엔드 아키텍처 심화 과정

1. 오늘 학습 키워드

- Global 예외처리

- Error 메시지 관리하기 

- 튜터님과 면담 때 대답하지 못했거나, 헷갈렸던 것들 정리


2. 오늘 학습 한 내용을 나만의 언어로 정리하기

- Global 예외처리: Controller마다 하는 것이 아닌, Global하게 예외처리하는 방법

@RestControllerAdvice // 공통적으로 처리하기위한 어노테이션
public class GlobalExceptionHandler {

    @ExceptionHandler({IllegalArgumentException.class})
    public ResponseEntity<RestApiException> handleException(IllegalArgumentException ex) {
        RestApiException restApiException = new RestApiException(ex.getMessage(), HttpStatus.BAD_REQUEST.value());
        return new ResponseEntity<>(
                // HTTP body
                restApiException,
                // HTTP status code
                HttpStatus.BAD_REQUEST
        );
    }
}

=> 이 클래스를 통해 공통적으로 예외처리를 컨트롤 할 수 있기 때문에 코드 중복 방지, 유지 보수성을 높일 수 있다.

 

- Error 메시지를 resources/messages.properties 파일을 통해 관리할 수 있다. 

below.min.my.price=최저 희망가는 최소 {0}원 이상으로 설정해 주세요.
not.found.product=해당 상품이 존재하지 않습니다.

<messages.properties>

 

package com.sparta.myselectshop.exception;

public class ProductNotFoundException extends RuntimeException{
    public ProductNotFoundException(String message) {
        super(message);
    }
}

<ProductNotFoundException>

private final MessageSource messageSource;
if (myprice < MIN_MY_PRICE){
            throw new IllegalArgumentException(
                    messageSource.getMessage(
                            "below.min.my.price",
                            new Integer[] {MIN_MY_PRICE},
                            "Wrong Price",
                            Locale.getDefault()
                    )
            );
        }

        Product product = productRepository.findById(id).orElseThrow(() ->
                new ProductNotFoundException(messageSource.getMessage(
                        "not.found.product",
                        null,
                        "Not Found Product",
                        Locale.getDefault()
                ))
        );

<ProductService.java>

★위처럼 직접 커스텀하여 IllegalArgumentException을 사용하지 않고도 따로 관리할 수 있다.

 

★ 용어 정리 ★

1) 데이터베이스 Lock이란?

 

Lock: 다중 사용자 환경에서 데이터의 일관성과 무결성을 유지하기 위해 특정 데이터에 대한 접근을 제한하는 자물쇠 역할

  • 공유락(Shared Lock): 데이터를 읽을 때 사용하며, 다른 트랜잭션이 동시에 읽는 것을 허용하나, 수정하는 것은 차단함.
  • 베타락(Exclusive Lock): 데이터를 수정할 때 사용하며, 한 사용자가 작업을 마칠 때까지 다른 트랜잭션의 읽기와 쓰기를 모두 차단함.
  • 낙관적 락(Optimistic Lock): 실제 애플리케이션을 설계할 때는 충돌이 적을 것으로 예상하여 버전 정보로 정합성을 맞추는 락
  • 비관적 락(Pessimistic Lock):  충돌을 대비해 데이터 조회 시점부터 무조건 락을 걸어버리는 

 

2) CI/CD

CI/CD: 개발자가 작성한 코드가 실제 운영 서버에 반영되기까지의 과정을 자동으로 처리해 주는 전 자동 파이프라인 시스템

  • CI(지속적 통합): 개발자들이 각자 수정한 코드를 코드 저장소에 합칠 때, 시스템이 자동으로 빌드하고 테스트 코드를 돌려 사전에 에러를 검증하는 과정입니다. 이를 통해 버그를 조기에 발견 가능
  • CD(지속적 배포): CI를 통과한 안전한 코드를 실제 운영 서버에 사람의 개입 없이 자동으로 반영하는 과정입니다. 과거의 수동 배포 방식에서 발생하던 휴먼 에러를 원천 차단하고, 사용자에게 새로운 기능을 빠르고 안정적으로 제공할 수 있다는 장점이 있다.

3) 트랜잭션 전파 속성(Propagation)

이미 진행 중인 트랜잭션이 있는 상태에서, 또 다른 트랜잭션 작업이 시작될 때 이 두 작업을 어떻게 하나로 묶거나 쪼갤지 결정하는 정책

  • 스프링 프레임워크의 @Transactional 어노테이션을 통해 주로 제어합니다.

 

4) 데이터베이스 격리 수준(Isolation Level)

여러 트랜잭션이 동시에 실행될 때, 하나의 트랜잭션이 변경한 데이터를 다른 트랜잭션에 어디까지 노출할지 결정하는 등급임.

레벨이 높아질수록 데이터 정합성은 완벽해지지만 동시 처리 성능은 떨어지는 트레이드 오프(Trade-off) 관계가 있다.

3. 내일 학습 할 것은 무엇인지

- MSA 강의 듣기 & 요약본 작성

- 코드카타 풀기

- TIL 작성하기

 

항상 새로운 기술에 관심을 가지고 시도하는 것을 두려워하지 말자!

'심화_AI를 활용한 백엔드 아키텍처 심화 과정' 카테고리의 다른 글

[내일배움캠프 사전캠프] 6회차 TIL(6/29 월) - Spring Cloud 핵심 인프라 구축 (Config, 분산추적(Zipkin), 이벤트 드리븐)  (0) 2026.06.29
[내일배움캠프 사전캠프] 5회차 TIL(6/26 금) - 서비스 디스커버리, 로드 밸런싱(Spring Cloud Eureka & OpenFeign)  (0) 2026.06.26
[내일배움캠프 사전캠프] 3회차 TIL(6/24 수) - 카카오 로그인 구현 & 각종 테스트 종류 알아보기  (0) 2026.06.24
[내일배움캠프 사전캠프] 2회차 TIL(6/23 화) - 다대다 관계 매핑과 권한별 트러블슈팅(폴더 기능 추가)  (0) 2026.06.23
[내일배움캠프 사전캠프] 1회차 TIL(6/22 월) - 새로운 시작과 팀 빌딩  (0) 2026.06.22
'심화_AI를 활용한 백엔드 아키텍처 심화 과정' 카테고리의 다른 글
  • [내일배움캠프 사전캠프] 6회차 TIL(6/29 월) - Spring Cloud 핵심 인프라 구축 (Config, 분산추적(Zipkin), 이벤트 드리븐)
  • [내일배움캠프 사전캠프] 5회차 TIL(6/26 금) - 서비스 디스커버리, 로드 밸런싱(Spring Cloud Eureka & OpenFeign)
  • [내일배움캠프 사전캠프] 3회차 TIL(6/24 수) - 카카오 로그인 구현 & 각종 테스트 종류 알아보기
  • [내일배움캠프 사전캠프] 2회차 TIL(6/23 화) - 다대다 관계 매핑과 권한별 트러블슈팅(폴더 기능 추가)
taeyoon2
taeyoon2
taeyoon2 님의 블로그 입니다.
  • taeyoon2
    taeyoon2 님의 블로그
    taeyoon2
  • 전체
    오늘
    어제
    • 분류 전체보기 (36)
      • 심화_AI를 활용한 백엔드 아키텍처 심화 과정 (24)
      • MSA (11)
      • Study (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    OAuth2
    분산추적
    api gateway
    MSA
    spring cloud
    로드 밸런싱
    보안구성
    JWT
    서킷 브레이커
    RabbitMQ
    내일배움캠프
    심화_AI를 활용한 백엔드 아키텍처 심화 과정
    내일배움캠프 #사전캠프 #til
    Config
    Resilience4j
    spring cloud config
    이벤트 드리븐
    사전캠프
    til
    Zipkin
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
taeyoon2
[내일배움캠프 사전캠프] 4회차 TIL(6/25 목) - Global 예외처리, Error 메시지 관리, 용어 정리
상단으로

티스토리툴바