친구의 웹툰이라는 페이지가 있다. 이름, 나이, 성별 정보를 검색할 수 있고 입력하지 않고 검색할 수도 있다. 검색의 목적은 해당 정보와 맞는 유저들의 웹툰 평가 정보를 보기 위함이다. 예를 들면 26세 남자 홍길동씨의 평가 목록과 몇점을 주었는지에 대한 정보를 확인할 수 있다. 혹은 정보를 일부 입력하지 않는다면 26세 남성들이 평가한 웹툰들...
친구의 웹툰 동적 쿼리 작성 시 발생했던 문제 그리고 최적화 (MySQL - group by)
Java로 구현하는 개인화 웹툰 추천 알고리즘 with apache commons math
기존에 파이썬으로 구현했던 웹툰 추천 알고리즘을 다듬어서 Java로 작성해보았다. 작성한 개인화 웹툰 추천 로직에 대해 설명해보려 한다. 추천 시나리오 사용자는 최소 10개 이상의 자기가 본 웹툰에 대한 평가를 한다. 평가는 1~5점으로 부여한다. (1, 2, 3, 4, 5) 평가가 이루어지면, 사용자의...
MBTI별 선호 웹툰 조회 시 발생한 N+1 문제
이번엔 N+1 문제가 발생할 것을 알고도 한 번 어느정도 차이가 있는 지 보기 위해 그냥 실행시켜본 N+1 문제를 보려고 한다. 문제 @Entity @Getter @NoArgsConstructor public class MbtiWebtoon extends BaseEntity { @Id @GeneratedValue(stra...
추천 알고리즘에서의 update 쿼리 N+1 문제
웹툰 개인화 추천 알고리즘을 작성하면서 만났던 문제에 대해 기술하려고 한다. 문제 @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Recommendation extends BaseEntity { @Id @GeneratedValu...
Spring Rest Docs vs Swagger
1인 개발이기 때문에 비교적 API 문서도구의 중요성이 떨어지지만, 장점이 있기 때문에 사용하기로 결정했다. API의 일관성 유지 API를 개발하는 동안 API 프로토타입을 작성하고 빠른 테스트 가능 프론트엔드 서버까지 담당하고 있기 때문에 문서화 된 API 구조와 엔드포인트 정보는 개발에 큰 편의성을 제공한다. 이런 이유 등으로 문...
기존 페이징 + shuffle 구현 방식 문제 with 캐싱, 성능개선, 여전히 남은 문제
페이징과 무한스크롤 구현은 제대로 되었지만 페이징 + shuffle을 고려해 구현했던 로직이, 테스트를 해보니 문제가 잘 해결되지 않았다. 여전히 매 페이지 요청 시 웹툰 목록을 섞어 0페이지에 있던 항목이 2페이지에서 보이는 등의 문제가 발생한다. 이 문제는 사용자 경험과 제대로 된 평가 데이터 수집을 위해 꼭 수정해야 하는 부분이기 때문에 타협...
페이징에 shuffle 적용하기, 무한스크롤
평가할 웹툰을 사용자에게 보여줘야 하는 부분은 사용자 경험을 생각해야 했다. 우선 네이버 웹툰 한정이고, 현재 연재중인 작품들을 대상으로 하는데도 웹툰의 개수가 540개 가량 된다. 그리고 이미 사용자가 평가한 웹툰은 보여지면 안된다. 평가 페이지에서 웹툰을 전부 한 번에 렌더링하게 되는데 상황에 따라 버벅임이 발생할 수 있다. 그리고 평가할 ...
mbti 지연로딩 문제, 변경감지 with setter
평가 로직을 구현하는데 발생한 문제를 정리해보고자 한다. 평가 로직 웹툰에 대한 사용자의 평가를 Evaluation Entity에 저장하는 로직이다. @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Evaluation extends BaseE...
Refresh 토큰을 이용한 Access 토큰 갱신에서의 문제
Refresh 로직을 구현하고 프론트에서까지 구현한 후 테스트를 제대로 하지 않고 다른 기능을 구현하고 있었다. 그런데 Access 토큰이 만료되고, 401 에러가 나타나면 인터셉터를 거쳐 구현해놓은 Refresh 로직을 통해 권한을 유지해야 하는데 이 부분에서 문제를 맞닥뜨렸다. 그 문제와 문제 해결 과정에 대해 서술해보려 한다. 우선 결론부터...
JWT 토큰 (Access + Refresh) 방식의 보안 문제 고민(2) - 프론트 서버
이제 백엔드 서버에서 구현했던 토큰을 이용한 로그인 시나리오를 프론트 서버에서 사용하는 방법에 대해 정리한다. 우선 프론트 서버에서 구현해야 할 부분을 보자. 백엔드 서버에 권한이 필요한 요청을 하기 위해서는 Access 토큰을 전달해야 한다. Access 토큰을 권한이 필요한 요청 헤더에 담아 전달해 권한을 증명한다. ...