Spring(15)
-
Jpa Save vs SaveAll 성능 차이 체감해보기
프로젝트를 진행하면서 JPA의 save와 saveAll 메서드를 사용해 데이터를 저장하게 됩니다. 일반적으로 100개 미만의 데이터를 저장할 때는 두 메서드 간의 성능 차이를 크게 느끼지 못할 수 있습니다. 그러나 대량의 데이터를 저장할 때는 두 메서드의 성능 차이가 매우 크다는 점을 확인할 수 있었습니다. 이번 글에서는 이 차이에 대해 살펴보고 각각의 사용 시 주의해야 할 점을 정리해 보겠습니다. Save vs SaveAll 차이점 save와 saveAll의 가장 큰 차이는 트랜잭션의 생성 방식과 처리 방식에 있습니다.동작 방식: 데이터를 하나씩 저장하며, 호출될 때마다 별도의 트랜잭션을 생성하여 처리합니다.특징: N개의 데이터를 저장할 경우 N번의 트랜잭션이 생성됩니다.동작 방식: 한 번의 트랜잭션 ..
2025.01.11 -
[트러블 슈팅 - 중복 API 요청] API 멱등성 (feat: redis) 해결 완료
이번 문제는 API 요청이 중복 클릭과 네트워크 지연으로 동일한 요청을 반복하는 문제가 발생하는 일이 생겨 이를 해결하는 과정을 작성할 예정입니다. 멱등성이란 멱등성은 동일한 연산을 여러 번 수행해도 결과가 달라지지 않는 성질을 말한다. 이는 클라이언트에서 같은 요청을 여러 번 보내거나 네트워크 지연으로 인한 오류로 인한 중복 요청이 오더라도 서버는 상태가 변하지 않게 유지하도록 보장하는 것을 말한다. 멱등성이 보장되지 않는다면 어떻게 될까? 멱등성이 보장되지 않는 요청의 종류에는 무엇이 있을까? 서버 리소스 조회 혹은 대체하는 GET, PUT의 경우 여러번 요청해도 멱등성이 보장된다. 불가피하게 같은 요청이 발생하더라도 데이터 변경이 없기 때문이다. 문제가 생길 거 같은 DELETE의 경우에도 데이터..
2024.09.11 -
[MockMvc - SpringTest] Spring Security Login Test
Spring Boot Security를 이용하여 로그인 테스트를 실행 방법을 알아보자. 기본 세팅 - gradle testImplementation 'org.springframework.security:spring-security-test' Test를 하기 위해서는 security-test 라이브러리를 추가해줘야 한다. 기본적으로 Mockmvc 가상 웹 환경에서 진행하는데 해당 과정의 동작 처리에 필요하다(CSRF 토큰, 인증, 인가등등..) 테스트 코드 작성 방법 @Slf4j@SpringBootTest@TestPropertySource(locations = "classpath:application-api.properties")@ActiveProfiles("test")@Transactional@Auto..
2024.08.25 -
[트러블 슈팅 - Spring Test] 의존성 주입 실패 (test yml 파일 안 읽힘)
문제 사항 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'messageController' defined in file [~~~\controller\MessageController.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'messageService': Injection of autowired dependencies failedCaused by: org.springframework.beans.factory.BeanCreationExcep..
2024.08.25 -
Spring Security와 Redis 이용한 로그인 세션 유지
서론 Spring Security와 Redis를 이용해 로그인 세션을 유지하고 재로그인 없이 지속적으로 로그인 상태를 관리하기 위한 코드 작성. 토이 프로젝트에서 사용자는 1명으로 고정으로 확장할 예정이 없지만 지속적인 NAS 해킹 시도 및 네이버 아이디 해킹 이슈로 기존 공부했던 Spring Security + Redis를 이용해 로그인 세션 구성하기로 함. JAVA - Gradle 버전plugins { id 'java' id 'org.springframework.boot' version '3.2.4' id 'io.spring.dependency-management' version '1.1.4'}java { sourceCompatibility = '17'}dependencies { //redis imp..
2024.08.14 -
Github Action 이용한 CI/CD Spring Server 자동화 배포 (feat: Synology Nas)
프로젝트를 배포할 때 도커 이미지를 수동으로 도커 허브로 push 하고 다시 시놀로지 나스 도커로 poll 해오는 과정이 매우 귀찮기 때문에 깃허브에 올린 코드를 자동으로 재배포하는 파이프라인을 구축하게 되었습니다. 목차시놀로지 나스 ssh 접속 키 발급gradle.yml 파일 생성시놀로지 나스 ssh 접속 키 발급 시놀로지 나스 도커에 GitHub Actions를 이용해 배포하려면 SSH 접속을 위한 키가 필요합니다. 우선 SSH 접속을 허용하고 나스에 접속합니다. Windows에서는 Putty를 이용해 접속하고, Mac에서는 터미널에서 SSH를 통해 접속합니다.접속하는 시놀로지 나스 계정은 도커 제어 권한이 있어야 합니다. 계정의 루트 디렉토리에 .ssh 폴더를 생성하고 해당 폴더에 접속합니다. Na..
2024.06.05