Project11 STOMP 구독 해제 보호되어 있는 글 입니다. 2025. 5. 13. 레디스 사용 1. RedisTemplate을 이용한 분산 캐시 ( 키-값 저장소 ) 로 '방 별 인원 수'와 사용자별 입장 방 ID를 관리하여여러 서버 인스턴스가 동일한 상태를 공유함 * 분산 캐시 ( Distributed Cache ) - RedisTemplate.opsForValue() : - roomId : 123 -> 현재 인원수 - userId : 456 -> 사용자가 들어가 있는 방 ID // 방 인원 증가roomPeopleCacheTemplate.opsForValue().increment("roomId:" + roomId);// 사용자별 방 정보 저장alreadyInGameUserCacheTemplate.opsForValue().set("userId:" + userId, roomId);- roomP.. 2025. 5. 13. 자바의 동시성 처리 방법 * 문제 발생Spring 프로젝트를 진행하면서 동시성 문제에 직면했다.인게임( quiz ) -> 대기방( game ) 으로 리다이렉트 할때 문제 발생.다중 사용자들이 한번에 대기방으로 이동따라서 동시에 DB 접근을 하기 때문에 경쟁 조건 ( Race Condition ) 이 발생. * 해결 방법총 2가지로 해결 가능함1. Java의 동시성 해결 키워드를 사용 - Synchronized 키워드 - reentrantLock 키워드2. 비동기 코드를 추가해서 결과를 반환 함 - executorService 를 이용해서 비동기 처리 후 CompleteableFuture로 처리한 작업의 결과를 순차적으로 반환 받음 - @Async 어노테이션으로도 처리가 가능하다 첫번째 Synchronized 키워드를 조사한대로 .. 2025. 5. 5. Java의 동시성 문제를 해결가능한 3가지 방법 ✅ 1. synchronized (Java 기본 동기화)📌 원리 • 자바의 기본 동기화 방식으로, 한 번에 하나의 스레드만 enterRoom() 메소드 실행 가능. • 메소드 자체에 synchronized 키워드를 붙이거나 특정 객체에 대해 동기화 블록을 사용할 수 있음.@GetMapping("/room/{roomId}")public synchronized ModelAndView enterRoom(@PathVariable Long roomId, @LoginUser LoginUserRequest loginUserRequest) throws IllegalAccessException { // ... codes} ✅ 장점 • 간단하고 구현이 쉬움 (synchronized 키워드만 추가). • 자바 기본 .. 2025. 2. 12. 게임방 프로젝트 bug 정리 * 대기방에서 사용자 준비상태, 게임방 준비상태, websocket을 이용해서 준비상태 실시간 처리와인 게임에서 webSocket을 사용하여 남은 퀴즈수 감소, 퀴즈 출제를 했을때, 제한 시간이 만료됐을때그리고 마지막 라운드에서 최종 우승자 출력까지 그럴듯한 뼈대는 완성하였다.* 추가로 AWS의 EC2 서비스를 활용하여 dandee.dev 도메인에 배포까지 하였고,NginX를 이용하여 2개의 추가 EC2 인스턴스를 추가로 구매하여 로드 밸런싱까지 적용해보았다.* 특히 로드 밸런싱 관련해서 webSocket 경로도 conf 파일에 로드 밸런싱을 적용해야지 제대로 적용 가능해서 시간이 오래걸렸다. ( 자세한건 따로 포스팅 예정 )* 좌우지간 메인 기능은 구현했으니 minor한 버그 리스트를 작성하고 한개씩 .. 2025. 2. 12. NginX를 적용한 로드밸런싱 적용 및 웹 소켓 로드 밸런싱 1️⃣ NginX의 특징 ✅ 1. 비동기 이벤트 기반 아키텍처 - NginX는 이동기 이벤트 기반(Asynchronous, Event-driven) 모델을 사용하여 높은 성능을 제공 - Apache(쓰레드 기반)와 달리, 하나의 워커 프로세스가 비동기적으로 다수의 요청 처리 가능 - 결과적으로 동시에 많은 요청을 처리할 수 있어 CPU와 메모리 사용량이 적음 ✅ 2. 정적 콘텐츠(HTML, CSS, JS) 제공 최적화 - NginX는 정적 파일(HTML, CSS, JS 이미지 등) 제공이 빠름 - 캐싱 기능을 활용하면 서버 부하를 줄이고 응답 속도를 개선 가능 ✅ 3. Reverse Proxy & Load Balancing 지원 - 리버스 프록싱(Reverse Proxy) : 클라이언트의 요청을 받아서 .. 2025. 1. 31. 이전 1 2 다음