Project8 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. AWS 프로젝트 배포과정 Intro : 이번에 프로젝트를 AWS에서 EC2로 배포를 하였는데, 블로그와 GPT 참조를 해서 배포만 해보았지 정리를 하여서 나중에 배포를 할일이 다시 생길때를 대비해서 다시 정리하기로 했습니다. ✅ 사용한 AWS 서비스 * EC2 : 애플리케이션 서버 운영 (Tomcat 기반) * RDS : 데이터베이스 관리 (MySQL/MongoDB) * S3 : 정적 파일 저장 (이미지 동영상) * 그외 : CloudFlare : HTTPS 적용 및 DNS 관리 ✅ 프로젝트 배포 단계1. AWS 계정 생성 후 IAM 사용자 및 권한 설정https://ap-northeast-2.signin.aws.amazon.com/oauth?client_id=arn%3Aaws%3Asignin%3A%3A%3Aconsole%2F.. 2025. 1. 31. 깃허브 액션에 대해서 * GitHub Acitons : GitHub 저장소에서 CI/CD(Continuous Integration / Continuous Deployment)를 자동화할 수 있는 도구.즉 코드 변경이 있을 때 빌드, 테스트, 배포 등의 작업을 자동으로 수행할 수 있도록 도와주는 기능. 1. GitHub Actions의 핵심 개념 : GitHub Actions는 이벤트 기반으로 동작. 즉, 특정 조건이 충족되면 자동으로 실행. 1) Workflow - GitHub Acitons에서 실행되는 자동화 작업 단위. - github/workflows/ 디렉터리에 yaml 파일로 저장됨. 2) Event ( 이벤트 ) - GitHub Actions가 언제 실행될지 결정하는 조건이다. - Ex) push : 코드.. 2025. 1. 30. 인게임 제한시간 구현사항 1. GameController에 ready 메소드, start 메소드, sendQuiz 메소드, checkQuiz 메소드가 존재. -> Solid 원칙은 클래스(또는 컴포넌트)는 하나의 책임만 가져야 하며, 단일 변경 사유만 있어야 합니다. 라는 사유를 지키기 위해서 QuizController에 sendQuiz 메소드와 checkQuiz 메소드를 분리해서 코드 복잡성을 줄임. 2. Create Quiz 버튼을 누르는순간 WebSocket과 통신을 하여 문제를 가져와야함. -> 문제를 가져오는 순간에 모든 클라이언트에 30초 제한시간( 실시간 )과 남은퀴즈를 -1 감소 시켜야함. 1) 시간과 남은 퀴즈 감소는 js 코드에서 구현. 2) 저장한 문제를 가져오는것은 Spring에서 구현 -> Create.. 2025. 1. 23. 이전 1 2 다음