BacGyber's Tricks

[PHP,JS] 모바일 기기 여부 판단하여 모바일용 웹페이지로 이동시키기 (주소 동적처리)

□ Tech (Software)

현재는 데스크탑용 일반 웹페이지만 있는 php 웹사이트가 있습니다.

추가로 모바일 웹페이지를 고려중인 상황인데요.


관련하여 미리 Test성 개발을 진행해보았습니다.


진행 순서

1. 테스트할 출발 페이지 B를 만든다 (기존 소스 A를 카피함)

2. 모바일 페이지 C를 더미로 만든다 (구분할수 있도록 기존 소스 B 카피해서 title 만 바꾸어둠)


   * 해당 서비스를 제가 하고 있는건 아니고 지인분(개발자 아님)이 운영하고 있는건데요.  

개발 관련 내용을 물어봐서 바로 답을 얻기는 어려운 상황입니다.

현재 사용하는 서브도메인 ( www.abc.com ) 을 모바일웹에서 ( m.abc.com)  으로 이용할수는 있을텐데... 

어떤 상황인지 정확히 알지 못하고, 이 테스트를 위해 그 설정이 될때까지 기다릴수는 없어서

일단 테스트는 기존 www 서브도메인이 연결된 소스 루트에 m 폴더를 만들어서 그 아래에 페이지 C 를 두었습니다.


개발코드 - PHP / JAVASCRIPT

PHP 및 JAVASCRIP 둘 다 진행해보았습니다.


아주 잘 정리된 블로그가 있어서 참고했습니다. ( 감사합니다. http://kiss7.tistory.com/316 )


제가 +@ 한 내용은 (제 글 제목에 표현되기도 했는데)

주소 동적 처리 입니다.


즉... 

핸드폰에서 브라우저로

www.abc.com/actor/woman.php/best/leeyeonhee?year=2017&broadcastType=cable

로 접속했을경우

m.abc.com/actor/woman.php/best/leeyeonhee?year=2017&broadcastType=cable

로 돌려주는 식입니다.


요청한 url 을 활용해 일부만 변환해서 다른 주소로 가도록 하는 것이죠.


그런데 아래 실제 코드는 m.abc.com 식으로 한 건 아니고... 앞서 서브도메인 관련 언급한 대로... m 이란 디렉토리 만든 상황대로 했습니다.


즉...

www.abc.com/m/girl.php/best/leeyeonhee?year=2017&broadcastType=cable

이런 페이지로 이동되는거죠.

참고로 예로 든 페이지 uri 는 좀 이상하죠? ㅎㅎ REST 형식과 get parameter 를 다 커버함을 알 수 있도록... uri 예를 든겁니다.


그럼 설명은 잠시 뒤로 미루고 소스 먼저^^

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<? session_start(); ?>
 
<?
    // 모바일 브라우저의 경우 모바일 전용 페이지로 이동
    // reference : http://kiss7.tistory.com/316
    $mobileKeyWords = array ('iPhone''iPod''BlackBerry''Android''Windows CE''Windows CE;''LG''MOT''SAMSUNG''SonyEricsson''Mobile''Symbian''Opera Mobi''Opera Mini''IEmobile');
 
    $isMobile = 0;
 
    for($i = 0 ; $i < count($mobileKeyWords) ; $i++)
    {
        if(strpos($_SERVER['HTTP_USER_AGENT'],$mobileKeyWords[$i]) == true)
        {
            $isMobile = 1;
            break;
        }
    }
 
    if$isMobile == 1 )
    {
        $mbU = "/m" . $_SERVER['REQUEST_URI'];
        echo("<script>location.href = '".$mbU."';</script>");
    }
?>
 
<script type="text/javascript" language="JavaScript">
 
    var mbU = "<?=$mbU?>";
 
    var mobileKeyWords = new Array('iPhone''iPod''BlackBerry''Android''Windows CE''Windows CE;''LG''MOT''SAMSUNG''SonyEricsson''Mobile''Symbian''Opera Mobi''Opera Mini''IEmobile');
    for (var word in mobileKeyWords)
    {
        if (navigator.userAgent.match(mobileKeyWords[word]) != null)
        {
            window.location.href = mbU;
            break;
        }
    }
 
</script>
 
cs


* 가독성을 위해 자바스크립트로 이동시키는 부분 28 ~ 38 라인은 주석처리 되어 있던걸 해제 하였습니다. 

  자바스크립트 이동시키는 기능을 쓰려면 위에 php 부분에서 일부분을 주석처리하면 됩니다.


* PHP 부분에서 페이지 이동은 javascript 기능을 이용하였습니다.

원래 Sample 대로  

header("Location: http://이동할주소");

exit;

을 이용하면 잘 될수도 있을텐데 저는 약간 변형해서 for 문 바깥에서 이동시키도록 구현해보았었는데요.


그 상황에서 이런 오류가 발생하더군요  "Warning: Cannot modify header information"

그런데... 제가 아래 코드에는 빼두었지만 원래 인클루드하는  소스들이 있습니다.

즉 제가 변형해서 쓰는 것이 이유가 아니라 인클루드한 페이지와 관련이 있을거 같기도 한데 그 내용은 검토해보지 않았습니다. 


그래서 최종 이동기능을 php 에서 담당하지 않고, javascript 가 담당하도록 처리하였습니다.

echo("<script>location.href = '".$mbU."';</script>");


* 동적 처리를 위해 사용한 코드가 $_SERVER['REQUEST_URI'] 입니다.


도메인과 파라미터 부분도 필요하실수 있을텐데요. url 각 부분을 잡아내는 것은 아래와 같이 받아내서 필요한 부분을 사용하시면 될 거 같습니다.


$svHost = $_SERVER['HTTP_HOST'];

$svRqUri = $_SERVER['REQUEST_URI'];

$svQueryStr = $_SERVER['QUERY_STRING'];



저처럼 php에 경험이 많지 않은분들에게는 도움이 될 거 같아서 기초적인 내용이긴 하지만 공유해봅니다


목업 / 프로토타이핑 - 웹사이트 / 프로그램 비교

□ Tech (Software)

wireframe, mockup, prototype 의 용어가 혼재해서 쓰이는거 같습니다.


먼저 용어 정리를 좀 해보자면...


용어정리 - 목업? 와이어프레임? 프로토타이핑?


Sketch - Wireframe - Mockup - Prototype 의 흐름으로 보면 좋을거 같습니다.

하지만 꼭 위의 흐름으로 갈 필요는 없겠죠.


그럼 하나씩 볼까요?


Sketch : 대강의 밑그림

Wireframe : 화면 Flow, 네비게이션, 정보 설계도 좀 된 느낌

Mockup : 실제 느낌의 디자인 (즉 가능하다면 색감까지, 사이즈까지)

   헝거게임 Mockingjay 할때 Mock 입니다.

   * 모방, 모사 할때의 모와... 뭔가 맞닿은 듯한 느낌도 들죠. 먼 과거의 어근이 같았을지도 모르죠.

Prototype : 실제 동작시에 어떻게 된다는 느낌까지 받을수 있도록 구현


그런데 예전에 앱 개발하는거 보면 말은 Mockup 이라고 하는데.... Sketch 수준에서 머문 경우도 많더군요.

아무튼 용어로 꼬투리 잡을 필요는 없을거 같구요... 당시엔 그냥 무조건 용어를 목업이라고 하던데

요새 분위기는 좀 구체적으로 하지 않을까 추측이 되네요. 요새도 그대로이려나? ^^;;


Mock 관련 서비스 / 프로그램 비교


예전 경험으로 제 주변에서 제일 많이 쓰는건 절대적으로... 발사믹 이었습니다.


발사믹


제가 직접 발사믹을 써서 뭘 만들어본일은 없습니다. 결과물을 본 기억으로... 프로토타입 기능은 없거나 약했던 거 같네요.

손 글씨 느낌은... 사용자에 따라 좋다고 느낄수도 있고, 오히려 좋지 않다고 느낄수도 있을거 같습니다.



Mockup Plus


https://www.mockplus.com/


구글링해보면 이 툴에 대한 호평도 많이 보이네요

기능 검토를 해보려면 사이트가서 보는거보다는 유투브에서 영상 찾아보시는게 가장 빠르게 캐치하는 방법입니다.



Axure RP


이건 검토를 위해 직접 살짝 만져봤습니다. 그리고 기획자에게 사용하도록 시켰죠 ㅎㅎ

적당히 쓰는데 학습시간이 많이 걸리지 않습니다. 하지만 상대적으로 난이도가 높아서 그런지 어렵다는 얘기가 많더군요. 하지만 그리 어렵지 않으니 사용 목적이 있다면 익혀서 쓰면 됩니다.


이 제품의 강점은 Wireframe 과 Prototype 부분입니다.

버튼 링크를 통해 화면간 Flow 정의가 가능합니다. 그리고 그 결과물을 Export 해서 브라우저상에서 프로토타입으로 보여줄수가 있습니다.


대한민국 대부분의 외부고객 내부고객들이 PPT로 작업한 화면설계를 다 보여줘도 나중에 딴 소리하는 경우가 많습니다.


프로젝트 진행땐 관심이 없고 나중에 오픈할때쯤 체감되는 시점이 되면 신경쓰는것이죠.

각자 본인이 하는일도 계획성 없이 하다가 마지막에 닥치면 그때서야 뒤늦게 이거저거 챙기는 경우도 많고....

그만큼 업무부하가 많아서 그런거 같기도 한데요... 아무튼 바람직하지 않은 안타까운 현실입니다.


Axure를 사용하면 브라우저상에서 프로토타이핑이 되므로 실제 결과물에 가까운 느낌을 주어 

기획 - 개발 당사자 입장에서도 그리고 고객 입장에서도 체감도가 높아서 UX 설계를 설계단계에서 거의 확정하는데에 도움이 됩니다.


또한 익숙해지면 PPT 에 비해 시간이 더 많이 걸릴것도 없구요. 일부 관점에서는 훨씬 더 빨리 할수 있는 부분도 있죠.



Oven - http://ovenapp.io


카카오에서 만든거로 압니다.

직접 살짝 써봤는데... 


v


사용법은 쉽습니다만 아직 완성도가 애매하고 아쉬운점이 있습니다.



프로토나우 - http://protonow.navercorp.com


Axure 를 많이 참고했는데 아직 기능은 기본적인것만 갖춘 수준인거 같네요.

무료라는 장점이 있으니... 담에 필요할때 한 번 설치해봐야겠습니다.


쉿~ 뒷담화

카카오나 네이버나... 네이밍이 그닥 맘에 들진 않네요

특히 프로토나우... 나름 프로토타입 기능을 강조해 그렇게 만든거 같긴 한데... 꼭 뭐 사행성 복권 이름 갖지 않나요?

저 같음 그냥 참본 (CharmBon) 정도로 할거 같습니다.

* 우리말 "참" 과 "Charm"도 닮아있죠?^^


조만간 목업 툴이 필요할수 있어서 이번엔 살짝만 검토해봤고... 그 내용을 정리해보았습니다.