목록코딩 공부/Spring (29)
ballqs 님의 블로그
@TransactionalEventListener란?@TransactionalEventListener는 스프링에서 데이터베이스 트랜잭션의 경계를 따라 이벤트를 처리할 때 사용하는 특별한 어노테이션입니다. 이 어노테이션은 트랜잭션이 성공적으로 커밋된 이후에 이벤트가 처리되도록 보장합니다. 즉, 데이터베이스에 대한 작업이 확실히 완료된 후에만 이벤트가 실행되므로, 이벤트 핸들러에서 트랜잭션 내에서 발생한 변경사항을 신뢰할 수 있게 됩니다.@EventListener와의 차이점@EventListener는 트랜잭션과 관계없이 이벤트가 발생하면 즉시 처리됩니다. 반면에, @TransactionalEventListener는 트랜잭션의 상태에 따라 이벤트를 처리할 시점을 결정할 수 있습니다. 이를 통해 트랜잭션이 실패..
@Mock Mockito 라이브러리에서 제공하는 애노테이션입니다.Spring 컨텍스트와 무관하게, 단순히 Mock 객체를 생성하고 그 객체를 테스트 내에서 사용할 때 사용됩니다.Spring이 아닌 일반 JUnit 테스트에서 Mockito를 사용할 때 주로 사용합니다.주로 @BeforeEach나 @Test 메서드 내부에서 이 Mock 객체에 동작을 설정하거나 검증합니다. @ExtendWith(MockitoExtension.class)public class UserServiceTest { @Mock private UserRepository userRepository; @Test public void testFindUser() { // given User mock..
@Configuration 란?Spring에서 사용되는 애노테이션 중 하나로, 빈(Bean) 정의와 의존성 주입을 수동적으로 설정할 때 사용되는 클래스에 붙입니다. Spring 애플리케이션에서 사용하는 Java 기반 설정 클래스를 정의할 때 사용되며, 주로 애플리케이션의 각종 설정을 명시적으로 관리하는 데 유용합니다. 정확한 의미@Configuration 애노테이션이 붙은 클래스는 Spring IoC 컨테이너에서 하나의 설정 파일로 인식됩니다.이 클래스는 여러 개의 빈(Bean)을 생성하고 그 빈들이 서로 어떻게 의존하고 상호작용하는지를 설정할 수 있습니다.즉, 애플리케이션에서 사용할 객체(빈)를 생성하고, 그 객체들의 관계를 정의해주는 역할을 합니다.@Configurationpublic class Re..
CORS란 무엇인가?**CORS(Cross-Origin Resource Sharing)**는 다른 출처 간 리소스 요청을 허용하기 위한 웹 표준입니다. 기본적으로 브라우저는 보안상의 이유로 다른 출처에서의 리소스 접근을 차단합니다. 이를 **동일 출처 정책(Same-Origin Policy)**이라고 하는데, 동일 출처 정책에 의해 자바스크립트로 로드된 리소스가 다른 출처(서버)에 API 요청을 할 경우 브라우저가 이를 막습니다.여기서 다른 출처란 다음 세 가지 중 하나라도 다를 경우를 의미합니다:도메인 (예: example.com vs. api.example.com)포트 (예: http://localhost:3000 vs. http://localhost:8080)프로토콜 (예: http vs. http..
이번에 다룰 내용은 예전에 테스트 코드를 간단하게 다뤘던 적이 있어서 Mock를 통해 Service , Controller 를 테스트 하는 방법에 대해 작성해볼까 한다.예전에 작성한 Test 블로그 글 : https://ballqs.tistory.com/43Given-When-Then 패턴FIRST 원칙Fast : 유닛 테스트는 빨라야 함Isolated : 테스트는 각 테스트간에 독립적으로 실행해야함Repeatable : 테스트는 환경에 상관없이 실행할 때마다 같은 결과를 만들어야 함Self-validating : 테스트는 명확히 성공/실패로 구분하여 테스트 자체가 결과를 검증 할 수 있어야 함Timely : 테스트는 개발간에 즉시 작성해야 함. 대표적으로 TDD 방법론이 있음 given@Testpubl..
예전에 AOP에 관한 글을 작성했는데 그부분은 아주 간단하게 사용하는 방법에 대해서였다.그러나 현재 같은 AOP를 다시 작성하게 된 이유는 동작 흐름이 어떻게 흘러가는지?패턴은 어떤식으로 되는지 배웠기 때문에 작성한다. 이전 AOP 작성글 : https://ballqs.tistory.com/44AOP의 동작 흐름개념적 이해스프링 실제 동작시퀀스 다이어그램(Sequence Diagram)AOP 적용 전 AOP 적용 후Spring이 프록시(가짜 혹은 대리) 객체를 중간에 삽입한다.DispatcherServlet 과 ProductController 입장에서는 변화가 전혀 없다.호출되는 함수의 input, output 이 완전 동일하다"joinPoint.proceed()" 에 의해서 원래 호출하려고 했던 함수,..
Redis 공부해야지 공부해야지 생각만 했었는데 이제서야 들여다보면서 알아보고 적용해보았다.작성하는데 도움이 된 참조글 : https://akku-dev.tistory.com/102 Redis란?Remote Dictionary Server의 약자로, 오픈 소스 기반의 인메모리 데이터 구조 저장소이다.데이터베이스, 캐시, 메시지 브로커 등의 용도로 사용할 수 있고 Redis는 매우 빠른 속도로 데이터를 처리할 수 있어 성능이 중요한 애플리케이션에 많이 사용된다.Redis 특징 인메모리 저장소: Redis는 데이터를 메모리(RAM)에 저장하여 빠른 읽기 및 쓰기 성능을 제공한다. 이 덕분에 캐싱 서버나 세션 저장소로 많이 활용된다.다양한 자료 구조 지원: 일반적인 키-값(Key-Value) 구조뿐만 아니라,..
뉴스피드 프로젝트를 진행할 때 여러모로 작성해두었던 예외처리들이 많이 지저분해보여서 CustomException 작성 등 ErrorCode 를 Enum으로 관리해서 코드를 바꾸기로 했다.수정 전 UserService.java 의 한 메서드// 회원 탈퇴public void deleteAccount(AuthUser authUser, UserUnregisterDto userUnregisterDto) { // 사용자 조회 User user = userRepository.findById(authUser.getUserId()) .orElseThrow(() -> new IllegalArgumentException("사용자를 찾을 수 없습니다.")); if (!user.getEma..
뉴스피드 게시물 조회하는 기능을 구현하고 있는 도중 발생한 문제이다.해당 데이터들을 어떻게 가져와야 할지? 고민이 많았고 모든 과정을 기록하진 못하지만 이렇게 해서 해결했더라 정도를 기록하는 글이다.도입부뉴스피드 게시물 조회란?내 게시물이랑 친구 게시물을 페이지네이션 및 정렬기준과 기한 검색을 기반으로 하는 기능이다. 해당 기능을 구현하기 위해 구성한 Entity의 구성을 작성해야 추후 내가 다시 봤을때 왜 그랬는지 이해가 쉬울 것 같다.작성한 구조는 아래와 같다. 해당 Entity의 구성에서 뉴스피드 게시물 조회를 진행하기로 했다. 게시물 위주의 조회다보니 주가 되었던건 게시물(Board) 기반으로 코드를 작성하여 아래와 같이 틀을 잡았다.NewsfeedController.java 작성@RestCon..
Spring Security란?Spring 서버에 필요한 인증 및 인가를 위해 많은 기능을 제공해주며 웹 개발 과정에서 필수적인 사용자 관리 기능을 구현하는데 도움을 주는 Spring의 강력한 프레임워크이다.dependencies 추가implementation 'org.springframework.boot:spring-boot-starter-security'@Configuration를 통한 사용 방법@Configuration@EnableWebSecurity // Spring Security 지원을 가능하게 함public class WebSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) ..