분류 전체보기

우테코 5기

2023년 돌아보기: 우아한테크코스 5기

2023년이 30시간도 남지 않은 지금, 지난 1년을 되돌아보고자 한다. 내 인생에서 가장 인상 깊은 1년이 2018년(재수학원)이었는데, 2023년으로 갱신된 듯하다. 1. 우테코 합격2022년 12월 28일 오후 3시, 우아한테크코스 5기 BE 과정에 합격했다! 당시 6개월짜리 스타트업 인턴을 합격한 상태여서 굉장히 많은 고민을 했다. 졸업까지 한 학기 남아있었고, 인턴을 할 시 학교를 해결할 수 있었다. 우테코를 입과 하게 되면 2024년에 다시 인턴을 구해야 하는 상황.. 진짜 많은 사람들에게 조언을 구했고, 많은 고민 끝에 우테코를 선택했다. 인생에서 안정이 꽤나 큰 가치였던 내가, 처음으로 도전을 택한 순간이었다. 지금 되돌아보면 최고의 선택이었다! 2. 우테코를 들어가며우테코를 들어가며 목표..

프로그래밍

CATS: MySQL은 락 점유 순서를 어떻게 결정할까?

'페스타고' 서비스에서 선착순 티켓팅 기능을 개발하며 궁금증이 생겼다. X-lock은 요청 순서대로 부여될까? 즉, 트랜잭션 A, B, C가 동일한 자원에 대해 순차적으로 락을 대기하면, 그 순서대로 락을 획득할까? 선착순 티켓팅이 제대로 작동하려면, 먼저 대기열에 등록된 트랜잭션이 먼저 락을 획득하는 것이 보장되어야 한다. 이를 확인하기 위해 MySQL의 '트랜잭션 스케줄링 기법'에 대해 알아보았다. 트랜잭션 스케줄링 기법이란? 트랜잭션 스케줄링은 데이터베이스 시스템에서 여러 트랜잭션이 동시에 실행될 때 이들의 실행 순서를 결정하는 방법이다. 여러 트랜잭션이 동일한 자원에 대한 락을 대기하는 경우, 어떤 트랜잭션이 먼저 락을 할당받아야 할까? 바로 트랜잭션 스케줄링이 트랜잭션이 어떤 순서로 데이터에 접..

프로그래밍

AOP 및 @Retryable를 활용한 낙관적 락 재시도

우아한테크코스 기술블로그 '테코블'의 선착순 티켓 예매의 동시성 문제: 잠금으로 안전하게 처리하기 포스트에서 낙관적 락 재시도에 대해 다루었는데, 해당 내용을 별개의 포스트로 공유하고자 글을 작성한다. 위 포스트에서는 선착순 티켓 예매 상황에서 발생하는 동시성 문제를 해결하기 위한 다양한 시도 과정을 설명하니 관심이 있으면 읽어보길 추천한다. 낙관적 락이란?락(잠금, Locking)은 데이터가 읽힌 후 사용될 때까지 데이터가 변경되는 것을 방지하기 위한 조치이다. 잠금 전략으로는 여러 트랜잭션 간 충돌이 일어나지 않을 것이라 가정하는 낙관적 락(Optimistic Lock) , 여러 트랜잭션 간 충돌이 일어날 것이라 가정하는 비관적 락(Pessimistic Lock) 이 있다. 낙관적 락은 실제로 DB에..

프로그래밍

[Spring] REQUIRES_NEW와 데드락 위험성

Requires_new is king of side effects. c.c) spring-framework 이슈 “REQUIRES_NEW는 부작용 대장이다.”라는 말에는 그 이유가 있다. REQUIRES_NEW 전파 속성은 새로운 트랜잭션을 시작하는 기능을 가지며, 그로 인해 데드락 발생의 위험성이 증가한다. 이미 실행 중인 트랜잭션 내에서 이 전파속성을 가진 메서드를 호출하면 새로운 트랜잭션이 시작된다. 이 과정에서 커넥션 풀의 리소스가 부족해지면 데드락의 위험이 있다. 데드락의 원리 REQUIRES_NEW는 이미 실행 중인 트랜잭션이 있을 때 새로운 트랜잭션을 시작하는 전파 속성이다. 만약 동시에 많은 요청이 여러 트랜잭션을 시작하려 할 때, 사용 가능한 커넥션 리소스가 부족하게 되면 데드락이 발생한..

도둑탈을 쓴 애쉬
'분류 전체보기' 카테고리의 글 목록