분류 전체보기

이전 포스팅에 이어 서버에서 커서 기반 페이징 기법을 통하여 클라이언트 쪽에서 무한 스크롤 방식으로 데이터를 요청할 수 있도록 처리하는 과정을 정리해보고자 한다. Pageable일반적으로 페이징 처리를 할 경우, JPA에서 제공하는 Pageable이나 Slice 를 쓴다.클라이언트가 page와 size를 전달해야 한다. 일반적으로 page = 0부터 시작한다. Page 쿼리는 다음과 같이 실행된다.SELECT COUNT(*) FROM review WHERE vinyl_id = ?;SELECT * FROM review WHERE vinyl_id = ? LIMIT ? OFFSET ?; 전체 데이터의 개수를 알려주기 위해 COUNT 쿼리를 실행한다.총 데이터 개수와 총 페이지 개수를 반환해준다. 이를 통해 ..
서론 현재 Vinyler 프로젝트에서는 사용자가 찜한 음반의 리스트를 조회 할 경우, 모든 데이터들을 한 번에 조회해서 가져오는 방식을 사용하고 있다. 그러나 이러한 방식은 찜한 음반들이 많아질수록 메모리 사용량이 많아짐으로 인해 서버 리소스가 낭비되고, 이는 JOIN 등의 쿼리를 사용하는 경우 쿼리 처리의 부하가 증가하게 된다. 예를 들어, 수백~수만 개의 찜한 음반들을 DTO로 매핑하고 직렬화하면, 메모리 사용량이 크게 증가하게 된다. 이로 인해 조회 작업의 시간이 늘어나게 되어 응답이 지연되는 상황이 발생할 수 있다. 현재는 다음과 같이 JOIN FETCH를 사용하여 사용자가 찜한 데이터들을 조회해오고 있다.그런데 페이징 없이 모든 Like를 조회해오면 JOIN FETCH는 일단 모든 조인을 수행..
현재 진행 중인 빈빈 프로젝트에서는 CCTV나 카메라 영상에서 캡쳐된 이미지를 기반으로 객체를 검출하여"사람"이 몇 명 있는지를 높은 정확도로 보여줄 수 있어야 한다.뿐만 아니라 검출된 객체들의 개별 위치를 2차원 좌표값으로 가져와서 매장 도면에 표시할 수 있어야 한다. 위와 같은 기능을 개발하기 위해 AWS Rekognition과 Google Vision API 같은 AI 비전 인식 플랫폼을 활용하기로 하였다.일차적인 단계로는 저 둘을 비교해보고 우리 프로젝트에 더 적합한 플랫폼을 찾기로 하였다. AWS Rekognition 1. 일반 객체 검출 기능DetectLabels - Amazon Rekognition DetectLabels - Amazon RekognitionDetectLabels Dete..
· ETC
새로운 팀 프로젝트를 들어가며 Jira로 프로젝트를 관리해보자는 의견을 내었다.감사하게도 그 의견이 받아들어져 깃헙과 지라를 연동하는 작업을 맡게 되었는데 은근히 번거로운 과정들이 많았다.공수를 들이기에는 번거롭고 귀찮은 과정들이 많았기에 연동 작업 삽질기를 정리해보고자 한다. 간단하게 깃헙 이슈 템플릿을 통해 이슈를 만들고, 그 이슈를 jira와 연동하여 이슈 티켓을 생성하는 방식으로 하기로 하였다.(해당 이슈 티켓에서 브랜치 생성 및 풀 리퀘스트 등이 가능하다.) 사전 작업1. Secrets 변수 설정 프로젝트 Settings에서 secrets 변수들을 설정해준다.JIRA_BASE_URL은 프로젝트의 .net까지의 부분을 입력해주면 되고, JIRA_API_TOKEN의 경우에는 따로 발급받아야 한다. ..
회원가입/로그인 기능을 개발하며 Access Token/Refresh Token 인증 방식을 적용하는 과정을 정리한 글입니다. 서론JWT 기반의 Access Token을 이용한 로그인 방식은 세션을 서버에서 관리하지 않아도 되기 때문에 서버 부담이 적은 편이다.또한 자체적으로 사용자 정보를 포함하고 있으므로 서버가 상태를 유지할 필요 없이 토큰만 검증하면 되기 때문에 요청마다 사용자 인증을 빠르게 할 수 있다는 장점이 있다. 그러나 사용자가 http 헤더로 보내는 토큰을 기반으로 유저가 판단되기 때문에 공격자에 의해 토큰이 탈취당할 경우, 이 토큰이 만료될 때까지 공격자가 사용자의 권한을 가질 수 있으므로 보안적으로 매우 위험하다고 볼 수 있다. 그렇기 때문에 Access Token의 유효 기간을 짧게..
이전에 iOS 개발을 하면서 사이드 프로젝트를 하나 만든게 있다.가까운 곳에 레코드 샵이 있으면 LP판을 구경하러 종종 가고는 하는데장르별로 무수히 많은 레코드 판들 중에서 뭐가 뭔지 하나도 모르는 경우가 많다.청음할 수 있게 옆에 턴테이블을 구비해둔 곳도 많지만 누군가 쓰고 있을 때에는 기다리기도 애매하다.그래서 답답한 마음에 내가 직접 쓰려고 만들었다. 카메라로 LP판의 바코드를 스캔해서 해당 음반의 정보를 확인하고, 타이틀 곡의 링크를 통해 어떤 음악인지 빠르게 파악할 수 있다.  최근 들어 Spring 공부를 하며 해당 애플리케이션의 서버를 만들어 앱과 연동하면 괜찮겠다 싶은 생각이 들었다. 일단은 작은 규모로 시작하겠지만 개인화 추천 서비스도 만들고 싶은 마음이다.  소개 https://gith..
구간 합 구하는 방법은 합 배열의 개념을 이용해서 해결할 수 있으나 이번 문제와 같은 경우, 중간 중간 수가 자주 변경되는 상황이 일어나기 때문에 합 배열로 풀기에는 시간이 오래 걸린다는 단점이 있다. 그렇기에 이와 같은 문제는 세그먼트 트리를 이용해 풀이하는 것이 권장된다. (세그먼트 트리의 경우, 개념 이해하는게 꽤 오래 걸렸으나 그래도 문제와 예제를 통해 세그먼트 트리 문제임을 알아채기가 편하다고 느껴졌다(?). 풀이 공식같은 것도 딱 정해져 있어서 차라리 그리디, 구현같은 것보다는 상대적으로 낫게 느껴진다..)  문제    예제  접근  트리 초기화하기 리프 노드의 개수가 데이터의 개수(N) 이상이 되도록 트리 배열을 만든다.트리 배열의 크기 구하는 방법 : 2^k >= N 을 만족하는 k의 최솟..
문제     풀이  4방향으로 탐색하며 인접한 칸 중 방문이 가능한 칸으로 이동하는 것을 보아 백준의 2178 미로찾기 문제와 비슷한 유형이라는 생각이 들었다. (BFS나 DFS로 풀이가 가능할 조짐이 보임.) 그러나 아래와 같은 추가적인 고려 사항이 있다. 1. 현재 칸의 주변 4칸 중 청소되지 않은 빈 칸이 있는  경우반시계 방향으로 90도 회전바라보는 방향 기준 앞쪽 칸이 청소되지 않은 경우, 한 칸 전진=> 큐에서 받아온 방향을 기준으로 반시계 방향 회전한 방향으로의 좌표를 구해 이동한다 ex) 위 문제에서 주어진 방향값은 0(북), 3(서), 2(남), 1(동) 이다.만약 현재 방향이 0(북)이고, 반시계 방향으로 회전한다면 아래와 같이 반복된다. (순환) 0(북) -> 3(서) -> 2(남)..