해시태그, hashtag
인스타그램, 트위터 등 소셜 네트워크 서비스(SNS)에서 사용되는 메타데이터 태그로, 해시 기호(#) 뒤에 특정 단어를 쓰면 그 단어에 대한 글을 모아 분류해서 볼 수 있다.
소셜 네트워크 서비스나 마이크로블로그 서비스에서 관련된 내용물을 묶어주는 역할을 하는 태그이다. 사용자들이 관심 있는 주제의 내용물을 쉽게 찾을 수 있도록 도와준다. 보통 띄어쓰기 없이 단어나 문구를 쓰고 앞에 해시기호(#)를 붙여 넣는다. 이 해시태그를 클릭하면 해당 해시태그가 포함된 내용물이 모두 표시된다. 예를 들어 음식 사진을 올릴 때 #먹스타그램, 셀프 사진을 올릴 때 #셀카 이런 식으로 사용한다. 이러한 일상 속 키워드 뿐만 아니라 기업의 마케팅이나 테러의 피해자들을 위로하는 글처럼 사회적 이슈에도 사용된다.
본래 해시 기호(#)는 IT 업계에서 특별한 의미를 강조할 때 사용되었다. 예를 들어, 1978년에 C 프로그래밍 언어에서 먼저 처리되어야 할 키워드를 표시하기 위해 사용되었다. 당시에는 '해시 기호(hash symbol)'라고 불렸다. 그러다 2007년 트위터에서 수많은 정보들이 흩어지는 것을 안타깝게 여긴 사용자 '크리스 메시나(Chris Messena)'가 트위터 측에 "#을 써서 정보를 묶는 것을 어떻게 생각하냐"고 물었고 이를 트위터측이 받아들이면서 해시태그가 시작되었다. 그러나 트위터가 본격적으로 모든 해시태그에 하이퍼링크를 넣은 것은 2009년 7월의 일이다. 트위터는 2010년에 많이 언급된 해시태그를 뽑아 보여주는 '트렌딩 토픽'을 도입하기도 했다. 시작은 트위터였지만, 페이스북, 인스타그램 등 다른 소셜 네트워크 서비스에서도 같은 용도로 해시태그를 지원하고 있다.
널리 사용됨에 따라 옥스포드 영어사전은 2014년 6월 hashtag를 추가하였다. 해시태그라는 용어는 해시태그의 문맥에서 사용할 때 해시 심볼 그 자체를 가리킬 수도 있다.
문제점
해시태그가 짜증을 불러일으키는 경우도 있는데,
모든 문장에 이걸 남발할 경우나 해시태그 기능이 없는 SNS에서도 작성자가 직접 해시태그를 굳이 본문에 써 넣을 경우 등이 있다. 이는 글의 가독성을 떨어뜨릴 수도 있으니 주의해서 사용해야 할 것이다.
또, 해시태그를 이용하여 음란물을 유포하는 경우도 있다. SNS가 익명성을 갖춘데다 규제가 어렵고 유포되는 속도는 매우 빠르다는 걸 이용한 것. 이는 현재 성인인증제나 차단 기능으로 저지되고 있다.
해시태그를 통한 사회참여 운동도 문제가 있는데, 자칫 "내가 도덕적으로 해야 할 일은 다 했다, 해시태그를 달았으니까 이제 나도 사회를 걱정하는 깨시민!"같은 생각으로 이어져서 현실에서 사회를 바꾸고자 하는 실질적인 원동력을 저하시킬 수 있다. 이는 일명 슬랙티비즘(slacktivism)이라는 신조어로 통용되며, 학계에서도 관심을 갖고 연구하고 있다.
해시(Hash), 해시 함수
해시의 사전적 의미는 고기와 감자를 잘게 다져 섞어 요리한 것 입니다
컴퓨터 공학적 의미
해시 함수는 임의의 길이의 값을 입력받아 고정된 길이의 결과 값을 출력하는 함수입니다. 해시 함수에 의해 얻어지는 값을 해시 값이라 하고 간단하게 해시라고 합니다.
예를 들어, 해시 함수에 "망고주스"라는 값을 입력하면 다음과 같은 해시 값을 얻을 수 있습니다.
HhXrhTV+Tl05pe/kQgTFPA8eMWe+SYJ0v9KwGJvKios=
해시의 특징
해시 함수는 같은 값을 입력하면 항상 같은 값을 얻을 수 있습니다. 따라서 두 해시 값이 다르다면 입력 값도 다르다는 것을 의미합니다. 이는 데이터의 오류나 변조를 탐지 할 수 있기에 무결성 검사에 사용됩니다.
하지만 해시 값이 같다고 해서 입력 값이 같다는 것을 보장해 주지 않습니다. 해시 함수가 서로 다른 두 개의 입력값에 대해 동일한 출력값을 내는 상황이 발생하기 때문이죠. 이를 해시 충돌이라 합니다.
해시 함수는 해시 값만으로는 원래 입력 값을 알아내기 힘들다는 사실에 의해 암호화에 사용되기도 합니다.
또한 키 값을 사용하면 같은 값을 입력해도 다른 값을 얻을 수 있습니다. 이를 이용해 전자서명이나 암호화에 사용됩니다.
샘플코드
값 입력 및 해시 값 얻기
using System;
using System.Text;
using System.Security.Cryptography;
class Program
{
static void Main(string[] args)
{
string MessageString = "망고주스";
// UnicodeEncoding 인스턴스 생성.
UnicodeEncoding UE = new UnicodeEncoding();
// 문자열을 바이트 배열로 변환.
byte[] MessageBytes = UE.GetBytes(MessageString);
// SHA1Managed 인스턴스 생성.
SHA256Managed SHhash = new SHA256Managed();
// 바이트 배열에서 해시 값 생성.
byte[] HashValue = SHhash.ComputeHash(MessageBytes);
// 해시값 출력.
Console.Write(Convert.ToBase64String(HashValue));
}
}
결과 출력
HhXrhTV+Tl05pe/kQgTFPA8eMWe+SYJ0v9KwGJvKios=
해시 값 검증
using System;
using System.Text;
using System.Security.Cryptography;
class Program
{
static void Main()
{
// "This is the original message!"에서 생성된 해시값.
string SentHashValue = "HhXrhTV+Tl05pe/kQgTFPA8eMWe+SYJ0v9KwGJvKios=";
// 해시 값과 비교할 문자열.
string MessageString = "망고주스";
// UnicodeEncoding 인스턴스 생성.
UnicodeEncoding UE = new UnicodeEncoding();
// 문자열을 바이트 배열로 변환.
byte[] MessageBytes = UE.GetBytes(MessageString);
// SHA1Managed 인스턴스 생성.
SHA256Managed SHhash = new SHA256Managed();
// 바이트 배열에서 해시 값 생성.
byte[] CompareHashValue = SHhash.ComputeHash(MessageBytes);
string CompareHashString = Convert.ToBase64String(CompareHashValue);
// 해시값과 같은지 출력.
if (SentHashValue.Equals(CompareHashString))
{
Console.WriteLine("The hash codes match.");
}
else
{
Console.WriteLine("The hash codes do not match.");
}
}
}
결과 출력
입력 값이 같을 경우
The hash codes match.
입력 값이 틀릴 경우
The hash codes do not match.
해시태그 운동, Hashtag activism, 해시태그 활동주의
단순히 홍보 수단이나 가벼운 주제를 묶어 보여주는 역할에서 확대되어 정치·사회 이슈를 만들어내는 해시태그의 사회운동 역할을 말한다. 초기엔 놀이문화로만 이용되던 해시태그가 일종의 콘텐츠를 생산하는 역할을 맡았고, 사회운동 역할로 확장된 것이다. 해시태그를 중심으로 한 시민들의 용기 있는 고백이 모이고 모여 변화의 물꼬를 텄으며, 이게 오프라인으로 결집이 이어지면서 '집단 지성'으로써 힘을 증명한 것이다. 언론에 의해 형성된 여론 아니라 소셜 네트워크 서비스에 의해 시민들 스스로가 주도하는 여론이다.