일본 휴대폰 환경의 특수성
일본의 휴대폰은 다음과 같은 고유한 특징을 가집니다.
-
이모지: 도코모, au, 소프트뱅크 등 통신사별로 이모지의 코드 포인트와 인코딩 방식이 달라 상호 변환이 필수적입니다.
-
HTML 인코딩: 통신사별로 Shift_JIS 또는 UTF-8을 사용하며, 폼 데이터 전송 시 특정 캐리어는 바이트 코드 시프트 등의 복잡한 처리가 필요합니다.
-
세션 관리: 약 36%의 피처폰이 쿠키를 지원하지 않아 세션 ID를 URL 파라미터나 폼 데이터에 수동으로 추가해야 합니다.
-
뷰 전환: PC와 모바일, 다양한 통신사별로 다른 뷰를 효율적으로 전환하여 보여줄 필요가 있습니다.
-
링크 헬퍼: GPS 정보 획득 시 통신사별로 다른 URL 형식을 사용하므로 이를 자동화할 필요가 있습니다.
JP Mobile의 주요 기능
JP Mobile은 이러한 문제들을 해결하기 위해 다음과 같은 기능을 제공합니다.
-
문자 코드 및 이모지 상호 변환: Shift_JIS와 UTF-8 간의 문자 코드 변환 및 통신사별 이모지 코드 상호 변환을 자동 처리합니다.
-
세션 관리: 쿠키를 지원하지 않는 기기를 위해 세션 ID를 URL 파라미터에 자동으로 추가하는 기능을 제공합니다.
-
뷰 전환: 하나의 액션에서 다양한 기기(PC, 도코모, au, 소프트뱅크, 스마트폰 등)에 맞는 뷰를 자동으로 찾아 렌더링합니다.
-
링크 헬퍼: GPS 정보 획득 링크 등 통신사별 특수 링크 형식을 쉽게 생성할 수 있도록 지원합니다.
JP Mobile 3.0의 주요 개선 사항
JP Mobile 3.0은 Rails 3.0 및 Ruby 1.9.2 환경에 맞춰 다음과 같은 아키텍처 개선을 이루었습니다.
-
Rack 미들웨어 통합: 일부 핵심 기능(모바일 캐리어 판별, 입력/출력 변환)을 Rack 미들웨어로 분리하여 Rails 프레임워크 이전 단계에서 처리함으로써 다른 Rack 애플리케이션에서도 JP Mobile 기능을 활용할 수 있도록 했습니다.
-
스마트폰 클래스 도입: iPhone, Android, Windows Mobile 등 스마트폰을 위한 별도의 클래스를 추가하여 피처폰과 스마트폰의 뷰 및 기능을 명확히 구분하고, 스마트폰의 쿠키 지원 여부, IP 및 단말 ID 처리 방식 등을 정의했습니다.
-
모바일 클래스로 기능 이전: 입력(
to_internal) 및 출력(to_external) 변환과 같은 핵심 기능을Mobile클래스로 옮겨 개발자가 필요에 따라 오버라이딩하여 커스터마이징하기 용이하도록 구조를 개선했습니다. -
Ruby 1.9.2 완벽 지원: Ruby 1.9.2 환경에서 모든 기능이 테스트되고 동작이 확인되어 최신 Ruby 버전과의 호환성을 보장합니다.
Rails 내부 구조 분석을 통한 개발
JP Mobile과 같은 플러그인을 개발하는 과정은 Rails 프레임워크의 내부 동작을 깊이 이해하는 것을 요구합니다. 특히 뷰 전환 기능 구현 시 `ActionView::PathSet