내보내기 파일 10개 전수 해부
— fbid는 어디에 있고 어디에 없나

CheckMate 운영자 · 발행 · 데이터 기준 2026-08-18 내보내기 · 표본: 운영자 본인 계정 1개

Instagram이 내보내기 파일의 형식을 바꾸고 있다는 건 알려져 있었지만, 한 ZIP 안에서 어떤 파일이 새 형식이고 어떤 파일이 옛 형식인지를 정리한 자료는 찾기 어려웠습니다. 그래서 connections/followers_and_following/ 폴더의 파일 10개를 전부 열어 항목 수, 형식, 그리고 계정 고유 ID(fbid) 유무를 셌습니다. 결론은 단순하고 조금 불편합니다. 언팔 확인에 쓰는 두 파일에만 fbid가 없습니다.

실측 요약 (2026-08-18 내보내기, 본인 계정 1개)

파일별 결과

파일항목 수형식fbid
followers_1.json543구 (string_list_data)없음
following.json565구 (string_list_data)없음
removed_suggestions.json893신 (label_values)893건 전부
close_friends.json71신 (label_values)71건 전부
hide_story_from.json12신 (label_values)12건 전부
recently_unfollowed_profiles.json8신 (label_values)8건 전부
recent_follow_requests.json5신 (label_values)5건 전부
blocked_profiles.json2신 (label_values)2건 전부
restricted_profiles.json2신 (label_values)2건 전부
follow_requests_you've_received.json0(비어 있음)

수치는 각 파일을 JSON으로 읽어 최상위 배열(래퍼 객체면 첫 배열)의 길이를 세고, 항목마다 string_list_data 키가 있으면 구포맷, label_values 키가 있으면 신포맷으로 분류한 것입니다. 항목 하나가 두 키를 동시에 가진 경우는 없었습니다.

두 형식은 실제로 이렇게 생겼다

구포맷 — followers_1.json의 항목 하나

{
  "title": "",
  "media_list_data": [],
  "string_list_data": [
    {
      "href": "https://www.instagram.com/example_user",
      "value": "example_user",
      "timestamp": 1786714026
    }
  ]
}

식별자는 value(사용자명)와 href(프로필 URL) 둘뿐이고, 둘 다 같은 사용자명에서 파생됩니다. following.json은 title에 사용자명이 들어가고 value가 없으며 href가 /_u/사용자명 형태라는 점만 다릅니다.

신포맷 — recently_unfollowed_profiles.json의 항목 하나

{
  "timestamp": 1786438546,
  "media": [],
  "label_values": [
    { "label": "URL", "value": "https://linktr.ee/..." },
    { "label": "ì´ë¦„", "value": "..." },
    { "label": "ì‚¬ìš©ìž ì´ë¦„", "value": "atwosomeplace_official" }
  ],
  "fbid": "17841403294706765"
}

라벨이 깨져 보이는 건 파일 자체가 UTF-8 바이트를 latin1로 잘못 적어 둔 것입니다(디코딩하면 "이름", "사용자 이름"). 중요한 건 마지막 줄의 fbid입니다. 이 값은 사용자명이 바뀌어도 변하지 않는 계정 고유 번호입니다.

왜 이 차이가 "닉네임 변경 추적"을 결정하나

언팔 확인의 핵심은 "내가 팔로우하는 A가 나를 팔로우하는 목록에 있는가"를 맞춰보는 것입니다. 비교 키가 사용자명뿐이면, A가 사용자명을 바꾼 순간 두 목록에서 다른 사람처럼 보입니다. 이때 fbid가 있으면 사용자명이 달라도 같은 계정으로 잇습니다. 실제로 CheckMate 파서는 fbid를 최우선 키로 쓰도록 만들어져 있습니다(src/lib/analyzer.ts).

문제는 표에서 보듯 팔로워·팔로잉 두 파일에 fbid가 없다는 점입니다. 그 결과:

예외가 될 수 있는 경우. 이 계정에서는 fbid가 없었지만, Meta가 형식을 파일 단위로 점진 전환하고 있는 것으로 보이므로 다른 시점·다른 계정의 followers 파일에는 fbid가 들어 있을 수 있습니다. 그런 파일이 오면 파서는 자동으로 fbid를 우선 사용합니다. 본인 파일에서 확인하고 싶다면 아래 절차로 세어 보세요.

직접 확인하는 법

import json, os
B = 'connections/followers_and_following/'
for fn in sorted(os.listdir(B)):
    d = json.load(open(B + fn))
    items = d if isinstance(d, list) else next(v for v in d.values() if isinstance(v, list))
    old = sum('string_list_data' in it for it in items)
    new = sum('label_values' in it for it in items)
    fbid = sum(bool(it.get('fbid')) for it in items)
    print(f'{fn:40} n={len(items):4} old={old:4} new={new:4} fbid={fbid:4}')

ZIP을 풀고 위 스크립트를 connections 폴더 상위에서 실행하면 이 글의 표와 같은 형식으로 출력됩니다. CheckMate에 올려도 같은 파서가 돌지만, 파일은 브라우저 밖으로 나가지 않으므로 구조 확인 자체는 로컬 스크립트가 더 빠릅니다.

덤으로 알게 된 것

자주 묻는 질문

fbid가 무엇이고 왜 중요한가요?

사용자명이 바뀌어도 변하지 않는 계정 고유 번호입니다. 두 목록을 이 값으로 맞추면 닉네임이 바뀐 계정도 같은 사람으로 이어집니다. CheckMate 파서는 fbid가 있으면 최우선 키로 씁니다.

팔로워·팔로잉 파일에는 왜 fbid가 없나요?

이 계정의 2026-08-18 내보내기에서 두 파일만 구형 형식이었습니다. Meta가 파일 단위로 형식을 바꾸는 중으로 보이며, 다른 시점·계정에서는 다를 수 있습니다. 본문 스크립트로 본인 파일을 직접 확인할 수 있습니다.

recently_unfollowed_profiles.json은 나를 언팔한 사람인가요?

아닙니다. 내가 최근에 언팔한 계정 목록입니다. 나를 언팔한 사람은 Instagram이 기록해 주지 않으며 두 시점의 팔로워 목록 비교로만 추정할 수 있습니다.

이 실측의 한계

표본은 운영자 본인 계정 1개입니다(2026-03 서비스 개설 이후 수집). Meta는 내보내기 형식을 예고 없이 바꾸며, 이 글은 2026-08-18에 받은 파일 기준입니다. CheckMate는 서버에 아무것도 저장하지 않으므로 이용자 파일을 모아 낸 통계는 없고, 앞으로도 본인 파일 실측으로만 갱신합니다. followers 파일에 fbid가 들어 있는 사례를 보셨다면 제보해 주세요.

같이 보면 좋은 글

팔로워 데이터 365일 제한? 8년치 실제 파일로 확인한 결과

같은 파일의 timestamp 분포 — 86.4%가 1년보다 오래된 기록

닉네임 변경 가능성 표시의 기준

파서가 어떤 식별 근거로 "가능성"만 표시하는지