이제는 뉴스도 스크랩하면 불펌이다

2008년 1월 15일 화요일 연합뉴스에서 다음과 같이 공문을 발표했다.

연합뉴스가 제공하는 기사, 사진, 도표, 오디오, 동화상등 모든 정보에 대한 저작권, 판권 등 지적재산권은 연합뉴스의 소유이며 관련법의 보호를 받습니다. 연합뉴스의 사전 허가 없이 연합뉴스 정보를 무단으로 전재, 방송, 복사, 저장, 배포, 전송, 전시, 판매, 왜곡, 변조, 개작하는 행위는 금지되어 있습니다. 이를 위반하는 경우 손해배상의 대상 또는 민.형사상의 법적소송 대상이 될 수 있습니다.

이는 정부가 포털에서 뉴스기사의 제목을 임으로 수정하거나 순위를 바꾸거하 하는 등의 이차적인 편집이 만연함에 따라 이루어진것이기도 하지만, 앞으로의 저작권 분쟁을 예견하게 하는 신호탄이 될 수도 있다는 생각이 든다.

정규식(Regular Expression) 표현 방법 및 예제

1) 객체

그럼 먼저 정규식의 객체에 대해 살펴보자. 정규식의 모든 객체를 설명하려면 너무 복잡하고 어려우므로 여기에선 일단 가장 중요한 것들만 나열한다.

(1) 문자

    * 유니코드 문자 – 유니코드 문자는 문자 그대로 표현한다. 즉, a는 문자열의 a와 매치된다.
    * (backslash) – 정규식에 사용되는 특수문자, 예를 들어 * 나 등을 매치할때 사용한다. 즉, * 를 매치하려면 * 라고 써줘야한다.
    * – 탭 문자와 매치된다.
    *
– 새줄문자와 매치된다.
    *
– 리턴문자와 매치된다.
    * f – form feed문자와 매치된다.

예를 들어 문자열 “ac*”와 매칭을 하고 싶다면 정규식은 “ac*”와 같이 사용한다. 와 *가 모두 정규식에 쓰이는 특수문자들이므로 앞에 을 붙여주고 나머지는 문자 그대로 사용한다.

(2) 문자클래스

    * [a-zA-Z] – a에서 z까지, 그리고 A에서 Z사이에 있는 모든 문자와 매치된다.
    * [^a-zA-Z] – 위와 반대다. 즉 a에서 z까지, A에서 Z까지 사이에 없으면 매치된다.

만약 소문자와 매치하려면 [a-z]를 사용하거나 [^A-Z]를 사용하면 된다. 숫자도 마찬가지다. [0-9]를 사용하면 숫자와 매치되고 숫자가 아닌 것과 매치하려면 [^0-9]를 사용하면 된다.

(3) 사전에 정의된 클래스

    * . – 새줄문자 이외의 모든것
    * w – 알파벳과 _ (영어단어에 쓰이는 문자)
    * W – 알파벳과 _이 아닌 것
    * s – 빈 공간
    * S – 빈 공간이 아닌 것
    * d – 숫자
    * D – 숫자가 아닌 것

예를 들어 “1a 2a” 또는 “3g 9i” 등의 문자열과 매치하고 싶을 땐 “dSsdS”와 같이 정규식을 써주면 된다.

(4) 단어나 줄의 경계를 매치할때

    * ^ – 줄의 맨앞과 매치된다.
    * $ – 줄의 맨끝과 매치된다.
    *  – 단어와 단어의 경계와 매치된다.

예를 들어 한 줄에 “aaaaa”라는 문자열만 있는 줄을 매치하고 싶으면 “^aaaaa$”와 같이 정규식을 써주면 된다. 만약 다른 문자열 속에 포함돼있는 “aaaaa”를 매치하고 싶다면 (예를 들어 “bbbbbaaaaabbbbb”) 그냥 “aaaaa”만 해줘야 매치가 된다.

(5) 그 이외의 것들

    * A|B – A 또는 B와 매치된다.
    * (A) – A와 매치한것을 나중에 다시 사용할 때 쓴다.

어떤 문자열에서 매치한 부분을 나중에 다시 사용하고 싶을 때는 괄호를 사용한다. 예를 들어 사용자가 입력한 전화번호를 정규식을 사용하여 패턴매칭을 했다고 하자. 이렇게 매치된 전화번호를 데이터베이스에 저장하고 싶을 때 바로 정규식 안에서 괄호를 이용하여 매칭을 한다. 괄호 안에 매칭된 부분은 나중에 다시 사용하는 것이 가능하기 때문이다. 이것은 굉장히 중요하므로 나중에 예제로 다시 설명하겠다.

(6) 매치된 객체의 재사용

    *  1 – 첫번째 괄호에 매치된 부분
    *  2 – 두번째 괄호에 매치된 부분
    *  세번째는 $3, 네번째는 $4 등으로 사용하면 됨

정규식 안에서 괄호에 매치된 부분을 다시 사용하고 싶을 때 쓰는 객체들이다. 예를 들어 “1 – 1” 처럼 처음과 나중의 숫자가 같은 문자열만 매칭하고 싶을 경우, “(d+) – 1″과 같은 정규식을 사용하면 간단하게 매칭할 수 있다. 여기서 1 은 그 앞에서 d+ 로 매치된 숫자를 가리킨다.

(7) 수량

수량은 각 객체가 문자열 안에서 몇 번이나 나타나는지 그 회수를 정해준다. 아마 많은 독자들이 윗부분을 보면서 정규식은 문자를 한 번에 한 개밖에 매치하지 못하나 하고 의문을 품을지 모르겠다. 그러나, 바로 밑에 나열한 것들로 수량을 정해줄 수 있다. 일단 그것들을 보고 예제를 통해서 사용 방법을 살펴보자.

    * A* – A를 0번, 아니면 그 이상 매치한다.
    * A+ – A를 한번, 아니면 그 이상 매치한다.
    * A? – A를 0번, 아니면 한번만 매치한다.
    * A{n} – A를 정확히 n번 매치한다.
    * A{n,} – A를 n번 이상 매치한다.
    * A{n,m} – A를 최소한 n번, 하지만 m번 이하로 매치한다.

2) 정규식 예제

지금까지 나열한 모든 객체들을 예제를 통해서 자세히 알아보도록 하자. 만약 전화번호를 매치하고 싶다면 어떻게 해야할까? 일단 전화번호는 지역번호가 있을수도, 없을수도 있다. 사람마다 지역번호를 괄호에 넣거나, 아니면 그냥 국번과 -로 구별하기도 한다. 그럼 그것에 맞는 정규식은 어떻게 써야할까? 일단 지역번호를 매치해보자. 지역번호는 세자리 숫자이므로

d{3}

으로 하면 매치가 된다. 물론 너무 엄격하게 하고 싶지 않으면

d+

로 해도 된다. 그렇다면 괄호의 있고 없고 여부는 어떻게 해야할까? 여기에선 ?나 *를 쓰면 해결할 수 있다. 즉,

(?d{3})?

을 쓰면 지역번호와 패턴매칭을 할 수 있다. 전화번호의 나머지도 간단하다.

d{3,4}-?d{4}

로 하면 간단히 매치된다. 국번은 세자리, 또는 네자리지만 번호는 네자리밖에 없다. 요약하면 전화번호를 매치하기 위해선

(?d{3})?-?d{3,4}-?d{4}

와 같은 정규식이 필요하다. 그럼 위의 정규식을 써서 전화번호를 찾아냈다고 하자. 하지만 그 전화번호가 무엇인지 어떻게 알 수 있을까? 문자열을 그대로 다시 출력하면 매칭한 부분뿐만 아니라 다른 부분들까지 출력하게 된다. 여기서 매치된 부분만 다시 사용하기 위해 괄호를 사용하면 된다. 예를 들어, 위의 전화번호를 지역번호와 국번, 그리고 번호의 세 부분으로 나눠서 재사용 해보기로 하자. 그렇다면 다음처럼 각 부분에 괄호를 사용하면 된다.

(?(d{3}))?-?(d{3,4})-?(d{4})

처음보단 훨씬 복잡하게 보이지만 객체 하나하나를 풀어서 보면 쉽게 알 수 있다. 만약 전화번호가 123-456-7890 이였다면 첫번째 괄호는 123, 두번째 괄호는 456, 그리고 마지막 괄호는 7890과 매치하게 된다. 이제 매치된 부분을 재사용하려면 Regexp 패키지의 getParen()이라는 함수를 사용하면 된다. 즉, getParen(1)은 123을, getParen(2)는 456을, 그리고 getParen(3)은 7890을 돌려준다. 이것은 클래스 사용방법에 더 자세히 설명돼 있으므로 패키지 사용방법 문서를 읽어주기 바란다.

그럼 여기서 연습을 한 번 해보자. 만약 주민등록번호를 매치하고 싶다면 어떤 정규식을 써야할까? 이건 독자 여러분이 각자 해보기 바란다. 정답은 이 문서 맨 밑에 있다.

여기서 한 가지 짚고 넘어가야 할 것은 정규식엔 한 가지의 정답이란 없다는 것이다. 개발자가 원하는 결과가 제대로 나오도록만 정의해주면 된다는 것이다. 예를 들어 앞의 전화번호의 예제를 보자. 국번의 경우 d{3} 도 가능했고 d+ 도 가능했다. 개발자가 원하는 것을 사용하면 된다.

RegExp 사용법

1. RegExp 객채를 생성한다.
  var regexp = CreateRegExp(“Text To Find”,”i”);// i를 빼면 대소문자를 구분한다.

2. Replace 한다.
  Result_Text = regexp.Replace(source_text, “바꾼자리에 채울 문자열”);예제.

다음 문장에서 hate라는 단어를 love로 치환하려면….

var find_txt = “hate”;
var replace_txt = “love;
var regexp = CreateRegExp(find_txt,”i”);
var src_txt = “I hate you.”;
var result_txt = regexp.Replace(src_txt,replace_txt);
alert(result_txt);

일반 블로그들이 싸이월드의 미니홈피를 이기지 못하는 이유

싸이월드 씨즌2도 나오고 그랬지만 여전히 싸이월드 미니홈피의 인기는 식을줄을 모른다.

아직도 와이프로거들을 포함하여 많은 사람들이 싸이월드를 사랑하는 이유는 싸이월드만의 독특한 스크랩 기능이 있기 때문이 아닐까 한다.

스크랩을 하면 스크랩한 글에 대한 로그가 명확히 남고, 원글 소유자에게 누가 어떤 콘텐츠를 스크랩 해갔고 어떤 카테고리에 어떻게 배치했는지… 등 이러이러한 정보를 실시간으로 공유하고 있기 때문이다. 물론 출처도 싸이월드 미니홈피에서는 자동으로 밝혀준다. 이럼으로 인하여 원글 소유자는 자기 글이 도둑질 당했다고 생각하지 않게 되는 원리이다.

유튜브가 성공한 이유도 태그와 트랙백이라는 기능도 일조 했겠지만, 결국은 원소스의 절대주소가 불변하기 때문이 아닐까 한다.

한간에 블로그에서 콘텐츠의 도용이라든가 이런것들이 이슈화 됨에도 별다른 대응책을 내지 못하는 것은 시스템적으로 해결하는데는 대안이 없기 때문일 것이다. 소위 불펌이라는 단어가 자주 등장하는 것도 이러한 것을 대변하는 것이 아닐까 싶다.

프라이버시 또는 사업적인 목적으로 자신이 만든 콘텐츠에 대해 소유권을 주장하고 싶어하는 대부분의 사람들이 가려워하는 부분이 시스템적인 문제… 절차적인 문제… 바로 이런것들이 아닐까 한다.

퍼온글에 대한 이슈는 블로그를 운영하는 운영자의 의지에 모든것이 달려있다고 해도 과언이 아닐것 같다.

하여간 우리나라 블로그들이 이런것들을 완벽하게 지원하지 못하는한 싸이월드 미니홈피의 인기는 앞으로도 쭉 이어질 전망이다.

카피레프트(copyleft)란 ?

자유소프트웨어(free software)라고도 한다. 지적재산권(저작권)을 의미하는 카피라이트(copyright)와 반대되는 개념으로, 저작권의 공유(共有)를 뜻한다. 1984년 미국의 리처드 스톨먼(Richard Stallman)이 소프트웨어의 상업화에 반대해 프로그램을 자유롭게 사용하자는 운동을 펼치면서 시작되었다.

스톨먼은 인류의 지적 자산인 지식과 정보는 소수에게 독점되어서는 안 되며, 모두가 자유롭게 사용할 수 있어야 하기 때문에 저작권으로 설정된 정보의 독점을 거부하였다. 이어 리누스 토르발즈(Linus Torvalds)가 유닉스를 기반으로 개발한 공개용 오퍼레이팅시스템인 리눅스(Linux) 프로그램을 공개하자, 카피레프트 운동에 참여한 프로그래머들과 함께 리눅스 커널을 채택하면서 이 운동은 널리 알려지기 시작하였다.

이후 카피레프트 운동은 소프트웨어뿐 아니라 모든 저작권의 공유 운동으로 확대되었고, 한국에도 1990년대 중반 정보통신 운동단체들을 통해 소개되었다. 이러한 운동이 확산되면서 기업들도 저작권 보호를 고집하지 않고 이를 공유함으로써 기업의 이익을 극대화시키려는 방향으로 돌아서는 경우가 생겨났는데, 검색 소프트웨어를 무상으로 나누어 주고 복제를 허용한 뒤 검색에 필요한 검색장비 시장을 공략하는 것 등이 카피레프트 전략의 좋은 예이다.

블로그(blog)란 무엇인가?

미국에서는 블로그라는 단어보다는 web+log=weblog라는 단어로 주로 사용된다.

새로 올리는 글이 맨 위로 올라가는 형태로 일종의 게시판 형태를 가진다.
자신의 관심사에 따라서 글을 올리기 때문에 1인 미디어라고도 불리운다.

웹 게시판, 개인 홈페이지, 컴퓨터 기능이 혼합되어 있고,
인터넷 홈페이지 제작과 관련된 지식이 없어도 자신의 공간을 만들 수 있다는 장점이 있다.

즉 블로그 페이지만 있으면, 누구나 텍스트 또는 그래픽 방식을 이용해 자신의 의견이나 이야기를 올릴 수 있고, 자신이 보유하고 있는 디카를 이용해 사진 자료를 올릴 수 있는 새로운 개념의 미디어이다.

미국에서는 이미 일반화되어 있으며, 한국에서도 갈수록 사이트가 늘어나고 있는데, 기술적·상업적인 제약 없이 누구나 자신의 생각을 사이트에 올려 다른 사람들과 공유할 수 있는 특성 때문에 기존의 언론을 보완할 수 있는 대안언론으로서도 주목을 받고 있다.

최근에는 일부 네티즌을 시발점으로 해서 블로그 콘텐츠에 대한 저작권에 대한 이슈가 붉어져 가고 있다.