본문 바로가기

전체 글

(381)
[프로젝트 이슈] 동시성 문제 원인 및 해결 들어가며현재 진행 중인 프로젝트에서는 사용자가 스터디방에 참여하거나 나갈 수 있으며, 동시에 여러 사용자가 같은 방에 입장하는 상황도 빈번히 발생할 수 있습니다. 이러한 기능은 다음과 같은 핵심 요구사항을 포함하고 있습니다.사용자는 하나의 방에만 참여할 수 있어야 한다.방의 최대 인원 수를 초과해서는 안 된다.동시에 여러 사용자가 같은 방에 참여 요청을 보내더라도, 최대 인원 수까지만 입장이 허용되어야 한다.초기 구현에서는 단일 사용자 관점에서의 로직만을 고려하여 currentCount(현재 인원)을 1만큼 증가시키고 Participation(참여 기록)을 생성하는 방식으로 참여 기능을 구현했습니다. 단위 테스트나 일반적인 시나리오에서는 문제가 없어 보였지만, 실제 운영 환경과 유사한 조건에서 여러 스레..
[JAVA] ExecutorService - graceful shutdown 보호되어 있는 글입니다.
[JAVA] Executor 프레임워크 0. 들어가기 전실무에서 스레드를 직접 생성해서 사용하면 다음과 같은 3가지 문제가 있습니다.스레드 생성 시간으로 인한 성능 문제스레드 관리 문제Runnable 인터페이스의 불편함1. 스레드 생성 비용으로 인한 성능 문제스레드를 사용하는 데 있어 가장 큰 문제 중 하나는 생성 비용이 매우 크다는 점입니다. 스레드를 생성하면 단순히 자바 객체를 하나 만드는 수준이 아니라, 각 스레드는 자신만의 호출 스택(call stack)을 가지며 이 메모리를 별도로 할당해야 합니다. 또한 운영체제 커널 수준에서 시스템 콜(system call)을 통해 스레드를 생성하기 때문에 CPU와 메모리 리소스를 많이 사용하게 됩니다. 생성된 스레드는 운영체제의 스케줄러에 등록되어 관리되며, 실행 순서를 조정받는 과정에서도 추가적..