========== ========== < 서론 > ========== ==========


치지직이 아프리카에 비해서 구독 개월수 연장의 조건이 까다로운거 같아서 연동 방식에 관한 의문이 있었음. (아프리카는 별다른 조건이 없지만 치지직의 경우 구독을 유지 해야 연동중이어야함. 정확히 어느 시점에 구독을 연장하고 있어야하는지 설명이 없음)


따로 구독은 하지 않지만 구독 선물 많이 받은 방이나 간간히 구독하는 방에 대해서 한달 결제로 개월수를 연동시키고 싶어서

치지직 연동 유지 기한이 2월 13일로 공지됨에 따라  좀 전에 구독하고 연동 신청을 하고 오면서 분석해봤음

물론 정확한 작동 방식이 나온것은 아니기에 일부 예측이 포함되어있음 + 틀린 부분이 존재할 수 있음


========== ========== < 치지직 > ========== ==========


- 연동 페이지 : https://chzzk.naver.com/subs_integration


- 권한 부여 페이지 : https://chzzk.naver.com/subs_integration_result?code=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&scope=channel%3Aread%3Asubscriptions+moderation%3Aread+user%3Aread%3Afollows&state=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


* 요청하고 있는 권한 (scope)

- channel:read:subscriptions = 채널의 모든 구독자 목록을 가져와서 특정 유저가 회원님의 채널을 구독 중인지 확인

- moderation:read = 매니저 목록, 강제 퇴장, 채팅 금지, AutoMod 설정을 포함한 내 채널의 검토 기능 데이터 보기

- user:read:follows = 팔로우 목록을 확인합니다.


========== ========== < 아프리카 > ========== ==========


- 연동 페이지 : https://welcome-twitch.afreecatv.com/


- 권한 부여 페이지 : https://id.twitch.tv/oauth2/authorize?response_type=code&client_id=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&redirect_uri=https://welcome-twitch.afreecatv.com/api/callback.php&scope=channel%3Aread%3Asubscriptions%20user%3Aread%3Asubscriptions%20user%3Aread%3Afollows


* 요청하고 있는 권한 (scope)

- channel:read:subscriptions = 채널의 모든 구독자 목록을 가져와서 특정 유저가 회원님의 채널을 구독 중인지 확인

- user:read:subscriptions = 채널의 자세한 구독 정보를 확인하세요

- user:read:follows = 팔로우 목록을 확인합니다.


========== ========== < 공통점 > ========== ==========


* 공통적으로 요청하는 권한

     

- channel:read:subscriptions = 채널의 모든 구독자 목록을 가져와서 특정 유저가 회원님의 채널을 구독 중인지 확인

- user:read:follows = 팔로우 목록을 확인합니다.


여담이지만 스코프를 자세히 보면

channel:read:subscriptions = 채널에대한->읽기권한->구독 / user:read:follows = 유저에대한->읽기권한->팔로우

이때 channel은 방송을 진행하는 채널 이라는 의미고 user는 유저(계정) 이라는 의미라 비슷하지만 미묘한 차이가 있음

아프리카로 따지자면 channel=방송국, user=유저or계정 같은 느낌이랄까


========== ========== < 차이점 > ========== ==========


* 치지직에서 요청하는 권한


- moderation:read = 매니저 목록, 강제 퇴장, 채팅 금지, AutoMod 설정을 포함한 내 채널의 검토 기능 데이터 보기

일명 밴 연동 시스템 때문에 moderation:read 권한을 요청하고 있음


* 아프리카에서 요청하는 권한

- user:read:subscriptions = 채널의 자세한 구독 정보를 확인하세요

여기가 이 글의 핵심 포인트인데

치지직은 채널을 대상으로만 구독 정보를 읽는 권한을 요청하고 있는데 반해

아프리카는 채널과 유저 모두를 대상으로 구독 정보를 읽는 권한을 요청하고 있음


========== ========== < HELIX API > ========== ==========


해당 권한으로 GQL을 사용하면 훨씬 세부적인 것까지 가능하지만 

GQL 없이 HELIX API 만을 사용하여 연동을 구현한다고 치고

API 레퍼런스에서 어떤 API가 가능한지 확인해 볼 수 있음


* channel:read:subscriptions (공통)

- Create EventSub Subscription (https://dev.twitch.tv/docs/api/reference/#create-eventsub-subscription)

- Get Broadcaster Subscriptions (https://dev.twitch.tv/docs/api/reference/#get-broadcaster-subscriptions)

구독 이벤트를 받아오는 EventSub 를 받아오는 기능과 방송인의 구독 정보를 받아오는 API


* user:read:follows (공통)

- Get Followed Channels (https://dev.twitch.tv/docs/api/reference/#get-followed-channels)

- Get Followed Streams (https://dev.twitch.tv/docs/api/reference/#get-followed-streams)

팔로우 목록과 팔로우 목록에서 몇개의 스트림이 있는지 탐색하는 API


* moderation:read (치지직)

- Check AutoMod Status (https://dev.twitch.tv/docs/api/reference/#check-automod-status)

- Get Banned Users (https://dev.twitch.tv/docs/api/reference/#get-banned-users)

- Get Moderators (https://dev.twitch.tv/docs/api/reference/#get-moderators)

오토 모드 상태 (각 모드의 레벨) 와 밴 유저 목록, 매니저 목록을 불러오는 API


* user:read:subscriptions (아프리카)

Check User Subscription (https://dev.twitch.tv/docs/api/reference/#check-user-subscription)

유저의 구독을 확인하는 API


========== ========== < 결론 > ========== ==========


이로 인하여 치지직 연동 페이지에서 "2월 13일 까지 구독 기간 유지" 라는 문구가 붙어있는거 같음

물론 정확한 작동 방식은 나오지 않았기에 크게 2가지로 구분해서 추측을 해보자면

1. 채널에서 연동한 시점에 구독자 목록을 받아오거나 (-> 연동 시점에 따라 중간에 끊겼거나 새로 구독한 경우 누락이 있을 수 있을듯)

2. 2/13일 이전에 일괄적으로 구독 기간을 받아올거임 (-> 일괄적인 연동 시점에 구독중이지 않다면 누락이 있을 수 있을듯)

물론 주기적으로 구독 목록을 불러오거나 할수도 있지만 일반적으로 해당 방식처럼 같이 구분해볼 수 있을듯

이때 유저쪽에서 계정을 연동하면 해당 구독을 매칭


아프리카는 유저를 대상으로도 구독목록을 읽는 권한이 추가로 존재하기 때문에 좀더 유연한 연동이 가능할것으로 보임