What I Learn Today

Start Date : 2022/02/07 ~

Learn/Company

[TIL #15] 첫 기획 회의 참석 !

HannaDev 2022. 3. 3. 23:30

구글 환불 API 회의 ! 오늘은 처음으로 개발팀 외의 분들과 길게 대화를 나눠본 날이었습니다. (*ˊᵕˋ*)ノ

 

관리자 페이지를 위한 구글 환불 API 개발이 3월에 맡게된 주요 업무 중 하나인데요 !

대시보드 관련 API 는 과장님이 진행하시지만 일단은.... 제가 담당자이기 때문에 (???)

기획 회의에 처음으로 참여해보았습니다 ㅎㅎ!

 

전 날에 기획자님이 미리 질문할 거리들을 전달해주셔서 아침에 30분 정도 일찍가서 준비했는데...

ㅎㅎ 저는 신입이기 때문에...? 결론적으로는 과장님께 질문을 토스하는 중계기 역할을 수행했습니다. ㅎㅎ;;;;

 

주요 질문 포인트는

 

1. 환불 API 를 호출했는데 카드 유효기간이 지났다던가... 다양한 에러 케이스가 발생할 경우 어떻게 되는가

    -> 해당 에러 케이스들을 상세하게 대시보드에서 Alert 를 줄 수 있는 것인가

2. 구글 대시보드에 환불할 때는 환불 완료까지 10분이상 걸린 적도 있었는데...

    -> 환불 API 요청 후 진행 상황을 어떻게 알 수 있는지

3. 1년 전 멤버십 현황도 한달 단위로 모두 대시보드에 나오는 것인지

    -> 1년 전 멤버십도 API를 통해 환불이 가능한 것인지

 

이렇게 3가지 였습니다!

 

3번은 바로 가능하다는 답변을 드릴 수 있었지만, 1번 2번 질문은 생각치 못한 질문이었는데요.

구글 공식 API 문서에는 성공했을 때의 응답만 나와있었기 때문에...

에러 메세지를 상세하게 주던가...? 10분이상...? 그러면 비동기 처리를 따로 해야되는건가...?

온갖 생각이 들었던 질문이었습니다. 工エエェェ(;╹⌓╹)ェェエエ工

 

역시 현업에서는 여러 에러 케이스를 생각하고 대응 준비를 하는 것이 중요하겠다라는 깨달음을 얻었습니다.

 

그리고 개발 외적으로는... 3년 전 결제 건에 대해서도 환불 문의가 들어오는구나 (...)

세상은 정말 넓은 것 같습니다 ㅎㅎ;;;

 


회의 및 내용 정리는 1시간 정도 소요되었고 나머지 시간에는 API 조사 업무를 진행했는데요 !

Amplitude 는 API 리스트업 및 테스트는 오전에 모두 완료했지만

Braze는... API 인증 키가... 계속 잘못된 키라고 오류가 나네요.... ( ´•̥-•̥` )

 

결국 퇴근 시간 되어서 이사님께 보고 드리면서 질문 드렸는데

내일 차장님 출근하시면 여쭤봐야 될 것 같습니다 ㅎㅎㅠ

(개발은 진짜 이상한 곳에서 갑자기 삽질하게 되는 경우가 많은 것 같아요)

 


▶ 전체적인 스케쥴

  • [오전 8시 20분~] 구글 환불 API 살펴보기 + 질문 드리기 - 0.5h
  • Amplitude API 테스트 - 0.5h
  • 개발 스크럼 회의 - 0.5h
  • 업무 방향성 질문 + 중간 보고 - 0.5h
  • Amplitude API 리스트업 및 테스트 - 1.5h
  • 점심 - 1h
  • Amplitude API 관련 정리 - 0.5h
  • 구글 환불 API 복습 + 추가 조사 - 0.5h
  • 구글 환불 API - 관리자 페이지 기획 회의 - 0.5h
  • 회의 내용 정리 (Notion) + To do 스케쥴링 - 0.5h
  • 구글 API 내용 정리 (Notion) - 0.5h
  • [오후 3시 반~] Braze API 조사 및 테스트 - 2.5h
    • API 인증키 오류 무한 반복
    • 공식 API 문서, Postman 문서 탐색 및 정리
  • 업무 상황 보고 + 질문 - 15m

내일 출근해서 차장님 오시면 바로 질문하러 가야겠습니다. _〆(。。)


▶ Amplitude_python_sdk & Amplitude 공식 API 조사 Notion 링크

 

Amplitude 사용자 속성값 변경 → Identify API 공식문서링크

 

 

[ Identify API ]

  1. 특정 device_id 에 대한 user_id 를 설정하거나 이벤트를 보내지 않고 특정 사용자의 사용자 속성을 업데이트할 수 있다.
  2. Amplitude 기본 사용자 속성과 정의한 사용자 지정 사용자 속성을 수정할 수 있다.
  3. 이러한 업데이트는 앞으로의 이벤트에만 영향을 미친다.
  • [참고] 속성 값은 사용자의 다음 이벤트가 있을 때까지 플랫폼에 적용되거나 표시되지 않는다.

 

더보기

자세히 보기

 

Required Argument Description

 

 

api_key 프로젝트 API Key
identification 단일 JSON 식별 개체 (필드는 아래 참조) 또는 각각 하나의 식별을 나타내는 JSON 개체의 배열.
  • 주의 사항
    • user_id 가 여러 장치에서 동시에 이벤트를 보내는 경우 모든 장치가 제한된다.

 

Example Request

 

curl --data 'api_key=API_KEY' --data
'identification=[{"user_id":"datamonster@gmail.com",
	"user_properties":{"Age":"35"}, "country":"United States"}]'
https://api.amplitude.com/identify



Keys for the Identification Argument

  • user_id 또는 device_id 중 하나 필요.

 

Key Type Description

 

user_id string (device_id 가 공백인 경우 필수)
당신이 정한 고유 user_id.
[Note] 만약 존재하지 않는 user_id 라면 user_id 에 연결된 사용자는 첫 번째 이벤트가 있을 때까지 신규로 표시되지 않는다.
device_id string (user_id 가 공백인 경우 필수)
iOS 의 IDFV (Identifier for Vendor) 와 같은 기기별 식별자.
user_properties dictionary 사용자와 연결된 추가 데이터를 나타내는 key-value 딕셔너리. 각 고유 값은 Amplitude 대시보드에 사용자 세그먼트로 표시된다. 개체 깊이는 40개 레이어를 초과할 수 없다.
[Note] 속성 값을 배열에 저장할 수 있으며 날짜 값은 문자열 값으로 변환된다.
groups string (Enterprise 만 해당)
사용자 그룹을 나타내는 Key-Value 쌍의 딕셔너리. 그룹을 설정하면 account level 보고 기능을 사용할 수 있다. 자세한 내용은 링크 참조.
app_version string  
platform string 데이터를 보내고 있는 플랫폼
os_name string  
os_version string  
device_brand string  
device_manufacturer string  
device_model string  
carrier string 이동 통신사
country string  
region string  
city string  
dma string 사용자 지정 시장 영역 (The Designated Market Area of the user)
language string  
paying string  
start_version string  

 

속성 작업 지원

 

  • "$set" - 속성 값 설정
  • "$setOnce" - 속성 값 설정, 속성 값 재정의 방지
  • $add - 숫자 값 추가 숫자 속성
  • $append 및 $prepend - 사용자 속성 배열에 값 추가 및 추가
  • $unset - 속성 제거
  • $preInsert - 지정된 값을 속성 목록의 시작 부분에 추가
  • $postInsert - 값이 목록에 아직 없는 경우 사용자 속성 목록 끝에 추가
  • $remove - 지정된 값의 모든 인스턴스 제거

 

[X] {"$append":{"interests":"Music"}, "subscription type":"paid"}

[O] {"$set": {"cohort": "Test A"},
		 "$setOnce": {"startDate": "2015-10-01"},
		 "$add": {"friendCount": 3},
		 "$append": {"interests": "Music"},
		 "$prepend":{"sports": "Tennis"},
		 "$unset": {"oldProperty": "-"}}
  • (platform, os_name, os_version, device_brand, device_manufacturer, device_model, and carrier) 필드는 모두 함께 업데이트 되어야 한다. 일부만 설정하면 다른 모든 속성 값이 자동으로 null 로 재설정된다.
  • (country, region, city, DMA) 필드는 모두 함께 업데이트 되어야 한다. 일부만 설정하면 다른 모든 속성 값이 자동으로 재설정된다.
  • Amplitude 에서는 날짜값을 문자열로 비교하므로 ISO 8601 형식 (YYYY-MM-DDTHH:mm:ss)을 사용하는 것이 좋다.

 

상태 코드

 

200 성공
414 414 오류 코드, URL 에 제한이 있는 GET HTTP 를 사용 중일 수 있다. 데이터가 URL 에 포함되지 않도록 HTTP GET 대신 HTTP POST 를 사용하는 것이 좋다.
429 Amplitude 는 초당 이벤트의 특정 임계값을 초과하는 device_ids 또는 user_ids 에 대한 요청을 제한한다. 요청을 조절하면 응답에 HTTP 상태 코드 429 가 표시된다.

 

FAQ - Identify

 

  1. 아직 추적하지 않은 사용자 속성을 업데이트 할 수 있습니까?
    1. 예, 이러한 속성이 아직 당사 시스템에 없는 경우에도 새 속성으로 기존 사용자를 업데이트할 수 있습니다.
  2. 원시 데이터에서 이러한 업데이트를 볼 수 있습니까?
    1. 아니요, 이러한 업데이트는 이벤트로 계산되지 않고 대신 백엔드에 보관하는 사용자 속성 테이블에 대한 업데이트로 Redshift 에 표시되지 않습니다.
  3. 이 업데이트는 소급 적용됩니까?
    1. 아니요, 앞으로의 데이터에만 영향을 미칩니다.
  4. Identify API 호출이 활성 및 신규 사용자 수에 영향을 줍니까?
    1. 해당 호출은 이벤트로 계산되지 않으므로 “활성 사용자" 또는 “새 사용자" 정의에 영향을 미치지 않습니다.
  5. Identify API 호출이 Amplitude 의 월별 이벤트 수에 추가됩니까?
    1. 아니요. 해당 호출은 이벤트로 계산되지 않습니다.
  6. 필드 변경의 영향은 무엇입니까?
    1. 기존 값에서 user_id 필드를 변경하는 경우 새로운 Amplitude 유저가 생성됩니다.
    2. user_id 가 null 일 경우에는 새로운 유저를 생성하지 않습니다.
  7. 사용자 속성은 이벤트에 어떻게 적용되나요?
    1. 자세한 지원 문서를 읽어보십시오. 링크
  8. 414 오류 상태 코드가 표시됩니다. 내가 뭘 잘못하고 있죠?
    1. URL 에 제한이 있는 GET HTTP 를 사용 중일 수 있다. 데이터가 URL 에 포함되지 않도록 HTTP GET 대신 HTTP POST 를 사용하는 것이 좋습니다.

 


▶ 구글 환불 API 관련 공부

 

  • 대시보드에서 구글 환불을 진행하고 싶다. (1년 전 내역도 환불하고 싶음!)
    • 가능하다면 연속적인 환불 (=일괄처리) 도 체크박스 형태로 가능했으면 좋겠다.
  • 환불 버튼을 눌렀을 때, ‘환불 처리 중', ‘환불 완료' 로 버튼 상태가 표시되었으면 하고, 환불 실패 시에는 멤버십 내역 아래에 ‘환불 실패 {마지막 환불 시도 날짜}’가 표시되었으면 좋겠다.
  • 대시보드에 멤버십 목록 (한달 한달 표시되는 멤버십) 은 3년 전 내역도 있는 경우가 있으므로 페이징 처리가 들어가거나, 필터가 적용된 무한 스크롤 형태였으면 좋겠다.

 

  • 기타 사항
    • 환불 사유는 기획 쪽에서 정해서 전달하겠다.
    • 환불이 길면 10분 걸릴 때도 있다. (API 응답 처리가 어떻게 되는지? 비동기 처리?)
    • 일단 대시보드에서 나타나는 멤버십 기간은 전체 내역이 나오도록.
    • 1년 전 결제 내역은 ‘구글 대시보드'에서 환불 처리 가능하다.
    • ⇒ ★ 테스트 시 참고
    • 결제 테스트 관련해서는 QA 팀에게 물어봐야 할 것 같다.

 

  • API 관련 이슈 (revoke 로 일단 진행. 시간 되면 refund 테스트 해보자.)
    ㄴ 근데 1년 전 주문도 환불 가능한지는 어떻게 테스트하지.
    ㄴ 멤버십 테이블은 신경 ㄴㄴ ! 나는 구글 환불 함수만 만들면 된다 !
    • revoke 는 구독이 즉시 해제되고 기간 상관없이 환불이 가능하다. 링크
    • refund 는 구독은 유지되고 기관 상관없이 (????) 환불이 진행된다. 링크
    • orders.refund 는 사용자의 구독 또는 인앱 구매 주문을 환불한다. 링크
      • 1년 이내 주문만 가능하다.
      • [POST] - 쿼리 매개변수 revoke 가 true 인 경우 엑세스 즉시 종료, 구독 취소.

 

 

 

 


대표 이미지용