SpringBoot 썸네일형 리스트형 [SpringBoot] 외부 스토리지를 활용하여 첨부파일 관리하기 안녕하세요. CircuitBreaker, Cache, 외부 스토리지를 활용하여 첨부파일 관리하는 과정을 작성하도록 하겠습니다. 1. 목표 시나리오 첨부파일을 업로드할 때, 두 가지 주요 방법이 있습니다:Client -> Server로 MultipartFile을 업로드:이 방법은 클라이언트가 파일을 서버로 전송하고, 서버가 이 파일을 스토리지에 저장합니다.장점: 서버가 파일 업로드와 저장을 관리하므로 보안과 검증이 용이합니다.단점: 서버에 부하가 증가하고, 대규모 파일 업로드 시 성능 문제가 발생할 수 있습니다.클라이언트가 직접 스토리지에 파일을 업로드:클라이언트가 직접 외부 스토리지에 파일을 업로드합니다.장점: 서버 부하를 줄일 수 있으며, 클라이언트가 직접 스토리지에 접근하여 빠른 업로드가 가능합니다.. 더보기 [SpringBoot] Spring Batch Partition 단위로 병렬 처리하기 안녕하세요. 스프링 배치에서 파티션 단위로 처리하는 과정은 대규모 데이터 처리를 병렬로 분할하여 성능을 최적화할 수 있습니다.특히, 파티션을 독립적으로 처리할 수 있는데, 이는 partiton 혹은 step 단위로 실행 매개변수를 다룰 수 있음을 의미합니다. 파티션 구성 요소는 다음과 같습니다. Partitioner: 데이터를 여러 파티션으로 나누는 역할을 합니다.PartitionHandler: 파티션을 각 replica 스텝에 분배하고 병렬로 실행합니다.Step: step 단위 실행 플로우를 정의합니다.이 세 가지 구성요소를 바탕으로 토이 프로젝트에서 Partition 단위로 병렬 처리한 과정을 정리하도록 하겠습니다. 1. 목표 아키텍처 2. 목표 플로우 순서제목설명1Job 실행Batch Job.. 더보기 [SpringBoot] Kotest 멀티모듈 컨트롤러 테스트 안녕하세요. 이번 포스팅은 Kotest 멀티모듈 컨트롤러 테스트에 대한 글을 작성하고자 합니다.제가 겪은 문제는 멀티 모듈로 스프링을 구성하였을 때,컨트롤러의 WebMvcTest의 entityManagerFactory 의존성 문제가 발생한 것이었습니다. 1. @WebMvcTest를 사용한 테스트 @ActiveProfiles("test")@AutoConfigureMockMvc@WebMvcTest(controllers = [ReviewGroupUpsertController::class])class ReviewGroupUpsertControllerTestV1( private val mockMvc: MockMvc,) : FunSpec() { override fun extensions(): List.. 더보기 [SpringBoot] 리플리카 데이터베이스 연동하기 이번 포스팅은 이전 포스팅에서 작성한 리플리카 서버를 데이터베이스에 연동하는 과정을 정리하고자 합니다. 1. 스프링부트 의존성 주입과 application.yml 설정하기 해당 테스트는 스프링부트 3.1.0, Mysql 8.x로 구성되어 있습니다. 마스터 서버와 슬레이브 서버를 설정하는 과정은 하단 블로그 링크를 첨부하였습니다. https://gose-kose.tistory.com/131 [DB] MySQL8.x 리플리카 서버 적용하기(1)안녕하세요. 기술적 겸손함으로 회사와 함께 성장하고 싶은 KOSE입니다. 이번 포스팅은 리플리카 서버를 적용하는 일련의 과정을 시도해 보는 글을 작성하고자 합니다. 저는 ubuntu22.04, docker 24.0.2,gose-kose.tistory.com 현재 설.. 더보기 [SpringBoot] 의존성 주입과 Profile로 Filter 설정 동적 변경하기 안녕하세요. 회사와 함께 성장하고 싶은 KOSE입니다. 이번 포스팅은 의존성 주입과 profile 설정으로 filter의 설정 정보를 다르게 적용하는 과정을 정리하도록 하겠습니다. 1. 문제 상황 MSA 아키텍처에서 Gateway와 Member 서버는 서로 같은 Redis 서버 (Aws ElasticCache)를 사용하고 있습니다. 다른 서버는 Gateway로부터 라우팅을 수행하지만, 공통의 Redis를 사용하지 않기 때문에 컨트롤러 혹은 핸들러 API 테스트를 진행하는 과정에서 Gateway에서 헤더 정보 인증이 안될 수 있습니다. private boolean validateRequestHeader(String accessToken, String refreshToken, String userId) th.. 더보기 [SpringBoot] SpringWebSocket 활용한 실시간 대기실 기능 안녕하세요. 회사와 함께 성장하고 싶은 KOSE입니다. 우리가 흔히 사용하는 카카오톡과 같은 채팅 어플은, 실시간 처리가 매우 중요합니다. 친구가 메세지를 보냈는데 새로고침 하기 전까지 메세지가 전송되지 않는다면 해당 어플은 사용하지 않을 것입니다. 이를 방지하기 위해 사용하는 개념이 '소켓'입니다. 이번 포스팅은 MSA 아키텍처의 Liar-Game의 실시간 대기실 역할을 수행한 wait-server 프로젝트를 정리하며 웹소켓 연결 과정과 예외처리에 대해서 자세하게 정리하도록 하겠습니다. 제 스프링 부트 버전은 3.0.2로 최신 버전입니다. (따라서, 최신 3.x.x에 호환되는 기능으로, 아직 레퍼런스가 많이 부족하여 오픈 소스로 참고하시면 좋습니다!!!!) 1. Socket과 SpringWebSocke.. 더보기 [SpringBoot] 더미 데이터로 실행 계획 살펴보기 (QueryDsl) 안녕하세요. 회사와 함께 성장하고 싶은 KOSE입니다. 스프링은 다양한 데이터 접근 기술을 제공합니다. 주로 사용하는 기술은 jpa, jdbc, mybatis 등이 있습니다. jpa를 사용하는 간단한 crud를 빠르게 사용할 수 있는 장점이 존재하지만 동적 쿼리를 해결하는 데는 많은 어려움이 있습니다. 스프링은 동적 쿼리를 해결하기 위한 수단으로 다양한 기능을 제공합니다. 가장 대표적인 기술은 queryDsl입니다. queryDsl은 자바 언어로 SQL을 작성할 수 있도록 제공하여 컴파일 시점에 에러를 잡을 수 있고, 다양한 동적 쿼리를 빌더 형태로 작성할 수 있습니다. 이번 글은 제가 작성했던 queryDsl 조회 로직을 살펴보고 100만개의 더미데이터에서 성능을 분석하는 시간을 가져보도록 하겠습니다... 더보기 [SpringBoot] 중복 로그인 처리 (비즈니스 로직과 IP 차단) 안녕하세요 회사와 함께 성장하고 싶은 KOSE입니다. 백엔드 개발에서 보안은 너무나 중요한 문제입니다. 계정 도용 문제가 발생하거나, 인증되지 않은 사용자가 권한이 없는 서버에 접근한다면, 큰 문제가 발생할 수 있습니다. 저는 개인적으로 개발하는 입장에서 보안 관련한 문제는 가장 피하고 싶은 문제이기도 합니다. 제일 어렵기도 하고 걱정되기도 하고 다루기 부담스러운 주제입니다. 하지만 언제까지 미룰 수만 없듯이 코드를 수정하며 보안적으로 위협이 될 수 있는 부분을 처리하고자 글을 작성하게 되었습니다. 이번 주제는 중복 로그인에 관한 포스팅으로 중복 로그인 요청이 발생했을 때, 어떻게 처리하는 게 효율적인지 고민하고 제가 처리한 방법을 공유하고, 항상 마지막은 로직에 대한 테스트로 마무리하도록 하겠습니다. .. 더보기 이전 1 2 3 다음