Full Stack Web Developer.
Syaku (샤쿠)

Java, JS (ES6+), Spring, Spring security, jQuery, Reactjs, Bootstrap.

        

07-12 09:23


Spring Boot 2 보기 Front-end 보기 DevOps 보기 Spring 3 보기 Spring Security 3 보기

오픈API 시작하며 #1 OpenAPI , JSON , XML , HTTP , OAuth

written by Seok Kyun. Choi. 최석균

"오픈 API에 필요한 준비사항"

 

[필독]
제가 직접 개발한 다중 소셜 API 입니다. 4대 소셜 (미투데이,요즘,트위터,페이스북) 을 다중으로 인증하고 글을 제어할 수 있는 댓글 시스템을 제공합니다. 개발된 소스를 여러분과 공유하기 위해 공개하는 것이며, 이해를 돕기위해 짧게 설명도 포함하였습니다. 참고하시는 데 어려움이 있으시겠지만 조금이라도 도움이 되셨으면 합니다. 나중에 실제 사용할 수 있는 소스를 정리하여 공개하도록 하겠습니다. 본 시스템이 구현된 사이트는 봉안닷컴이라는 곳입니다. http://www.bongan.com/dispDocumentList.me?mid=commty_funny

1) 연결되는 포스팅입니다. 꼭 이전 포스팅을 참고하세요.
2) OAuth 와 SNS API 대해 기본적인 지식이 필요합니다.
3) 포함된 소스는 참고용이며, 그대로 사용할 경우 오류가 발생합니다. 직접 필요한 부분을 개발하세요.
- 직접 개발해야 할 부분은 임의적으로 주석처리 하였습니다.
4) 시간이 없어 급정리해서 올리는 글입니다. 부족한 부분이 많습니다. 이점 참고하세요.
5) 원문 그대로 사용하는 것을 방지하기 위해 소스파일은 제공하기 않습니다. 꼭 소스를 분석후 직접 개발하세요.
 

Open API 는 open application programming interface, 운영체제와 응용프로그램 사이의 통신에 사용되는 언어나 메시지 형식을 말한다.
[출처 네이버 백과사전]

특정 서비스에서 일부 기능만 제공하는 API를 이용하여 개인(개발자)에게 특화된 프로그램을 개발하기 위해 사용된다.
국내에는 네이버와 다음에서 제공하고 있다. 예를들어 네이버의 검색결과를 데이터만 받아서 개발자 임의적으로 사용할 수 있다.
그외에도 다양한 오픈 API가 서비스되고 있다.

외국에서는 페이스북, 트위터, 구글 등 Open API 제공하고 있다.

Open API를 사용하기 위해 기본적으로 알아야 할 기술들을 하나씩 알아보자.


 1. HTTP 프로토콜

클라이언트와 서비간의 통신을 HTTP 프로토콜로 이용한다.
아파치의 HTTP COMPONENTS (http://hc.apache.org/) 라이브러를 사용하면 쉽게 구현할 수 있다.
좀 더 쉽게 설명하면 브라우저 url 입력창에 http://~~~~ 를 입력하고 결과를 화면에서 보는 것처럼
HTTP 에서 자료를 주고받는 것을 말한다.

[예제]
HttpGet http_get = new HttpGet(uri); // GET 뿐만아니라 다양한 메서드를 지원한다.
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = httpclient.execute("http://naver.com"); // URL 과 파라메터를 입력하여 전송한다.

HttpEntity entity = response.getEntity(); // 결과를 얻는 다.
String result = EntityUtils.toString(entity); // 결과를 문자열로 얻는 다.


 2. 자료


Open API 의 통신 과정에서 서로 주고받는 자료에 대해 알아보자.
클라이언트가 서버로 전송할때는 파라메터값을 전달한다. 그리고 서버에서 클라이언트로 전달되는 방식은 다양하지만,
대체적으로 xml과 json 을 사용한다. 받은 자료를 사용하기 위한 자바 라이브러리 아래와 같다.

XML 은 JDOM(http://jdom.org/) 라이브러를 사용하였고,
JSON 은 JSON-LIB (http://json-lib.sourceforge.net/) 라이브러리를 사용했다.


 3. 인증


개발자(클라이언트)가 서버에 접근하기 전에 인증절차를 거쳐야 한다.
무작위로 서비를 오픈하면 관리가 어려워질 수 있기 때문이다.
그래서 서버에서 요구하는 인증방식을 거친 후 해당 서비스를 이용할 수 있게 된다.
하지만 서비스마다 인증 방식이 각기 틀리다보니 표준화된 인증방식이 필요하게 되었고,
그래서 고안해낸것이 OAuth 인증방식이다. 아직 대대적으로 사용하고 있진 않지만 점점 범위를 넓혀가고 있다.
OAuth 인증방식은 대부분 비슷하지만 조금 다른 서비스도 있는 것만 알고있자.

1. 사용자(클라이언트)가 서비스(서버)에 접근하여 임시토큰을 받는 다.
2. 사용자(클라이언트)가 임시토큰을 서비스(서버)에 보내면 인증토큰을 받는 다.
3. 인증토큰을 사용자(클라이언트)가 서비스(서버)에 전달하여 서비스 접근 유무를 거친 후 허용받게 된다.


이렇게 3단계를 거치게 된다. 추후 인증받은 인증토큰을 가지고 있으면 위 3단계과정없이 바로 인증받을 수 있다.

OAuth 인증방식을 사용할 경우 http://code.google.com/p/oauth-signpost/ 라이브러리를 사용하면 되고,
그 외 인증방식인 경우 HTTP COMPONENTS 이용하여 토큰을 주고받으면서 인증처리하면 된다.

만약 인증방식이 없는 경우 인증키를 발급하여 파라메터값을 전송할때 함께 전송하는 방식을 사용한다.

OAuth 2.0 인증방식 다음 요즘, 트위터
OAuth 인증방식 (위 방식과 조금 달라서) 페이스북
자체인증방식 네이버 미투데이
자체 인증키 발급 (파라메터로 인증키 전송) 네이버 OPEN API , 다음 OPEN API , 구글 지도


 소셜네트워크 인증정보 저장 방식


포스팅에서 SNS 프로그램의 저장소는 쿠키와 세션 그리고 디비를 이용한다. 아래의 내용을 꼭 습득하자.
소셜네트워크 인증 후 토큰을 모두 기억해 놓고 다음에 인증 및 로그인과정 없이 바로 사용할 수 있다.

그래서 고유의 계정은 쿠키에 저장한다. 계정이 없다면 임의의 값을 생성하여 쿠키에 저장한다.
쿠키 시간은 한달이나 그 이상으로 설정하고, 재접속할때마다 쿠키 시간을 갱신하여 쿠키가 연장될 수 있게 한다.
그리고 계정을 기준으로 다양한 SNS 정보를 세션과 디비에 저장한다.
세션이 끊어지면 쿠키 계정을 이용하여 디비에서 SNS정보를 조회하여 세션을 생성하면 된다.

[정리] 한 계정에는 다양한 SNS(트위터,페이스북,요즘,미투데이) 를 사용하고, 재인증과정 없이 바로 사용할 수 있게 하는 것이 목적이다.

 

 

[연결된 포스팅]

2012/04/09 - [개발노트/JAVA] - 소셜네트워크 트위터 API 개발 #2 Open API , Twitter API , SNS

2012/06/05 - [개발노트/JAVA] - 소셜네트워크 다음 요즘 API 개발 #3 Open API , Daum YOZM API , SNS

2012/06/05 - [개발노트/JAVA] - 소셜네트워크 페이스북 API 개발 #4 Open API , facebook API , SNS

2012/06/05 - [개발노트/JAVA] - 소셜네트워크 네이버 미투데이 API 개발 #5 Open API , Naver Me2day API , SNS



http://syaku.tistory.com

  • cic at 2012.07.31 11:27

    저도 sns 로그인 기능을 구현하고 싶은데 자바에서만 가능한가요??
    php나 asp에서는 불가능한가요???

    • 샤쿠 syaku at 2012.07.31 11:49 신고

      ASP는 잘 모르겠지만 PHP 는 모두 구현이 가능할거에요~
      프로그램 내에서 이루어지는 기술들이 아니라 데이터를 주고 받으면서 인증받는 방식이라 가능하죠~

  • sns at 2013.11.04 15:07

    twitter로 구현중인데요. 도중에 pin code라고 입력하고 창이 나오는데, 이건 필수적으로 입력해야 되는 부분인가요?

    • 샤쿠 syaku at 2013.11.07 11:20 신고

      오랜만에 봐서...
      어떤 부분에서 핀코드 입력이 나오는 지... (아마 인증경로를 잘 못 연결한 게 아닌가 싶습니다... 저도 핀코드를 보긴했는 데... 기억이 가물가물;;;)
      인증받을 때는 계정과 암호만 입력받고 액세스 토큰을 리턴 받습니다.

댓글 남기기
◀ PREV 1···789101112131415···25 NEXT ▶