조건매칭은 Queue (First in First Out) 구조로 이루어 져야 한다.유저가 접속하면 유저의 매칭취소 / 이탈을 감지 해야 한다.매칭은 게임과 인원수를 알고 있어야 한다. 매칭이 완료되면 Discord url을 각 유저들 에게 뿌린다세션 감지 = Websocket / 대기열 = RedisProblemI/O 접근이 많고 최종으로 매칭이 된 결과만 영구적으로 저장 ( 매칭 실패시 저장 x )사람들을 매칭시켜줄 때마다 매칭할 사람들의 db가 저장 되어있어야 한다. ( 속도와 데이터의 무결성 중요)지속적인 요청에 트래픽에 따라 데이터의 무결성과 속도가 보장 되어야 한다.그에 따라 다른 기능들에 문제가 발생되지 않아야하고, 접근이 많아 기능에 문제가 발생 됐을경우다른 기능에 문제를 일으키면 안..
분류 전체보기
조건 매칭은 Queue (First in First Out) 구조로 이루어 져야 한다. 유저가 접속하면 유저의 매칭취소 / 이탈을 감지 해야 한다. 매칭은 게임과 인원수를 알고 있어야 한다. 매칭이 완료되면 Discord url을 각 유저들 에게 뿌린다 Controller DeferredResult로 타임아웃 , 캔슬 , 에러 상황을 감지하고 매칭을 캔슬을 해준다 Service key = 게임이름+매칭인원 으로 해주었다. (키는 공유로 사용되어야 하고 벨류는 같은 키값을 바라보고있어야 했기 때문) Lock 걸어 매칭이 완료 되지 않는 유저를 대기 시킨다. DeferredResult 로 비동기 처리를 한 후 대기인원들을 웨이팅 큐에 넣는다. 채팅 요청 (Async : DeferredResult로 응답) 웨..
트랜잭션을 지원하는 쓰기 지연이 가능한 이유begin(); // 트랜잭션 시작save(A);save(B);save(C);commit(); // 트랜잭션 커밋데이터를 저장하는 즉시 등록 쿼리를 데이터베이스에 보낸다. 예제에서 save() 메서드를 호출할 때 마다 즉시 데이터베이스에 등록 쿼리를 보낸다. 그리고 마지막에 트랜잭션을 커밋한다.데이터를 저장하면 등록 쿼리를 데이터베이스에 보내지 않고 메모리에 모아 둔다. 그리고 트랜잭션을 커밋할 때 모아둔 등록 쿼리를 데이터베이스에 보낸다. 트랜잭션을 지원하는 쓰기 지연과 성능 최적화트랜잭션을 지원하는 쓰기 지연과 JDBC 배치insert(member1); // INSERT INTO ...insert(member2); // IN..
Paging / Pagination DB에 저장된 데이터들을 페이지에 맞춰서 몇 개씩 뿌릴건지 알려주는 것 DB에 저장된 데이터가 20개이고 프론트에서 1페이지에 5개씩 이라고 요청하면 백엔드에서 전체 DB에서 데이터를 앞에서부터 5개씩 분류하여 해당 페이지에 맞는 데이터를 넘겨줌. JPA - Pageable 이를 위해서 JPA에서 Pageable이라는 객체를 제공하고있다. Pageable이란?Pageable 이 Pagination 요청 정보를 담기위한 추상 인터페이스 라는 의미/실제로 쓰기 위해서는 구현체가 필요 class QPageRequest : QueryDSL 을 위한 Pageable 구현체 class PageRequest : 가장 기본적인 Pageable 구현체 enum Unpaged : pag..
fetchResult (deprecated) 이전까지의 페이징 방법중 하나는 fetchCount()와 fetchResult()를 이용하는 방법이였다.하지만 이는 단순히 count 처리하는 용도이기 때문에 QueryDSL에서는 이를 지원하지 않기로 결정했다고 한다.따라서 count와 result를 더 효율적으로 이용하는 방법을 사용하자.List content = queryFactory .select( new QMemberTeamDto( member.id.as("memberId"), member.username, member.age, team.id..
UserRepository는 JPARepository 와 UserRepositoryCustome(DSL)을 인터페이스화한다 그리곤 UserRepositoryCustome 를 구현해줄 UserRepositoryCustomeImpl class를 만들어 DSL을 구현하면 된다.
Spring Data Jpa JPA는 Java 오브젝트를 관계형 데이터베이스에 매핑하는 Java 표준입니다. JPA는 개발자가 데이터베이스에 데이터를 저장, 조회, 업데이트, 삭제하기 위해 SQL을 작성할 필요없이, 객체를 조작하는 것만으로 데이터베이스에 저장, 조회, 업데이트, 삭제를 수행할 수 있게 합니다. 우리에겐 복잡한 Entity의 멤버종류가 많거나 join대상이 많아지는 경우, 최적화작업을 위해 3가지 방법을 사용할 수 있다 !! 1. @Query어노테이션 2. JPA Criteria Query 3. Query DSL · 장점 - 필요한 데이터만 선별하여 가져오거나 복잡한 Join 쿼리를 생성할 수 있습니다. 🌞최적화에 무조건 필요한 작업🌞 · 단점 - JPA의 1차 캐시를 활용할 수 없습니..
합집합(정제된), UNION UNION은 합집합 연산. 사용할 컬럼의 수와 데이터 형식이 일치해야 하며, 합친 후 '중복 제거'한다. SELECT * FROM (테이블1) UNION SELECT * FROM (테이블2); 합집합(정제하지 않는), UNION ALL 정렬하지 않고 중복 제거 하지않는다. ( 정제하지 않음) SELECT * FROM (테이블1) UNION ALL SELECT * FROM (테이블2); 교집합(정제된), INTERSECT 두 개의 테이블에 대해 겹치는 부분을 추출하는 연산이다. 추출 후 '중복 제거' 하여 보여준다. SELECT COL1, COL2 FROM A INTERSECT SELECT COL1, COL2 FROM B INTERSECT 명령어는 Oracle DB, Maria..