BackEnd/Spring51 [Spring] @Async와 ThreadPoolTaskExecutor 1. ThreadPoolTaskExecutor 스레드 풀을 사용하는 Executor java.util.concurrent.Executor를 Spring에서 구현한 것 이다. org.springframework.scheduling.concurrent 패키지에서 제공 주로 spring에서 비동기처리를 위해 사용 스레드풀을 사용하여 멀티스레드 구현을 손쉽게 해준다. Default 생성자 하나만 존재 2. Configuration 2 - 1) Pool size configuration @Bean public ThreadPoolTaskExecutor shineTaskExecutor() { ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); ta.. BackEnd/Spring 2023. 3. 26. [Spring] Spring Security에서 @WithMockUser를 커스텀하기 이번 글을 직전 글에서 발생한 문제를 해결하기 위해 @WithMockUser를 커스텀하여 사용하는 글을 작성해볼려 한다. 직전글을 꼭 읽을 필요는 없다. @WithMockUser를 커스텀하여 사용하는 방법은 이번 글만 보면된다. (다만 문제가 발생한 상황 이 궁금하다면 직전 글 도 살펴보길!) https://blogshine.tistory.com/626 [Spring] SpringSecurity에서 @AuthenticationPrincipal 대신 DTO로 받기 1. 문제의 상황 현 술술 애플리케이션에서는 로그인 한 사용자가 Controller에 접근할 때 CustomUser 객체를 인자로 전달받는다. 문제는 CustomUser가 도메인의 순수한 핵심 Entity라는 점이다... 또한 SonarQu bl.. BackEnd/Spring 2023. 1. 2. [Spring] SpringSecurity에서 @AuthenticationPrincipal 대신 DTO로 받기 1. 문제의 상황 현 술술 애플리케이션에서는 로그인 한 사용자가 Controller에 접근할 때 CustomUser 객체를 인자로 전달받는다. 문제는 CustomUser가 도메인의 순수한 핵심 Entity라는 점이다... 또한 SonarQube에서도 다음과 같이 취약지점으로 알려주고 있다. 과연 CustomUser의 모든 정보가 필요한 것일까? 아니다, 사실상 코드를 따라가며 읽어보니, id, email 2개의 값만 필요함을 알게 되었다. 따라서 이를 id, email만을 포함하는 DTO로 전달받도록 개선해 보자! 참고로, @CurrentUser는 내부에 @AuthenticationPrincipal을 갖고 있어서 Spring의 도움을 받아 마치 상속하는것 처럼 사용중이다. 이글의 목적은 @Authenti.. BackEnd/Spring 2023. 1. 2. [Spring] Feign Client 적용기 개인 프로젝트를 수행하던 도중 Kakao에 위경도를 전달하여 주소로 변환해야 하는 과정이 필요했다. 맨 처음에는 RestTemplate를 생각했지만, deprecated 되었다고 한다. 따라서 WebFlux의 WebClient 사용을 권장하고 있지만, 사실 우리의 애플리케이션에서는 비동기 처리가 필요 없다 생각되었다. https://stackoverflow.com/questions/47974757/webclient-vs-resttemplate WebClient vs RestTemplate As per spring 5: WebClient is an interface representing the main entry point for performing web requests. It has been crea.. BackEnd/Spring 2022. 12. 20. [Spring] @Configuration 이란? 이번 글에서는 @Configuration을 사용하는 이점에 대하여 정리해볼까 한다. 1. @Configuration 이란? " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 Spring에서 Bean을 수동으로 등록하기 위해서는, 설정 class위에 @Configuration을 추가하고, @Bean을 사용해 수동으로 빈을 등록할 수 있다. 이때 메서드 이름으로 빈의 이름이 결정된다. 그러므로 중복된 빈 이름이 존재하지 않도록 주의해야 한다. 예를 들면 다음과 같을 것이다. @Configuration public class SomeConfig { @Bean public ShineResource shine() { return new ShineResource(); } } 일반적으로.. BackEnd/Spring 2022. 9. 12. [Spring] @Profile과 @ActiveProfiles 를 통한 활성 프로파일(Profile)의 관리 개발을 진행하다보면 환경설정 파일들을 분리하거나, 가져와야하는 경우가 많다. 이에 대하여 알아보자. 우선 활성프로필에 대하여 잠시 알아봅시다. ▶ 활성 프로파일 활성 프로파일이란 스프링 컨테이너를 실행할 때 실행 환경을 지정해주는 속성으로, 환경을 구분하기 위해 사용된다. 프로파일은 JVM의 옵션으로도 설정을 할 수 있고, 스프링에서도 설정을 할 수 있다. JVM 옵션으로 프로파일을 설정하기 위해서는 다음처럼 옵션을 지정해줄 수 있다. -Dspring.profiles.active=dev 우리에게 주어진 활성 프로필이 test, prod, dev 과 같이 3개의 환경이 있다고 생각해보자. 1. @Profile 을 통한 특정 Profile에 활성화 시키기 예를 들어 특정 운영 환경, dev 에서만 사용하기를.. BackEnd/Spring 2022. 8. 23. [Spring] 스프링 AOP - 실전 예제 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 예제 만들기 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 이번 시간에는 예제 준비코드를 작성해보자. ▶ ExamRepository @Repository public class ExamRepository { private static int seq = 0; /** * 5번에 한번 실패하는 요청 */ public String save(String itemId) { seq++; if (seq % 5 == 0) { throw new IllegalStateException("예외 발생"); } return "ok"; } } ▶ ExamService @Ser.. BackEnd/Spring 2022. 8. 20. [Spring] 스프링 AOP - 포인트컷 - 2 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 5. @target, @within " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 정의 @target : 실행 객체의 클래스에 주어진 타입의 애노테이션이 있다면 조인 포인트로 인식 @within : 주어진 애노테이션이 있는 타입 내 조인 포인트 다음과 같이 사용한다. @target(hello.aop.member.annotation.ClassAop) @within(hello.aop.member.annotation.ClassAop) 타겟 class에 붙어있는 @ClassAop 애너테이션으로 조인 포인트를 판별한다. @ClassAop class Target{}.. BackEnd/Spring 2022. 8. 20. [Spring] 스프링 AOP - 포인트컷 - 1 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 애스펙트J는 포인트컷을 편리하게 표현하기 위한 특별한 표현식을 제공한다. @Pointcut("execution(* hello.aop.order..*(..))") 포인트컷 표현식은 AspectJ pointcut expression 즉 애스펙트J가 제공하는 포인트컷 표현식을 줄여서 말하는 것이다. ▶ 포인트컷 지시자 포인트컷 표현식은 execution 같은 포인트컷 지시자(Pointcut Designator)로 시작한다. 줄여서 PCD라 한다. 1. execution - 1 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 execution의 문법은 다음과 같다.. BackEnd/Spring 2022. 8. 19. [Spring] 스프링 AOP 구현 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 스프링 AOP 구현1 - 시작 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 이번 시간에는 @Aspect 를 사용해서 가장 단순한 AOP를 구현해보자. ▶ AspectV1 @Slf4j @Aspect public class AspectV1 { @Around("execution(* hello.aop.order..*(..))") public Object doLog(ProceedingJoinPoint joinPoint) throws Throwable { log.info("[log] {}", joinPoint.getSignature()); //join poi.. BackEnd/Spring 2022. 8. 18. [Spring] 스프링 AOP 개념 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. AOP 소개 - 핵심 기능과 부가 기능 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 애플리케이션 로직은 크게 핵심 기능과 부가 기능으로 나눌 수 있다. 1) 핵심 기능 해당 객체가 제공하는 고유의 기능이다. 예를 들어서 OrderService 의 핵심 기능은 주문 로직이다. 2) 부가 기능 핵심 기능을 보조하기 위해 제공되는 기능이다. 예를 들어서 로그 추적 로직, 트랜잭션 기능이 있다. 이러한 부가 기능은 단독으로 사용되지 않고, 핵심 기능과 함께 사용된다. 주문 로직을 실행하기 직전에 로그 추적 기능을 사용해야 하면, 핵심 기능인 주문 로직과 .. BackEnd/Spring 2022. 8. 17. [Spring] @Aspect AOP 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. @Aspect 프록시 - 적용 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 스프링은 @Aspect 애노테이션으로 매우 편리하게 포인트컷과 어드바이스로 구성되어 있는 어드바이저 생성 기능을 지원한다. ▶ 참고 @Aspect 는 관점 지향 프로그래밍(AOP)을 가능하게 하는 AspectJ 프로젝트에서 제공하는 애노테이션이다. 스프링은 이것을 차용해서 프록시를 통한 AOP를 가능하게 한다. AOP와 AspectJ 관련된 자세한 내용은 다음에 설명한다. 지금은 프록시에 초점을 맞추자. 우선 이 애노테이션을 사용해서 스프링이 편리하게 프록시를 만들어준다고 .. BackEnd/Spring 2022. 8. 16. 이전 1 2 3 4 5 다음