spring/TDD(8)
-
Spring Boot3 403, 401 - MockMvc, Spring Security Test
참조 코드https://suhyeon-developer.tistory.com/38https://tlatmsrud.tistory.com/77https://velog.io/@wonizizi99/SpringSpring-security-CSRF란-disablehttps://velog.io/@jmjmjmz732002/Springboot-Junit5-컨트롤러-테스트-401-에러를-마주쳤다https://velog.io/@tjdtn0219/SpringSecurity적용-후-Controller-테스트코드-작성-시-발생했던-오류들-Feat.-Junit5-csrfhttps://lemontia.tistory.com/1088MockMvc를 활용하여 테스트하는 방법을 알아봤으니, 이제 내 프로젝트에도 적용해보자.@RestCont..
2025.06.12 -
Spring Boot MockMvc 이해하기 : 테스트 흐름 및 사용예제
해당 글에서는 MockMvc에 대해 이해하고 활용하는 방법에 대해 확인해보자.MockMvc스프링 프레임워크에서 제공하는 웹 애플리케이션 테스트용 라이브러리를 의미이를 사용하면 웹 애플리케이션의 다양한 컴포넌트에 대해 테스트 가능MockMvc를 사용하면 HTTP 요청을 작성하고 컨트롤러의 응답을 검증이를 통해 통합 테스트를 실행하지 않고도 컨트롤러의 동작을 확인가능MockMvc를 이용한 테스트 목적MockMvc를 이용하여 컨트롤러의 동작을 테스트하는 데 사용컨트롤러의 엔드포인트를 호출하여 HTTP 클라이언트의 요청을 모방하고 적절한 응답을 확인하기 위해 테스트를 수행이러한 테스트 과정을 통해 애플리케이션의 서비스 로직이나 API 엔드포인트가 의도한 대로 동작하는지 확인하고, 버그를 발견하고 수정하는 데 도..
2025.06.12 -
Spring Boot Junit5 이해하기 - 환경 구성 및 활용 예제
해당 글에서는 이전에 습득한 이론을 바탕으로 Spring Boot JUnit을 다양한 예제를 통해서 익혀보자.Spring Boot 2.2 + 이상 버전부터는 기본적으로 의존성이 추가되어 있기에 별도의 세팅은 하지 않는다.클래스/ 테스트 전후 수행 테스트 : @BeforeAll, @AfterAll, @BeforeEach, @AfterEach테스트 수행 구조@BeforeAll, @AfterAll 어노테이션을 이용하여 테스트 클래스의 시작/후에 단 한번 호출@BeforeEach, @AfterEach 어노테이션을 이용하여 매 @Test 전후에 호출어노테이션 설명@BeforeAllJUnit 테스트 클래스 내에서 모든 테스트 메소드 실행 전에 한 번 실행되는 메소드를 정의하는 데 사용됩니다. 보통 테스트 환경의 설..
2025.06.10 -
Spring Boot JUnit5 이해하기 - 이론 및 구조
해당 글에서는 JUnit에 대해 이해하고 Spring Boot 환경에서 환경을 구성하는 방법에 대해 알아보고자 한다.JUnit5Java언어에서 독립된 단위 테스트(Unit Test)를 지원해주는 프레임워크JUnit Jupiter의 주요 어노테이션어노테이션 설명@Test테스트 메서드를 정의하는 데 사용되는 어노테이션입니다. 이 어노테이션이 지정된 메서드는 JUnit Jupiter에서 테스트로 실행됩니다.@ParameterizedTest매개변수화된 테스트를 정의하는 데 사용되는 어노테이션입니다. 이 어노테이션이 지정된 메서드는 여러 매개변수를 사용하여 반복적으로 실행됩니다.@BeforeEach각각의 테스트 메서드가 실행되기 전에 실행되는 코드를 정의하는 데 사용되는 어노테이션입니다.@AfterEach각각의 ..
2025.06.10 -
MockMvc, @Transactional(readOnly = true)와 @Transactional을 분리하라고?
출처 : 인프런 Practical Testing을 수강하며 정리하였습니다. MockMvc Mock(가짜) 객체를 사용해 스프링 MVC동작을 재현할 수 있는 test framework @Transactional(readOnly = true)와 @Transactional을 분리해야한다! 위처럼 하게되면, JPA에서 이점이 발생하게 된다. JPA에서는 스냅샷을 저장해서 트랜잭션이 commit하는 시점에 변경감지를 한다. readOnly = true를 하게 되면, create, update, delete작업이 동작을 하지 않아서 스냅샷 저장 및 변경감지를 하지 않아도 되는 이점이 발생한다. 즉, 성능향상의 효과가 발생한다! CQRS - Command(create, update, delete)와 Query(Rea..
2024.01.23 -
deleteAll()보다 deleteAllInBatch()가 더 권장되는 이유가 뭐야?
deleteAll vs deleteAllInBatch deleteAll() : SimpleJpaRepository()에 오버라이딩되어 있으며, MyBatis, JdbcTemplate 등 기술에 상관없이 사용가능하다. 또, deleteAll()이 실행되면, findAll()의 결과로 얻은 리스트를 순회하며, 데이터를 한개씩 삭제함. 즉, N개의 데이터가 존재하면 N개릐 DELETE쿼리가 실행된다. -> 테스트 실행시간이 오래 걸림. deleteAllInBatch() : 테이블에 있는 데이터를 전부 지우는 DELETE쿼리가 실행된다. 즉, 데이터 크기와 관계없이 한번의 쿼리로 clear가 가능함. package org.springframework.data.jpa.repository.support; @Repo..
2024.01.15