일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- auto configuration
- fotmatter
- @AutoConfiguration
- gradle
- RestTemplate
- findFirst
- jpa
- LogInterceptor
- findAny
- AOP target
- Spring Boot
- 쓰레드 안전
- AccessLevel
- JsonStringType
- AOP
- spring
- ClientHttpRequestInterceptor
- Starter
- Save Action
- restTemple
- AOP 매개변수
- 개방/폐쇄 원칙
- 포맷터
- Stream
- Thread Safety
- java
- JsonType
- AOP this
- vaultTemplate
- ResponseBodyAdvice
- Today
- Total
목록JAVA (25)
맨땅에 헤딩하는 개바른자
git https://github.com/ymwoo88/stream/tree/feature/sorted-%EC%98%88%EC%A0%9C 설명 데이터가 순서대로 정렬된 Stream을 리턴하는 기능을 제공합니다. 데이터의 종류가 기본적으로 서로 비교할 수 없다면 어떤 식으로 비교할지를 알려주는 comparator을 인자로 제공해야 합니다. sorted Stream sorted(); Stream sorted(Comparator
Git https://github.com/ymwoo88/stream/tree/feature/filter-%EC%98%88%EC%A0%9C 설명 Stream의 Filter API는 Predicate에서 true를 반환하는 데이터만 존재하는 Stream을 리턴하는 기능을 제공합니다. filter는 and조건으로 중첩적용이 가능하나 or조건은 사용되지 않습니다. Filter Stream filter(Predicate
서론 실 업무에서 Stream을 많이 사용하고 있습니다. 주로 쓰는 메소드만 사용하게되는데 잘 알지 못해서 사용을 더 안하게되는 것 같습니다. 생각보다 유용한 기능도 많다보니 이번 포스팅에서는 좀더 Stream을 유용하게 사용하기위해 기초를 다지는입장으로 상세하게 알아보겠습니다. 스트림이란? 자바 8에서 추가된 스트림(Streams)은 컬렉션, 배열 등에 저장된 요소들을 하나씩 참조하면서 코드를 실행할 수 있는 기능입니다. Stream을 사용하면, 불필요한 for문을 사용하지 않을 수 있고, 람다식을 활용할 수 있어서 코드를 직관적이게 처리할 수 있습니다. 특징 Stream은 데이터를 담는 저장소는 아니다. Stream은 데이터를 변경하지 않는다. Stream은 재사용할 수 없다. Stream은 각 요..
이번 포스팅은 AOP를 활용하여 Null체크하는 방법에 대해서 설명하는 글입니다. 사실 용도로봤을 때는 큰 장점이 있는 기능은 아닙니다만 공부하는 겸 생각해내서 만들어본 기능입니다. (변수 타입별로 null체크하는 건 개선이 필요한 코드입니다.) 목적 컨트롤러에서 @Valid등 다양한 validation이 처리되어 service 단으로 유입됩니다. 그렇기에 service에서 null체크 없이 마음껏 데이터를 get하여 사용하기 부담이 없습니다. 근데 가끔은 service로직에서 infra단에서 조회 된 데이터의 경우 null 체크를 해야하는 경우가 발생되곤 합니다. 이럴 때 우리가 쉽게 null 처리를 할 수 있는 방안을 모색하고자 고안해낸 방법입니다. 사용 가이드 servie에서 public void ..
특정 메소드 단위로 어노테이션이 붙은 곳에서만 param 값에 대한 로그를 찍는 AOP를 적용해보는 글입니다. 실전코드 : https://github.com/ymwoo88/study-springboot-aop/tree/feature/스프링-AOP-실전코딩-로그trace 실전예제 커스텀 어노테이션 생성 로그 Trace에 사용 될 어노테이션으로 명칭을 그래로 Trace로 생성 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface Trace { } @Aspect 컨피그 추가 어노테이션 기반 joinPoint 생성 @Slf4j @Aspect public class TraceAspect { @Before("@annotat..

[AOP] this, target는 스프링 프레임워크에서 사용되는 개념입니다. this: 메소드 실행 객체**(프록시객체)**를 참조하는 키워드입니다. target: 실제 메소드가 구현된 객체를 참조하는 키워드입니다. 이를 이용하여, 스프링에서 AOP를 구현할 때, 메소드 실행 전/후에 추가적인 작업을 수행할 수 있습니다. 예를 들어, 로깅 기능을 추가하고 싶다면, AOP를 활용하여 해당 메소드 실행 전/후에 로깅을 수행할 수 있습니다. 이처럼, [AOP] this, target는 스프링에서 AOP를 구현하는 데 필수적인 개념이므로, 이를 잘 이해하고 활용하는 것이 중요합니다. this와 target은 다음과 같이 적용타입 하나를 정확하게 지정해야 한다. this(hello.aop.member.Membe..
이 문서에서는 AOP(Aspect Oriented Programming)에서 매개변수 전달에 대해 다룹니다. 포인트컷 표현식을 사용해서 어드바이스에 매개변수를 전달 할 수 있는 방법을 알아보겠습니다. this. target, args, @targer, @within, @annotation, @args 다음과 같은 예제코드가 있다. @Before("allMember() && args(arg...)") public void logArgs3(String arg) { log.info("[logArgs3] arg={}", arg); } 포인트컷의 이름과 매개변수의 이름을 맞추어야 한다. 여기서는 “arg”로 맞추었다. 추가로 타입이 메서드에 지정한 타임으로 제한된다. 여기서는 메서드의 타입이 “String”으로 ..
AOP에서는 @annotation과 @args를 이용하여 메소드 실행 전/후에 추가적인 작업을 할 수 있습니다. @annotation: 메소드에 적용된 어노테이션을 기반으로 추가 작업을 수행할 수 있습니다. 예를 들어, @Transactional 어노테이션이 적용된 메소드에서는 트랜잭션을 관리하는 작업을 추가로 수행할 수 있습니다. @args: 메소드의 인자에 따라 추가 작업을 수행할 수 있습니다. 예를 들어, 메소드의 인자 중 특정 클래스 타입을 가진 인자가 있는 경우, 그에 맞는 추가 작업을 수행할 수 있습니다. 이러한 어노테이션을 이용하여 AOP에서는 메소드 실행 전/후에 로깅, 보안, 트랜잭션 등 다양한 작업을 추가로 수행할 수 있습니다. 예제코드 어노테이션을 생성 package hello.aop..

많이 쓰이지 않은 기능이지만 알고있으면 좋은 내용이다. AOP로 포인트컷을 활용할 때 상황에 따라 사용할 수 있다. target은 인스턴스의 모든 메서드를 조인 포인트로 동작한다. target은 부모의 메소드까지 적용 within은 해당 타입 내에 있는 메서드만 조인 포인트로 동작한다. 자식본인의 메서도만 허용 interface Parent { parentMethod(); } @ClassAop class Child implements Parent { childMethod(); } // @target : 인스턴스 기준으로 모든 메서드의 조인 포인트를 선정, 부모 타입의 메서드도 적용 // Parent.parentMethod() 감지 O // Child.childMethod() 감지 O @Around("ex..
예제 git소스 : https://github.com/ymwoo88/ThreadSafeChecker 공통유틸을 만들고 간편하게 쓰기위해서 static 메소드를 사용하는 경우가 있습니다. 우리는 이 때 Thread safe할까라는 고민을 해보아야 합니다. 왜? 가장 큰 이유는 동시성 이슈가 있을 수 있습니다. 예를들어 숫자를 넣으면 동일한 숫자로 곱셈을하고 2초 뒤에 반환해주는 기능이 있다고 가정 해봅니다. [정상 케이스] 1번 쓰레드가 static메소드를 수행하면서 값을 2을 전달 합니다. 2초 뒤 결과를 4를 리턴 받습니다. 2번 쓰레드가 1초 뒤에 static메소드를 수행하면서 값을 3을 전달 합니다. 2초 뒤 결과를 6을 리턴 받습니다. [비정상 케이스] 1번 쓰레드가 static메소드를 수행하면서..