모바일 브라우저 감지 스크립트 | Detect Mobile Browsers 2011-09-15 16:58:19에 작성. 44,836번 읽힘.

홈페이지에서 아이폰 모바일, 안드로이드 브라우저, 돌핀 브라우저 등에서 접근하는 모바일 사용자들을 위해 모바일 전용 홈페이지를 만들었다고 가정하자. 이들을 어떻게 그 페이지로 안내할 것인가? 직접 모바일 페이지 주소를 대문에 떡하니 걸어놀 것인가, 혹은 자동으로 이동시켜 줄 것인가? 대부분은 후자를 선택할 것이고 그게 더 사용자 입장에서 좋을 것이다.

예전에는 간단하게 iPhone 과 Android 만 유저 에이전트에서 감지하여 이동시켜주곤 했다. 하지만 지금은 수없이 많은 모바일 브라우저가 있다. 그 모두 일일이 내가 찾아서 추가해 줄 수는 없는 노릇이다. Detect Mobile Browsers – Open source mobile phone detection은 현존하는 거의 모든 모바일 브라우저를 감지할 수 있는 함수를 제공해준다. 이 함수는 계속적으로 업데이트 해주며 Apache(rewrite), ASP, ASP.NET, ColdFusion, C#, IIS, JSP, JavaScript, jQuery, nginx, node.js, PHP, Perl, Python, Rails 까지 상당히 많은 웹언어를 지원해주고 있다.

사용 방법

Detect Mobile Browsers – Open source mobile phone detection에 접속하여 원하는 언어를 클릭하여 스크립트를 다운받는다. 그리고 파일을 열어보면 http://detectmobilebrowser.com/mobile가 있는데 이 부분을 자신만의 모바일 페이지 주소로 변경한다.

이 포스트와 비슷한 포스트들

mysql 에서 MyISAM 방식과 InnoDB 방식의 차이 2011-09-13 16:46:48에 작성. 28,219번 읽힘.

얼마전까지만 해도 MyISAM 과 InnoDB 방식에 대해서 약간 잘못 알고 있었다. 내가 알고 있던 것은 아래와 같다.

잘못 알고 있던 사실

  • 데이터베이스 자체에 InnoDB와 MyISAM이라는 엔진을 지정할 수 있음.

MyISAM

  • InnoDB에 비해 속도가 빠름.
  • count(*)의 쿼리 속도가 빠름.
  • 간단한 디비를 구축하기에 쉽고 속도도 빠름.

InnoDB

  • MyISAM에 비해 속도가 느리고 디비 용량을 더 많이 차지함.
  • 자원을 많이 먹지만 그만큼 안정적인 트랜잭션을 지원함.
  • 트랜잭션을 지원함으로써 많은 안정적인 기능을 지원. (commit, rollback 등)
  • 프로시져, 함수 지원.
  • 트리거 지원. 외래키(Relations)를 지정 가능.

하지만 이번에 면접을 보면서 내가 알고 있는 사실들을 다른사람에게 설명하는 도중 새로운 사실을 알게 되었다. MyISAM 에서 프로시져와 함수가 지원 된다는 것이다. 내 기억상에선 데이터베이스 자체에도 DB엔진을 적용 할 수 있다고 알고 있었고, DB엔진이 InnoDB이여야만 프로시져와 함수가 지원되는 줄 알고 있었다. 그런데 그게 아니었다.

mysql 에서 MyISAM 과 InnoDB 라는 엔진을 적용 할 수 있는 부분은 테이블이다. 즉, 데이터베이스에는 DB엔진을 선택 할 수 없고, 테이블에만 선택 가능하다는 것이다. 여기서 생각해볼 것으로 트리거, 함수, 프로시져, 외래키 지정을 꼽을 수 있는데 이중에서 프로시져와 함수는 어느 한 테이블에 종속된 루틴이 아니다. 나머지 외래키, 트리거는 어느 여러개의 테이블에 종속되어 작동하는 루틴이다. (일부는 루틴이 아니지만 편의상 루틴이라고 통칭함.)

먼저 테이블에 종속되지 않은 루틴의 경우에는 테이블이 한개도 만들어져있지 않아도 생성이 가능한 루틴임을 의미한다. DB엔진은 테이블에만 적용 할 수 있으므로, 테이블이 하나도 만들어져 있지 않다면 아직 아무런 DB엔진을 선택하지 않은 것이 된다. 그럼, 아무런 DB엔진을 선택하지 않은 상태에서 프로시져나 함수를 만들수 있다는 말이다. 결론적으로 이들은 DB엔진이 MyISAM이던 InnoDB이던 아무런 관계가 없이 쓸 수 있다는 말이다.

다음으로 테이블에 종속된 루틴은 트리거와 외래키가 있는데 이들은 테이블이 있어야 작동하며, MyISAM에서는 이들을 적용 할 수 없다. InnoDB의 테이블에서만 적용이 가능하다.

제대로된 사실

  • DB엔진은 테이블에만 지정 할 수 있음.

MyISAM

  • InnoDB에 비해 속도가 빠름.
  • count(*)의 쿼리 속도가 빠름.
  • 간단한 디비를 구축하기에 쉽고 속도도 빠름.
  • 프로시져, 함수 지원.

InnoDB

  • MyISAM에 비해 속도가 느리고 디비 용량을 더 많이 차지함.
  • 자원을 많이 먹지만 그만큼 안정적인 트랜잭션을 지원함.
  • 트랜잭션을 지원함으로써 많은 안정적인 기능을 지원. (commit, rollback 등)
  • 프로시져, 함수 지원.
  • 트리거 지원. 외래키(Relations)를 지정 가능.

그렇게 딱히 영양가 있는 정보는 아니지만 알면 좋은 정보이고, 어쨌거나 나중에 더 다양한 것을 하기에는 꼭 알아야 되는 정보들이다.