개발 블로그를 시작할때 Velog
를 선택한 이유는 간편함
이었다.
별다른 복잡한 기능없이 간단해서 좋았지만 단점은 통계 기능의 부재였다..
물론 게시글마다 통계
를 확인할 수 있지만 게시글 하나하나 들어가봐야 한다는 불편함이😒
나는 통계를 한눈에 보고싶단 말이다...!!!
그래서 통계 서비스를 만들어 보기로 했다.
요청 URL
: https://v2cdn.velog.io/graphql요청 메서드
: POSTRest API
방식이 아닌 GraphQL
을 사용하여 엔드포인트인 https://v2cdn.velog.io/graphql
로 쿼리를 날리고 있었다. 덕분에 query를 원하는 데이터만 요청하도록 수정해 request를 보낼 수있었다.
{
"operationName": "UserTags",
"variables": {
"username": "yevini118"
},
"query": "query UserTags($username: String) {\n userTags(username: $username) {\n tags {\n id\n name\n description\n posts_count\n thumbnail\n __typename\n }\n posts_count\n __typename\n }\n}\n"
}
username
으로 요청해 사용자의 태그 목록
과 총 게시글 수
등등을 받아온다.
{
"operationName": "Posts",
"variables": {
"username": "yevini118",
"tag": null,
"cursor": "ebf3d8fe-ddc1-495b-8763-54e902c1094a"
},
"query": "query Posts($cursor: ID, $username: String, $temp_only: Boolean, $tag: String, $limit: Int) {\n posts(cursor: $cursor, username: $username, temp_only: $temp_only, tag: $tag, limit: $limit) {\n id\n title\n short_description\n thumbnail\n user {\n id\n username\n profile {\n id\n thumbnail\n __typename\n }\n __typename\n }\n url_slug\n released_at\n updated_at\n comments_count\n tags\n is_private\n likes\n __typename\n }\n}\n"
}
Cursor Pagination 처리가 되어있는 듯 하다.variables
에 cursor
값을 주지않고 limit
값을 주어 원하는 만큼의 게시글 목록
을 받아올 수 있었다.
{
"operationName": "GetStats",
"variables": {
"post_id": "8811a550-bcf3-426b-9c93-cc32020f51a5"
},
"query": "query GetStats($post_id: ID!) {\n getStats(post_id: $post_id) {\n total\n count_by_day {\n count\n day\n __typename\n }\n __typename\n }\n}\n"
}
post_id
로 요청해 해당 게시글의 총 조회수
와 날짜별 조회수
를 받아온다.
통계를 받아오기 위해서는 인증
이 필요한데cookie
에 access token
을 담아 요청해야한다.
위 request를 보내기 위해서는 username
과 access token
이 필요하다.
사용자 인증에는 JWT
토큰을 사용하는데, access_token
과 refresh_token
모두 쿠키
에 담아 사용되고 있었다.
jwt.io
에서 확인해보니 access_token은 1시간 refresh_token은 한달 정도 유효기간을 두고 있었다.
사용자 로그인 이후 local storage
에 CURRENT_USER
키에 user_id
, username
, profile_image
등등 사용자 정보를 저장한다.
결론적으로는 selenium
로 웹 브라우저를 띄워 로그인을 진행하고 인증정보를 가져오기로 했다.
jsoup
이 아닌 selenium
을 선택한 이유가 몇가지 있었는데
velog는 이메일
과 SNS
로그인을 제공한다.
jsoup
로 진행하는게 가능한가...? redirect 때문에 가능한지 깊게 생각해보려다 말았다.모든 구상은 끝났으니 개발만 진행하면 된다!!
마음에 걸리는 부분은..
태그
, 게시글
은 한번만 요청하면 되는 부분이지만 통계
의 경우 게시글 만큼의 요청을 보내야 하기때문에 API endpoint에 부하를.. 줄..까..? (새발의 피가 아닐까)
몰랐는데 벨로그는 오픈소스로 공개가 되어있었다..!
그래도 개발자 도구로 필요한 정보를 얻었을것 같긴 하다ㅋㅋ