🗂️ 개인프로젝트/IDOL

🗂️ 개인프로젝트/IDOL

[개인프로젝트/IDOL] 8. 마무리!

1. 주저리주저리GitHub에 업로드하려는데 갑자기 cannot load information for github.com 이 오류가 나서 깜놀! 아무리 깃허브 계정을 재연동해봐도 문제가 해결되지 않았는데, 이 글을 보고 IntelliJ 이슈라는 것을 알았다... IntelliJ 업데이트 후에 재시도하니까 잘되었다. 휴! Error while sharing my new project from IntelliJ IDEA to github · community · Discussion #128064Select Topic Area Question Body While trying to share my new project from IntelliJ IDEA to github I get an error: "Cannot ..

🗂️ 개인프로젝트/IDOL

[개인프로젝트/IDOL] 7. 타겟 페이지 개발

1. web 모듈 설정build.gradleplugins { id 'java' id 'org.springframework.boot' version '3.2.6' id 'io.spring.dependency-management' version '1.1.5'}group = 'me.progfrog.idol'version = '0.0.1-SNAPSHOT'java { toolchain { languageVersion = JavaLanguageVersion.of(17) }}repositories { mavenCentral()}dependencies { implementation 'org.springframework.boot:spring-boot-starter-thy..

🗂️ 개인프로젝트/IDOL

[개인프로젝트/IDOL] 6. 대기열 이탈 관리

1. 개요대기열 이탈과 관련해서는 여러 가지 정책을 취할 수 있다. 여기서는 사용자가 진입 가능 상태가 되어, 타겟 페이지로 리다이렉트를 할 때 서버는 토큰을 생성하여 이를 쿠키 형태로 클라이언트에게 전달한다. 타겟 페이지 요청이 올 때, 서버는 클라이언트에 저장된 쿠키를 확인하여 쿠키가 없거나 기대한 값이 아니면 처음부터 대기하도록 한다. 2. 토큰 생성UserQueueService토큰은 SHA-256 해시 알고리즘을 사용하여, 입력 문자열을 해시하고 그 결과를 16진수 문자열로 변환하여 반환해서 사용한다.queue와 userId를 이용해 문자열을 생성하는 데, 예를 들어 queue가 default이고 userId가 123이면 입력 문자열은 "user-queue-default-123"이 된다.생성된 문..

🗂️ 개인프로젝트/IDOL

[개인프로젝트/IDOL] 5. 대기용 웹 페이지 개발하기

1. waiting-room.html프론트엔드는 과감히 GhatGPT에게 맡겨버리기. 아래 이미지를 넣고, 멋있게 만들어달라고 요청한다. 다만, 로딩바 부분이 동적으로 변할 수 있게 javascript 코드를 추가로 작성해 준다. 서비스 접속대기 중입니다. 고객님 앞에 1269 명, 뒤에 9 명의 대기자가 있습니다. 현재 접속 사용자가 많아 대기 중입니다. ※ 재접속하시면 대기시간이 더 길어질 수 있습니다. IDOL 2. dto 추가QueueStatusDtopackage me.progfrog.idol.flow.dto;public record QueueStatusDto( Long userRank, ..

🗂️ 개인프로젝트/IDOL

[개인프로젝트/IDOL] 4. 사용자를 입장 큐에 등록하기

1. 사용자를 입장 큐에 등록설명HTTP 메서드와 URL사용자를 입장 가능 상태로 전환POST /api/v1/queue/allow사용자가 입장 가능한 상태인지 조회GET /api/v1/queue/allowed AllowUserResponsepackage me.progfrog.idol.flow.dto;public record AllowUserResponse( Long requestCount, Long allowedCount) {} AllowedUserResponsepackage me.progfrog.idol.flow.dto;public record AllowedUserResponse( Boolean isAllowed){} UserQueueService/** * 사용자를..

🗂️ 개인프로젝트/IDOL

[개인프로젝트/IDOL] 3. 사용자를 대기 큐에 등록하기

1. flow 모듈 설정build.gradleplugins { id 'java' id 'org.springframework.boot' version '3.2.6' id 'io.spring.dependency-management' version '1.1.5'}group = 'me.progfrog.idol'version = '0.0.1-SNAPSHOT'java { toolchain { languageVersion = JavaLanguageVersion.of(17) }}repositories { mavenCentral()}dependencies { implementation 'org.springframework.boot:spring-boot-starter-we..

🗂️ 개인프로젝트/IDOL

[개인프로젝트/IDOL] 2. 레디스 셋팅

1. Docker로 redis 컨테이너 실행하기docker run -d -p 6379:6379 --name idol-redis redis:6.2버전은 redis 6.2 사용백그라운드로 실행하고, 호스트 6379 포트에 컨테이너 6379 포트를 포트포워딩컨테이너 이름은 idol-redis로 지정 [Redis] 어바웃 레디스1. Redis 란? [백엔드/기타] 인메모리 데이터베이스1. 인메모리 데이터베이스(in-memory database)메모리에 데이터를 적재하여 활용하는 데이터베이스 인메모리 데이터베이스 주요 특징1. Millisecond respoprogfrog.tistory.com 2. 레디스 동작 확인application.propertiesspring.data.redis.host=127.0.0.1s..

🗂️ 개인프로젝트/IDOL

[개인프로젝트/IDOL] 1. 개발 환경 준비

개요적은 리소스로도 대량의 I/O 요청을 처리할 수 있는 방법이 뭐가 있을까?Spring Webflux를 통해 이런 문제를 어느정도 해결할 수 있다.Reactor라는 라이브러리를 통해서 적은 리소스로도 대량의 I/O 요청을 처리할 수 있는 구조를 제공하고 있다.Reactor는 React라는 표준에 대한 구현체로써, non-blocking 애플리케이션을 만들 수 있게 도와주는 라이브러리이다.Netty 기반으로 네트워크 비동기 I/O를 처리한 이후에, 이벤트 루프 기반을 활용해서 작업들을 빠르게 처리할 수 있다.이벤트 루프를 위해서 적절한 규모의 쓰레드도 사용하게 되는데, CPU 코어 개수가 너무 적지 않다면 일반적으로 CPU 코어 수만큼 쓰레드를 만들고 활용하게 된다.요청 개수에 맞춰 쓰레드를 생성해둬야하..

🗂️ 개인프로젝트/IDOL

[개인프로젝트/IDOL] 0. 프로젝트 개요

프로젝트명:티켓팅 접속자 대기열 시스템  개발 환경:IntelliJ IDEA Community EditionJava 17 (LTS, Long Term Support)Spring Boot 3Spring WebFluxSpring MVCRedis 6.2 설명:짧은 시간에 대량의 트래픽이 인입되는 상황을 스파이크성 트래픽이라고 한다.인기 있는 제품이 출시하거나, 아이돌의 티켓팅, 수강 신청, 미디어 노출로 인행 갑작스러운 유입DDos 공격과 악의적인 활동과 같은 보안 공격자연 재해 및 긴급 상황과 같은 사태에서 사람들이 동시에 특정 서비스(ex. 카카오톡)을 찾는 경우이때 인입되는 트래픽은 평소 대비 10배 ~ 100배 등 갑작스럽게 증가하기 때문에, 서버의 처리 용량을 초과하게 만들어 성능 저하 또는 시스템 ..

프로그⸝⸝◜࿀◝ ⸝⸝
'🗂️ 개인프로젝트/IDOL' 카테고리의 글 목록