프로젝트/WebRTC 화상통화 프로젝트
-
스프링 시큐리티가 OAuth 로그인을 처리하는 방법프로젝트/WebRTC 화상통화 프로젝트 2022. 8. 3. 00:01
(1) OAuth2.0이란? (2) Spring Security와 OAuth 2.0으로 로그인 구현하기(SpringBoot + React) (3) Spring Security OAuth 2.0 단위테스트 (4) Spring Security가 OAuth 로그인을 처리하는 방법 로그인 구현을 하고 나서 스프링 시큐리티가 많은 것을 추상화해준다고 느꼈습니다. 실제로 어떻게 로그인을 처리해주는지 알아보고자 합니다. Config 설정 스프링 시큐리티를 사용할 때 단지 application.properties 또는 application.yml에 client-id, cleint-secret 등의 정보만 적어줍니다. application.properties spring.security.oauth2.client.regi..
-
Spring JPA에 Index 적용하기프로젝트/WebRTC 화상통화 프로젝트 2022. 8. 2. 00:01
개요 - Spring JPA + MySQL에 Index를 적용해보자 - Index를 어떻게 걸어야 효율적일까? 인덱스(Index)란? 인덱스란 우리가 책에서 원하는 분야를 찾기 위해 처음부터 끝까지 읽는 게 아니라 목차에서 원하는 부분을 찾아 가는 것처럼 데이터베이스에서 데이터를 찾을 때 처음부터 끝까지 읽는 것이 아니라 효율적으로 데이터를 탐색할 수 있게 합니다. 어떻게 빠르게 탐색이 가능할까요? 추가적인 공간을 활용하여 데이터를 정렬시킴으로써 수정,삭제의 성능을 수정하여 조회의 성능을 높입니다. 데이터가 정렬되어있으면 이분탐색을 통해 원하는 데이터를 빠르게 탐색할 수 있는 것을 떠올릴 수 있습니다. 인덱스에 대해서 조금 더 자세하게 알고 싶거나 이해가 되지 않는다면 다음 글을 참고하세요 https:/..
-
Redis Sorted Set을 이용한 실시간 랭킹 시스템 구축(1)프로젝트/WebRTC 화상통화 프로젝트 2022. 8. 1. 02:06
이해하는데 필요한 사전 지식 - Redis란? - 관계형 DB 지식 - Docker(Redis를 docker로 띄우기 위해) 관계형 데이터베이스로 랭킹 구축하기 예를 들어 영화의 관객수를 가지고 랭킹을 매기기 위한다고 가정하겠습니다. 이러한 순위는 관계형 데이터베이스로도 간단하게 산출해낼 수 있습니다. 데이터베이스의 테이블 이름은 movie Column에서 영화 이름을 name, 관객 수를 view라고 가정하겠습니다. movie 테이블은 name, view 칼럼을 가진다 순위의 경우에는 간단하게 관계형 데이터베이스로도 산출해낼 수 있습니다. select * from movie ORDER BY views DESC 만약 101위에서 200위까지 가져온다면 다음과 같은 쿼리를 작성하면 됩니다. select *..
-
Base62 인코딩을 활용해 초대링크 만들기프로젝트/WebRTC 화상통화 프로젝트 2022. 7. 31. 10:37
사용자가 그룹에 가입하게 위해 그룹장과 사용자에게 편의성을 주기 위해 초대링크를 제공하고자 했습니다. 요구사항은 다음과 같았습니다. 1. 초대링크는 Unique 해야 한다 2. 너무 길지도 너무 짧지도 않아야 한다 3. 어떤 그룹의 초대링크인지 예측할 수 없어야 한다. 예를 들어 그룹id 1의 초대링크가 1이라면 그룹1에 대한 초대링크인지 알게 되고 이를 악용할 수 있는 여지가 발생하게 됩니다. 따라서 흔히 알려진 URL Shortener기법을 사용하여 이 문제를 해결하고자 했습니다. URL Shortener는 긴 URL을 짧게 축약하여 5~9개 정도로 단축하는 것을 말합니다. 해결하기 위한 방법들 MD5, Sha-1등의 해시 알고리즘들은 길이가 너무 깁니다. MD5: 9e107d9d372bb6826bd..
-
JPA Entity 연관관계 구현하기(양방향 연관관계 List Empty 문제 해결)프로젝트/WebRTC 화상통화 프로젝트 2022. 7. 29. 00:04
개요 JPA의 다양한 연관관계를 구현해보려고 합니다. 1: N, 1:1, N:M을 다뤄보겠습니다. 어느 정도 JPA에 대한 지식이 있다는 전제하에 진행됩니다. N : M 연관관계 구현하기(회원 - 그룹) 현재 로그인기능만 구현한 상황이기 때문에 Member Entity만 존재합니다. 회원은 여러개의 그룹에 가입할 수 있습니다. (1 : N) 그룹은 여러명의 회원을 가질 수 있습니다. (1 : N) 두 엔티티가 모두 1:N 관계를 가지기 때문에 N:M 연관관계입니다. @ManyToMany라는 어노테이션이 존재하지만 중간 테이블을 묵시적으로 생성해주기 때문에 필요한 추가 칼럼을 사용할 수 없는 문제가 발생합니다. Member_Group이라는 중간 테이블을 두어 N:M을 1:N, N:1으로 풀어내고자 합니다...
-
Controller 단위테스트 하기프로젝트/WebRTC 화상통화 프로젝트 2022. 7. 26. 16:36
개요 - MemberController를 단위 테스트하려고 합니다. - MemberController는 MemberService를 의존하고 있습니다. - @WebMvcTest를 사용하여 테스트합니다. GET +QueryParam 조회 컨트롤러 메서드 @GetMapping("/info/{nickname}") public ResponseEntity memberInfo(@PathVariable(value = "nickname") String nickname) { Member member = memberService.getUserInfo(nickname); return new ResponseEntity(makeBasicResponse(SUCCESS, member.toMemberResponse()), HttpSt..
-
스프링 부트 + Mysql 도커로 띄우기프로젝트/WebRTC 화상통화 프로젝트 2022. 7. 21. 11:20
(1) Window에서 도커로 MySQL + SpringBoot 띄우기 (2) Ubuntu에서 Spring,MySQL, Redis Docker Compose로 배포하기 (3) Jenkins로 Gitlab CI/CD 구축하기(Spring + MySQL + JenKins + Redis + Nginx) 개요 Spring Boot App과 Mysql을 띄워서 관리하고 싶은 상황입니다. 도커를 활용하여 작업을 수행해보려고 합니다. 도커 설치 윈도우에 도커 설치 springboot 설정 파일 예시 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://db-mysql:3306/mydb?useSSL=false username:..
-
Spring Rest Docs 적용하기프로젝트/WebRTC 화상통화 프로젝트 2022. 7. 21. 00:01
개요 프런트엔드와 원활하게 소통하기 위해 API 명세서를 만드려고 합니다. 이때 코드를 기반으로 API 명세서를 만들어주는 Swagger와 Spring RestDocs가 있습니다. 이 둘에 대해 비교해보고 RestDocs를 선택하게 되었습니다. https://junuuu.tistory.com/318 API 문서화를 위한 Swagger와 Spring Rest Docs 비교 Swagger란? API 문서를 자동으로 만들어주는 라이브러리입니다. REST API를 편리하게 문서화해주고, 이를 통해 편리하게 API를 호출해보고 테스트할 수 있는 프로젝트입니다. 이를 활용하여 협업하는 junuuu.tistory.com 컨트롤러에 작성한 MockMvc 단위 테스트로 Spring Rest Docs를 만드는 법을 알아보..