본문 바로가기

로드스타

Spring 세션과 Redis를 활용한 조회수 증가 중복 방지 1. 서론2. 여러 방법과 비교3. 구현4. 마무리 1. 서론프로젝트를 진행하면서 게시글의 조회수를 카운트하도록 했습니다.여러 서비스들을 살펴봤을 때, 새로고침을 할 때마다 조회수가 증가되는 서비스가 있었고, 새로고침하여도 조회수가 증가 되지 않도록 중복을 방지한 서비스도 있었습니다. 다른 서비스들은 조회수 증가의 중복을 방지하기 위해 어떤 방법을 사용하는지 알아봤는데, 그 중 대표적으로 유튜브는사용자가 의도적으로 동영상을 시작한다사용자는 적어도 30초동안 영상을 시청한다최대 반복수는 300번으로 예상된다최대 반복수를 넘었을 시 봇을 이용하는지 유효성 검사 단계가 수행되면서 더 이상 조회수가 증가하지 않는다조회수 증가하지 않는 상황많은 장치에 대해 하나의 IP 주소를 사용하여 동시에 동일한 영상을 시청할.. 더보기
(2) 스프링 비동기 처리를 위한 ThreadPoolTaskExecutor와 테스트 스프링에서 @EnableAsync 어노테이션과 비동기로 동작하기 바라는 메서드에 @Async 어노테이션을 사용해주면, 그 함수는 비동기로 작동할 수 있다. 이전 글에서 비동기 처리를 위한 TaskExecutor를 설정해주지 않으면 SimpleAsyncTaskExecutor가 사용된다고 했는데, 과연 그럴까 ? 그리고 많은 요청이 들어왔을 때 스레드 풀이 어떻게 동작하는지 테스트해보자. ThreadPoolTaskExecutor 옵션 Core Pool Size : 항상 유지할 최소 스레드의 개수 Max Pool Size : 스레드 풀이 가질 수 있는 최대 스레드의 개수, (Core Pool Size + 큐의 용량)보다 많은 요청이 들어오면 새로운 스레드를 생성하고 Max Pool Size보다 큰 개수의 스레.. 더보기
(1) 스프링 비동기 메일 전송, Sync vs Async, Blocking vs Non-Blocking 프로젝트에서 회원가입할 때와 비밀번호를 찾을 때, JavaMailSender를 사용해 메일 인증을 하고 있다. 그런데 메일 인증을 위해 인증번호 받기 API를 요청하면, 평균적으로 응답시간이 3초 이상 걸린다. 이를 개선하기 위해 서버에서 메일 전송을 비동기로 처리하고자 한다. 동기 동기는 작업을 순서대로 처리하는 것으로, 작업을 처리하며 그 작업의 완료 여부를 따진다. 또한 자바에서 한 함수를 호출하면 그 함수는 하나의 스레드가 모두 처리한다. 즉 함수 A가 실행 중에 함수 B를 호출하면, 함수 A를 처리하는 스레드가 함수 B를 처리 후 다음 코드를 실행한다. public class Main { public static void main(String[] args) throws InterruptedExc.. 더보기
스프링 + 리액트 : https, nginx, Mixed Content 문제 상황 첫 프로젝트, 첫 배포였다. 개발 과정은 api를 만들고 ec2 서버에 올려 프론트가 서버에 올려둔 api를 호출해서 테스트하는 방식으로 개발했으며, ec2 서버 내에 Spring과 React를 각각 3000번 포트와 8080번 포트로 실행했다. 하지만 배포 과정은 쉽지 않았다. 서버로 들어오는 http 요청을 https로 바꿔주기 위해 서버에 nginx와 letsencrypt를 설치하고, 프록시 서버를 둬서 React로 들어오는 요청에 https를 적용시켜 주었다. 그리고 웹 페이지로 들어가서 요청을 해본 결과 Mixed Content 에러가 떴다. Mixed Content ? 최초 HTML이 안전한 HTTPS 연결을 통해 로드될 때 혼합 콘텐츠가 발생하지만 다른 리소스(예: 이미지, 동영상.. 더보기