[개발일지] 230613 GraphQL Mutation
·
성장이야기/TIL
GraphQL은 데이터를 읽어오는데 사용되는 "query", 데이터를 변경하는데 사용되는 "mutation", 실시간으로 변경사항을 감지하는 "subscription" 이렇게 세 가지 유형의 쿼리가 존재한다. 오늘은 그 중 데이터를 변경할때 사용하는 mutation에 대해 알아봤다. Mutation REST에서 데이터 수정을 위해 GET요청을 사용하지 않는것 처럼 GraphQL도 데이터 변경을 발생시키는 작업은 명시적으로 mutation을 통해 전송되어야 한다는 규칙을 정하는 것이 좋다. mutation의 스키마 정의하는것은 "query"와 다를게 없다. 아래 예제 코드를 보면 스키마 형태가 query에서 mutation으로 변경된것 뿐이다. mutation CreateReviewForEpisode($e..
[개발일지] 230609 GraphQL을 알아보자 (GraphQL과 REST API)
·
성장이야기/TIL
GraphQL이란? GraphQL은 간단하게 말하면 데이터 쿼리 언어이다. 페이스북(메타)에서 만든 쿼리 언어로 REST API와 다르게 클라이언트가 필요한 데이터의 구조를 명시할 수 있어 클라이언트가 필요한 데이터만 얻을 수 있다는 특징이 있다. GraphQL을 이용하면 여러 번 데이터를 요청하거나 과도한 데이터 요청을 최소화할 수 있어 효율적인 네트워크 사용이 가능해진다. 다시말해 GraphQL은 클라이언트-서버 간 통신에서 사용되며, 이는 일반적으로 웹 또는 앱에서 데이터를 가져오는 데 사용된다. GraphQL의 목적과 특징 GraphQL의 주요 목적은 클라이언트 사이드에서 효율적이고 유연하게 데이터를 가져오는 것이다. 이를 통해 네트워크 사용량을 줄이고 애플리케이션의 성능을 향상시킬 수 있다. 1..
[개발일지] 230608 실시간 급상승 검색어 알고리즘
·
성장이야기/TIL
실시간 급상승 검색어 알고리즘이전에 알아봤던 랭킹 알고리즘을 바탕으로 실시간 급상승 검색어 랭킹 알고리즘을 만들어야 하는데 지금까지 구상한걸 기록해보려고 한다. 우선 실시간 급상승 검색어 기능에서 고려해야 하는 점은 아래와 같다.평소 검색 유입량에 대비 많은 유입량을 보이는 검색어를 탐지시간 가중치(최근에 검색된 검색어에 더 높은 점수를 적용하기 위함)검색한 시간대에 따른 점수 보정 (새벽시간대에 검색한 검색어의 점수는 낮게 측정되게 하기 위함)전체 검색량에 따른 점수 보정 (평소에 검색량이 많았던 키워드일 수록 점수를 낮게 측정하기 위함) 시간 가중치: 실시간 검색어 랭킹에서 최신 정보를 반영하기 위해 시간 가중치를 부여할 수 있다. 최근에 검색된 검색어에는 더 높은 가중치를 적용하여 기대 점수를 산..
[개발일지] 230607 Ranking Algorithm(순위 알고리즘)
·
성장이야기/TIL
실시간 급상승 검색어 기능을 위한 Ranking Algorithm에 대한 조사 우선 공개된 Ranking Algorithm을 살펴보면 게시글의 추천수를 기반으로 인기 게시글을 선별해 사용자에게 추천해 주는 알고리즘, 추천/비추천을 이용해 순위를 매기는 알고리즘, 평점을 기반으로 하는 순위 알고리즘 등등 여러 알고리즘이 존재한다. Hacker News Ranking Algorithm Hacker News에서 사용하는 ranking algorithm은 생각보다 간단하다. p = 게시글에 대한 추천 수 (-1을 한 이유는 글 작성자의 추천도를 고려한 것) t = 글을 게시한 시간과 현재 시간 사이의 시간(시간 단위). 예를 들어, 2시간 전에 게시된 글은 t = 2 G = 중력계수 (news.arc에서는 기본..
[개발일지] 230602 Java Varargs(가변인자)란?
·
성장이야기/TIL
오늘 새로 배운 내용 Java Varargs (가변인자) 오늘은 Java 5부터 도입되었다는 Varargs (가변인자) 기능을 알게 되었다. Varargs기능은 메서드의 매개변수로 동적인 개수의 인수를 전달할 수 있게 해주는 기능으로, 메서드가 동일한 타입의 인수를 다양하게 받을 수 있게 해 준다. 아래 예시 코드르 보면 이해가 편하다. public void printNumbers(int... numbers) { for (int num : numbers) { System.out.println(num); } } printNumbers(1, 2, 3); // 1, 2, 3을 인수로 전달 printNumbers(10, 20); // 10, 20을 인수로 전달 printNumbers(100); // 100을 인..
[개발일지] 230531 직렬화 중 만난 Jackson 버전 문제
·
성장이야기/TIL
오늘은 응답 객체 직렬화 관련해서 고생을 했는데 그 과정을 짧게나마 기록해 본다. 간단하게 문제상황을 설명하면 market의 open 여부를 확인하는 api를 get 요청했을 때 market의 open 여부에 따라 true, false 값을 반환하는 api인데 동일한 응답값이 두 개가 나오는 문제가 발생했다. 필드명이 isMarketOpen이라 치면 아래와 같이 두 개가 중복돼서 나오는 문제가 발생했다. { "isMarketOpen":false, "marketOpen":false } 이건 누가 봐도 dto객체의 getter 메서드에 문제가 있기 때문에 발생한 문제라고 생각하고 dto객체를 살펴보는데 별 이상 없어 보였다.. 아래는 문제의 dto객체이다. @JsonAutoDetect(fieldVisibil..