SMS 로 회원들에게 문자를 발송할 일이 생겼다.

회원들이 국내한정이면 상관이 없는데, 해외에 거주하는 회원들도 다수가 존재....

검색해보니 plivo.com 이 가장 마음에 들었다.


이것저것 기능이 많았다.

INBOUND SMS, 다자간 통화, 그리고 200개 나라의 SMS 전송

INBOUND SMS 는 생소했는데, 번호를 plivo 에서 구매해두면,

그 번호로 문자가 수신되면 지정해둔 콜백URL 로 데이터를 쏴준다.

가격도 비싸지 않았다. 

INBOUND 서비스를 받기 위해서는 번호를 구매해야 하는데, 미국번호의 경우 월 0.8$ 정도이고, 한국번호는 좀 비싸다. 월 8,000원 정도..

OUTBOUND 는 번호를 굳이 구매하지 않아도, 보낼수 있는데, 그렇게 보내면 006으로 시작하는 번호로 문자가 온다.

그리고, 사용자 휴대폰에는 [국외문자] 라고 표시된다.

한국으로 문자 발송은 0.0.35$

미국으로 문자 발송은 꽤 쌌다.


plivo.com 회원가입 화면


회원가입할때 휴대폰번호를 넣게 되어있는데,

저기서 입력한 번호로 인증코드가 날아오고, 해당 폰 번호는 sandbox number 가 된다.

회원가입하자마자 임시로 쓸수 있는 약간의 크레디트 (3$ 인지 5$ 인지 기억이 나질 않음) 가 충전되어있고, sandbox number 로 문자를 테스트할수 있다.

sandbox number 는 추가할수있다.


API 예제소스도 JAVA, RUBY, C, PERL, PHP 등을 지원해준다.

PHP 는 SDK 를 다운받아서 쓰려면 composer 를 지원하는 버전이어야 한다.

물론, 다운 안 받음 -_-.

문자 보내려고 굳이 SDK 전체를 다운받아서 쓴다는게 내키지 않음 ㅎㅎㅎ.

trial 회원상태에서는 sandbox number 로만 문자를 보낼수있고, 카드번호를 넣고 25$를 충전하면 그때부터는 정상적으로 서비스를 쓸수 있는 상태가 된다.

영어가 짧아서 Account 와 Message 사이에 AUTH ID 를 넣어야 되는지 몰라서... 좀 헤맴...


문자 보낼 용도로만 간단히 함수 하나 만들어서 현재 운영중인 사이트에 붙여서 테스트해서 잘 작동해서 실서비스로 넘겼다.


API 연동은 JSON 포맷으로만 지원한다.

그리고 BASIC AUTH 을 사용한다.

아래는 소스.... (username 은 plivo.com 에서 AUTH ID 이며, password 라고 적어둔건, AUTH TOKEN 이다)



<?php
$username = 'xxxxxxxx';
$password = 'xxxxxxxx';

if (!$src) $src = '123456789';

$post = array('src'=>$src, 'dst'=>$dest, 'text'=>$msg);
$post = json_encode($post);
        
$host = "https://api.plivo.com/v1/Account/{$username}/Message/";
$process = curl_init($host);
curl_setopt($process, CURLOPT_HEADER, 0);
curl_setopt($process, CURLOPT_HTTPHEADER, 
             array('Accept: application/json', 'Content-Type: application/json'));
curl_setopt($process, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($process, CURLOPT_TIMEOUT, 30);
curl_setopt($process, CURLOPT_POST, 1);
curl_setopt($process, CURLOPT_POSTFIELDS, $post);
curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE);
$return = curl_exec($process);
curl_close($process);
return $return;
?>



nginx + php-fpm 으로 변경후 첨부파일 업로드시 1M 넘어가는 파일일 경우 

아래 오류가 발생함.


413 Request Entity Too Large


검색해보니

client_max_body_size 가 미선언되어있어서 그렇다고 함.

미선언되어있을 경우 기본값이 1M 라고 함.


nginx.conf 를 열어서

server {

     client_max_body_size 20M;
}


를 추가하거나

http {

     client_max_body_size 20M;

}


에 추가해도 됨.


난 공통으로 쓸거라서 http 구문에다가 추가함.



서버 구성 변경후 PHP 의 header 함수중 location 안 먹힘.


기존 구성 : apache + php

변경 구성 : nginx + php-fpm


예전 사이트를 고도화하면서 URL 구성이 달라져서 

없는 URL 경우 error 404 error.php 로 넘긴후

error.php 에서 uri 를 확인하여

header("Location: 불라불라~~~", true, 301); 

로 넘겨주고 있었습니다.


이번에 nginx + php-fpm 으로 변경후

error.php 가 작동하지 않아서 왜 이러지 하고 status code 를 확인해봐도

무조건 404 not found 만 떨어지더군요.


이래저래 검색하다보니.

nginx 설정중에 


error_page  404 /error.php?code=404;


이 부분에 있습니다.


위 부분을


error_page  404 = /error.php?code=404;


이렇게 변경해주었더니 한방에 해결.....


nginx 가 빠르긴 빠른거 같은데 익숙치 않아서 apache 운영할때에 비하면 헤매고 있네요.


제목은 해외 검색엔진에 잡히라고 저렇게 해둠.ㅋㅋㅋ

제공해준 샘플과 메뉴얼을 숙독하고, 결제연동에 임하였습니다.

분명히 제대로 했다고 했는데.

아래 에러메세지만 죽어라고 나오더군요 -_-.

에러코드 S016

에러메시지 LG U+모듈이 기동되어 있지 않거나, 네트웍문제로 통신이 불가능합니다. 웹전송인 경우는 note_url 또는  LGD_NOTEURL 값이 없습니다.



curl 함수도 사용할수있고, payreq_crossplatform.php 파일에 LGD_KVPMISPNOTEURL 변수도 제대로 선언했는데,

저 에러만 뜨는것임다 ㅠ.


에잇,젠장...

테스트라서 그러나?? 그렇다면 실결제로 해보자.....

실결제를 해도 저 에레메세지.....


아오! 빡쳐!

두시간동안 낑낑거리다가 에잇 ㅅㅂ.....

LG 전자결제 고객센터에 전화를 걸어서 이러저러하니 한번 확인해돌라고 하니.....

자기네들 상점정보에 X-Pay 1.0 으로 되어있어서 그렇다고 한다.

X-Pay 2.0 으로 변경해야만 Smart X-Pay 가 작동된다고 한다.

정정하겠습니다. 

유플러스에서 안 바꿔줘도 계약정보를 변경할수 있게 되어있더군요.

단, 일반 Active-X 결제등을 사용할 경우 2.0 으로 변경하면 안된다고 합니다.

PC용 결제용 ID 와는 별개로 모바일(스마트폰)에서 결제하려면 ID 를 추가발급하여야 합니다.


변경하고나니 한방에 해결!


아오!

카페24 때문에 별 작업을 다 해보는구나.

우리가 인터넷을 할때 http://daum.net 이라고 입력하고 접속을 하지만, 이것이 사실은 http://daum.net:80 을 뜻한다.

http 는 80 번 포트로 통신하겠다고 규약을 정해두었으니 뒤에 포트번호를 생략해도 접속이 되는것이다. (FTP, SSH 등도 동일하다.)


HTTPS (SSL) 은 기본적으로 443 번 포트를 사용한다.

HTTPS 로 접속시 서버의 인증서[각주:1]가 존재하여야 하는데, 단일도메인 인증서의 경우 웹호스팅에서 문제가 발생한다.

멀티도메인인증서의 경우 여러개의 도메인을 사용할 수 있는 인증서이다. (엄밀히 말하면 443번 포트를 같이 쓰기 위한 것이 아닌 인증서 하나로 여러개의 도메인을 사용하기 위해서 나온것이긴 하지만...)

이것이 편하긴 한데, 운영중 신규 도메인이 추가될 경우 전체 도메인에 대해서 갱신을 다시 해야한다. (비용의 압박)


동일한 서버에 단일도메인 인증서가 두개가 있다고 한다면, (단일도메인 인증서일때.. 와일드카드인증서는 해당없음)

https://cafe.daum.net

https://mail.daum.net

위와 같은 형태로 한서버에 443번 포트를 같이 사용할 수 없다. 

즉, 같은 443 번 포트를 사용하여 도메인에 따라서 서로 다른 인증서를 할당할 수 없다는 것이다.

어디선가 이걸 구별할수 있는 것이 추진중이라고 하는것 같은데 아직까진 미정이다.


그리하여 여러명의 사용자가 입주한 웹호스팅 환경에서는

https://도메인 (443 포트는 뒤에 포트번호를 생략하여도 된다.)

https://도메인:444

https://도메인:445

https://도메인:446

처럼 서로 다른 포트를 할당하여 보안프토콜을 이용하여 접속하게 된다.


대부분의 경우 이렇게 사용하는것이 문제가 없으나,

얼마전 단독 서버를 사용하는 고객사의 홈페이지를 비용절감차원에서 카페24의 웹호스팅으로 이전하였는데,

홈페이지에 접속이 안된다는 사람이 있는것이다.



작업할때는 몰랐는데, 회사에서 접속하니 접속이 되질 않는다.

이유는.... 방화벽에서 10000번 포트이상으로 나가는 아웃바운드를 차단해두었다.

대부분의 토렌트나 웹하드 등의 프로그램이 10,000번 이상의 포트를 사용하기 때문에 회사 방화벽 정책도 이렇게 적용해두었다.

카페24에서 할당한 HTTPS 포트는 48751 이다.

몇개의 사이트를 할당받아봤지만 거의 대부분이 45000번 이후의 포트가 할당되었다. 다른 분은 8000번대를 받은 사람도 있었으나, 내가 받은것은 대부분 40000번 이후 포트 ㅠ.ㅠ

카페24 고객센터에 요청하여 이러저러한 사정으로 인하여 포트번호를 10,000번 이하로 할당해주십사 하니 거절당했다.ㅎㅎ.

급한대로 위 고객사는 단독웹호스팅으로 이전하는걸로 마무리지었다.

그리고 얼마뒤.....

다른 고객사의 리뉴얼 작업.

이번 고객사는 SSL 인증서를 구매하지 않았다. 나 역시 편하지만 그래선 안된다. ㅠ.ㅠ

보안인증서를 도입하라는 정부정책을 떠나서 할건 하는게 맞는것 같다.

그래서 startssl.com 에서 1년 무료인증서를 발급받아 작업을 해주었다.

이번에도 카페24에서 할당한 SSL 포트는 48796 이다.


작업을 마무리 짓고 저번 고객사의 일도 생각나서 윈도우방화벽에서 48796 포트를 차단하고 테스트하니 당연히 안된다. ^^....

안되는건 안되는거지만 로그인조차 안되는건 곤란하다 -_-.......

당연히 데이터를 전송하는 부분은 SSL 을 적용해두었기 때문에. 글쓰기조차 안된다.


확 SSL 을 걷어내버릴까... 하는 마음도 들었지만,

그것보다는 SSL 이 접속되는 사람은 SSL 접속을 하게 두고,

안되는 사람은 HTTP 로 접속하게 하는 방향으로 소스를 수정하였다.


간단히 설명하자면,

1. 처음 홈페이지 접속

2. 로그인을 하던 안하던 세션을 생성한다. 

3. 세션데이터에 나에게 할당된 HTTPS 포트로 접속여부 값이 있는지 확인

4. 해당 데이터가 없으면 화면상에 보이지 않는 IMG 태그를 만들어, https://도메인:48796/이미지.jpg 로 접속하도록 한다.

   실제론 이미지가 아닌 세션에 데이터를 넣는 파일이다.

5. 해당 IMG 태그에 error 이벤트를 바인딩한다.

6. 이미지.jpg 에 HTTPS 로 접속요청이 오면 세션데이터에 HTTPS 접근가능이라고 세션값을 넣어둔다.

   만약 접속이 되질 않으면 5번에서 할당한 error 이벤트에 의거 HTTPS 가 아닌 HTTP 로 접속하고,

   이미지.jpg 에서는 HTTPS 에 접속할수 없었다는 세션값을 넣어둔다.


이렇게 한후,

로그인이나 글쓰기 작업을 할때 해당 세션값을 체크하여 HTTPS 가 접속가능하면 HTTPS 로 데이터를 전송하고,

그게 아니라면 HTTP 로 접속하는걸로 마무리를 지었다.


뭔가 더 좋은 방법이 있으려나......



  1. SSL인증서란 웹서버 인증서, 서버 인증서 라고도 하며 일반 사용자(클라이언트)가 사이트(서비스 서버, naver등과 같은 일반 사이트 및 쇼핑몰등)에 접속할때 주고받는 모든 정보(아이디등의 회원정보나, 결제시 신용카드 정보등)를 암호화해주는 것으로서 SSL(Secure Socket Layer)통신을 이용합니다. [본문으로]
  1. efss 2014.12.04 03:07 신고

    윈도우 서버 2012R2에 들어있는 IIS는 같은 443포트에 여러 사이트를 돌리는게 가능해졌더라고요.

  2. 감탄 2015.02.03 16:04 신고

    ㅋㅋㅋ 이런 편법을 이용하다니 감탄입니다...진심으로 ㅋㅋㅋ

하루가 지나서야 3부를 작성하네요...

월초라서 회사일이 바쁘다보니 ^^... 더군다나 오늘은 우리 아기의 선물을 택배아저씨가 으쌰으쌰 들고 오셔서 그걸 조립하느라 3시간을 허비했네요.


그럼, 이제 3부를 가볼까요.

아마 3부가 마지막이 될거 같습니다. ㅎㅎ

티스토리에서 모바일 애드센스를 붙이기 위한 우리에게 가장 필요한건 뭐?

그렇죠. ㅎㅎ 본문 상단에 광고코드만 딱!!!!하니 들어가면 된다 이거죠.


Access Token 으로 글을 수정하자

2부에서 받아온 Access Token 을 세션변수에 딱하니 저장해두었습니다.

그럼, 이 세션변수로 블로그 정보를 읽어야 되는데, 그러기엔 귀찮습니다.

해당하는 글만 수정하는 방향으로 코드를 짜는겁니다.



파일이름은 step2.php 로 지정하겠습니다.

그전에 내가 수정할 글 번호를 알아야 합니다. 그럼, 그 글번호는 어떻게 아느냐...

지금 현재 이 글의 주소를 보시면 http://www.i-swear.com/882 라고 되어있을겁니다.

이 882 라는 주소가 글번호입니다.

이번파일도 복사하기 귀찮은 분들을 위해 다운로드는 서비스!

step2.php


### php
include "config.php";

$_SESSION['access_token'] = trim($_SESSION['access_token']);

// 글내용을 가져옵니다.
// 나의 블로그 주소는 2차 도메인이 http://i-swear.com 이라면
// i-swear.com 을 기록하고,
// 2차도메인이 없이 티스토리 도메인을 사용한다면 (티스토리아아디.tistory.com)
// 티스토리아이디만 입력합니다.
$url = "https://www.tistory.com/apis/post/read";
$url .= "?access_token={$_SESSION['access_token']}";
$url .= "&targetUrl=나의블로그주소&postId=글번호";

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL,$url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($ch, CURLOPT_HEADER, false);
$content = curl_exec( $ch );
curl_close ( $ch );
$xmlObj = simplexml_load_string($content);

$row = $xmlObj2->item;

// 글수정하기
$title = urlencode($row->title);
$content = "구글광고코드입력";
$content .= $row->content; // 글본문
$content = urlencode($content);

$POST_DATA = "access_token={$_SERVER['access_token']}";
$POST_DATA .= "&targetUrl=나의블로그주소";
$POST_DATA .= "&title={$title}";
$POST_DATA .= "&postId={$row->id}";
$POST_DATA .= "&content={$content}";

$url = "https://www.tistory.com/apis/post/modify";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL,$url);
curl_setopt ($ch, CURLOPT_HEADER, false);
curl_setopt ($ch, CURLOPT_POST ,1);
curl_setopt ($ch, CURLOPT_POSTFIELDS , $POST_DATA);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
$content = curl_exec( $ch );
curl_close ( $ch );


이렇게 하는 것으로 간단하게 티스토리 API 를 이용하여 글을 수정할수 있었습니다.

무언가 부족한것 같지만, 여기서 마무리를 지을까합니다.

광고 삽입 쉽게 하기 링크를 따라가시면 아래와 같은 페이지를 보실수 있습니다.

부족한 설명을 이걸로 떼우겠습니다. -ㅅ-





이 글과 연관된 글

2013/01/04 - 티스토리 오픈 API 를 이용하여 내 블로그 글 수정하기 1부

2013/01/04 - 티스토리 오픈 API 를 이용하여 내 블로그 글 수정하기 2부

2013/01/05 - 티스토리 오픈 API 를 이용하여 내 블로그 글 수정하기 3부

2013/01/10 - 티스토리 구글애드센스 데스크탑,모바일 광고 구분하여 보내기

티스토리오픈API 이용하여 광고 삽입 쉽게 하기



  1. 피클 2013.01.05 23:17 신고

    새로 글이 등록되면 어떻게 하나효?

    • 알찬돌삐 2013.01.05 23:54 신고

      자동으로 광고가 들어가진 않습니다.
      말 그대로 많은 글을 수정해야 할 경우에,,,,
      이런 경우가 어떤 경우냐하면.
      기존에 PC 에 대응하여 애드센스 코드를 작성해두었는데,
      모바일에서도 애드센스 코드가 나오게 하려면,
      본문 자체에 애드센스 코드가 들어가야 합니다.
      이런 경우에 쓰는 것이죠.

  2. 안녕하세요 2013.01.06 01:04 신고

    php를 실행 시킬때 링크에 있는 사이트처럼 애드센스 삭제기능 없나요?

    주석이 다르면 안된다고 설명에 적혀있어서요.

    • 알찬돌삐 2013.01.06 01:16 신고

      삭제도 말이 삭제지,
      글수정입니다. ^^
      3부에 보시면 글수정에 관련된 샘플 코드가 있으니,
      해당 샘플코드를 응용하셔서 작업하시면 가능합니다. ~.
      저기에서 삭제를 넣은것은,
      광고코드를 삽입할때 고유한 주석을 입력하여,
      삭제할때 용이하도록 해두었기 때문에 가능한것입니다.

  3. 버그 2013.01.07 21:44 신고

    버그인지 모르겠지만, 게시글 태그에 '&'이 있으면 게시물 내용이 다 지워집니다.
    다행히 백업이 되어있는 글이라 괜찮았네요.

    • 알찬돌삐 2013.01.07 23:08 신고

      이 예제를 따라했을때 그렇게 된다는것이지요?
      혹시 제목에 & 가 있을때 그런 현상이 나타나지 않던지요?
      해당 부분을 지금 확인하여 글내용을 수정하였습니다.
      죄송합니다.

    • 버그 2013.01.07 23:58 신고

      http://tistory.i-swear.com로 들어가서 글에 소스를 넣을때입니다.

      Warning, simplexml_load_string() [function.simplexml-load-string], Entity, line 18, parser error , xmlParseEntityRef, no name in /usr/local/apache2/htdocs/tistory/step3.php on line 33

      Warning, simplexml_load_string() [function.simplexml-load-string], <tag>&</tag> in /usr/local/apache2/htdocs/tistory/step3.php on line 33

      Warning, simplexml_load_string() [function.simplexml-load-string], ^ in /usr/local/apache2/htdocs/tistory/step3.php on line 33

      대략 이런식으로 나옵니다. <tag>&</tag>부분에 글자와 &이 조합되어있어도 이런 오류가 나옵니다.

      저는 게시글이 백업본이 있어서 그 글만 수동으로 다시 쓰고 소스를 넣었습니다. 제 블로그만 그런지 모르겠지만, <tag>로 오류창을 띄우는 것 보니 태그 문제로 보여서요.

    • 알찬돌삐 2013.01.08 01:13 신고

      태그라고 해서 HTML 태그인줄 알았네요.
      말 그대로 태그클라우드에 들어가는 TAG(태그)였군요.
      태그에 & 가 들어가있을경우,
      XML 데이터를 티스토리에서 &amp; 로 보내주어야 하는데 ㅠ.ㅡ
      그냥 보내줘서 XML PARSE 에서 오류가 나네요 ...
      에공. XML PARSE 를 제대로 못할 경우 <tag> 부분을 삭제처리하도록 변경하여 tistory.i-swear.com 의 소스를 수정하였습니다.
      어차피 <tag> 는 쓰지 않으니깐요 ^^.
      오류사항을 알려주셔서 감사합니다.

  4. 글 잘 보았습니다 2013.01.25 19:06 신고

    좋은글 잘 봤습니다

    혹시

    삭제는 일괄적으로 어떻게 하나요?

    • 알찬돌삐 2013.01.26 05:38 신고

      안녕하세요 ^^.
      삭제는 해당 태그를 제거해서 수정하는 형태로 진행하시면 됩니다.

  5. 강건마 2014.02.27 14:50 신고

    님이 공유해주신 코드는 잘 쓰고있습니다 ㄳㄳ

    그런데 글쓰기는 되는데 말이죠

    파일 업로드는 아무리 해도 안되네요

    파일 업로드해서

    마지막에 $content부분을 출력을하면 정상적인 파일 업로드를 수행해주세요.라고만 나와요

    혹시 왜그러는지 해결책 있으시면 공유좀 해주시면 감사하겠습니다

    무늬만 개발자라 너무 힘들군여..ㅠ

  6. 2014.03.24 16:33

    비밀댓글입니다

  7. 2014.04.10 15:03

    비밀댓글입니다

티스토리 오픈 API 를 이용하여 내 블로그 글 수정하기 2부를 시작합니다.


1부에서 OAuth 흐름에 대해서 언급하지 못하고 지나갔었는데요.

대략 흐름은 아래와 같습니다.

1. 블로거가 Consumer 로 등록된 사이트에 접속

    예) http://tistory.i-swear.com

2. Access Token 을 받기 위해서 티스토리로 페이지 이동

    이때 로그인이 되어있지 않다면 로그인 창이 뜹니다.

3. 블로거가 TISTORY OAUTH 창으로 접속됩니다. 아래 이미지 참조.

이곳에서 허가하기를 누르면 Access Token 이 발급되어 Consumer 에서 등록한 권한 (읽기, 읽기/쓰기) 를 가지게 됩니다. 

물론 취소를 누른다면 창은 닫히게 되고요. ^^.

이 Access Token 을 가지고 허용된 API (글정보,글수정,글삭제,글등록 등등) 을 사용할수 있게 됩니다.


대충 설명은 이렇게 하고요.

그럼 이제, 코딩 시작.....

아주 심플하게 코딩만 할것이기 때문에 크래킹이나 XSS 에 대해서 고려하지 않음을 알려드립니다.


티스토리 오픈API 로 Access Token 을 받자.

1부에서 Client Id , Secret Key 를 발급받았습니다.

그럼 얘들을 어디에 쓰느냐...

내가 이런 저런 서비스를 하기 위한 고유의 키(?)라고 생각하시면 됩니다.



일일이 복사하기 귀찮은 분들위한 다운로드 서비스.

config.php

step1.php

callback.php


config.php 파일을 만들자.

config.php 에는 Client ID 와 Secret Key 를 저장해 둡시다.

### php
config.php
$_client_id    = "티스토리에서 발급받은 Client ID 를 입력";
$_secret_key   = "티스토리에서 발급받은 Secret Key 를 입력";
$_callback_url = "http://티스토리 Consumer 에 입력한 CallBack 경로";


토대로 step1.php 파일을 만듭니다.

이 파일의 역할은 티스토리에 로그인 한 사용자에게서 Access Token 을 받기 위해 티스토리로 Redirect 해주는 파일입니다.

### php
step1.php
include "config.php";
$url  = "https://www.tistory.com/oauth/authorize/";
$url .= "?client_id={$_client_id}";
$url .= "&redirect_uri={$_callback_url}";
$url .= "&response_type=code";

header("Location: {$url}");


이제 callback.php 파일을 만듭니다.

이 파일의 역할은 티스토리에서 TISTORY OAUTH 을 허가한 사용자의 code 을 넘겨줍니다.

step2.php 로 해야되는데, CallBack 부분이기 때문에 callback.php 로 하겠습니다.

GET 변수로 code 가 넘어오므로, 이 값을 가지고 Access Token 을 받아야 합니다.

### php
callback.php
include "config.php";

$url = "https://www.tistory.com/oauth/access_token/?";
$url .= "&client_id={$_client_id}";
$url .= "&client_secret={$_secret_key}";
$url .= "&redirect_uri=" . urlencode($_callback_url);
$url .= "&code={$_GET['code']}";
$url .= "&grant_type=authorization_code";


$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL,$url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($ch, CURLOPT_HEADER, false);

$content = curl_exec($ch);
curl_close ($ch);

$content = str_replace('access_token=', '', $content);
$_SESSION['access_token'] = $content;


이제 access token 을 받았으니, 글읽기와 글수정에 대해서 알아보겠습니다.


이 글과 연관된 글

2013/01/04 - 티스토리 오픈 API 를 이용하여 내 블로그 글 수정하기 1부

2013/01/04 - 티스토리 오픈 API 를 이용하여 내 블로그 글 수정하기 2부

2013/01/05 - 티스토리 오픈 API 를 이용하여 내 블로그 글 수정하기 3부

2013/01/10 - 티스토리 구글애드센스 데스크탑,모바일 광고 구분하여 보내기

티스토리오픈API 이용하여 광고 삽입 쉽게 하기



  1. 애드센스포럼 2013.01.04 17:08 신고

    포럼에 링크가 달려서 타고 왔습니다.
    3부 기다리고 있습니다 ^^

    • 알찬돌삐 2013.01.04 18:14 신고

      오늘 월초라서 꽤 바빴네요.
      3부 이제 써야죠 ㅋ....
      글재주 없는 넘이 글 쓰려니 힘드네요 ^^.
      방문해주셔서 감사합니다.

  2. 애드센스포럼 2013.01.04 22:37 신고

    너무 유용한 포스팅인 것 같습니다. 목이빠져라 기다려봅니다 ^^

  3. 김후락 2013.01.10 00:40 신고

    정말정말 어메이징 하네요. 알찬돌삐님 너무너무 감사합니다.



    모바일광고를 겨냥하여 모두 올렸던 광고가
    바보 구글봇ㅠ때문에 구글애드 정지로 일일히 다 지우는데 2일 걸렸습니다 ㅠ

    다른 계정으로 다시 신청하고 돌삐님의 소중한 프로그램으로 사용하겠습니다.

    테스트로 해봤는데 감동의 물결이 ㅠ 완전 감사합니다! 자주뵐께요^^

    • 알찬돌삐 2013.01.10 08:26 신고

      도움이 되셨다니 다행입니다. ^^...
      저도 이걸 적용해놓고 보니, 모바일일때는 모바일 광고(작은사이즈)
      PC 일때는 데탑광고 (큰 사이즈)가 나오게 할 수 있을것 같더라구요.
      궁리중입니다. ㅎ.

  4. 김후락 2013.01.10 11:00 신고

    어머! 저와 같은 생각을 가지고 궁리중이시구요.

    데탑->모바일 광고 하나로 될텐데^^

    저는 궁리만해야겠네요ㅠ윽 능력자 돌삐님은 어서어서
    또 php인가 꾸러미 모아 놓고 부탁드려요ㅋ
    이힛.^^

  5. 흑횽GDT 2013.01.11 00:04 신고

    돌삐님.. ^^ 감사합니다. 쵝오입니다. 흔적 남겨놓을께요.. ^^

  6. 2017.09.03 11:21

    비밀댓글입니다

티스토리 모바일 스킨은 사용자가 수정할 수 없게 되어있습니다.

HTML ,CSS 스킨을 수정하면 PC 에서 보이는 부분만 수정이 되는데, 대부분의 티스토리 블로거들이 이 부분에다가 구글 애드센스 코드를 넣어두고 있어, 모바일에서는 해당 광고가 보이지 않고 있습니다.

모바일에서도 애드센스를 보이게 하려면 이미 발행된 모든 글을 수정해야 하는데, 이 작업을 하다보면 깊은빡침에 이릅니다.



좀 쉽게 하는 방법이 없을까 하던중, 티스토리 API 중 글수정 API 를 이용하면 쉽게 가능합니다.

다른 언어도 많겠지만, 저는 PHP 가 간편하여, PHP 로 하는것을 설명드립니다.

전제조건 1. 도메인이나 웹호스팅 계정이 있어야 한다.

전제조건 2. curl (Client URL Library) 를 사용가능해야 한다.

전제조건 3. PHP 를 할줄 알아야 한다. -_-v..


위 전제조건에 해당되지 않는 분들을 위해서 공개 페이지도 제공해드립니다.

단, 해당 서비스를 사용함에 따른 불이익은 본인이 감수하셔야 합니다.

그럴일은 없겠지만, 재수없게 포스팅한 내용이 사라진다던가 -_-....

아래 주소를 클릭하시면 해당 서비스를 이용가능합니다. 

http://tistory.i-swear.com


그럼, 이제부터 시작해볼까요.


티스토리 오픈 API 에서 Consumer 로 등록

티스토리에 로그인하여 Consumer 등록페이지로 이동합니다.

티스토리는 OAuth[각주:1] 을 사용합니다.

서비스명과 설명은 대충 넣습니다.

서비스 URL 은 현재 코딩한 후 업로드할 서버 URL 을 입력합니다.

예) http://tistory.i-swear.com

CallBack 경로는 티스토리 인증창이 뜬후 돌아갈 경로를 입력합니다.

해당 경로로 Access Token 이 발급됩니다. 반드시 유효한 경로를 입력하셔야 합니다.

예) http://tistory.i-swear.com/callbak.php

OAuth 약관에 동의한후 등록을 하시면, Consumer 관리 페이지에서 내가 등록한 내역을 확인할 수 있습니다.

이곳은 꼭 확인하셔야 합니다.

왜냐하믄, 이곳에 가장 중요한 client_id 와 secret_key 가 있습니다.




상세보기를 클릭하시면 아래 이미지처럼 나옵니다.



그럼 이제, 티스토리 관리 페이지는 볼 필요가 없습니다.

Client ID, Secret Key, CallBack 경로는 앞으로 코딩할 곳에 쓰이니 다른 곳에 복사해 둡시다.


이 글과 연관된 글

2013/01/04 - 티스토리 오픈 API 를 이용하여 내 블로그 글 수정하기 1부

2013/01/04 - 티스토리 오픈 API 를 이용하여 내 블로그 글 수정하기 2부

2013/01/05 - 티스토리 오픈 API 를 이용하여 내 블로그 글 수정하기 3부

2013/01/10 - 티스토리 구글애드센스 데스크탑,모바일 광고 구분하여 보내기

티스토리오픈API 이용하여 광고 삽입 쉽게 하기

글재주가 부족하다보니 조금 횡설수설한 면이 없지 않아 있네요. 양해바랍니다.


  1. OAuth는 OpenAPI로 개발된 표준 인증 방식으로, 각종 애플리케이션에서 사용자 인증을 거칠때 활용될 수 있다. [본문으로]
  1. 수학방 2013.01.04 20:22 신고

    php를 못하는 사람에게도 희망은 있군요. ㅎㅎ
    일단 등록은 다 했습니다. 나머지는 다 따라할려면 며칠 걸릴 것 같아요.

  2. 감사합니다 2013.01.07 12:46 신고

    애드센스 광고를 수정할수 있게 만들어 주신거 정말 감사합니다.

    덕분에 광고를 쉽게 수정할 수 있는거 같습니다 ^^


    그런데 한가지 궁금한게 있는데, 티스토리 계정에 블로그를 여러개 만들면
    가장 첫번째 있는 블로그만 수정을 할 수 있던데....

    첫번째 블로그 말고 다른 블로그도 수정을 할 수 있는 방법이 있을까요?

    • 알찬돌삐 2013.01.07 14:15 신고

      헉.. 그런 경우도 있나보네요.
      확인해보겠습니다.

    • 알찬돌삐 2013.01.07 14:56 신고

      안녕하세요.
      블로그가 여러개 있더라도 수정할수 있게 변경해두었습니다.

    • 감사합니다 2013.01.07 15:26 신고

      문의사항은 방명록에 남기라고 적은걸 보고 다시 옮길려고 했는데 벌서 수정을 해주셨네요 ^^

      정말 감사합니다~

      새해 복 많이 받으세요 알찬돌삐님~

    • 알찬돌삐 2013.01.07 15:31 신고

      "감사합니다"님도 새해 복 많이 받으세요 ^^.

  3. socurites 2014.03.11 11:30 신고

    좋은 자료 감사드립니다 ^^

  4. 그뭐지.. 2014.06.17 23:31 신고

    전제조건 중 도메인이 있어야합니다라고 하셨는데
    그 아래 설명중에 전제조건이 충족되지 않은 사람들을 위한 이라고 적혀있네요
    그러면 도메인이 없어도 가능하다고 하시는 말씀이신가요?

    • 알찬돌삐 2014.06.18 00:30 신고

      이용하시는데에는 도메인이 없어도 됩니다.
      PHP 코드를 이용하여 본인의 호스팅 계정에 사용하기 위해서는 웹호스팅 + 도메인(호스팅업체에서 제공하는 2차도메인만이라도) 있어야 된다는거지요.

 

인터넷 한글 메일의 인코딩과 디코딩


웹 페이지 게재일 : 1998 / 04 / 10

1. 인코딩과 디코딩

1) 전자메일 서비스는 초기에 RFC 822를 기반으로 정보교환이 이루어졌으며, 이 RFC 822는 정보
교환 매체를 7비트인 US-ASCII 텍스트로 사용할 것을 제한하고 있습니다.

2) SMTP(단순 우편 전송 프로토콜)는 7비트의 길이만을 통과하므로, 8비트를 구성된 문서, 즉 8비트
를 사용 하는 유럽(독일,프랑스) 언어, 16비트를 사용하는 동양권(한국,중국,일본) 언어등에서는
msb=1인 경우 이 msb가 짤려나가므로 문제가 생깁니다.

3) 해결책으로 8비트 문자코드를 사용하는 나라에서는, 각 언어별 문자세트를 지정하고 8비트 문자
들을 7비트 영문 아스키로 변환(인코딩)한 후 전송하고, 수신측에서 이를 다시 8비트로 변환
(디코딩)하는 방법을 사용합니다.



2. 한글 메일의 인코딩 방법들

1) 한글 메일의 문제점

한글은 16비트로써 즉 8비트 2개로써 한 문자를 표현하므로, 그대로 SMTP를 통과하면 MSB(최상위
비트)가 잘려 나갑니다. 그래서 MIME 규격에 의해 전자 우편을 전송합니다.


2) MIME(다목적 인터네트 우편 확장 표준) 규격

SMTP의 데이터 포맷을 확장함으로써 텍스트는 물론 비디오, 오디오, 동화상 등의 다양한 멀티미디어
데이터를 전송할 수 있게 해주는 인터넷 메일의 확장을 의미합니다.

MIME 규격은 전자우편 메시지 상단에 있는 전통적인 SMTP 헤더에다 MIME 헤더를 추가합니다.
MIME 헤더에는 [우편물 유형, 사용된 문자세트] 및 [인코딩 방식] 등의 정보를 가집니다.

그리고, RFC822에 규정된 전통적인 SMTP 헤더는 To[발신자], From[수신자], Date[일자], Subject[제목],
Reply_To[회신자], cc[참고], message_ID 등의 정보가 있습니다. 이들이 놓이는 순서에 대한 특별한
규정은 없습니다.

3) MIME에서 정의하고 있는 전송 데이타의 Type(파일종류)/Subtype(파일포맷)

Text / Plain : 포맷되지 않는 텍스트 (특정한 문자세트로 구성됨)
Text / Richtext : 볼드, 이탤릭체, 밑줄 등 간단한 포맷을 가진 텍스트
Multipart / Mixed : 복수개의 서로 다른 유형의 데이터 본문들을 하나의 메시지로
조합

Application / Octet-Stream : Binary 데이타
Application / Postscript : PostScript 프로그램
Message / RFC 822 : 또다른 우편 메시지 RFC 822

Image / JPEG : 정지화상 데이타, ISO 10918 포맷
Image / GIF : 정지화상 데이타, CompuServe의 Graphic interchange 포맷
Video / MPEG : 동화상 데이타, ISO 11172 포맷
Audio / Basic : 오디오 데이타, 8비트 ISDN mu-law 포맷을 사용한 인코드


4) MIME의 Header Fields

1. MIME-Version : 에이전트를 지원하는 MIME 버전을 표시함.
2. Content-Type : 전송 데이타의 type/subtype[우편물 유형]과 character-set[사용된
문자세트]을 표시함.
3. Content-Transfer-Encoding : 전송 데이타의 body를 인코딩한 방법[인코딩 방식]을 표시함.
4. Content-ID : MIME 내용들을 식별하기 위한 표시 (생략가능)
5. Content-Description : 메시지 본문 내용에 대한 설명 (생략가능)


예) 한글메일 표준의 MIME 헤더인 경우 (7bit ISO-2022-KR 한글코드가 인코딩 없는 7bit 방식을 사용한 경우)
Content-Type: text/plain; charset=ISO-2022-KR, Content-Transfer-Encoding: 7bit

예) KS5601인 경우 (8bit 한글코드는 인코딩 없이 전송할 수 없으므로, 이미 수신한 것을 저장할 때만 사용함)
Content-Type: text/plain; charset=EUC-KR, Content-Transfer-Encoding: 8bit

예) 영어권인 경우 (7bit 영어문자가 인코딩 없는 7bit방식을 사용한 경우)
Content-Type: text/plain; charset=US-ASCII, Content-Transfer-Encoding: 7bit

예) 유럽언어인 경우 (8bit 유럽문자가 한 바이트를 세 바이트로 변환하는 인코딩 방식을 사용한 경우)
Content-Type: text/plain; charset=ISO-8859-1, Content-Transfer-Encoding: quoted-printable



5) MIME에서의 Content-Transfer-Encoding 방식

전송내용물 인코딩 방식은 크게 5 가지가 있습니다. 헤더에 Content-Transfer-Encoding 필드가
생략되어 있으면 7bit 방식을 의미합니다. 7bit 방식, 8bit 방식, 및 binary 방식 이들 세가지
방식들은 인코딩을 하지 않는 방식입니다.

이에 반해 Base64와 Quoted-Printable 방식은 8bit코드를 7bit코드로 인코딩하고, 다시 7bit를 8bit로
디코딩합니다. 그러므로 HTML문서를 전자메일로(SMTP로) 보낼 때나, 그래픽 파일을 첨부파일로 보낼
때에 이들 문서들은 7bit 텍스트(문자 메시지) 이외에 8bit 이미지 등을 포함하고 있으므로 Base64와
Quoted-Printable 방식 중에 하나를 사용해야 합니다. 실제로 Outlook Express는 이 두가지 중 하나로
설정되어 있음을 확인할 수 있습니다.

(1) 7bit

1) [7bit] 방식은 전자우편 메시지의 Default Format입니다.
이는 이미 7bit로 인코딩된 문자세트라고 할수 있고, 전송할 때 더 이상 인코딩하지 않습니다.

2) [7bit] 방식은 정보교환을 위해 7비트 ASCII 코드로만 전송 데이타를 표현하는 방식입니다.

3) ISO-2022란 정보교환용 부호에 관한 국제표준입니다.
특히, ISO-2022-KR이란 8비트 KSC-5601을 7비트 ISO-2022방식으로 인코드한 것을 말합니다. 즉
ISO-2022-KR은 국제적 정보교환을 위해 한글 각 글자마다 2개의 7bit 코드로 표현한 코드체계입니다.

(예) "가나 다" => ESC$)C <SO>0!3*<SI> <SO>86<SI>
; ESC$)C는 ISO-2022-KR의 시작,
; <SO>, <SI>는 각각 8비트의 시작,종료

(2) 8bit

[8bit] 방식은 ASCII 문자와 non-ASCII 문자를 포함하고 있음을 나타내고, 실제 데이타에 대한
인코딩은 하지 않습니다.

(3) Quoted-Printable

1) [quoted-printable] 방식은 msb가 1인 1바이트를 입력받아 msb=1임을 의미하는 "="와 실제
코드값에 해당하는 16진수를 문자 "0"부터 "F"까지로 표현하므로 한 바이트를 세 바이트로
인코딩하는 방식이다.

2) [quoted-printable] 방식은 QP 인코딩 이라고도 한다. 유럽권 언어에 많이 사용합니다. 한글에
적용할 경우 msb=1인 8비트가 많으므로 최고 3배까지 전송량이 증가합니다.

(예) Mu(움라이트)nchen => M=FCnchen
(예) "가나 다" => =B0=A1=B3=AA =B4=D9


(4) Base64

1) [Base64] 방식은 24비트(3바이트)를 입력받아 이를 6비트씩 잘라 4바이트를 출력하는 인코딩
방식, 각 6비트를 특정 코드 값으로 매칭시켜 변환하는 MIME 인코딩 방식입니다.

2) [Base64] 방식은 데이타 크기가 33% (1.3배)만큼 증가합니다. RFC 1113에 의한 코드 체계를
따릅니다.

(예) "가나다" (2바이트 x 3자 = 6바이트) => sKGzqrTZ (1바이트 x 8자 = 8바이트)

(5) binary

1) [binary] 방식은 SMTP에서는 한 라인에 1,000 문자를 넘지 못하도록 규정하고 있는데, 7bit와
8bit는 이를 준수합니다.

2) 그러나, [binary] 방식은 길이에 제약이 없고, 역시 실제 이진 데이터에 대한 인코딩은 하지 않
습니다.

6) HTML문서에서의 Content-Type과 Character Set

1) 전자메일은 7bit전송을 기반으로 하는 SMTP 프로토콜을 사용하지만, 이에 비해 HTML문서는 8bit전송을
기반으로 하는 HTTP프로토콜을 사용하므로 인코딩이 필요하지 않습니다. 그러므로 8bit 문자코드일지
라도 인코딩 없이 그대로 전송됩니다.

2) 다음은 HTML문서의 <head>와 </head> 태크 속에 사용된 content-type과 charset의 예입니다.
< meta http-equiv="content-type" content="text/html"; charset="euc-kr" >

여기서 HTTP는 인코딩 문제와 관계가 없으므로 8bit(실제 8bit+8bit) 한글코드인 Euc-KR이 사용되었습니다.



3. 한글메일의 표준 인코딩 방식

(1) 편지의 헤더(header) 전송

SMTP 편지헤더는 [발신자], [수신자], [송수신일시], [제목], [경로] 등 해당 편지에 대한 정보를 기록
하는 전자우편의 머리 부분입니다.

한글이 포함된 편지헤더의 인코딩은 헤더 전체를 인코딩하는 것과 한글만을 인코딩하는 것
모두 가능합니다. QP 또는 Base64 인코딩을 따르며, 한글 편지제목의 예를 들어보면
=?문자세트?인코딩방법?인코딩된 편지제목?= 와 같이 특정 형식으로 전송합니다.

[편지헤더]의 한글메일 표준은 = ? EUC-KR ? Q(또는 B) ? QP(또는 Base64)로 인코딩된 편지제목 ? = 의
형식을 가집니다. 문자세트(charset)는 EUC-KR을 사용하며, EUC-KR에서는 msb=1 이면 KSC-5601
로 인식합니다. 여기서 Q는 QP 인코딩을, B는 base64 인코딩을 의미합니다.

EUC-KR은 Extended Unix Code-Korean을 의미하며, Unix를 비롯하여 Mac, MS-DOS, Windows 환경
에서 널리 사용되고 있습니다.

(2) 편지의 본문(body) 전송

[편지본문]의 한글메일 표준은 ISO-2022-KR (7bit) 인코딩 방식을 사용합니다.



4. 한글메일이 깨지는 이유? 해결책?

(1)이유

전자우편의 전달 과정은 MUA->MTA-->MTA->MUA 입니다. MUA로는 UNIX의 Mail, Pine 등과 Windows의
Netscape Mail, Eudora, MS Outlook-Express 등이 있습니다. MTA로는 UNIX용 영문 sendmail, 한글
sendmail 등과 NT용 메일서버, 95용 메일서버 등이 있습니다.

그리고 전자우편 전송프로토콜인 SMTP가 8비트를 전송하지 못하고 7비트만을 전송하므로 8비트
데이타를 7비트로 인코딩하여 전송하면 수신측에서는 이를 다시 8비트로 디코딩하여 화면에 출력
하지요. 그런데 인코딩/디코딩 방식이 그 종류가 많아서 MUA,MTA가 이를 모두 처리하지를 못하는
경우가 많습니다. 이러한 경우 디코딩되지 않은 한글이 화면에 나타내게 되어 깨져보이지요.

또한 과거에는 MTA에서 인코딩을 지원하였으나, 최근에는 일부 MUA에서 한글 인코딩(ISO-2022-KR)
을 지원하고 있습니다. 문제는 이들이 각기 RFC 1557을 잘못 해석한 데서 이들 사이에 호환성이
없어 문제가 발생하고 있습니다. 그래서 1996.11.22일자로 한국전산원에서 RFC의 애매 모호한
규정을 재정립하여 발표한 바 있습니다.

(2)해결

해결방법은 한글메일변환 프로그램을 다운로드 받아 설치하고 이를 통해 디코딩하여 메일 내용을
보는 방법입니다. ftp://netlab.ync.ac.kr/
한후 'Internet_Utilities' 디렉토리로 가서 다시 '한글메일변환' 디렉토리로 가서 'cvt.zip' 또는
'NShmconv.exe'(넷스케이프 전용임)를 다운로드 받아 사용하세요.




5. Netscape Mail을 이용한 한글 메일

(1) MUA = Netscape 3.0(Allow 8bit 선택=EUC-KR)이고, MTA = UNIX 한글 sendmail 일 때

(인코딩)
1. Header는 Base64로 인코딩
2. Body는 ISO-2022-KR로 인코딩

(디코딩)
=> Netscape 3.0은 EUC-KR(8bit) 메일은 인식하나,ISO-2022-KR(7bit) 메일을 지원하지 않습니다.
=> ISO-2022-KR 인지 능력은 부여되어 있으므로 메일본문에 다음의 태그를 맨위에 붙인 후 html
=> 파일로 저장한 후 파일 열기하여 보면 메일을 볼수는 있으나, Netscape의 버그로 깨지는 부분이
=> 있을 수 있습니다. 그래서 한글메일변환 프로그램을 사용하여 메일을 보는 방법을 즐겨 씁니다.
=> <META HTTP-EQUIV="Centent-type" CONTENT="text/html"; CHARSET=ISO-2022-KR>


(2) MUA = Netscape 3.0(MIME(QP), Korean선택)이고, MTA = UNIX 한글 sendmail 일때

(인코딩)
1. Header는 Base64로 인코딩
2. Body는 QP로 인코딩

(디코딩)
=> 편지 headre는 잘 인식하나, MIME을 인식하지 못하는 UNIX mail reader들은 편지 body를 읽지 못합니다.
=> Pine3.93이상, Netscape 3.0이상, Eudora, MS Exchange는 편지 body를 읽습니다.

(3) MUA = Netscape 4.0이고, MTA = UNIX 한글 sendmail 일때

(인코딩)
1. Header는 Base64로 인코딩
2. Body는 ISO-2022-KR로 인코딩

(디코딩)
=> Netscape 4.0은 ISO-2022-KR(7bit) 메일을 지원하므로 이 표준 한글메일이면 다른 수단 없이
=> 한글메일을 잘 볼수 있습니다 !!!
=> 그 이전 버전에서 ISO-2022-KR을 KSC5601로 변환해 주기 위해 사용되는 툴이 불필요합니다.



6. 참고

(1) RFC 822 : 정보전송 매체를 7비트인 US-ASCII 텍스트에 제한하고 있는 전자메일 서비스입니다.

(2) RFC 1522 : MIME 규정입니다.

기존 7비트 인터넷 메일 시스템에서 8비트 전송을 보장하기 위해 MIME 헤더를 사용합니다.
헤더 부분의 한글은 B 또는 Q 인코딩을 사용하며, 문자세트는 EUC-KR을 사용합니다.

헤더에 한글이 포함되어 있는 경우, 헤더 전체를 인코딩하는 것과 한글만을 인코딩하는
것 모두 가능합니다. 파일이름과 같이 하나의 토큰으로 인식해야 하는 경우, 헤더 전체를
인코딩해야 합니다.

(3) RFC 1557 : 문자세트와 인코딩의 지정, Designator와 공백문자의 처리방법에 대한 규정입니다.

7비트로 인터넷 한글메일을 교환하기 위해 한글메일은 Character Set에 "ISO-2022-KR"을
사용하고 인코딩은 "7bit"를 명시합니다.
ESC$)C로 ISO-2022-KR의 시작을 알리는 Designator는 최초로 한글이 나타나기 전, 본문의
임의의 위치의 제일 첫칸에 명시되어야 합니다.

이 글은 스프링노트에서 작성되었습니다.

.

 

  • ISO-2022
    • RFC-1557에서 MIME 문자 세트 이름으로 처음 사용되었습니다.
    • IS0-2022라는 문자 세트를 바탕으로 KSC-5601을 7Bit로 표현하는 방식입니다.
    • ISO-2022는 여러 종류의 정보 교환용 부호를 정하는 방식에 대한 국제 표준입니다.

  • ISO-2022-KR
    • 한글이 사용되는 것을 표시하기 위해 메일의 본문에 $)C에 라는 문자열이 먼저 나옵니다.
    • Esc는 아스키 27번의 이스케이프(Escape) 제어 문자입니다.
    • 한글이 시작되는 곳에는 SO(Shift-Out, 아스키 14번,[Ctrl]-[N]에 해당) 문자가 나옵니다.
    • 한글이 끝나는 곳에는 SI(Shift-In, 아스키 15번,[Ctrl]-[O]에 해당) 문자가 나옵니다.

  • QP
    • 'Quoted-Printable'의 약자로서 MIME에서 사용하는 인코딩 방식입니다.
    • 전자 우편 프로그램인 유도라에서 채택하고 있으며, 7Bit 범위에 있는 문자는 바꾸지 않지만 8Bit로 된 문자는 모두 16진수 숫자로 바꾸어 문자 앞부분에 '=' 기호를 붙입니다.
    • QP의 경우는 8Bit가 세트된 문자를 16진수 두 자리로 바꾸고 앞에 '='를 붙입니다.
      (예) '안녕하세요.'는 '=BE=C8=B3=E7=C7=CF=BC=BC=BF=E4'와 같이 표현됩니다.

  • Base64
    • RFC-1113에 의한 코드 체계를 따르며
    • 8Bit 데이터를 6Bit씩 나누어서 각 6Bit를 특정 코드값으로 매핑시켜 변환하는 인코딩 방식으로 MIME를 사용하고 있습니다.

  • UUENCODE
    • 이진 파일이나 한글 메일을 7Bit 아스키로 변환하는 인코딩 방식입니다.
    • UUENCODE로 변환된 파일은 Begin으로 시작해서 End로 끝나는 형식으로 구성되어 있습니다.
    • Uuencode/Uudecode는 원래 바이너리 파일을 E-mail로 전송하기 위해 만들어진 방법이며, 텍스트 파일을 전송하는데는 잘 사용되지 않습니다. 그러나 한글 텍스트를 Uuencode로 인코딩하여 보내기도 합니다.
    • Uuencode/Uudecode도 Base64 와 비슷하게 8Bit 문자 3개를 7Bit 문자 4개로 변환하는 방식입니다.
    • Begin으로 시작하는 줄과 End로 끝나는 줄 사이에 있는 내용이 인코딩된 내용이며, 각각의 줄은 그 줄의 글자 수를 나타내는 값으로 시작합니다.

이 글은 스프링노트에서 작성되었습니다.

.

+ Recent posts

티스토리 툴바