본문 바로가기

Spring

(49)
[Spring] 예외 처리 방식 글로벌 예외 처리(Global Exception Handling)Spring에서 글로벌 예외 처리(Global Exception Handling)는 애플리케이션 전역에서 발생하는 예외를 한 곳에서 처리할 수 있도록 돕는 중요한 기능이다. 이와 관련하여 @RestControllerAdvice와 @ExceptionHandler는 글로벌 예외 처리의 핵심 요소로 작동하며, 이를 통해 예외 처리 로직을 중앙 집중화하고 코드 중복을 줄일 수 있다. 이를 통해 다음과 같은 이점을 얻을 수 있다. 글로벌 예외 처리는 모든 컨트롤러에서 발생하는 예외를 중앙에서 관리하기 위한 설계 패턴이다. 중복 코드 제거: 모든 컨트롤러에서 중복적으로 작성할 필요 없음.유지보수성 향상: 예외 처리 로직이 한 곳에 모여 있어 수정 및 ..
[Spring] Security JWT 보호되어 있는 글입니다.
[Spring] 세션, 토큰, 쿠키 Cookie쿠키를 이용해서 서버는 우리의 브라우저에 데이터를 넣을 수 있다.보통 서버가 클라이언트에게 정보를 저장해두고 다음 요청 시 이를 식별하는 데 사용한다.우리의 브라우저의 쿠키를 저장한 후 해당 웹사이트를 방문할 때마다 브라우저는 해당 쿠키도 요청과 함께 보내진다. 특징클라이언트의 웹 브라우저에 저장되는 작은 데이터 조각이다.쿠키는 클라이언트(브라우저)에 저장되며, 유효기간을 설정할 수 있다. 서버와 클라이언트의 모든 HTTP 요청마다 자동으로 전송된다.쿠키는 도메인에 따라 제한이 된다. (예를 들어, 구글이 준 쿠키는 구글에게만 보내지게 됨)쿠키는 인증 뿐만 아니라 여러가지 정보를 저장할 수 있다(언어설정을 바꾸면 서버는 쿠키를 주고, 선택한 언어를 저장). 쿠키와 보안 문제쿠키 값은 임의로 변..
[Spring] @Profile @Profile@Profile 은 애플리케이션의 환경별로 다른 빈을 등록하고, 환경에 따라 다른 설정을 적용할 수 있도록 도와주는 기능이다.이를 통해 개발, 테스트, 운영 환경별로 다른 설정을 쉽게 관리할 수 있다.환경은 사용자가 정의하기 나름이지만 dev(개발), test(테스트), local(로컬), prod(운영) 등이 사용된다.환경별로 다른 파일을 만드는 경우 무조건 application-{사용할 환경 이름}.properties 형식으로 파일 이름을 지정해야한다.  @Profile 사용@Profile을 사용하여 특정 빈을 특정 프로파일에서만 활성화할 수 있다.예를 들어, @Profile("dev")로 설정된 빈은 dev 프로파일이 활성화된 경우에만 생성되고 등록된다.이를 통해 환경별로 필요한 빈을..
[Spring] 스프링 AOP - 실무 주의사항 목차프록시와 내부 호출 - 문제프록시와 내부 호출 - 대안1 자기 자신 주입프록시와 내부 호출 - 대안2 지연 조회프록시와 내부 호출 - 대안3 구조 변경프록시 기술과 한계 - 타입 캐스팅프록시 기술과 한계 - 의존관계 주입프록시 기술과 한계 - CGLIB프록시 기술과 한계 - 스프링의 해결책 프록시와 내부 호출 - 문제스프링은 프록시 방식의 AOP를 사용한다. 따라서 AOP를 적용하려면 항상 프록시를 통해서 대상 객체(Target)을 호출해야 한다. 이렇게 해야 프록시에서 먼저 어드바이스를 호출하고, 이후에 대상 객체를 호출한다. 만약 프록시를 거치지 않고 대상 객체를 직접 호출하게 되면 AOP가 적용되지 않고, 어드바이스도 호출되지 않는다. AOP를 적용하면 스프링은 대상 객체 대신에 프록시를 스프링..
[Spring] 스프링 AOP - 로그 출력 AOP 만들기 목차예제 만들기 로그 출력 AOP 재시도 AOP 예제 만들기@Trace 애노테이션으로 로그 출력하기 @Retry 애노테이션으로 예외 발생시 재시도 하기먼저 AOP를 적용할 예제를 만들자. ExamRepository@Repositorypublic class ExamRepository { private static int seq = 0; /** * 5번에 1번 실패하는 요청 */ public String save(String itemId) { seq++; if (seq % 5 == 0) { throw new IllegalStateException("예외 발생"); } return "ok"; }}5번에 1..
[Spring] 스프링 AOP - 포인트컷 목차포인트컷 지시자예제 만들기execution1execution2withinargs@target, @within@annotation, @argsbean매개변수 전달this, target 포인트컷 지시자포인트컷 표현식을 포함한 포인트컷에 대해서 자세히 알아보자. 애스펙트J는 포인트컷을 편리하게 표현하기 위한 특별한 표현식을 제공한다.포인트컷 표현식은 AspectJ pointcut expression 즉, 애스펙트J가 제공하는 포인트컷 표현식을 줄여서 말하는 것이다. @Pointcut("execution(* hello.aop.order..*(..))")  포인트컷 지시자포인트컷 표현식은 execution 같은 포인트컷 지시자(Pointcut Designator)로 시작한다.줄여서 PCD라 한다. 포인트컷 지..
[Spring] 스프링 AOP 구현 목차프로젝트 생성예제 프로젝트 만들기스프링 AOP 구현1 - 시작스프링 AOP 구현2 - 포인트컷 분리스프링 AOP 구현3 - 어드바이스 추가스프링 AOP 구현4 - 포인트컷 참조스프링 AOP 구현5 - 어드바이스 순서스프링 AOP 구현6 - 어드바이스 종류 프로젝트 생성  AOP 기능을 사용하기 위해서 다음을 build.gradle 에 직접 추가implementation 'org.springframework.boot:spring-boot-starter-aop'build.gradle 에 테스트 코드에서도 lombok을 사용할 수 있도록 다음 코드를 추가//테스트에서 lombok 사용testCompileOnly 'org.projectlombok:lombok'testAnnotationProcessor 'or..
[Spring] 스프링 AOP 개념 목차AOP 소개 - 핵심 기능과 부가 기능 AOP 소개 - AspectAOP 적용 방식 AOP 용어 정리 AOP 소개 - 핵심 기능과 부가 기능애플리케이션 로직은 크게 핵심 기능과 부가 기능으로 나눌 수 있다.핵심 기능은 해당 객체가 제공하는 고유의 기능이다.예를 들어서 OrderService 의 핵심 기능은 주문 로직이다.부가 기능은 핵심 기능을 보조하기 위해 제공되는 기능이다. 예를 들어서 로그 추적 로직, 트랜잭션 기능이 있다. 이러한 부가 기능은 단독으로 사용되지 않고, 핵심 기능과 함께 사용된다. 예를 들어서 로그 추적 기능은 어떤 핵심 기능이 호출되었는지 로그를 남기기 위해 사용한다. 그러니까 부가 기능은 이름 그대로 핵심 기능을 보조하기 위해 존재한다.  주문 로직을 실행하기 직전에 로그 추..
[Spring] @Aspect 프록시 목차@Aspect 프록시 - 적용 @Aspect 프록시 - 설명 @Aspect 프록시 - 적용스프링 애플리케이션에 프록시를 적용하려면 포인트컷과 어드바이스로 구성되어 있는 어드바이저( Advisor )를 만들어서 스프링 빈으로 등록하면 된다. 그러면 나머지는 자동 프록시 생성기가 모두 자동으로 처리해준다. 자동 프록시 생성기는 스프링 빈으로 등록된 어드바이저들을 찾고, 스프링 빈들에 자동으로 프록시를 적용해준다. (포인트컷이 매칭되는 경우에 프록시를 생성한다.)스프링은 @Aspect 애노테이션으로 매우 편리하게 포인트컷과 어드바이스로 구성되어 있는 어드바이저 생성 기능을 지원한다.지금까지 어드바이저를 직접 만들었던 부분을 @Aspect 애노테이션을 사용해서 만들어보자.참고@Aspect 는 관점 지향 프로..