TIL - 25.01.23

이준연·2026년 1월 23일

학습 키워드


  • Filter & Interceptor & AOP
  • JPQL 개념 및 문법
  • 지연 로딩과 N+1 문제

Filter & Intercepter & AOP


공통 관심사란?

인증, 인가, 로깅, 트랜잭션, 예외 처리 등 여러 레이어에 반복적으로 등작하는 처리

  • 핵심 로직과 분리하여 유지보수성을 높이기 위해 필요

Filter / Interceptor / AOP 비교

항목FilterInterceptorAOP
처리위치DispatcherServlet 이전컨트롤러 실행 전후Spring Bean 메서드 전후
대상서블릿 요청핸들러모든 Bean 메서드
사용 목적인증, 로깅, CORS 등세션 체크, 권한 검사로깅, 트랜잭션, 예외 처리 등
선언 방법Filter 구현체1HadlerInterceptor 구현체@Asperct 클래스

Filter / Interceptor / AOP 흐름도

  • Request → Filter → Interceptor → AOP → Response

JPQL


JPQL이란?

Entity 객체를 대상으로 쿼리를 작성하는 객체 지향 SQL입니다

사용 이유

  • 객체 중심 개발에 자연스럽게 사용 가능

    • JPQL은 SQL이 아닌, 객체를 대상으로 작성
    • 테이블/컬럼이 아닌 엔티티/필드 기준으로 쿼리를 짜서 객체지향적인 코드를 유지 가능
  • 데이터베이스 독립성 확보

    • JPQL은 JPA 구현체가 SQL로 변환해주어 DBMS에 종속되지 않음
  • 정적 타입 지원 + 자동 바인딩

    • @Query, 메서드 네이밍, QueryDSL 등과 조합하면 타입 안정성 확보 및 IDE 자동완성 활용 가능
  • 복잡한 쿼리도 객체 기준으로 구성 가능

    • 복잡한 JOIN, 조건 쿼리도 객체 모델이 맞춰 작성 가능

사용 순간

  • 복잡한 조건 조회(WHERE, JOIN 등)
  • 동적 조건 필터링, 페이징 등

Eager & Lazy 로딩

로딩 방식EAGERLAZY
설명연관된 엔티티를 즉시 로딩실제 사용하는 시점에 로딩
SQL 실행 시점해당 엔티티 조회 시 바로 함께 조회(즉시 Join)getter 등으로 접근할 때 쿼리 실행
실무 기본 전략잘 안씀(비효율적)실무 기본값

N+1

  • 엔티티 1개를 조회하였는데, 추가 쿼리가 N개 더 실행되는 현상
  • 문제점:
    • DB에 불필요한 부하 발생
    • 성능 저하로 트래픽이 많을수록 병목 가능성 증가
    • 캐싱이 어렵고, 대량의 데이터 요청에 응답 시간 급증

N+1 해결 방식

방식특징페이징 가능JPQL 필요실무 활용
Fetch Join빠르고 직관적XOO
BatchSizeLazy 유지 + IN 조건으로 개선OXO
EntityGraph선언적 설정XX
profile
반갑습니다!

0개의 댓글