데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      에이닷 및 D9을 위한 웹뷰 인터페이스 소개

      gonzalo 25.06.18
      819 3 1
      DEVOTEE 요약
      웹뷰 인터페이스(JavaScript Bridge)는 네이티브 앱(Android, iOS)과 웹 콘텐츠가 상호 소통하도록 돕는 기술로, 스마트폰의 고유 기능을 웹에서 자연스럽게 활용하고 개발 효율성을 높이는 데 필수적입니다. 이를 통해 카메라, GPS, 공유 기능 등을 사용할 수 있고, 사용자 경험을 부드럽게 제공하며, 보안성을 강화하고 기존 웹 콘텐츠를 재활용할 수 있습니다. 명확한 함수 설계와 표준화된 데이터 교환을 통해 인터페이스를 효과적으로 활용하면, 하이브리드 앱 개발과 유지보수에서 큰 이점을 얻을 수 있습니다.

      에이닷 및 D9을 위한 웹뷰 인터페이스 소개

      1. 웹뷰 인터페이스 (JavaScript Bridge)란 무엇일까요? 🤔


      개념
      • 네이티브 앱(Android, iOS)과 웹뷰(WebView)에 로드된 웹 콘텐츠(HTML, JavaScript)가 서로 소통할 수 있도록 연결하는 다리 역할의 기술입니다.


      동작 원리


      • App → Web

        • 네이티브 코드에서 JavaScript 코드를 직접 실행하여 웹 콘텐츠를 제어합니다.

      • Web → App

        • Web의 JavaScript에서 특정 인터페이스(함수)를 호출하면, 네이티브 앱에 약속된 기능이 실행됩니다.

          (예: window.android.showToast("메시지"))


      2. 왜 웹뷰 인터페이스가 필요할까요? 🚀

      • 네이티브 기능 활용

        • 웹에서는 직접 접근할 수 없는 스마트폰의 고유 기능(카메라, GPS, 진동, 푸시 알림 등)을 사용해야 할 때 필요합니다.

      • 사용자 경험(UX) 향상

        • 웹뷰 내에서 화면 전환, 정보 요청 등을 네이티브 앱처럼 부드럽고 빠르게 처리하여 이질감을 줄여줍니다.

      • 보안 및 데이터 관리

        • 중요한 사용자 정보나 앱의 핵심 데이터를 웹이 아닌 네이티브 영역에서 안전하게 처리하고 관리할 수 있습니다.

      • 기존 웹 콘텐츠 재활용

        • 이미 만들어진 웹 서비스를 앱의 일부 기능으로 통합하여 개발 효율성을 높일 수 있습니다.


      3. 효율적인 웹뷰 인터페이스 설계 및 사용 가이드 ✍️

      • 일관성 있는 인터페이스 명명 규칙

        • 목적 기반

          • 함수의 역할을 명확하게 알 수 있도록 이름을 정합니다. (예: getUserInfo, openCamera, closeWebView)

        • 플랫폼 통일

          • 안드로이드와 iOS에서 동일한 기능은 동일한 이름의 인터페이스를 사용하여 웹 개발의 편의성을 높입니다.

      • 데이터 교환 형식 표준화

        • JSON 형식 사용

          • 복잡한 데이터를 주고받을 때는 JSON 형식을 사용하여 구조화하고 파싱하기 용이하게 만듭니다.

        • 콜백 함수 활용

          • 네이티브 기능 처리 후 결과를 웹으로 전달해야 할 경우, 콜백(Callback) 함수를 파라미터로 받아 비동기 처리를 명확하게 합니다.

      • 보안 고려사항

        • 출처(Origin) 확인

          • 신뢰할 수 있는 도메인의 웹 페이지만 인터페이스를 호출할 수 있도록 제한합니다.

        • 데이터 검증

          • 웹에서 전달받은 데이터는 항상 네이티브단에서 유효성을 검증한 후 사용합니다.

      • 성능 최적화

        • 불필요한 호출 최소화

          • 빈번하고 반복적인 호출보다는 여러 데이터를 한 번에 묶어 요청하는 것이 효율적입니다.

        • 비동기 처리

          • 시간이 오래 걸리는 작업은 비동기적으로 처리하여 웹뷰의 렌더링을 방해하지 않도록 합니다.


      4. 주요 웹뷰 인터페이스 목록 및 사용 예시

      Web → Native (웹에서 앱 기능 호출)
      • 웹페이지에서 특정 동작이 필요할 때, 아래 함수를 호출하여 스마트폰의 고유 기능이나 앱의 기능을 실행할 수 있습니다.

      기능

      함수 이름

      주요 역할 및 사용 예시

      화면 제어

      closeWindow()

      현재 열려있는 웹뷰 화면을 닫고 이전 화면으로 돌아갑니다.


      showKeyboard()

      웹뷰 내의 입력 필드 등을 위해 시스템 키보드를 강제로 노출시킵니다.


      openInAppBrowser(url)

      새로운 웹뷰(인앱 브라우저)를 열어 전달된 url을 로드합니다. 앱을 벗어나지 않고 다른 웹페이지를 보여줄 때 사용합니다.


      openBrowser(url)

      디바이스의 기본 브라우저(Chrome, Safari 등)를 열어 url을 로드합니다.


      openNativeScreen(json)

      앱 내의 특정 화면(쿠폰함, 이벤트 페이지 등)을 직접 엽니다. json 데이터로 필요한 정보를 전달합니다.

      하드웨어/OS 제어

      requestLocation()

      사용자의 현재 위치 정보를 요청합니다. 권한이 없으면 권한 요청 팝업을 먼저 띄웁니다. (결과는 setLocationResult로 전달)


      requestPermission(permission)

      위치, 카메라, 앨범(사진첩) 접근 권한을 명시적으로 요청합니다. (결과는 setPermissionResults로 전달)


      checkPermissions(permissions)

      특정 권한들이 현재 승인된 상태인지 확인합니다.


      setBackPressHandlingEnabled(isEnabled)

      안드로이드의 '뒤로가기' 버튼 이벤트를 웹에서 직접 제어할지(true), 앱에서 처리할지(false) 결정합니다. (이벤트는 onBackPress로 전달)


      share(url)

      OS의 기본 공유 기능을 호출하여 url을 다른 앱(메신저, SNS 등)으로 공유합니다.


      saveImage(imageBase64)

      Base64로 인코딩된 이미지를 스마트폰 앨범에 저장합니다. (결과는 setSaveImageResult로 전달)

      데이터 관리

      setSessionData(key, value)

      앱이 실행 중인 동안 사라지지 않는 데이터를 네이티브 메모리에 임시로 저장합니다. (예: 로그인 상태 유지)


      requestSessionData(key)

      setSessionData로 저장했던 데이터를 key 값으로 조회합니다. (결과는 responseSessionData로 전달)


      requestEncryptedPayload(id)

      민감한 데이터를 안전하게 사용하기 위해 암호화된 정보를 앱에 요청합니다. (결과는 setEncryptedPayload로 전달)

      Native → Web (앱에서 웹으로 정보 전달)
      • 네이티브 앱에서 특정 작업이 완료되거나 이벤트가 발생했을 때, 웹페이지의 함수를 호출하여 결과나 데이터를 전달합니다.

      기능

      함수 이름

      주요 역할 및 사용 예시

      요청 결과 전달

      setLocationResult(latitude, longitude)

      requestLocation() 호출에 대한 응답으로, 획득한 위도(latitude)와 경도(longitude) 정보를 웹으로 전달합니다.


      setPermissionResults(json)

      requestPermission() 또는 checkPermissions() 호출 후, 각 권한의 승인 여부(granted)를 JSON 형태로 전달합니다.


      responseSessionData(key, value)

      requestSessionData(key) 호출에 대한 응답으로, key에 해당하는 value를 전달합니다.


      setEncryptedPayload(id, value)

      requestEncryptedPayload(id) 요청에 대한 응답으로, 암호화된 데이터(value)를 전달합니다. id는 어떤 요청에 대한 응답인지 구분하는 값입니다.


      setSaveImageResult(boolean)

      saveImage() 호출 후, 이미지 저장 성공 여부를 true 또는 false로 전달합니다.

      이벤트 발생 전달

      onBackPress()

      setBackPressHandlingEnabled(true) 상태에서 사용자가 안드로이드 '뒤로가기' 버튼을 눌렀을 때, 이 함수가 웹에서 실행됩니다.


      5. 마무리하며: 네이티브와 웹의 완벽한 시너지를 위하여

      지금까지 안드로이드와 iOS 앱 환경에서 네이티브와 웹뷰가 서로 소통하는 창구인 웹뷰 인터페이스(JavaScript Bridge)에 대해 알아보았습니다.


      웹뷰 인터페이스는 단순히 웹 콘텐츠를 앱 안에 표시하는 것을 넘어, 웹 기술의 유연성과 네이티브 앱의 강력한 기능을 결합하여 사용자 경험을 극대화하는 핵심적인 역할을 합니다.

      카메라, 위치 정보, 공유 기능처럼 스마트폰 고유의 기능을 웹에서 자연스럽게 사용하고, 앱의 특정 화면으로 이동하거나 데이터를 안전하게 관리하는 모든 과정이 바로 이 인터페이스를 통해 이루어집니다.


      우리가 살펴본 closeWindow, requestLocation, openNativeScreen 등의 다양한 인터페이스들은 이러한 소통이 실제로 어떻게 이루어지는지를 보여주는 좋은 예시입니다.

      이처럼 일관성 있고 명확하게 정의된 인터페이스를 사용하는 것은 다음과 같은 이점을 가져다줍니다.

      • 개발 효율성 향상 : 웹 개발자는 네이티브 지식 없이도 약속된 함수 호출만으로 복잡한 기능을 구현할 수 있습니다.

      • 매끄러운 사용자 경험(UX) 제공 : 웹뷰와 네이티브 화면 간의 전환이나 기능 실행이 이질감 없이 부드럽게 연결되어, 사용자는 마치 하나의 잘 만들어진 앱을 사용하는 것처럼 느낍니다.

      • 안정적인 유지보수 : 기능의 역할과 데이터 형식이 표준화되어 있어 추후 기능을 확장하거나 문제를 해결할 때 예측 가능하고 안정적인 대응이 가능합니다.

      결론적으로, 웹뷰 인터페이스는 하이브리드 앱의 성공을 좌우하는 중요한 설계 요소입니다.

      본 가이드에서 소개된 인터페이스들을 적극적으로 활용하여, 사용자가 웹과 네이티브의 경계를 느끼지 못하는 풍부하고 완성도 높은 서비스를 만들어 나가시길 바랍니다.


      감사합니다.

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      gonzalo 님의 최신 블로그

      더보기
      동영상 기고하기