JVM/Spring

JVM/Spring

[SPRING] AOP 우선순위 설정하기.

🤔서론 AOP에 대해서 공부하다가 만약 AOP가 두 개 이상이 적용되면 순서는 어떡하지란 생각이 들었다. 😃본론 순서적용 되기 전 위와 같은 AOP를 두개를 만들었다. 호출결과 어째서 이 순서대로 나왔는지는 잘 이해하지 못하겠다.. 아마 직접만든 AOP들의 순서를 Spring에서 지정해주는대로 아무렇게나 되길 원하는 개발잔 없을거다. 그러므로, 직접 순서를 정해주자! 순서적용 후 호출결과 Order 숫자가 작을수록 먼저 실행되고, 큰 수가 뒤에 실행된다. => 오더숫자가 클 수록 먼저 감싸진다. 이렇게 @Order(value = ?) 설정을 통해 내가 원하는대로 AOP 감싸는 순서를 정할 수 있다.

JVM/Spring

[SPRING] @Transactional (트랜잭션) 강제 롤백

😎본론 로직을 구현하다가 아래와 같은 상황을 마주한 적이 있었다. 트랜잭션 내에서 쿼리작업을 진행하다가 validation을 통해 걸렸을 때 에러는 발생하지 않고, 지금까지 변경된 쿼리를 롤백을 시켜야 할 떄 @Transactional 은 Exception 이 발동할 때만 롤백을 시킨다. 🤔그러면 어떻게 롤백을 시켜야할까? TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); 트랜잭션이 롤백하는 방법을 강제적으로 넣어주는 것이다. setRollbackOnly 을 통해 트랜잭션이 종료되었을 때 무조건 롤백을 시키도록 설정하는 것이다. 물론 해당 로직은 리팩토링 작업을 통해 validation과 쿼리작업을 분리하였다. 당장 테스트를 해..

JVM/Spring

[SPRING] Spring AOP Proxy - @Transactonal 사용 시 주의사항

😅서론 상속받은 클래스 내에 @Transactonal 이 걸려있는 삭제 메소드가 트랜잭션이 발동을 안 하는 버그를 발견했다. 같은 클래스 내에서 프록시가 발동하지 않는다는 것은 알고 있었지만, 막상 겪으니 다른 클래스인데 뭐가 문제지..? 란 생각에 빠져서 찾는 대에 시간을 좀 사용했다.. 그 김에 작성.. 😁본론 스프링은 AOP를 하기위해 기본적으로 디자인패턴인 프록시패턴을 채택하여 사용하고 있다. AOP(Aspect Oriented Programming) 관점지향 프로그래밍이라는 뜻으로 여러 곳에서 사용되는 공통된 로직을 모듈화하여 비즈니스 로직에서 분리시켜준다. 이로써 우리는 비즈니스 로직 외에 부가적인 로직은 따로 외부에서 관리하여 유지보수 및 재사용성이 용이해진다. 프록시(Proxy) 스프링의 ..

JVM/Spring

[SPRING] feign은 뭘까?

🤔 서론 다른 서버와 통신을 하기 위한 API 를 설계 및 개발을 하면서 알게 된 feign에 대해서 정리하기 위해 작성하게 되었다. 그 전까지는 spring에서 다른 서버를 호출해본 적이 없었기 때문에 어떻게 하는지에 대한 궁금증이 있었는데 이번 기회에 알게 될 수 있었다. 🤷‍♂️ feign은 그래서 뭔데! - Netflix에서 만든 HTTP client binder로서 기존 http client 작성을 쉽게 만들어주는 라이브러리이다. - interface를 작성하고 annotation을 붙여서 쉽게 사용할 수 있기 때문에, HTTP API를 균일하게 바인딩하여 복잡성을 줄여준다. - 이전에는 RestTemplate 방식과 WebClient 방식이 존재했지만 현재 스프링 커뮤니티에서는 RestTemp..

JVM/Spring

[SPRING]@Transactional Annotation 알고 쓰자

- 첫 작성일 : 21년 3월 21일 velog 블로그 1. 서론 초반 @Transactional 어노테이션에 대해 자세히 알아보지 않고, 막연히 롤백때 사용한다고 하여 SQL C,U,D 를 할 때마다 메소드 위에 붙여서 사용하곤 하였다. 하지만, 내 코드를 보신 선임께서 단지 @Transactional 만 붙이면 롤백이 안되고, @Transactional(rollbackFor = Exception.class) 을 붙여야 된다고 알려주셨다. 여기에서 뭐 때문인지에 대해 호기심에 트랜잭션에 대해 찾아보다가 내가 생각했던 것 보다 더 많은 기능들이 존재한다는 것을 알고 정리해보려 한다. 2. 트랜잭션이 뭐지? 데이터베이스의 상태를 변경하는 작업 또는 한번에 수행되어야 하는 연산들을 의미한다. begin, c..

JVM/Spring

[SPRING] lombok 활용

Lombok 이란 ❓❓ 자바 Model(DTO, VO, Domain)에서 반복적으로 만들어야하는 것들을(Getter/Setter...) 어노테이션을 통해 코드의 줄을 줄여주고, 가독성을 높이는 데에 굉장한 도움을 주는 라이브러리 입니다. 간단한 예제를 먼저 보여드리겠습니다. Getter / Setter 기존방식 경우 위처럼 객체를 사용하기 위해 배가 되는 줄을 반복적으로 만들어야하는 일이 빈번히 발생하곤 합니다. 위처럼 getter와 setter를 비롯하여 toString, Builder 등을 더 만들게 되면 더 많은 줄이 생기게 될 것입니다. 이를 매우 간편하게 줄여주는 도구가 lombok입니다. 위처럼 불필요한 줄들을 줄여 가독성면을 높이게 됩니다. 오른 쪽 면을 보시면 getter와 setter가 ..

Hyo Kim
'JVM/Spring' 카테고리의 글 목록 (4 Page)