Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

니삼 블로그

페이스북 태그 분석 본문

페이스북 태그 분석

Nisam 2015. 9. 30. 21:08

서론

개인적으로 시간을 가장 많이 소비하고 있는 페이스북 그룹 생활코딩에서 다음과 같은 사진이 논란이 되었다.

(페이스북에 업로드된 사진이 얼마나 많이 업로드 되었으면 자글자글 해졌다 -_-;)

페이스북 글 내용은 @[숫자:0] 이라고 입력할 경우 자신의 미국식 이름이 나온다고 한다. 

실제로 사진의 설명과 똑같이 (모바일)페이스북에 글을 작성해 본 결과이다. 왜 이런 결과가 나올까?
해당 기능을 설명하기 전에 알아야 할 페이스북 기능은 "태그"이다.


페이스북 태그란?

페이스북을 하는 유저라면 @를 입력하고 사용자 이름을 적어서 그 사람을 언급할 때 사용하는 기능을 써본 적 이 있을 것이다.
태그에 대해서 페이스북에선 다음과 같이 설명하고 있다.

게시물이나 댓글에서 사람, 페이지, 그룹을 언급하려면?

게시물이나 댓글에서 사람, 페이지, 그룹을 언급하려면 다음 단계를 따르세요.

사람인 경우 이름을 입력하거나(첫 글자를 대문자로) 사람, 페이지, 그룹인 경우 "@" 기호를 입력한 다음 이름을 입력합니다.

드롭다운 메뉴에서 이름을 선택합니다.

게시물이나 댓글에서 사람, 페이지, 그룹을 언급하면 링크가 만들어집니다. 그러나 링크를 볼 수 있는 사람은 사람, 페이지, 그룹의 공개 범위 설정에 따라 다릅니다. 예를 들어 게시물에서 비밀 그룹을 언급하는 경우 그룹 멤버만 링크를 볼 수 있습니다. 언급된 사람, 페이지, 그룹은 알림을 받게 되며 해당 게시물이나 댓글이 상대방의 타임라인에 표시됩니다.


페이스북 태그 분석

결론부터 말하자면 서론에서 등장한 @[숫자:0]은 결국에 페이스북 태그이다. 결론적으로 페이스북 태그를 분석해야 하는 것!
그리하여 페이스북 태그를 적은 뒤 페이스북 태그가 어떻게 완성되는지 알아봐야 한다.

첫 번째로 "@"를 입력하고 사람 이름을 입력하면 자바스크립트를 통해 다음의 특정 URL(https://www.facebook.com/ajax/typeahead/search.php)에 이름을 파라미터로 담은 뒤 요청한다.
정상적으로 요청되었을 경우 페이스북의 특이한 json 타입으로 값을 돌려받고 그것을 화면에 출력한다.

부계정을 통해서 본 계정을 태그하여 확인한 JSON 타입의 본 계정의 계정 정보이다.

이제 실제로 태그 적어보았다.

다음과 같이 태그를 하고 페이스북으로 전송하는 HTTP 패킷을 관찰해 보았다.

HTTP 패킷중 태그에 해당 되는 부분입니다. URL 인코딩이 되어있다.

 @[100001967718240:홍성진] 

위의 상자의 값은 URL DECODE를 한 결과이다. 서론에서 나온 @[숫자:0]과 일치하는 구조를 가진 것을 확인할 수 있었다.
이를 통해 첫 번째 숫자의 역할은 유저의 고유 키값이라는 것을 확인 할 수 있었다.(
100001967718240은 사용 중인 페이스북 계정의 고유 키값)

그럼 "0"에 속하는 두 번째 영역은 어떤 역할을 하는 걸까?

두 번째 영역을 마음대로 바꿔서 요청해보았다.

특별하게 달라진게 없는 것을 확인.

그렇다면 없는 유저에 대해서 두 번째 문자열을 바꿔서 요청해보았다. 예제로 @[1:hello] 이렇게 요청해보았다.(1은 존재하지 않는 유저입니다.)

두 번째 문자열의 경우에 태그가 실패하였을 경우 출력되는 문자열임을 추측할 수 있었다. 혹시나 존재하지 않는 계정에 태그하였을 경우 두 번째 문자열이 출력되는 것을 확인할 수 있었다.(아마 탈퇴를 대비한 기능이지 않을까.. 탈퇴는 귀찮아서 안해봤습니다.)


결론

결론적으로 페이스북 태그 규칙은 다음과 같으며 @[유저고유키값:태그실패문자열] 첫 번째 영역은 유저의 고유 키값을 의미하며 두 번째 영역은 첫 번째 영역과 매칭이 실패하였을 경우 두 번째 문자열을 출력하는 것을 알 수 있었다.


Comments