[Spring] ControllerAdvice + ExceptionHandler 전역 예외 처리
·
Dev Framework/Spring
@ControllerAdvice와 @ExceptionHandler 완전 정복도입 배경: 왜 전역 예외 처리가 필요한가?서비스를 운영하다 보면 예외는 피할 수 없는 현실입니다. 특히 웹 애플리케이션에서는 다음과 같은 요구가 자주 등장합니다:클라이언트에게 일관된 에러 응답 포맷을 제공해야 한다.추후에 API 스펙이 변경되면, 프론트엔드의 수정이 불가피하다.따라서 많은 부수효과가 발생한다.비즈니스 예외와 시스템 예외를 구분해서 다뤄야 한다.예외 발생 시 적절한 로그, 알람, 후속 처리를 구성해야 한다.컨트롤러마다 중복되는 try-catch를 제거하고 싶다.Spring은 이러한 요구를 해결하기 위해 전역 예외 처리 메커니즘을 제공합니다. 그 핵심은 @ControllerAdvice와 @ExceptionHandle..
[Java] 자바 스레드에서 run()은 왜 체크 예외를 던질 수 없을까?
·
Dev Lang/Java
자바 스레드에서 run()은 왜 체크 예외를 던질 수 없을까? 1. 스레드의 시작점은 run() 메서드자바에서 스레드를 생성하고 실행할 수 있는 방식은 대표적으로 두 가지이다.// 방법 1: Thread 상속class MyThread extends Thread { public void run() { // 작업 내용 }}// 방법 2: Runnable 구현class MyRunnable implements Runnable { public void run() { // 작업 내용 }}두 방식 모두 작업의 진입점은 run() 메서드이며, 내부적으로 Thread.start()가 호출되면 run()이 실행된다. 2. run()의 메서드 시그니처public void run..
[SQL] PERCENT_RANK() 윈도우 함수 완전 정리
·
프로그래머스
PERCENT_RANK() 윈도우 함수 완전 정리SQL에서 데이터의 상대적 위치를 백분율로 구하는 방법1. 개념 정리: PERCENT_RANK()란?PERCENT_RANK()는 윈도우 함수(Window Function) 중 하나로,"해당 행이 전체 데이터에서 몇 퍼센트 지점에 위치해 있는지"를 계산해주는 함수다.이는 단순한 순위를 넘어서 백분율 기반의 상대적인 위치를 파악하고 싶을 때 유용하다. 예를 들어,사용자가 전체에서 상위 10%에 해당하는지어떤 제품이 매출 기준 상위 25%에 포함되는지이런 질문에 답할 수 있도록 도와준다. 2. 계산 방식공식은 다음과 같다PERCENT_RANK = (RANK - 1) / (TOTAL_ROWS - 1)RANK: 해당 행의 순위 (RANK()와 동일)TOTAL_ROW..
[프로그래머스 SQL] 대장균의 크기에 따라 분류하기 2
·
프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/301649 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 코드SELECT ID, CASE WHEN PRANK 쿼리 실행 순서FROM테이블 또는 서브쿼리(ECOLI_DATA)의 데이터를 불러옵니다.WHERE(없음: 조건이 있다면 이 단계에서 필터링)WINDOW FUNCTIONS (PERCENT_RANK())OVER (...) 구문이 실행되어 각 행에 대해 PRANK 값이 계산됩니다.SELECTID, SIZE_OF_COLONY, PRANK이 선택되고,외부 SELECT에서는..
[Spring][JPA] JPA QueryHint에 대해서 알아보자
·
Dev Framework/Spring
JPA QueryHint, 정말 성능에 도움이 될까?“@QueryHint 쓰면 성능이 좋아진다던데요?”반은 맞고, 반은 틀립니다. 이 글에서는 JPA Hint의 현실적 쓰임새와 한계, 그리고 실무에서 언제 써야 의미 있는지를 정리해봅니다. Hint란 무엇인가?JPA에서 제공하는 @QueryHint는 쿼리 실행 시 Hibernate나 JPA 구현체에게 특정 힌트를 전달하여 동작을 제어하는 기능입니다. 사용 예시Dirty Checking을 생략해서 flush를 방지쿼리 결과를 2차 캐시에 저장JDBC 쿼리에 타임아웃 적용@QueryHints(@QueryHint(name = "org.hibernate.readOnly", value = "true"))@Query("SELECT m FROM Member m")Li..
[Spring][JPA] N+1 문제의 발생부터 해결까지
·
Dev Framework/Spring
JPA N+1 문제, 왜 생기고 어떻게 해결할까?많은 개발자들이 JPA를 쓰면서 한 번쯤은 겪는 고질병, 바로 N+1 문제다.처음엔 성능 잘 나오다가도, 조회 건수가 많아지면 갑자기 쿼리 수가 폭증하고 응답 시간이 기하급수적으로 느려진다.그리고 로그를 보면 이렇게 되어 있다.SELECT * FROM member;SELECT * FROM team WHERE team_id = 1;SELECT * FROM team WHERE team_id = 2;SELECT * FROM team WHERE team_id = 3;...한 번의 조회로 끝날 줄 알았던 쿼리가 무려 N+1번이나 나간다. N+1 문제란 무엇인가?N+1 문제는 JPA에서 1번의 쿼리로 N개의 결과를 가져온 후, 그 결과 각각에 대해 추가 쿼리가 1번씩..
[Spring][JPA] 스프링 데이터 JPA Auditing 심화편
·
Dev Framework/Spring
🚀 Spring Data JPA Auditing 심화편– 현업에서는 이렇게까지 활용합니다 1. 실전 예제: createdBy, updatedBy를 로그인 사용자로 자동 세팅하기AuditorAware를 구현할 때, 보통 로그인 사용자 정보를 가져와야 합니다.스프링 시큐리티를 쓰는 경우 이렇게 작성합니다.import org.springframework.data.domain.AuditorAware;import org.springframework.security.core.Authentication;import org.springframework.security.core.context.SecurityContextHolder;import org.springframework.stereotype.Component;i..
[Spring][JPA] 스프링 데이터 JPA Auditing 완전 정복
·
Dev Framework/Spring
🌟 스프링 데이터 JPA Auditing 완전 정복– 데이터의 생성과 변경을 자동으로 기록하는 가장 깔끔한 방법 1. Auditing이란 무엇인가?Auditing(감사, 기록)은 쉽게 말하면,"이 데이터가 언제 생성되었는지, 언제 수정되었는지, 누가 수정했는지를 자동으로 기록하는 기능"입니다.우리가 실제 서비스를 운영하다 보면, 거의 대부분의 테이블에 이런 칼럼들이 존재합니다.칼럼명의미created_at데이터가 처음 생성된 시간updated_at데이터가 마지막으로 수정된 시간created_by데이터를 처음 만든 사용자updated_by마지막으로 데이터를 수정한 사용자처음에는 직접 setCreatedAt() 하면서 채우겠지만,규모가 커지면 매번 이런 코드를 반복하는 것은 비효율적이고, 오타, 실수도 잦아..
개발자 성현
'분류 전체보기' 카테고리의 글 목록 (3 Page)