본문 바로가기

분류 전체보기32

python에서 멀티스레드 적용하기 PySide 기반 데스크탑 애플리케이션을 개발하면서 COM 포트 연결 과정에서 발생하는 지연 문제 → 특히 블루투스 포트 연결 시 OS 차원의 블로킹(blocking)으로 인해 전체 초기화 시간이 크게 지연되는 현상을 해결하고자 하였다.문제 상황애플리케이션이 실행되면 여러 장비들과 COM 포트를 통해 연결을 시도한다. 이 과정에서 일반 COM 포트는 빠르게 응답하지만, 블루투스 COM 포트는 연결 실패 시에도 OS 레벨에서 약 5초간 블로킹되어 예외를 던지게 되며, 이는 파이썬 내부에서 해결하기 애매한 상황이였다.실제 측정 시간 (예시)장비1 initialization took 3.79 seconds장비2 connection took 5.27 seconds장비3 connection took 5.20 se.. 2025. 8. 4.
컨트롤러만 테스트하기 요약Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaAuditingHandler' 에 대해서원인애플리케이션 시작 시 설정된 어노테이션이 문제를 일으킴main application에 붙은 어노테이션을 분리@SpringBootApplication@EnableJpaAuditing //분리@EnableRetry //필요public class AppApplication { public static void main(String[] args) { ... }분리 예시@Profile("!test")@Configuration@EnableJpaAuditing@EnableRetrypub.. 2025. 8. 4.
동시성 환경에서 낙관적 락 + 재시도 전략 테스트 (참치캔 등록) 정리항목 내용문제다중 스레드에서 최대 등록 수를 초과한 참치캔 등록원인트랜잭션 경계, 낙관적 락 미적용, 내부 호출로 인한 @Retryable 미동작해결@Version을 통한 낙관적 락 + 외부 서비스에서 @Retryable 호출 + RetryListener로 로그 검증0. 서론현재 서비스 구조는 다음과 같다.사용자는 사전에 전달받은 “시리얼 코드”를 통해 “참치캔” 등록 승인을 받는다.등록 승인 시에는 “시리얼 코드”와 “기기 ID”를 사용한다.하나의 “시리얼 코드”에는 최대 n개의 기기 ID가 등록될 수 있다.n개 이상일 경우 서버는 해당 “참치캔” 등록을 거부한다.이미 등록된 기기 ID를 가진 참치캔만 다른 기기 ID를 삭제할 수 있다.이런 상황에서 동시에 다수의 등록 요청이 들어오면 최대 수를 초.. 2025. 8. 4.
github action 자동배포 0. 서론단일 EC2 인스턴스에서 WAS와 DB를 함께 구동해야 하는 요구사항이 발생하였다. 수동 배포 과정에서 발생하는 여러 오류(테스트 실패, 환경변수 누락 등)를 줄이고, 배포 자동화에 대한 니즈가 커졌다.AWS CodeDeploy + S3 방식도 존재하나, 현재 환경에서는 GitHub Actions를 활용한 단순 배포 방식이 유지보수에 유리하다고 판단되어 이를 선택하였다.위와 같은 이유로 Docker 또한 사용하지 않도록 하였다.1. 배포 플로우 정의배포 시나리오최초 EC2 인스턴스 생성 및 서버 구동기존 EC2 인스턴스에 대한 서버 업데이트초기 setting이 잡혀있지않는 (DB 설정 및 java download) 경우는 추후 쉘 스크립트 등을 이용하여 초기설정을 해줄 수 있도록 하고, 현재는 .. 2025. 8. 4.