devlog of ShinJe Kim

[TIL] 2020-02-17

|

Today I Learned

  • honeycomb 이전의 안드로이드에서는 액션바가 없고 메뉴 버튼이라는 것이 있었음. 하지만 디자인적으로 너무 많은 기능을 하나에 담고 있다고 판단되어 honeycomb 부터는 액티비티 상단에 액션바라는 것을 추가하여 그 안에 여러가지 메뉴를 넣을 수 있도록 함.
  • URL과 Uri의 차이?

    • URL은 Uniform Resource Locator의 약자이며 URI는 Uniform Resource Identifier의 약자이다. URI는 해당 리소스의 identifier이고 URL은 해당 리소스에 접근할 수 있는 locator이다. URL은 URI에 포함되는 개념인데 URL은 리소스 자체의 위치를 의미하지만 URI는 해당 리소스의 위치일수도 있고 식별자일 수도 있는 것이다.
    • 출처 1
    • 출처 2
  • 안드로이드 APK가 설치될 때, 각 APK는 고유한 Linux user ID를 부여받는다. 개개의 애플리케이션은 안드로이드 런타임의 인스턴스 내에서 실행되며 따라서 각각의 애플리케이션은 완전히 sandboxed된다. 이로 인해 이 애플리케이션의 파일, 프로새스, 기타 리소스들은 다른 앱에서 접근할 수 없다. 이러한 sandboxing 접근은 기본적으로 그 어떤 애플리케이션도 민감한 데이터에 접근하거나 다른 앱/OS/사용자에게 좋지 않은 영향을 줄 수 있는 동작을 할 수 없도록 보장한다. 예를 들면 인터넷에 접근하거나, 사용자의 위치를 가져오거나, 연락처 정보를 가져오거나 수정하는 일 등이다.

    안드로이드에서는 위와 같이 민감한 작업을 매번 할 때마다 사용자에게 허락을 구하는 방식보다는 앱의 manifest에서 필요한 permission을 선언하도록 한다. 애플리케이션에서 필요한 permission들의 목록은 이곳에서 확인할 수 있다.

    그렇다면 왜 애초에 모든 항목에 대한 허가를 구하고 편하게 개발하면 안되는가? 마시멜로 이전 버전의 안드로이드에서는 사용자가 앱을 처음 시작할 때 개발자가 요청하는 모든 permission의 리스트를 나열하여 보여주는 다이얼로그를 보게 되어있었다. 하지만 이게 사용자한테는 버거운(overwhelming) 경험일 수도 있어서 안드로이드 6.0(마시멜로) 부터는 permission dialog를 보여주지 않고도 많은 permission을 받을 수 있게 되었고 민감한 정보들은 앱이 실행중일 때 허가를 받도록 하게 되어있다. 따라서 최소한의 permission을 요구하는 것을 권장하며 permission을 요구해야 하는 작업이라면 다른 방식으로 우회해보는 것도 하나의 방법이 될 수 있다. 시스템 앱을 중개자로 사용하여 수행할 수 있는 작업들이 있는데 예를 들면 사용자의 카메라에 접근하는 것을 직접적으로 요청하기보다는 시스템의 카메라 앱을 바로 실행하여 사진을 찍을 수 있도록 할 수 있다.

  • sandbox란? 외부로부터 들어온 프로그램이 보호된 영역에서 동작하여 시스템이 부정하게 조작되는 것을 막는 보안 형태이다.

Comments