Spring Framework (21) 썸네일형 리스트형 [Spring] Spring AOP — Advice 종류와 실행 순서 1. Advice란메서드 실행의 어느 시점에 끼워 넣을 부가 기능 로직이다. 적용 시점에 따라 다섯 가지 종류가 있다.종류시점@Before메서드 실행 전@After메서드 실행 후 (정상/예외 무관)@AfterReturning정상 반환 후@AfterThrowing예외 발생 후@Around전후 모두 감쌈 (가장 강력) 2. @Before메서드 실행 전에 동작한다. 메서드 호출을 막거나 파라미터를 바꿀 수는 없다. 그런 제어가 필요하다면 @Around를 써야 한다.@Aspect@Componentpublic class LoggingAspect { @Before("execution(* com.example.service.*.*(..))") public void logBefore(JoinPoint jp).. [Spring] Spring AOP - Pointcut 지시자 완전 정복 1. 지시자란Pointcut 표현식에서 "어떤 기준으로 메서드를 선별할지" 를 지정하는 키워드다.@Pointcut("execution(* com.example.service.*.*(..))")// ↑// 지시자지시자는 선별 기준에 따라 네 가지로 분류된다. 2. execution — 가장 범용적인 지시자메서드 시그니처 전체를 기준으로 선별한다. 리턴 타입, 패키지, 클래스, 메서드 이름, 파라미터까지 세밀하게 제어할 수 있어 가장 많이 쓰인다. 문법 구조execution( [접근제어자]? 리턴타입 [패키지.클래스.]메서드(파라미터) [throws 예외]? ) ↑ 생략 가능 ↑ 필수 ↑ 생략 가능 ↑ 필수 ↑ 생략 가능필수 요.. [Spring] Spring AOP — 개념과 구조 1. AOP가 왜 필요한가서비스 레이어를 작성하다 보면 이런 패턴이 반복된다.public class UserService { public void save(User user) { // 로깅 log.info("save 호출: {}", user); // 트랜잭션 시작 transaction.begin(); // 인증 확인 checkAuth(); // ─── 핵심 비즈니스 로직 ─── userRepository.save(user); // ────────────────────────── // 트랜잭션 커밋 transaction.commit(); log.info.. [Spring] 트랜잭션 완전 정리 - @Transactional의 내부 동작과 함정들 Spring Boot 3.x 기준으로 작성하였습니다.1. PlatformTransactionManagerSpring의 트랜잭션 추상화 계층 최상단에는 PlatformTransactionManager 인터페이스가 있습니다.public interface PlatformTransactionManager { TransactionStatus getTransaction(TransactionDefinition definition); void commit(TransactionStatus status); void rollback(TransactionStatus status);}이 인터페이스 덕분에 @Transactional은 특정 기술에 종속되지 않습니다. JPA를 쓰든 MyBatis를 쓰든 @Trans.. [Spring] Spring은 DB 예외를 어떻게 바꾸는가 SQLException이 DataIntegrityViolationException이 되기까지 왜 예외 변환이 필요한가JPA를 쓰든 JDBC를 쓰든, 결국 DB와 통신하다 보면 예외가 발생한다. 유니크 제약 위반, 락 충돌, 연결 실패 등 다양한 상황이 있다. 문제는 이 예외들이 DB 벤더마다 형태가 다르다는 것이다.유니크 제약 위반 에러코드 MySQL → 1062 PostgreSQL → 23505 Oracle → 1 Hibernate나 JPA도 나름의 예외 계층을 갖고 있지만, DB 에러코드 수준의 세밀한 구분까지는 해주지 않는다. 결국 개발자가 PersistenceException을 잡아서 getCause()를 타고 내려가며 에러코드를 직접 파싱해야 하는 상황이 생긴다.Spr.. [Spring] Spring의 비동기 처리 — @Async부터 Virtual Thread 통합까지 들어가며이전 포스트에서 자바의 네 가지 동시성 구현 메커니즘(Thread, Executor, Fork/Join, Virtual Thread)을 살펴보았습니다. 이번 포스트에서는 Spring Framework가 이 위에서 비동기 처리를 어떻게 추상화하는지 정리합니다. Spring은 @Async 어노테이션 하나로 메서드를 비동기로 실행할 수 있게 해줍니다. 편리하지만, 내부 동작 원리를 이해하지 못하면 "분명히 @Async를 붙였는데 동기로 실행된다"는 문제를 마주치게 됩니다. 이 포스트에서는 설정부터 동작 원리, 흔한 함정, 그리고 Spring Boot 3.2+에서의 Virtual Thread 통합까지 다룹니다. 1. @Async와 ThreadPoolTaskExecutor 설정1-1. @EnableAsyn.. [Spring Security] Spring Security 환경에서 CORS 제대로 이해하고 설정하기 CORS란?CORS(Cross-Origin Resource Sharing)는 브라우저가 현재 페이지의 출처(Origin)와 다른 출처로 HTTP 요청을 보낼 때 적용되는 보안 정책이다. 여기서 Origin이란 프로토콜 + 호스트 + 포트의 조합을 말하며, 이 중 하나라도 다르면 Cross-Origin으로 간주된다. 예를 들어 프론트엔드가 http://localhost:3000, 백엔드가 http://localhost:8080이면 포트가 다르므로 Cross-Origin이다. 중요한 점은 CORS는 서버가 아닌 브라우저가 적용하는 정책이라는 것이다. 서버 간 통신이나 Postman 같은 도구에서는 CORS가 적용되지 않는다. 브라우저가 서버의 응답 헤더를 확인해서 "이 Origin에서의 요청이 허용됐는가?".. [Spring] Spring MVC + Tomcat vs Spring WebFlux + Netty, 그리고 Virtual Thread까지 Spring 기반 웹 애플리케이션의 동시성 모델을 비교하고, JDK 21의 Virtual Thread가 가져온 패러다임 변화를 정리합니다.1. 두 가지 동시성 모델Spring MVC + Tomcat: Thread-per-RequestSpring MVC는 thread-per-request 모델을 사용한다. 요청이 들어오면 Tomcat의 스레드 풀(기본 200개)에서 스레드 하나를 할당하고, 해당 스레드가 컨트롤러 → 서비스 → DB 호출까지 전부 담당한다. DB I/O 같은 블로킹 작업이 발생하면 해당 스레드는 응답이 올 때까지 대기(blocking) 상태에 놓인다. Spring WebFlux + Netty: Event LoopSpring WebFlux는 Event Loop 모델을 사용한다. Netty의 .. 이전 1 2 3 다음