Spring&SpringBoot
-
스프링 AOP 실무 주의사항Spring&SpringBoot 2025. 10. 21. 16:25
프록시 내부 호출 문제스프링은 프록시 방식의 AOP를 사용한다. 따라서 AOP를 적용하려면 항상 프록시를 통해서 대상 객체(Target)을 호출해야 한다이렇게 해야 프록시에서 먼저 어드바이스를 호출하고, 이후에 대상 객체를 호출한다만약 프록시를 거치지 않고 대상 객체를 직접 호출하게 되면 AOP가 적용되지 않고, 어드바이스도 호출되지 않는다@Slf4j@Componentpublic class CallServiceV0 { public void external() { log.info("call external"); internal(); // 내부 메서드 호출 this.internal() } public void internal() { log.info("ca..
-
로그출력AOP & 재시도AOPSpring&SpringBoot 2025. 10. 21. 11:14
@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface Trace { // 로그출력 AOP}@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface Retry { // 재시도 AOP int value() default 3;} @Slf4j@Aspectpublic class RetryAspect { @Around("@annotation(retry)") public Object doRetry(ProceedingJoinPoint joinPoint, Retry retry) throws Throwable { ..
-
템플릿 메서드 패턴 & 전략 패턴 & 템플릿 콜백 패턴Spring&SpringBoot 2025. 10. 13. 18:06
템플릿 메서드 패턴변하는 부분(세부 동작)은 하위 클래스에 구현하고 변하지 않는 부분은 상위 클래스에서 정의하도록 하는 패턴하지만 상속에서 오는 단점들이 그대로 존재하며 특히 자식 클래스가 부모 클래스와 컴파일 시점에 강하게 결합되는 문제가 있다자식 클래스 입장에서는 부모 클래스의 기능을 전혀 사용하지 않는데 부모 클래스를 알아야 한다이런 잘못된 의존관계 때문에 부모 클래스를 수정하면 자식 클래스에도 영향을 줄 수 있다 @Slf4jpublic abstract class AbstractTemplate { public void execute() { long startTime = System.currentTimeMillis(); // 비즈니스 로직 실행 call(..
-
로그추적기 - 동시성 문제Spring&SpringBoot 2025. 10. 2. 11:25
실제 결과 : 기대한 결과 :[nio-8080-exec-3] [52808e46] OrderController.request() [nio-8080-exec-3] [52808e46] |-->OrderService.orderItem() [nio-8080-exec-3] [52808e46] | |-->OrderRepository.save() [nio-8080-exec-4] [4568423c] OrderController.request() [nio-8080-exec-4] [4568423c] |-->OrderService.orderItem() [nio-8080-exec-4] [4568423c] | |-->OrderRepository.save() [nio-8080-exec-3] [52808e46] | ..
-
SpringSecurity 06Spring&SpringBoot/SpringSecurity 2025. 9. 25. 13:28
인가 아키텍처인가 - Authorization권한 부여는 특정 자원에 접근할 수 있는 사람을 결정하는 것GrantedAuthority 클래스를 통해 권한 목록을 관리하고 있으며 Authentication 객체와 연결한다 GrantedAuthorityAythentication에 GrantedAuthority 권한 목록을 저장하며 이를 통해 인증 주체에게 부여된 권한을 사용GrantedAuthority는 AuthenticationManager에 의해 Authentication 객체에 삽입하며 인가 결정을 내릴 때 AuthenticationManager를 사용해 인증 주체로부터 GrantedAuthority 객체를 읽어 들여 처리 기본적으로 역할 기반의 인가 규칙은 역할 앞에 ROLE_를 접두사로 사용한다 ..
-
SpringSecurity 05Spring&SpringBoot/SpringSecurity 2025. 9. 24. 13:03
인가 프로세스 요청 기반 권한 부여 - HttpSecurity.authorizeHttpRequests()Spring Security는 요청 기반 권한 부여와 메서드 기반 권한 부여를 통해 자원에 대한 심층적 방어 제공요청 기반 권한 부여는 클라이언트의 요청(HttpServletRequest)에 대한 권한 부여를 모델링하는 것이며 HttpSecurity 인스턴스를 사용하여 권한 규칙을 선언 authorizeHttpRequests() APIrequestMatchers()Http 요청의 URL 패턴, HTTP 메서드, 요청 파라미터 등을 기반으로 어떤 요청에 대해서는 특정 보안 설정을 적용하고 다른 요청에 대해서는 적용하지 않도록 제어예) 특정 API 경로에만 CSRF 보호 적용하거나 특정 경로에 대해 이..
-
스프링 퀵 스타트 04Spring&SpringBoot 2025. 9. 22. 12:43
CLASS07. 트랜잭션 처리스프링과 비교되는 EJB는 모든 비즈니스 메서드에 대한 트랜잭션 관리를 EJB 컨테이너가 자동으로 처리해 준다스프링에서도 EJB와 마찬가지로 트랜잭션 처리를 컨테이너가 자동으로 처리하도록 설정할 수 있는데 이를 선언적 트랜잭션 처리라고 한다 7.1. 트랜잭션 네임스페이스 등록 스프링에서는 트랜잭션 관련 설정을 AOP로 처리한다추가로 트랜잭션을 제어하는 어드바이스를 설정하기 위해 스프링 설정 파일에 트랜잭션 관련 네임스페이스도 추가해야 한다 DAY3CLASS03. Model2 아키텍처로 게시판 개발3.4. 글 목록 검색 기능 구현하기 검색 결과를 세션에 저장하는 것은 문제가 있다세션은 브라우저당 서버 메모리에 하나씩 유지되는 객체이므로 사용자가 많을수록 많은 세션이 생성되고..
-
스프링 퀵 스타트 03Spring&SpringBoot 2025. 9. 18. 15:35
2.2. AOP 엘리먼트 CLASS03. 어드바이스 동작 시점before : 비즈니스 메서드 실행 전 동작after returning : 비즈니스 메서드가 성공적으로 리턴되면 동작after throwing : 비즈니스 메서드가 실행 중 예외 발생하면 동작after : 비즈니스 메서드가 실행된 후, 무조건 실행around : 메서드 호출 자체를 가로채 비즈니스 메서드 실행 전후에 처리할 로직 삽입어드바이스 동작 시점은 엘리먼트 하위에 와 같이 지정한다 CLASS04. joinpoint와 바인드 변수5.1. 어노테이션 기반 AOP 설정5.1.1. 어노테이션 사용을 위한 스프링 설정스프링 설정 파일에 엘리먼트 선언어드바이스 클래스에 AOP 관련 어노테이션 설정 5.1.2. 포인트 컷 설정 > @Po..