분류 전체보기(171)
-
[회고록]비동기 프로그래밍에서 종종 발생하는 실수 / DBContext Scope 이슈
//코드 예시 *실제 사용한 코드가 아님* public Task Get(int page, int size) { using (var l = lifetimeScope.BeginLifetimeScope()) { var dbContext = l.Resolve(); var source = dbContext.Posts .OrderByDescending(h => h.CreateTime) .Include(p => p.User) .Select(g => PostResponse.Of(g)); return PaginatedList.ToPagedList(source, page, size); } } 대부분의 Get메서드는 페이지네이션이 포함되어 있었다. 따라서 페이지네이션을 쉽게 적용하기 위한 공통 함수와 DTO를 만들어두었고,..
2024.03.31 -
[회고록] 운영플랫폼 REST API서버 및 Xunit 테스트환경 구축
기존 운영 플랫폼은 Razor 페이지를 사용하여 간략하게 구축되어 있었고, 테스트 환경은 구축되어 있지 않았다. 하지만 게임 속 일차원적인 정보를 들여다보는 기능 외에도, 데이터를 처리하거나 실시간으로 유저의 데이터를 확인할 수 있어야 하는 요구사항이 있었다. 이처럼 운영플랫폼이 중요해짐에 따라 이를 고도화하는 업무를 진행하게 되었다. 목표는 크게 두 가지었다. 1. Rest api 환경을 구축 2. Xunit 테스트 환경을 구축 위 작업에 의의는 안정성, 확장성 등을 고려하여 앞으로 더욱 중요한 기능 개발을 원활하게 하기 위한 구조를 설계하는 것이다. Rest api 에 대한 공통 처리를 위해서 프론트 개발자 분과 논의하여 응답데이터 구조를 제네릭 클래스를 만들어서 공통 처리하는 BaseControll..
2024.03.03 -
[트러블슈팅] TrendPick 프로젝트 주문 생성 시 상품 재고 처리 동시성 이슈
[상황] 쇼핑몰 서버 구현 시 주문-결제 시스템이 필요하다. 주문-결제에 성공하면 상품의 재고가 줄어들게 되는데, 멀티 스레드 환경에서 상품을 주문하게 되면 경쟁 상태가 발생하게 되고 상품의 재고에 이상현상이 발생한다. 따라서 동시성 문제를 해결하기 위한 방법을 적용시켜야 한다. [적용 및 이슈 해결 과정] @Test @DisplayName("재고 차감 동시성 테스트") void concurrencyTest() throws InterruptedException { Product testProduct = productRepository.save(createProduct()); Member testMember = memberRepository.save(createMember()); int threadCoun..
2023.10.04 -
[기본정렬] Quick Sort & Merge Sort 특징 및 차이점 정리, 자바로 구현해보기
분명히 예전에 자료구조 공부하며 직접 구현해보기도 했지만, 한참을 안보니 기억 속에서 희미해져 버렸다. 그래서 다시 책을 보며 java 로 구현해보고, 각 정렬의 동작 방식을 복기해보려고 한다. 더 나아가 두 정렬을 이론적으로 설명할 수 있게끔 제대로 학습해야겠다. Quick Sort주요 키워드 : 피벗 (Pivot) 시간 복잡도 : 평균 O(nlongn), 최악O(nc2)특징- 별도의 메모리를 사용하지 않는다.- 배열 내 교환이 이루어지기 때문에 불안정 정렬이다.- 이미 정렬된 배열이면 최악의 시간복잡도를 가진다.private static void swap(int[] a, int i, int j) { // 인덱스 i,j 의 위치를 교환하는 함수 int temp = a[i]; a..
2023.09.22 -
[스프링빈] Junit5 환경에서 테스트 진행중 @EnableJpaAuditing 오류
[문제발생] 주요 오류는 다음과 같다. Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaAuditingHandler': Cannot resolve reference to bean 'jpaMappingContext' while setting constructor argument Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': JPA metamodel must not be empty Caused by: java.l..
2023.09.02 -
[트러블슈팅] TrendPick 프로젝트 / 추천 시스템 Spring batch 도입 및 이슈
추천 알고리즘은 서브 쿼리문을 사용할 뿐 아니라, 애플리케이션 단위에서도 복잡한 데이터 변환 과정을 거치게 된다. 실제 운영 중인 서비스라고 가정한다면, 회원의 수가 많아지면 많아질 수록 전체적인 성능이 많이 떨어질 것이고, 데이터 변환 중간에서 오류가 발생하면 데이터 이상 현상이 발생할 가능성이 매우 높다. 따라서 해당 시스템의 안정성과 견고성을 위해서 Spring batch를 도입하여 시스템의 안정성을 확보하고자 했다. [문제발생1] 우선적으로 스프링 배치가 정상적으로 작동하기 위한 메타 테이블이 생성되지 않았다. 공식 문서와 블로그를 찾아 보니 스프링 배치는 최근에 5.0 버전으로 업데이트 되면서 @EnableBatchProcessing가 JobRepository, JobLauncher, StepS..
2023.08.29