분류 전체보기
-
Java Virtual Thread 이론JAVA 2024. 4. 24. 00:56
Virtual Thread Virtual Thread는 가벼운(lightweight) Thread로, 고성능 동시성 애플리케이션을 작성, 유지 및 디버깅하는 데 드는 노력을 줄여줍니다. Virtual Thread에 대한 배경 정보는 JEP 444를 참조하세요. Thread는 스케줄링될 수 있는 가장 작은 처리 단위입니다. 이는 다른 단위들과 동시에 — 그리고 대부분 독립적으로 — 실행됩니다. 이것은 java.lang.Thread의 인스턴스입니다. 스레드에는 두 가지 종류가 있는데, 플랫폼 스레드와 가상 스레드가 그것입니다. 여기에서 "가상 스레드"는 자바의 새로운 기능 중 하나로, 기존의 플랫폼 스레드(heavyweight thread)에 비해 훨씬 가벼운 스레드를 말합니다. 이를 통해 동시성이 높은 애..
-
Redis에서의 KEYS와 SCAN 명령어 비교Spring 2024. 4. 16. 07:10
Redis는 효율적인 키-값 저장소로 널리 사용되고 있으며, 데이터를 조회하는 두 가지 주요 명령어인 KEYS와 SCAN에 대해 자세히 알아보고, 어떤 상황에서 각각을 사용하는 것이 적합한지 살펴보겠습니다. KEYS 명령의 이해 KEYS 명령은 지정된 패턴에 일치하는 모든 키를 한 번의 호출로 반환합니다. 예를 들어, KEYS user:*는 'user:'로 시작하는 모든 키를 찾아 리스트로 반환합니다. 이 방식은 간단하고 직관적이지만, 큰 데이터베이스에서는 몇 가지 문제점을 유발할 수 있습니다. 장점 사용이 간단하며 작은 데이터 세트에서 빠르게 결과를 제공합니다. 단점 대규모 데이터 세트에서 사용할 경우, 서버를 블로킹하여 다른 모든 연산이 중단될 수 있습니다. 매우 CPU 및 메모리 집약적이어서 서버의..
-
AWS CLI 로 SQS 일괄 생성 및 일괄 삭제AWS 2024. 4. 12. 12:23
만약 다음과 같이 많은 queue를 생성해야 하는 경우, aws cli를 활용할 수 있습니다. SQS 일괄 생성 스크립트 #!/bin/bash # AWS 리전과 계정 ID 자동 감지 REGION=$(aws configure get region) # 큐 이름 정의 declare -a queues=( "dev-order_queue" "dev-order_queue_dlq" "dev-payment_queue" "dev-payment_queue_dlq" "stage-order_queue" "stage-order_queue_dlq" "stage-payment_queue" "stage-payment_queue_dlq" "prod-order_queue" "prod-order_queue_dlq" "prod-paymen..
-
Amazon SQS 에 대해 알아보자AWS 2024. 4. 12. 11:16
이번에는 SQS의 내용에 대해 자세히 다뤄보도록 하겠습니다. SQS 큐의 종류 1. Standard Queue 스탠다드 큐는 메시지 순서가 중요하지 않고, 높은 처리량을 필요로 하는 애플리케이션에 적합합니다. 예를 들어, 대량의 이벤트 데이터를 처리하거나, 로깅 시스템에서 다수의 메시지를 신속하게 처리해야 할 때 사용됩니다. 성능 고처리량: 스탠다드 큐는 초당 수십만 개의 메시지를 처리할 수 있습니다. 비순차적 배달: 메시지가 전송된 순서와 다를 수 있습니다. 즉, 가끔씩 메시지 순서가 바뀔 수 있습니다. 비용 SQS는 전송된 메시지 수에 따라 요금을 부과합니다. 스탠다드 큐는 FIFO 큐에 비해 단가가 낮습니다. 2. FIFO Queue FIFO 큐는 순서를 유지하면서 메시지를 처리해야 하는 애플리케이..
-
엔티티의 생성 및 수정 시간 자동화하기Spring 2024. 4. 9. 17:47
Spring Data JPA의 Auditing 기능을 사용하여 엔티티의 생성 시간과 수정 시간을 자동으로 기록하는 방법은 개발자로 하여금 반복적인 작업에서 벗어나게 하고, 코드의 간결성을 유지할 수 있게 합니다. 코드 예시 @Getter @MappedSuperclass @EntityListeners(AuditingEntityListener.class) public class BaseTimeEntity { @CreatedDate private LocalDateTime dateCreated; @LastModifiedDate private LocalDateTime dateUpdated; } Annotation 설명 @Getter Lombok 라이브러리의 어노테이션으로, 이 클래스의 모든 필드에 대한 gette..
-
프로젝트 회고 - 수업 스케줄 일괄 변경 배치 처리Spring 2024. 4. 8. 08:30
프로젝트 개요 각 센터마다 스케줄을 생성할 수 있습니다. 이에 대한 일괄 변경 기능을 제공하는 것인데요. 성능최적화를 통해 빠른 응답시간을 제공하는 것이 목표입니다. 해당 프로젝트에서 다른 주제는 다음과 같습니다. - 적정 ThreadPool Size 조정 - 적정 BatchSize 조정 - JMeter 성능 테스트 요구사항 - 자동공개 설정의 일괄 변경 기능 제공 - ASIS와 같이 실시간 처리 기능 제공 분석 - 기존 일괄변경 기능 UI에 들어가게 되는데, 저장 건수에 대한 LIMIT이 존재하지 않음 - 3만건 정도 조회하면 UI가 뻗는 현상 구현 제목이 일괄변경 배치 처리라고 해서, SpringBatch를 사용한 것은 아닙니다. Legacy 이다 보니, SpringBoot가 아닌 SpringFram..
-
프로젝트 회고 - 스케줄 자동 공개 성능 최적화Spring 2024. 4. 4. 00:44
이번 프로젝트는, 모든 센터의 수업스케줄을 자동으로 특정 시간에 공개해주는 기능 개선 작업이 있었습니다. 제가 맡은 부분은, 수업 스케줄에 대한 자동공개 설정을 그룹핑해서 연결해주는 알고리즘을 개발하는 부분이었습니다. 그런데..!! 배포 후에 다른 개발자가 개발한 부분에 문제가 발생했고, 해당 개발자가 갑작스레 부재중이 되어서 제가 넘겨 받아 빠르게 문제를 해결하게 되는 상황이 발생했습니다. 장애 상황 문제는, 사용자가 자동공개로 지정한 시간, 예를들어 다음과 같이 자동공개 시간을 설정한 경우 - 자동공개 시간 : 10시 30분 - 실제 자동공개 시간 : 10시 30분 위 처럼 되어야 하는데, - 자동공개 시간 : 10시 30분 - 실제 자동공개 시간 : 10시 33분 위와 같이 제시간에 공개되지 않고 ..
-
ObjectMapper와 MapStruct의 성능차이JAVA 2024. 4. 2. 18:43
문제 상황 복잡한 비즈니스 로직을 가지고 있는 Service 로직에서, 9천건의 데이터 조회시 5초~7초 정도 소요되는 성능 이슈 원인 분석 성능 이슈의 위치를 정확히 파악하기 위해, StopWatch를 성능 이슈가 있을만한 로직의 앞 뒤에 붙여줘서 확인했다. StopWatch를 붙인 곳 - List의 객체 변환 로직 - 조회 쿼리 StopWatch를 활용한 처리 시간 체크 코드 import org.springframework.util.StopWatch; // ... final StopWatch firstWatch = new StopWatch("firstWatch"); firstWatch.start(); final List userAddressList = userList.stream() .map(user..