예제 소스
-
동시성 제어 [3] Redis개인 공부/spring 2024. 8. 5. 19:54
🔴 분산 Lock동시성 제어 [1] java 처리동시성 제어 [2] DB Lock에 이어 Redis를 사용한 동시성 제어 방법을 학습해보자.분산된 서비스에서 사용할 수 있는 락 방법으로 DB를 사용하는 방법에 대해 알아봤었다. 하지만 DB의 경우 이미 insert와 select 등 다양한 처리를 진행하고 있기에 lock을 걸었을때 성능의 이슈와 DB 자체가 빠른 시스템이 아니라 처리 속도면에서도 좋은 결과를 보여주진 않는다.그래서 우리가 선택할 수 있는 동시성 제어 방법으로 in-memory의 캐시를 사용하는 Redis를 통해 Lock을 처리할 수 있다.🟠 Redis(lettuce) 설정Redis를 사용하기 위해서는 Redis 서버를 생성해야되기 때문에 설정부터 시작해보자.🟢 docker compo..
-
동시성 제어 [2] DB Lock개인 공부/spring 2024. 8. 5. 19:53
🔴 분산 Lock지난 번 글에 이어 동시성 문제를 해결해보려고 한다.java 동시성 제어 [1]java 처리분산된 여러 서버에서 서버마다 락을 처리해놔도 여러 서버가 존재한다면 동시성은 해결될 수 없다. 그래서 여러 서버가 DB 한곳으로 요청할때 DB에서 락을 걸어 동시성 이슈를 해결하는 방법에 대해 알아보자.🟠 DB Lock (비관적 락)데이터를 저장하고 있다면 당연히 DB를 사용하고 있을것이다. RDB를 사용하고 있는 경우 query를 통해 Lock을 걸어줄 수 있다.여기서 비관적 락이란 트랜잭션이 발생하면 DB에서 락을 걸어서 대기시키는 것이다.🟢 Service@Service@RequiredArgsConstructor@Transactional(readOnly = true)public class..
-
동시성 제어 [1] java 처리개인 공부/spring 2024. 8. 5. 19:51
🔴 동시성 제어란?회사 공고나 백엔드 개발자로써 성장하다 보면 가장 많이 듣게되는 부분 중 하나가 동시성 제어다. 특히 자바 개발자는 스프링의 멀티 쓰레드 특성상 해당 부분을 해결할 능력을 갖추는 것이 필수이다.여러 쓰레드가 동시에 요청을 처리하는 프로세스를 순서대로 처리되도록 개발자가 처리해주면 되는 것이다.🟠 고려할 점동시성을 처리하기 전에 환경, 프로젝트 규모를 먼저 고려해야 한다. 작은 프로젝트(=1개의 서버만 운영)작은 프로젝트라면 하나의 서버에서 처리하고 있기 때문에 서버 내에서 java의 Lock이나 Synchronize를 통해 처리할 수 있다.큰 프로젝트(=여러개의 서버 운영 =분산 시스템)프로젝트 당 쓰레드도 여러개지만 서버 자체도 여러개라 Lock을 처리해줄 외부 설정이 필요함. D..