Spring 트랜잭션 이벤트 처리와 트랜잭션 정합성, @TransactionalEventListener
·
Server/Spring&Spring Boot
들어가며이벤트 발행 시, 트랜잭션을 어떻게 처리할 것인가에 대해 고민하던 중 Spring에서 트랜잭션 처리 후에 이벤트를 작동시키는 마법 같은 클래스가 있다는 것을 알게 되었습니다.이에 해당 어노테이션이 무엇인지, 어떤 역할을 하는지 파악하려합니다.먼저, 이벤트가 무엇인지 정의 및 설명하며 시작하겠습니다.Event란?시스템에서 발생한 의미 있는 사건 또는 상태 변화를 뜻합니다.‘사용자 가입 완료’, ‘주문 생성’, ‘상품 재고 부족’등이 이벤트라고 불릴 수 있습니다. 즉, 이벤트는 특정 비즈니스 프로세스가 완료되거나 중요한 상태 변경이 일어났음을 나타냅니다. (예: '회원가입이라는 비즈니스 프로세스가 성공적으로 완료되었다'). 이벤트는 다음과 같은 정보들을 포함합니다.발생한 사실: 어떤 일이 발생했는가?..
[Spring] Spotless + Pre Commit
·
Server/Spring&Spring Boot
SpotlessSpotless는 코드 컨벤션을 지정한 규칙에 맞게 설정해 주는 툴입니다.간단하게 build.gradle에 스크립트를 추가한 후 터미널에서 명령어를 입력하면 적용할 수 있습니다.1. build.gradle의 최상단에 존재하는 plugins에 코드를 추가합니다. plugins { id 'java' ... id 'com.diffplug.spotless' version '6.24.0' }2. 공식문서의 Java 코드 부분을 build.gradle에 추가합니다.spotless { java { // Use the default importOrder configuration importOrder() // optional: you can specify import g..
[Spring] @Controller, @Service, @Repository 어노테이션 차이점. 나만의 @Component 어노테이션 생성
·
Server/Spring&Spring Boot
공부 이유 개발을 하다 보면 @Controller, @service, @Repository 어노테이션을 각 계층에 맞게 붙여서 사용하게 된다. 여러 교육을 받으면서 이 어노테이션이 무슨 차이를 가지고 있는지 설명을 들은 적이 없다. 그냥 Controller Class에는 @Controller 붙이고, Service Class에는 @Service 붙이라는 이야기를 듣고, 사용하기 급급했던 것 같다. 추후에 @RestController를 알게 되면서 @Controller와 @RestController의 차이를 개인적으로 공부하게 되었지만.. 어노테이션 비교 각 어노테이션을 타고 어떻게 구성되어 있는지 한 번 알아보자 @Controller @Target(ElementType.TYPE) @Retention(Re..
[Spring Security] UserDetails를 User에 구현하여 사용하기.
·
Server/Spring&Spring Boot
Spring Seucurity를 설정하다 보면 UserDetailsService를 통해 가입된 회원인지 확인하여 반환하는 메서드를 구현하게 된다. Spring Security Config @EnableWebSecurity @Configuration @RequiredArgsConstructor public class SecurityConfig { ... @Bean public UserDetailsService userDetailsService() { return email -> memberRepository.findByMemberEmail(email) .orElseThrow(() -> new UsernameNotFoundException("존재하지 않는 회원입니다.")); } } 이렇게 작성하고 나면, 바..
[Refactor] boolean을 사용하여 메서드 정리
·
Server/Spring&Spring Boot
개선이 필요했던 이유 개발을 진행하던 도중 요청에 대해 수락, 거절을 해야 하는 메서드를 생성하게 되었다. 컨트롤러에서 어떤 요청을 타고 들어오느냐에 따라 accept, refuse 메서드를 선택하게 된다. 90%에 대한 로직은 동일하고 마지막 부분에 accept, refuse에 따라 상태변환 메서드 한 줄만 달라지는 메서드였다. 코드 @Transactional public void acceptFriendRequest(Long receiverNo, Long requesterNo) { Member requester = memberRepository.findById(requesterNo).orElseThrow( () -> { throw new OnlyUAppException(ErrorCode.MEMBER_N..
[Spring] @Builder 사용시, 초기화해야할 필드가 존재할 때 발생하는 에러. @Builder will ignore the initializing expression entirely
·
Server/Spring&Spring Boot
문제 WebSocket을 사용하는 예제를 수정하며 따라가고 있을 때 다음과 같은 에러가 발생하였다. @Builder will ignore the initializing expression entirely. If you want the initializing expression to serve as default, add @Builder.Default. If it is not supposed to be settable during building, make the field final. 생성자를 사용하여 초기화하는 방법 대신 빌더를 사용하여 객체를 초기화 하는 방법을 사용하기 위해 @Builder를 사용했는데 이로 인하여 에러가 발생한 것이었다. 문제 해결 다행히도 해당 문제에 대해서는 에러 메세지에서 해..
[Docs] Spring Rest Docs HTML 출력하는 법.
·
Server/Spring&Spring Boot
사용자분들이 올리신 글들을 보면 Build를 할 경우, 설정에 따라 자동적으로 *.html 파일 출력이 이뤄진다고 적혀있었다. 하지만 아무리 Build를 눌러도 반응이 없고, 직접적으로 Task를 돌려도 반응이 없어서 다시 찾아보니, Template라는 게 필요한 것 같았다. Templates 설정 Spring REST Docs Document RESTful services by combining hand-written documentation with auto-generated snippets produced with Spring MVC Test, WebTestClient, or REST Assured. docs.spring.io 위의 Spring REST Docs의 Reference Doc의 Usin..
[Spring Security] Spring Security을 추가하면 왜 로그인 화면으로 넘어가는 걸까?
·
Server/Spring&Spring Boot
의문 build.gradle에 Spring Security를 추가하게 되면 로그인 화면으로 넘어가는 것을 볼 수 있다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-security' } 그렇다면 왜 로그인 화면으로 넘어가게 되는 걸까? 원인을 찾아라 우리는 로그인 화면으로 넘어가지 않도록 SpringConfig라는 것을 만들고, SeuciryFilterChain를 재정의하며 permitAll() 메서드를 사용해서 로그인 창이 뜨지 않고 원하는 페이지에 접속할 수 있도록 설정하고 있다. 그래서 SecurityFilterChain에 대해 알아보기로 했다. SecurityFilterChain public interfac..
코드플리
'Server/Spring&Spring Boot' 카테고리의 글 목록