전체 글(84)
-
Spring Boot Junit5 이해하기 - 환경 구성 및 활용 예제
해당 글에서는 이전에 습득한 이론을 바탕으로 Spring Boot JUnit을 다양한 예제를 통해서 익혀보자.Spring Boot 2.2 + 이상 버전부터는 기본적으로 의존성이 추가되어 있기에 별도의 세팅은 하지 않는다.클래스/ 테스트 전후 수행 테스트 : @BeforeAll, @AfterAll, @BeforeEach, @AfterEach테스트 수행 구조@BeforeAll, @AfterAll 어노테이션을 이용하여 테스트 클래스의 시작/후에 단 한번 호출@BeforeEach, @AfterEach 어노테이션을 이용하여 매 @Test 전후에 호출어노테이션 설명@BeforeAllJUnit 테스트 클래스 내에서 모든 테스트 메소드 실행 전에 한 번 실행되는 메소드를 정의하는 데 사용됩니다. 보통 테스트 환경의 설..
09:42:31 -
Spring Boot JUnit5 이해하기 - 이론 및 구조
해당 글에서는 JUnit에 대해 이해하고 Spring Boot 환경에서 환경을 구성하는 방법에 대해 알아보고자 한다.JUnit5Java언어에서 독립된 단위 테스트(Unit Test)를 지원해주는 프레임워크JUnit Jupiter의 주요 어노테이션어노테이션 설명@Test테스트 메서드를 정의하는 데 사용되는 어노테이션입니다. 이 어노테이션이 지정된 메서드는 JUnit Jupiter에서 테스트로 실행됩니다.@ParameterizedTest매개변수화된 테스트를 정의하는 데 사용되는 어노테이션입니다. 이 어노테이션이 지정된 메서드는 여러 매개변수를 사용하여 반복적으로 실행됩니다.@BeforeEach각각의 테스트 메서드가 실행되기 전에 실행되는 코드를 정의하는 데 사용되는 어노테이션입니다.@AfterEach각각의 ..
09:37:54 -
Swagger 세팅 시 트러블 슈팅 (feat. Spring Boot 3, Spring Security)
이번에는 Spring Boot 3이 기본적으로 적용됨에 따라, 이에 따른 Swagger 세팅 방식을 알아보고자 한다. 참조 링크https://adjh54.tistory.com/561https://jong-bae.tistory.com/12https://www.baeldung.com/java-spring-security-permit-swagger-uihttps://dev-meung.tistory.com/entry/해커톤-HY-THON-트러블슈팅-Swagger-500-에러-Failed-to-load-API-definitionhttps://velog.io/@sinryuji/Swagger와-RestControllerAdvice-충돌-문제https://velog.io/@hotdog1029/Spring-Boot-3...
2025.06.07 -
JWT (feat. Spring Security, Spring Boot 3)
현재 Spring Boot 3이 기본으로 설정됨에 따라, jwt도 버전이 업그레이드 됨에 따라 그에 맞게 JWT로그인 방식을 전체적으로 수정해야했다. 아래는 Spring Boot3, jwt (0.11.5) 버전에 맞도록 구현한 JWT로그인 방식을 정리하였다. 먼저 JWT의 구조를 살펴보겠다. JWT (Json Web Token)JWT 토큰은 Base64로 인코딩하여 아래와 같은 문자열 형식을 사용한다. (Header)xxxxxxxxx.(Payload)xxxxxxxxx.(Signature)xxxxxxxxx JWT 토큰은 크게 세 가지로 나눌 수 있다. Headeralg : 인코딩에 사용되는 알고리즘 종류현재, si-ai프로젝트에는 Keys.hmacShakeyFor() 를 통해HMAC-SHA알고리즘을 적용..
2025.06.04 -
정적팩토리 메소드 vs 빌더 패턴
객체를 생성하는 방법에는 두가지 주요 방법으로 정적 팩토리 메소드와 빌더 패턴이 있다.두 가지 사용법에 대해 '왜' 사용하면 좋은지에 대해 생각을 해본적이 없었던것 같아 내용을 정리해보려고 한다. 이 두 가지 방법은 객체를 생성하고 초기화하는 과정에서 각자 고유의 장점을 제공한다.정적 팩토리 메소드 (=인스턴스를 반환)정적 팩토리 메소드는 클래스의 인스턴스를 반환하는 정적 메소드이다.이 메소드는 생성자와 비슷한 역할을 하지만,직접적으로 생성자를 호출하는 대신객체 생성의 세부사항을 캡슐화한다.객체를 만들때 new키워드를 사용하여 생성자를 호출하는 방법 대신,클래스 내부에 정의된 static메소드를 통해 객체를 생성하고 반환한다.이를 통해 객체 생성 로직을 메소드 내에 숨겨 사용자에게 보다 명확하고 관리가 ..
2025.05.30 -
save, saveAll, bulk insert
save와 saveAll의 차이save의 내부 로직ave를 살펴보면, 하나의 트랜잭션에서 관리가 되고 있으며,주어진 entity가 새 entity의 경우, persist를 통해 DB에 저장하며기존에 존재하는 entity의 경우, merge를 통해 변경된 점을 DB에 병합한다.saveAll의 내부로직saveAll을 살펴보면, 이 메서드 역시 하나의 트랜잭션에서 관리된다.내부적으로는 for문을 통해 save를 반복 호출하게된다.그렇다면 save와의 차이점은 어떤것일까?가장 큰 차이는 트랜잭션 관리이다. saveAll에서는 트랜잭션이 메서드 레벨에 위치하여작업 수행동안 동일한 트랜잭션 내에서 처리된다.따라서 for문을 통해 save를 직접 반복 호출하는 것보다 더 효율적일 수 있다.즉, saveAll을 사용할..
2025.03.17