본문 바로가기
728x90

Spring135

RabbitMQ로 구현하는 비동기 메시지 큐(입문) 메시지 큐 : 시스템 간 데이터를 비동기적으로 전달하기 위한 중간 저장소. - 생산자(Producer)가 메시지를 보내고, 소비자(Consumer)가 받아 처리한다.- 비유: 우체국에서 편지를 보내는 것처럼, 발신자가 수신자를 기다리지 않고 우체통(큐)에 넣으면 배달원(소비자)가 가져가 처리하는 것. 동작원리- 생산자 : 데이터를 메시지로 만들어 큐에 전송- 큐 : 메시지를 순서대로 저장, 소비자가 준비될 때까지 보관- 소비자 : 큐에서 메시지를 꺼내 처리- 비동기성 : 생산자와 소비자가 서로를 기다리지 않음- 메시지보장 : 설정에 따라 메시지가 손실되지 않도록 보장 가능   장점- 비동기 : 생산자와 소비자가 독립적으로 동작- 부하분산 : 처리 속도 차이 완충- 확장성 : 다중 소비자로 작업 분산예로는.. 2025. 4. 5.
Spring Boot로 구현하는 이벤트 기반 비동기 처리 (입문) 이벤트 기반 개발 : 시스템이 이벤트를 발생시키고, 이를 구독(Listener) 하는 컴포넌트가 반응하는 방식비유하자면 카페에서 주문(이벤트)을 하면 바리스타가 커피를 만드는 것처럼, 작업이 분리되어 처리하는 방식이다. 장점- 느슨한 결합 : 이벤트 발행자와 소비자가 독립적- 확정성 : 비동기 처리로 부하 분산- 반응성 : 실시간 처리 가능- 예시 : 계좌 이체 후 이메일 알림, 결제 완료 후 재고 감소 등 Spring에서의 이벤트 처리도구 - ApplicationEvent : 이벤트 정의- AppliactionEventPublisher : 이벤트 발행- @EventListener : 이벤트 수신- 비동기 : @Async로 이벤트 처리 비동기화  Executor- Java 에서 비동기 작업을 실행하기 위.. 2025. 4. 3.
Spring Boot와 Redis로 입문자용 구현 Redis(Remote Dictionary Server) : 인메모리 데이터 구조 저장소로, 키-값 쌍을 빠르게 저장하고 조회할 수 있는 오픈소스 NoSQL Redis 주요 특징- 메모리 기반 ㄴ디스크 기반 DB(MySQL)보다 훨씬 빠름 (수십만 QPS 처리 가능). ㄴ단점: RAM 크기에 따라 저장량 제한, 전원 끄면 데이터 손실 (설정으로 보완 가능). - 다양한 데이터 구조 지원   ㄴ문자열(String): 기본 키-값 (예: SET key value).   ㄴ리스트(List): 순서 있는 데이터 (예: LPUSH, RPOP).   ㄴ해시(Hash): 필드-값 쌍 (예: HSET user id 1 name 홍길동).   ㄴ셋(Set): 중복 없는 집합 (예: SADD).   ㄴ정렬된 셋(Sorte.. 2025. 4. 2.
@Tsid 커스텀 생성 후 적용하기 (수정) 사용이유대규모 분산 시스템에서의 병렬처리 가능 및 고유성 보장8byte 로 공간 효율성 향상타임스탬프 값을 비트 가장 앞에 배치하여 정렬 순서 보장되어 데이터 삽입, 조회 시 성능 향상 As-Is기존 @GeneratedValue(strategy = GenerationType.IDENTITY) 사용동시성 문제 발생국가별 프로젝트의 모든 테이블을 하나의 테이블로 관리 시, ID 중복 발생To-BeTSID 를 이용하여 분산 환경에서 PK 고유 생성 보장.8bite 로 공간 효율순차적으로 증가(timestamp) 정렬 보장하여 성능 효율UUID 생성 또한 고려하였지만, 선택 X36자리 문자열로 구성되어 있어 공간 효율성 문제데이터 삽입, 조회 시 성능 문제 (인덱스 비효율) Gradle 의존성 추가// http.. 2024. 6. 3.
@Tsid 커스텀 생성 후 적용하기 (사용X) 6/3 멀티스레드 테스트 도중 중복값이 발생하는 문제가 발생했다.기존 라이브러리를 사용해서 커스텀하였는데, 중복값 발생하는 이슈가 올라왔는데 TSID 제작자가 그냥 이슈를 닫아버린 히스토리가 있었다. 따라서, 라이브러리 문제로 판단하고 TSID Generater 라이브러리를 사용해 새롭게 커스텀했다.https://josteady.tistory.com/963 @Tsid 커스텀 생성 후 적용하기 (수정)사용이유대규모 분산 시스템에서의 병렬처리 가능 및 고유성 보장8byte 로 공간 효율성 향상타임스탬프 값을 비트 가장 앞에 배치하여 정렬 순서 보장되어 데이터 삽입, 조회 시 성능 향상 As-Isjosteady.tistory.com --- 왜 UUID 나 Random 값을 쓰지 않고 TSID 를 사용하는지 .. 2024. 5. 21.
Chunk Size and Parallel Spring Batch -- 결론 -- 1. Chunk Size 가 클수록 Batch 의 실행시간이 빨라(짧아)지는 것은 아니다. 2. 병렬 처리의 속도가 더 빠르다. Case) 1억 건의 파일을 DB에 저장해야 한다 Chunk Size 를 최소화해서 여러번 Commit 한다 → Commit 리소스 비용이 크기 떄문에 비효율적 , 커밋을 되도록 줄인다보통 금융권 기준으로 2~3000 으로 설정하는 것 같다고 함. Chunk Size 를 1억으로 설정하면 OOM 이 발생할 수 있다. ( 메모리에 올려두고 작업하기 때문에 ) ChunkSize 에 따른 속도 비교 → 약 1만건(10,209) 의 데이터를 가지고 테스트 // Chunk Size Test @RequiredArgsConstructor @Configuration publi.. 2024. 4. 22.
Spring Batch 5.x DB 사용하기 기존 Tasklet 방식에 이어 Chunk 방식을 이용한 간단한 예제를 작성해 보려고 한다. 스프링 배치 아키텍처이다. Tasklet 에서는Item 과 관련된(노란색) 부분은 사용하지 않았다. Chunk 방식에서는 Item 을 사용하려고 한다. DB 에서 데이터를 가져올 case 1. ItemReader -> DB 에서 데이터 조회 2. ItemProcessor -> 데이터 가공 3. ItemWriter -> DB 에 다시 INSERT 이렇게 순서로 진행할 예정이다. . MySQL DB 에 BATCH 테이블이 정상적으로 생성되어있다고 가정. JPA 를 이용해서 Entity 2개를 만들어주었다. Person 테이블에서 가공 후 PersonTemp 테이블에 넣어줄 예정. @Entity @NoArgsConst.. 2024. 4. 20.
Spring Batch 5.x 기본 연습 - tasklet Spring Batch 5 는 이전과 많은 변화가 있다. 새롭게 생성하기 전이나 마이그레이션하기 전에 어떤게 변했는지 참고해본다. https://github.com/spring-projects/spring-batch/wiki/Spring-Batch-5.0-Migration-Guide Spring Batch 5.0 Migration Guide Spring Batch is a framework for writing batch applications using Java and Spring - spring-projects/spring-batch github.com 💡 이전에는 @EnableBatchProcessing 어노테이션을 통해서 스프링 배치의 스프링 부트 자동설정을 활성화할 수 있었습니다. 하지만 이제는.. 2024. 4. 19.
동시성 문제 해결 - Synchronized, Pessimistic Lock, Optimistic Lock, Redis https://www.inflearn.com/course/%EB%8F%99%EC%8B%9C%EC%84%B1%EC%9D%B4%EC%8A%88-%EC%9E%AC%EA%B3%A0%EC%8B%9C%EC%8A%A4%ED%85%9C/dashboard 재고시스템으로 알아보는 동시성이슈 해결방법 | 최상용 - 인프런 최상용 | 동시성 이슈란 무엇인지 알아보고 처리하는 방법들을 학습합니다., 동시성 이슈 처리도 자신있게! 간단한 재고 시스템으로 차근차근 배워보세요. 백엔드 개발자라면 꼭 알아야 할 동 www.inflearn.com 위 강의를 학습하며 작성. 작업환경 세팅 brew install docker brew link docker docker version docker pull mysql docker run -d .. 2024. 4. 8.
728x90