[Java] ThreadPool ThreadPool 어떤 요청이 들어왔을 때 해당 요청을 처리하기 위해서 쓰레드를 사용하는 가장 심플한 방법은 요청마다 쓰레드를 생성하고 할당하는 것이다 쓰레드가 필요한 시점에 생성 요청 OS가 해 sjiwon-dev.tistory.com 이전 포스팅에서는 ThreadPool에 대한 개념을 알아보았다 본 포스팅에서는 Tomcat의 Connector에 대한 개념을 알아볼 것이다 Tomcat = WAS(Web Application Server)의 한 종류 Connector란? Apache Tomcat 10 Configuration Reference (10.0.27) - The HTTP Connector This Connector supports all of the requir..
개요 [Spring] 경매 입찰/작품 구매 동시성 문제 해결 1) DB Lock 개요 GitHub - sjiwon/Advanced-Another-Art: AI 기반 작품 경매 플랫폼 (Refactoring) AI 기반 작품 경매 플랫폼 (Refactoring). Contribute to sjiwon/Advanced-Another-Art development by creating an account on GitHub. github.com 현재 리팩 sjiwon-dev.tistory.com [Spring] 경매 입찰/작품 구매 동시성 문제 해결 2) MySQL Named Lock 개요 [Spring] 경매 입찰/작품 구매 동시성 문제 해결 1) DB Lock 개요 GitHub - sjiwon/Advanced..
개요 [Spring] 경매 입찰/작품 구매 동시성 문제 해결 1) DB Lock 개요 GitHub - sjiwon/Advanced-Another-Art: AI 기반 작품 경매 플랫폼 (Refactoring) AI 기반 작품 경매 플랫폼 (Refactoring). Contribute to sjiwon/Advanced-Another-Art development by creating an account on GitHub. github.com 현재 리팩 sjiwon-dev.tistory.com 앞선 포스팅에서 Pessimistic Write Lock을 통해서 경매 입찰 & 작품 구매에 대한 동시성 문제를 해결하였다 Pessimistic Write Lock은 특정 DB Record에 Exclusive Lock을 ..
개요 GitHub - sjiwon/Advanced-Another-Art: AI 기반 작품 경매 플랫폼 (Refactoring) AI 기반 작품 경매 플랫폼 (Refactoring). Contribute to sjiwon/Advanced-Another-Art development by creating an account on GitHub. github.com 현재 리팩토링중인 AI 기반 작품 경매 플랫폼 프로젝트: Another Art에서는 다음 2가지 주요 기능이 존재한다 경매 작품 입찰 작품 구매 경매 작품 입찰 & 일반 작품 구매에서는 멀티 쓰레드 환경에서 동시성 문제가 발생할 수 있고 이를 반드시 제어해야 한다 입찰 프로세스 @UseCase @RequiredArgsConstructor public ..
개요 [Spring] 메일 인증 & Redis를 활용한 사용자 계정 정보 조회 및 수정 개요 GitHub - sjiwon/Advanced-Another-Art: AI 기반 작품 경매 플랫폼 (Refactoring) AI 기반 작품 경매 플랫폼 (Refactoring). Contribute to sjiwon/Advanced-Another-Art development by creating an account on GitHub. github.com 현재 리팩 sjiwon-dev.tistory.com 이전에 메일 인증 + Redis를 활용해서 사용자 개인 계정과 관련된 보안적 측면을 향상시켰다 그런데 테스트를 하다보니 관련된 API의 성능이 매우 떨어짐을 확인할 수 있었다 인증 메일 전송을 포함한 아이디 찾기 ..
개요 GitHub - sjiwon/Advanced-Another-Art: AI 기반 작품 경매 플랫폼 (Refactoring) AI 기반 작품 경매 플랫폼 (Refactoring). Contribute to sjiwon/Advanced-Another-Art development by creating an account on GitHub. github.com 현재 리팩토링중인 AI 기반 작품 경매 플랫폼 프로젝트에서는 사용자가 본인이 계정을 까먹었을 경우를 대비해서 아이디 찾기/비밀번호 재설정 API를 제공하고 있다 그런데 기존에 구현된 이 API는 심각한 문제가 존재한다 [아이디 찾기] - 자신의 이름 + 이메일 정보를 통해서 계정 아이디 조회 [비밀번호 재설정] 1. 이름 + 이메일 + 로그인 아이디를..
어떤 프로덕트를 개발할 때 로깅의 개념은 굉장히 중요하다 로그는 Application, Network, …등에서 발생하는 모든 이벤트에 대한 기록이다 이러한 로그를 바탕으로 모니터링, 오류 추적, ..등을 진행할 수 있다 WAS 요청 흐름 위의 흐름은 WAS로 요청이 들어오고 응답이 될때까지의 간략한 흐름이다 필자는 다음과 같이 로깅 메커니즘을 구현할 예정이다 Spring AOP 메커니즘을 활용해서 전역적인 컴포넌트의 In/Out 데이터 로깅 MDC 기반 요청별 흐름 추적 MDC (Mapped Diagnostic Context) 일반적으로 웹 애플리케이션은 멀티 쓰레드 기반으로 Client의 요청을 처리한다 이 과정에서 Client들의 요청을 구분지을 수 있는 수단없이 단순하게 로그만 남긴다면 해당 로그..
동시성 처리 웹 서비스를 개발하다보면 수많은 종류의 동시성 문제를 경험해볼 수 있다 주문 도메인 상품 재고 동시성 처리 선착순 쿠폰 동시성 처리 … 동시성 문제는 공유 자원을 동시에 접근하는 과정에서 Critical Section에서 발생하는 Race Condition으로 인한 문제를 의미한다 본 포스팅에서는 JVM 환경에서 제공하는 synchronized 키워드를 사용하여 동시성을 제어하고 한계에 대해 설명할 예정이다 Process? Thread? synchronized 키워드에 대해 알아보기전에 먼저 Process와 Thread의 개념부터 알아보자 idea64.exe는 디스크에 저장된 실행 가능한 코드와 관련 데이터 파일로 구성된 프로그램이다 이 idea64.exe를 더블클릭하게 되면 디스크에 존재하..
Transaction 전파 트랜잭션은 시작 지점 & 종료 지점이 명확하게 존재한다 시작 지점은 하나이지만 종료 지점은 둘로 분류할 수 있다 Commit Rollback 특정 로직을 진행하다가 추가적인 트랜잭션이 진입하는 경우를 생각해보자 이 때 기존에 존재하는 트랜잭션에 대해서 추가적으로 진행되는 트랜잭션의 행동은 트랜잭션 전파 속성에 의해 결정된다 물리 트랜잭션 vs 논리 트랜잭션 단일 트랜잭션인 상황에서는 사실 트랜잭션의 개념 자체를 물리/논리로 나눌 필요가 없다 논리 트랜잭션 그 자체가 물리 트랜잭션이기 때문에 하지만 여러 트랜잭션이 중첩된 상황에서는 물리/논리라는 개념으로 분리될 필요가 있다 이러한 상황에서 물리 트랜잭션 / 논리 트랜잭션간에는 다음과 같은 규칙이 존재한다 1. 모든 논리 트랜잭션..
Transaction - Connection간의 관계 트랜잭션을 열고 유지하기 위해서 트랜잭션의 시작 ~ 끝까지 다음과 같은 이유로 DB Connection을 동기화해야 한다 트랜잭션 내부의 여러 연산 로직은 원자성 (All or Nothing)을 보장해야 한다 이 과정에서 모든 연산은 동일한 DB Connection을 사용해야 한다 만약 중간에 Connection이 변경되면 연산 간의 데이터 일관성을 보장할 수 없게 된다 파라미터를 통한 Connection 동기화 방법 fun logic() { val connection: Connection = ... componentA.execute(connection, ...) componentB.execute(connection, ...) componentC.ex..