Spring
Spring에 관한 내용을 공유합니다.
-
시스템 간 강결합 문제 쇼핑몰에서 구매를 취소하면 환불 처리를 해야 합니다. @Service public class CancelOrderService { private RefundService refundService; @Transactional public void cancel() { // order 취소 로직 // 환불 로직 try { refundService.refund(); } catch(Exception ex){ ??? } } } 보통 결제 시스템은 외부에 존재하므로 RefundService는 외부에 있는 결제 시스템이 제공하는 환불 서비스를 호출합니다. 이때 세 가지 문제가 발생할 수 있습니다. 외부 서비스가 정상이 아닐 경우 트랜잭션 처리를 어떻게 해야 하는가? 롤백해야 하나? 일단 커밋해야..
Spring - Event Driven시스템 간 강결합 문제 쇼핑몰에서 구매를 취소하면 환불 처리를 해야 합니다. @Service public class CancelOrderService { private RefundService refundService; @Transactional public void cancel() { // order 취소 로직 // 환불 로직 try { refundService.refund(); } catch(Exception ex){ ??? } } } 보통 결제 시스템은 외부에 존재하므로 RefundService는 외부에 있는 결제 시스템이 제공하는 환불 서비스를 호출합니다. 이때 세 가지 문제가 발생할 수 있습니다. 외부 서비스가 정상이 아닐 경우 트랜잭션 처리를 어떻게 해야 하는가? 롤백해야 하나? 일단 커밋해야..
2023.12.27 -
Spring Retry 소개 Spring의 재시도 기능은 스프링 배치에 포함되어 있다가 2.2.0 버전부터 제외되어 현재는 Spring Retry 라이브러리에 포함되어 있습니다. Spring Retry는 동작이 실패하더라도 몇 번 더 시도하면 성공할 수 있는 작업은, 자동으로 다시 시도할 수 있는 기능을 제공합니다. build.gradle implementation 'org.springframework:spring-aspects' implementation 'org.springframework.retry:spring-retry' 의존성을 추가해줍니다. @EnableRetry @Configuration @EnableRetry public class RetryConfig { } 애플리케이션에서 Spring ..
Spring - RetrySpring Retry 소개 Spring의 재시도 기능은 스프링 배치에 포함되어 있다가 2.2.0 버전부터 제외되어 현재는 Spring Retry 라이브러리에 포함되어 있습니다. Spring Retry는 동작이 실패하더라도 몇 번 더 시도하면 성공할 수 있는 작업은, 자동으로 다시 시도할 수 있는 기능을 제공합니다. build.gradle implementation 'org.springframework:spring-aspects' implementation 'org.springframework.retry:spring-retry' 의존성을 추가해줍니다. @EnableRetry @Configuration @EnableRetry public class RetryConfig { } 애플리케이션에서 Spring ..
2023.12.17 -
AOP란?Spring의 핵심 개념 중 하나인 DI가 애플리케이션 모듈들 간의 결합도를 낮춘다면, AOP(Aspect-Oriented Programming)는 핵심 로직과 부가 기능을 분리하여 애플리케이션 전체에 걸쳐 사용되는 부가 기능을 모듈화 하여 재사용할 수 있도록 지원하는 것입니다. Aspect-Oriented Programming이란 단어를 번역하면 관점(관심) 지향 프로그래밍 이 됩니다. 프로젝트 구조를 바라보는 관점을 바꿔보자는 의미입니다.)각각의 Service의 핵심기능에서 바라보았을 때 User과 Order는 공통된 요소가 없습니다. 하지만 부가기능 관점에서 바라보면 이야기가 달라집니다.부가기능 관점에서 바라보면 각각의 Service의 getXX 메서드를 호출하는 전후에 before과 af..
Spring - AOP 총정리AOP란?Spring의 핵심 개념 중 하나인 DI가 애플리케이션 모듈들 간의 결합도를 낮춘다면, AOP(Aspect-Oriented Programming)는 핵심 로직과 부가 기능을 분리하여 애플리케이션 전체에 걸쳐 사용되는 부가 기능을 모듈화 하여 재사용할 수 있도록 지원하는 것입니다. Aspect-Oriented Programming이란 단어를 번역하면 관점(관심) 지향 프로그래밍 이 됩니다. 프로젝트 구조를 바라보는 관점을 바꿔보자는 의미입니다.)각각의 Service의 핵심기능에서 바라보았을 때 User과 Order는 공통된 요소가 없습니다. 하지만 부가기능 관점에서 바라보면 이야기가 달라집니다.부가기능 관점에서 바라보면 각각의 Service의 getXX 메서드를 호출하는 전후에 before과 af..
2023.12.17 -
Spring의 요청 Flow HTTP 요청 -> WAS -> 필터 -> 서블릿(디스패치) -> 스프링 인터셉터 -> 컨트롤러 Spring은 위와 같은 flow를 가지고 있습니다. 필터 필터는 서블릿이 지원하고 서블릿 앞에서 동작하면서 공통 관심 사항 처리 및 부가 기능을 수행합니다. 필터를 적용하면 필터가 호출된 다음에 서블릿이 호출되기 때문에 서블릿이 호출되기 전에 부가적인 작업을 하거나 서블릿 호출을 막을 수 있습니다. 예를 들면, 모든 요청에 대한 로그를 남긴다든지, 특정 url 패턴으로 들어온 요청을 막는다든지, 비 로그인 사용자에 대한 접근을 막는다든지에 대한 기능을 수행할 수 있습니다. 특히, 필터는 적절한 요청이 아니라고 판단되면 서블릿 호출 전에 끝낼 수 있기 때문에 로그인 여부를 체크하기..
Spring - Filter와 InterceptorSpring의 요청 Flow HTTP 요청 -> WAS -> 필터 -> 서블릿(디스패치) -> 스프링 인터셉터 -> 컨트롤러 Spring은 위와 같은 flow를 가지고 있습니다. 필터 필터는 서블릿이 지원하고 서블릿 앞에서 동작하면서 공통 관심 사항 처리 및 부가 기능을 수행합니다. 필터를 적용하면 필터가 호출된 다음에 서블릿이 호출되기 때문에 서블릿이 호출되기 전에 부가적인 작업을 하거나 서블릿 호출을 막을 수 있습니다. 예를 들면, 모든 요청에 대한 로그를 남긴다든지, 특정 url 패턴으로 들어온 요청을 막는다든지, 비 로그인 사용자에 대한 접근을 막는다든지에 대한 기능을 수행할 수 있습니다. 특히, 필터는 적절한 요청이 아니라고 판단되면 서블릿 호출 전에 끝낼 수 있기 때문에 로그인 여부를 체크하기..
2023.12.09 -
타임리프를 사용하는 이유 타임리프는 순수 HTML 파일을 웹 브라우저에서 열어도 내용 확인이 가능하고, 서버를 통해 뷰 템플릿을 거치면 동적으로 변경된 결과 확인이 가능한 유연함을 제공합니다. 또한 spring에서 공식적으로 지원 & 권장하고 있습니다. 이렇게 순수 HTML을 그대로 유지하면서 뷰 템플릿도 사용할 수 있는 타임리프의 특징을 네츄럴 템플릿 이라 합니다. 타임리프 핵심 th:xxx 가 붙은 부분은 서버사이드에서 렌더링 되고, 기존의 것을 대체합니다. th:xxx 이 없으면 기존 html 속성이 적용됩니다. 문법 공식 문서 : https://www.thymeleaf.org/documentation.html 자세한 문법은 공식문서를 참고하세요. 사용 선언 맨 위에 있는 html 태그 안에 thy..
Spring Thymeleaf(타임리프) 기본 문법 정리타임리프를 사용하는 이유 타임리프는 순수 HTML 파일을 웹 브라우저에서 열어도 내용 확인이 가능하고, 서버를 통해 뷰 템플릿을 거치면 동적으로 변경된 결과 확인이 가능한 유연함을 제공합니다. 또한 spring에서 공식적으로 지원 & 권장하고 있습니다. 이렇게 순수 HTML을 그대로 유지하면서 뷰 템플릿도 사용할 수 있는 타임리프의 특징을 네츄럴 템플릿 이라 합니다. 타임리프 핵심 th:xxx 가 붙은 부분은 서버사이드에서 렌더링 되고, 기존의 것을 대체합니다. th:xxx 이 없으면 기존 html 속성이 적용됩니다. 문법 공식 문서 : https://www.thymeleaf.org/documentation.html 자세한 문법은 공식문서를 참고하세요. 사용 선언 맨 위에 있는 html 태그 안에 thy..
2023.12.07