최근 블로그 댓글 시스템을 utterances에서 giscus로 전환했다. 이 글에서는 giscus를 적용한 과정을 다룬다. 배경 기존 댓글 시스템 utterances에서 댓글을 관리하던 방식 블로그를 처음 만들 당시에 댓글 시스템으로 utterances를 선택했다. utterances는 GitHub Issues를 기반으로 동작하며, 다음과 ...
서론 이 글에서는 시대팅 시즌5의 매칭 결과에 영향을 미친 주요 요인들을 분석한 내용을 다룬다. 특히 이번 학기 고급프로그래밍 강의에서 배운 로지스틱 회귀를 활용하여 분석을 진행하였는데, 이를 통해 매칭 알고리즘 개선을 위한 유용한 인사이트를 도출하고자 했다. 로지스틱 회귀 분석 기본 개념 학습 시간에 따른 시험 합격 확률을 나타낸 로지스틱 ...
문제 상황 JWT 인증 시스템 개발 초기에 Spring Boot 애플리케이션에서 JWT 토큰 설정값을 application.yml로 관리하던 중 한 가지 문제가 발생했다. SecurityConstants object에서 @Value 어노테이션으로 토큰 만료 시간을 주입받으려 했으나, 값이 정상적으로 주입되지 않아 모든 토큰의 만료 시간이 0으로 설정...
배경 백엔드를 배포한 이후, 프론트엔드가 로컬 환경에서 리프레시 토큰이 담긴 쿠키를 설정하지 못하는 문제가 발생했다. 이 문제는 쿠키의 Secure와 SameSite 설정과 관련이 있었다. 이를 해결한 과정을 정리한다. 프론트엔드 팀원이 슬랙에 남긴 이슈 접근 과정 프론트엔드는 개발 환경에서 localhost를, 백엔드는 운영 환경에서 uos...
들어가며 이번 시대팅 서비스의 핵심적인 역할을 한 매칭 알고리즘의 개발 과정을 공유하고자 한다. 이번에는 1대1 매칭과 3대3 매칭으로 역할을 나누어 개발을 진행했으며, 나는 그중 1대1 매칭 알고리즘 개발을 담당했다. 특히 이번 개발은 이전 시즌(시즌4) 알고리즘을 리팩토링하고 새로운 요구사항을 반영하는 데 중점을 두었다. 이 글에서는 1대1 ...
배경 이번 시즌은 매칭 신청 기간 동안 1:1과 3:3 미팅에 대해 참가 신청을 받은 뒤, 매칭 알고리즘으로 매칭한 결과를 주말동안 공개하는 방식으로 운영하였다. 특히 매칭 결과 조회는 발표 당일 대규모 트래픽이 몰릴 것으로 예상되었고, 이를 효율적으로 처리하기 위해 API를 지...
배경 인증 횟수 초기화 요청 이메일 인증 시스템에서는 악의적인 사용자를 막기 위해 일일 인증 횟수를 5회로 제한하고 있다. 하지만 이러한 제한은 정상적인 사용자에게도 영향을 미칠 수 있기에 필요한 경우 CS팀이 사용자의 인증 횟수를 초기화할 수 있는 기능이 필요했다. 처음에는 DataGrip이나 Redis CLI 등을 사용해 Redis 데이터에...
배경 출처: https://auth0.com/blog/refresh-tokens-what-are-they-and-when-to-use-them JWT 인증 기능을 개발할 당시에는 토큰 재발급시 액세스 토큰만 재발급하도록 구현했었다. 시대팅의 운영 기간은 짧았기 때문에 리프레시 토큰의 유효 기간을 7일로 설정하고, 재발급 없이 액세스 토큰만 갱신하...
배경 잦은 에러로 인해 사용할 수 없었던 어카운트 서버 기존 시대생의 서비스들은 정보기술관 온프레미스(On-premise) 환경의 어카운트 서버를 사용하여 인증을 처리했다. 하지만 이 서버는 알 수 없는 이유로 간헐적인 장애가 발생했고, 이로 인해 시대생 앱에서 사용자들의 로그인이 예기치 않게 풀리는 등 사용자 경험을 저하시키는 문제가 빈번하게 ...
배경 기존 API 호출 시간 기존 이메일 인증 기능에서는 동기 처리 방식으로 인해 응답 시간이 길어지는 문제가 있었다. 이로 인해 사용자 경험이 저하되고 서버의 부담이 가중될 우려가 있었다. Amazon SES를 사용하여 인증 이메일을 전송하는 동안 API 요청이 차단되었고, 인증 코드 생성 및 Redis 저장 작업도 동기적으로 처리되어 전반적인...