현재 Java 트위터 라이브러리로는 Twitter4J, java-twitter, jtwitter, Twitter Client의 총 4가지를 존재하고 있습니다. 이 중에서 Twitter4J를 선택한 것은 문서화가 잘 되어 있고, 지속적으로 업데이트가 되고 있기 때문입니다.
OAuth 사용하기
트위터의 외부에서의 인증을 위해서 OAuth를 사용하고 있는데 OAuth사이트에서는 OAuth를 다음과 같이 정의하고 있습니다.
An open protocol to allow secure API authorization in a simple and standard method from desktop and web applications. (데스크탑과 웹어플리케이션에서 간단하고 표준적인 방법으로 안전한 API 인증을 하도록 하는 공개 프로토콜입니다.)
OAuth는 Identity 2.0으로 넘어오면서 OpenID와 함께 생겨난 대표적인 인증 표준이라고 할 수 있습니다. API에서 제공되는 것 내에서만 사용했기에 직접 구현한 것은 아니라서 사용했다고 하기는 뭐하지만 어쨌든 OAuth를 사용한 것은 이번이 처음이었습니다. OpenID에 대해서는 이전에 올렸던 글을 참고하시면 되겠습니다.
인증메커니즘 자체도 약간 비슷한 느낌이긴 합니다만 OpenID는 OpenID Provider가 인증을 책임지고 Consumer에서는 아이디만 Provider측에 넘겨주면 Provider가 인증된 결과를 돌려주게 됩니다. Consumer는 인증에 대해서는 전혀 책임지지 않고 로그인인증을 Provider에 위임하게 됩니다. 반면에 OAuth는 좀더 진보된 인증방식이라고 할 수 있습니다.
어떤 기술을 이해하는데는 스펙을 보는 것이 가장 정확하고 좋기는 하지만 영어권이 아닌 저희로써는 영어문서는 울렁증이나서 오래보는것이 만만치 않고 또 개발하면서 봐야할 때는 더욱 그렇습니다. 저도 스펙은 보지 못하고 그냥 여기저기 찾아서 개발을 했습니다. OAuth는 2007년 12월에 OAuth Core 1.0 파이널 드래프트 스펙이 나왔고 2009년 6월 24일 OAuth Core 1.0 Revision A가 발표되었습니다. Beginner’s Guide to OAuth ? Part I: Overview를 보면 대략적인 내용들이 나와있는데 OAuth에 대해 이해하는데 적당히 요약하겠습니다.
사용자들은 여러가지 서비스를 쓰고 있습니다. 사진은 플리커에 쓰고 동영상은 유투브에 쓰는 등 모든 것을 통합한 사이트가 더 최적화된 기능을 제공하지 못하기 때문에 여러가지 서비스를 나누어서 쓰고 있으며 사용자들은 이들을 함께 써서 더 새로운 것을 쓰고 싶어 합니다. 그렇게 하려면 서로간에 접근을 위해서 사용자간의 개인정보(아이디, 패스워드)를 공유해야하는데 이는 보안에 좋지 않기 때문에 보통은 아이디와 비밀번호로 혼합한 키를 사용하는데 대표적인 것이 OpenID입니다. 하지만 이 키는 공유하기에는 너무 강력하고 제한이 없습니다. 또한 이것은 한번 공유된 것을 취소할 수 없어 유일하게 취소할 수 있는 키변경은 특정사이트만 막지 못하고 전체사이트에 대한 접근을 모두 막아야 합니다. OAuth는 대신 토큰을 공유하고 각 토큰은 특정 리소스와 정의된 기간에 대한 특정사이트로의 접근 권한만을 받습니다.
(쓰고 보니 크게 도움될런지 잘 모르겠군요 ㅡ..ㅡ)
아래 이미지가 OAuth의 인증방식에 대해서 이해하기 좋게 잘 정리되어 있어서 퍼왔습니다.
Service가 인증정보를 가지고 있는 사이트(여기서는 Twitter)이고 User가 Service의 인증정보로 Consumer사이트를 이용하려는 것입니다.
- 사용자가 인증을 하려고 하면 Consumer가 Service에 토큰을 요청하고 Service가 토큰을 생성해서 돌려줍니다.
- 토큰을 받은 Consumer는 User를 서비스의 인증페이지로 요청토큰과 함께 리다이렉트시킵니다.
- User는 Service사이트에서 인증을 하고 Service사이트는 User를 Consumer사이트로 다시 리다이렉트 시킵니다.
- Consumer사이트는 엑세스토큰을 서비스에 요청하여 받으면 OAuth의 인증이 완료됩니다.
- 이후에는 Consumer가 이 토큰을 이용해서 리소스를 Service에 요청하여 받습니다.
트위터 클라이언트 등록하기
OAuth의 방식을 어느정도 이해했으면 이제 클라이언트 구현전에 트위터 어플리케이션 등록페이지에서 어플리케이션 등록을 해주어야 합니다. 어플리케이션 등록은 그냥 웹폼에서 간단하게 등록할 수 있습니다. 나중에 트위터 클라이언트에서 트윗을 작성했을 때 표시되는 클라이언트이름을 이곳에서 지정해 주게 되고 데스크탑 클라이언트인지 웹서비스인지를 선택해서 등록을 하면 Consumer key와 Consumer secret를 발급받을 수 있고 OAuth인증을 할때 사용합니다. 데스크탑 클라이언트는 만들어보지 않았지만 데스크탑클라이언트로 등록하면 PIN번호라는 것을 발급받게 되는 것 같습니다.
글이 길어져서 둘로 나눕니다. 이 포스팅은 Twitter4j로 트위터 사용하기 #2로 이어집니다.
ㅁㄴㅇ
관리자만 볼 수 있는 댓글입니다.
안녕하세요.
어떤 도움을 말씀하시는 건가요? 저도 twitter4j를 만진지가 오래되고 그사이에 API가 많이 바뀌긴 했는데 안되는 부분을 말씀해 주시면 아는 부분은 답변드릴수도 있을듯 합니다.
관리자만 볼 수 있는 댓글입니다.
토큰이랑 시크릿을 아는 페이지라면 인증받고 돌아오기 전의 페이지를 말슴하시는거죠? twitter4j를 만드신다음에는 인증쪽을 진행하시면 되기는 하는데 지금은 twitter4j가 API가 많이 바뀌어서 제가 올린 내용대로 하시면 제대로 진행이 안될겁니다.(새버전으로 다시한번 해서 올릴려고 했는데 좀처럼 시간이 나질 않네요. ㅡㅡ;;)
이클립스에서 라이브러리의 사용자체를 물으시는 거라면 lib등에 넣으시고 import해서 사용하시면 되는데요. 트위터 API사용하는거는 php로 하든 자바로하든 차이는 없습니다. 어차피 트위터에서 제공하는 것을 호출해서 사용하는 것이기 때문에 각 언어의 라이브러리의 특성에 따른 차이만 있을뿐 동작 메커니즘은 거의 동일할 것입니다.
좋은 정보 감사 합니다. ^^
그사이에 twitter4j의 버전이 많이 올라가서 안맞는 부분이 꽤 있습니다. ^^;;