본문 바로가기

Project7

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.
인게임 유저 관리 ( 중복 계정, equals()와 hashcode() 오버라이드 ) Intro* 동일 계정으로 동일 방에 여러번 입장을 하면 입장이 안되어야 하는게 정상이다.그래서 Set 자료구조를 사용하여 동일한 유저들은 중복해서 추가를 막는 방식으로 생각하였다.* 하지만 같은 UserID, RoodID를 가짐에도 동일 객체로 인식하지 않는 문제가 발생하였다.* 객체의 값으로 동일성을 비교하려면 클래스 안에 equals() 함수와 hashcode() 함수를 @Override 하여 동등성을 보장해야한다. 아래는 코드 문제점이다. Set inGameUserSet = game.getGameUser();// 동일 사용자지만 다른 인스턴스라 중복 허용InGameUser user1 = new InGameUser(1L, 100L, "Alice", "USER", false);InGameUser us.. 2025. 1. 5.