개-발/Java + Spring + Kotlin

조건매칭은 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..
Spring Data Jpa JPA는 Java 오브젝트를 관계형 데이터베이스에 매핑하는 Java 표준입니다. JPA는 개발자가 데이터베이스에 데이터를 저장, 조회, 업데이트, 삭제하기 위해 SQL을 작성할 필요없이, 객체를 조작하는 것만으로 데이터베이스에 저장, 조회, 업데이트, 삭제를 수행할 수 있게 합니다. 우리에겐 복잡한 Entity의 멤버종류가 많거나 join대상이 많아지는 경우, 최적화작업을 위해 3가지 방법을 사용할 수 있다 !! 1. @Query어노테이션 2. JPA Criteria Query 3. Query DSL · 장점 - 필요한 데이터만 선별하여 가져오거나 복잡한 Join 쿼리를 생성할 수 있습니다. 🌞최적화에 무조건 필요한 작업​🌞 · 단점 - JPA의 1차 캐시를 활용할 수 없습니..
학습을 하던중 암호화 되어있는 jwt토큰을 헤더에 노출하게 배웠는데, 이건 아무래도 위험하다고 생각되어 알아보던 중, ( 어세스토큰 ? 리프레시 토큰 ? ) 어세스 토큰을 빠르게 만료 시키고, 리프레쉬토큰으로 만료된 어세스토큰을 체크해서, 서버 디비에 저장되어있는 리프레쉬토큰과 비교 후 , 재발급 해주는 과정을 거치면 된다. 그러나 리프레쉬토큰 마저 탈취, 조작 당하게 되면 엄청나게 큰일 !! 그래서 리프레쉬 토큰의 보안은 철저하게 해주어야 한다고 판단되어 쿠키에 저장 하는 방법을 선택 했다. (쿠키는 여러가지 보안 옵션을 할 수 있기 때문에) 이것을 알아보려면 여기로 ... 우선 어세스 토큰과 리프레쉬 토큰을 만들어주자 ! 만드는법은 jwt 토큰을 이용하여 기간이 짧은 토큰1(어세스토큰) - [사용자의..
쿠키란 ? 쿠키는 유저들의 효율적이고 안전한 웹 사용을 보장하기 위하여 웹사이트에 널리 사용되고 있다. 쿠키는 웹사이트 접속시 접속자의 개인장치에 다운로드 되고 브라우저에 저장되는 작은 텍스트 파일입니다. 웹사이트는 쿠키를 통해 접속자의 장치를 인식하고, 접속자의 설정과 과거 이용내역에 대한 일부 데이터를 저장한다. 쿠키를 사용하는 이유는 ? 필수적인 쿠키: 필수적인 쿠키는 페이지 탐색, 웹사이트의 보안영역 접속, 그리고 검색을 포함한 웹사이트의 기본적인 기능의 활성화를 목적으로 사용되고 있다. 본 웹사이트는 필수적인 쿠키 없이 최적화된 기능 수행이 불가하므로 본 쿠키는 이용자의 별도 동의 없이 활성화 되고 있다. 기능 쿠키: 기능 쿠키는 웹사이트가 접속자의 지역 및 언어 등 웹사이트의 행태 및 외관에 ..
Access Token과 Refresh Token 어세스 토큰 (AccessToken)? 어세스 토큰은 접근/인증에 관여하는 토큰 리프레시 토큰 (Refresh Token)? 리프레시 토큰은 재발급에 관여하는 토큰 JWT는 발급한 후, 삭제가 불가능하기 때문에 만약의 경우에 탈취를 당했을 경우, 삭제가 불가능 하기 때문에 접근에 관여하는 토큰은 유효시간을 짧게 해야한다. 하지만 자동 로그인 혹은 로그인 유지를 위해서는 유효시간이 긴 토큰이 필요하다. 이때 사용되는 것이 Refresh Token 이다. Access Token의 재발급 방법 그럼 어떻게 재발급에 관여하는지 알아보자. 보통 Refresh Token은 로그인 성공시 발급되며 저장소에 저장하여 관리된다. 그리고 사용자가 로그아웃을 하면 저장소에서..
@PathVariable 이란? REST API에서 URI에 사용되는 변수이다. 예를 들면, 아래 URI에서 밑줄 친 부분이 @PathVariable로 처리해줄 수 있는 부분이다. localhost:8080/api/user/1234 music.bugs.co.kr/album/4062464 2개가 필요할 경우 따로 따로 선언 해주면 된다. @PutMapping("/posts/{postId}/comments/{commentId}") public void editComment(@PathVariable Long postId,@PathVariable Long commentId, @RequestBody CommentRequestDto commentrequestDto) { commentService.editCommen..
imSoo
'개-발/Java + Spring + Kotlin' 카테고리의 글 목록 (4 Page)