티스토리 뷰

서버와 통신하는 APP 개발. 

Server 구현편


Android, iOS, Windows 8 그외 여타 OS에 포함된 대부분의 응용프로그램들은 서버와의 통신을 필요로 하고 있다. 지금 우리가 쓰고 있는 대다수의 앱들은 서버로부터 Update를 체크하고 DRM 여부를 확인 하여 불법 사용자인지를 확인 하거나 광고를 내려줘 수익성을 창출 한다. 이제 앱 개발에 서버와의 통신은 필수 조건이라 생각하는데 처음 진입에 어려움을 느낄 수 있어 프로젝트를 진행하면서 테스트 용도로 만들어 볼수 있음직한 수준으로 내용을 적어 보려고 한다.




WEB 서버의 자세한 내용은 설명하지 않는다. 다만 우리가 보아오는 WEB Page라는 것은 우리가 요청(Request)하고 그 결과를 서버에서 날려주면(Response) 사용하는 브라우저(Explore, Chrome, Safari, Opera 등)에서는 이를 파싱하여 가시적으로 보여주게 된다. 즉 익히 들었떤 HTML, XHTML과 같은 문서 형식을 서버에서는 클라이언트에게 전달을 해주는 것이다.


그럼 여기서 우리는 APP이라는 형태를 고려해봐야 한다. 웹페이지를 뿌려줄 것인지 아니면 서버로부터 최소 내용만 받아 이를 처리 할 것인지. 대부분의 APP은 후자를 선택하고 있고 웹페이지를 받을 거였으면 단순히 Mobile 페이지를 제작하는게 훨씬 좋을 것이다. 여기서는 이런 후자의 입장에서 서버를 구축하게 될 텐데 HTML이란 내용을 받아도 상관은 없지만 우리는 XML이라는 것을 익히 써오고 있었을 것이다. 그리고 이 녀석의 편리함도. 물론 XML 뿐만 아니라 서버와의 통신에 JSON도 오래전부터 사용되고 있다.


JSON과 XML은 각기 장단점이 있으니 이건 사용자의 선택에 맡기고 이제까지 알아본 개념을 정리를 해보면 다음과 같다.


1. Client -> Server 요청 (URL 요청)

2. Server -> Client 전달 (HTML, XML, JSON 형식)


대충 느낌이 오셨다면! 이제 좀더 실질적으로 가보자.


1. 서버의 구축

오랜만에 진입한 이쪽 세계는 너무 발전을 많이 했다. Apache, Windows Server만 알던 시대에서 Node.js란게 나왔고 그외 여러가지 프로젝트들이 하나둘씩 생기기 시작했다. DBMS역시 오라클, MySQL, MSSQL 뿐만아니라 MongoDB, CUBRID 등의 DBMS가 등장했다. 물론 이 것들은 다 검색해보면 재밋는 내용들이 많으니 한번쯤 보시길 바라며...

웹서버는 알아서 구축을 하면 편하다. APM이 여전히 강세를 보이고 있으며 IIS는 .NET의 위용으로 아직까진 2위 자리를 지키고 있다. 알다시피 LINUX의 장점으로 서버 점유율이 점차 올라가고 있기 때문에 Apache의 성장은 예견된 걸지도 모른다. 다만 Windows Server 기반이라면 IIS를 주축으로 쓰는게 좋다고 한다. 요즘 Winsdows에서도 공식적으로 PHP를 지원하고 있고 MySQL은 Windows installer를 제공해주고 있으니 큰 어려움은 없다.


2. PHP Framework

PHP 개발을 할 때 날코딩이란게 사람을 참 힘들게 한다. 그렇다고 이미 만들어진 플랫폼을 가져다 쓰자니 이걸 언제 또 분석을 해서 내 입맛대로 고치겠느냐! 플랫폼의 무게 만큼 서비스도 그만큼 무거워지는데! 이런 생각은 많은 사람들의 공감을 얻을 수 있을 듯 하다. 이렇듯 우리는 프레임워크를 선택해야 하는 시점에 와버렸다. 혼자서 개발 하다간 정신 데미지가 너무 크다. 공부할 것도 많고 하루가 다르게 변하는 이 곳에서 좋은 프레임워크를 하나 잡고 이걸 파는게 좋을 것이다. 사실 이 포스팅에 중점은 이 Framework에 있다. 그 전에 OpenAPI에 대한 내용을 소개하겠다.


2-1) Open API

SNS의 발달로 OpenAPI는 폭발적으로 늘어나고 있다. 그동안은 구글에서 제공해주던 API외에는 찾아보기 힘들었는데 트위터 사용자들이 늘어나고 페이스북과 같은 SNS가 인기를 끌면서 우리나라에서도 점차 API를 활용해 국가의 표준 정보를 제공하기에 이르렀다. 그럼 이 OpenAPI란게 무엇이냐? 


OpenAPI란. 어렵게 생각하지 말고 북마크를 생각해보자. 들어가고 싶은 곳 어디든 북마크만 해놓으면 우리는 해당 싸이트에 접속이 가능하다. 이런 것처럼 OpenAPI란 것은 자사 싸이트의 특정 내용을 요청을 통해 결과를 바로 나타내줄수 있는 형태를 뜻한다. PC 응용프로그램의 API와는 사뭇 다르다고 생각할 수 있지만 웹 프로그래밍의 입장에서 보면 보안을 위해 닫아놨던 대다수의 내용들을 Open시켜놓은 것이다.


어려운 이야기는 그만 하고 왜 OpenAPI를 꺼냈는지 눈치를 챈 분들도 있을 것이다.

페이스북의 OpenAPI를 살펴보면 이해가 빠를 것이다. (URL을 통한 요청 -> JSON, XML형태의 결과 전달)


자 이제 우리는 이러한 형태로 웹 프로그램을 만들면 되겠다.


2-2) RESTful

이 개념은 이 링크를 따라 가면 잘 볼수 있다.

(개념 설명 : http://blog.naver.com/asjgi?Redirect=Log&logNo=70140021951 )

개념을 봤다면 OpenAPI를 활용하여 어떻게 처리를 할것인가가 점점 느낌이 온다. 자! 이제 우린 짤 수가 있다. 그럼 프레임워크로 넘어가보자.


2-3) SLIM Framework ( http://www.slimframework.com/ )

프레임워크에 대한 이야기를 위에 썼듯이 단순 APP과의 통신이 목적이라면 커다란 프레임워크는 오히려 무겁기만 하다. 그렇다고 나쁘다는 건 아니다. 단지 그만큼 이해가 오래 걸린다는 것이다. 지금 소개할 프레임워크는 MIT 라이센스를 가지고 있는 가벼운 프레임워크다. 정말 너무나도 심플한 프레임워크로 RESTful 방식을 지원한다.


GET, POST, DELETE, PUT에 관한 메소드의 처리를 각각 할 수 있어 순식간에 요청에 대한 처리를 만들 수 있다.

HTTP 헤더나 Response의 조작도 간편하다. 


그러면 우리는 이것을 이용해 간단한 프로그램을 짜보겠다.


<?php
$app = new \Slim\Slim();
$app->get('/hello/:name', function ($name) {
    echo "Hello, $name";
});
$app->run();

이 내용은 슬림 프레임워크의 홈페이지 첫 메인에 올라와있는 샘플 예제다.

슬림을 설치한 웹페이지에 접속을 하기만 하면 우리는 "Hello, $name"을 볼수 있다.


[확인 절차]

1. 브라우저를 열고 http://로컬서버/hello/[원하는 내용을 입력] GO!

2. 브라우저에 Hello, [입력한 내용] 이 출력된다.


그러면 이것을 잠깐 고쳐보자.


<?php
$app = new \Slim\Slim();
$app->get('/hello/:name', function ($name) {
    echo "<?xml version=\"1.0\" encoding=\"utf-8\"><root><test>1234</test></root>";
});
$app->run();

이렇게 하고 다시 테스트를 해보면 다음의 결과가 나온다.


1234

오잉?! 이라고 놀라셨다면 오른쪽 커서를 눌러 소스 보기를 해보자. 그러면 다음과 같은 xml 형식의 내용을 볼수 있다.


<?xml version="1.0" encoding="utf-8"?> 
<root>
  <test>1234</test>
</root>

끝이다. 간단하지 않은가? 우리는 방금 서버를 완성 시켰다.

APP단에서는 HTTP 클래스를 이용해 서버에 get 메소드로 URL을 연결하면 Response Body에 XML 데이터가 받아진다. APP에서는 받은 XML 데이터를 파싱하여 데이터를 처리한다.


모두 시도해보시오.






'www > WEB' 카테고리의 다른 글

OAuth 2.0 은 쉽지 않았다.  (2) 2012.12.18
OpenAPI의 설계  (0) 2012.11.23
[서버와 통신하는 APP 개발] Server 구현편  (0) 2012.11.22
[PHP] Slim Framework with TWIG  (0) 2012.09.11
PHP Pear 설치  (0) 2012.08.28
500 내부 서버 오류  (0) 2012.08.27
댓글
댓글쓰기 폼