2016년 6월 19일 세종대학교 광개토관 컨벤션홀에서 열린 Google I/O 2016 Extended Seoul에 다녀온 후 개인적으로 정리 / 후기를 남겨봅니다!

이 행사는 13:00 ~ 18:00 동안 50분 컨퍼런스 10분 휴식방식으로 5번 3개의 트랙이 진행되었습니다. 저는 안드로이드에 타겟을 맞추어 세션을 왔다 갔다하며 참여하였습니다! 꼼꼼히 적는다고 적었으나, 아는만큼 보인다고.. 알아들은 것 위주로 개인적으로 중요하다 생각했던 것 위주로 적어서 두서없이 정리가 되었네요ㅠ 정리한 내용은 아래와 같습니다.

1. 안드로이드 N을 준비하는 개발자를 위한 안내서 - 이승찬 (Track A)  

1-1) Android N 진행 현황

Android N은 6월 15일에 공개된 API 즉, API24가 최종으로 배포될 예정이고 큰 결함이 없는 이상 수정없이 배포될 예정이라고 합니다. 또한 이전 배포한 마쉬멜로 이하 버전들은 항상 버그가 발견되거나 수정사항이 생겨서 일정이 조금씩 밀려서 10월 정도에 릴리즈가 되곤했다고 하는데, 이번 N버전은 일정대로 순항 중이고 현재 큰 버그가 없다면 8월 중에는 N버전 사용가능 단말(Nexsus, xperia)에 한해 릴리즈 유저가 생길 전망이라고 합니다!

 1-2) Android N for Developer

Android N에 대처하는 개발자들에게 3가지 정도를 이야기했습니다.

1-2-1) Supproting Multiple Screens

기존에 많이 알려져있듯이 Android N 버전에서의 가장 큰 변화는 Supproting Multiple Screens 입니다. 단말의 화면을 분할하여 2개의 앱을 실행하는 기능인데요, 나뉜 화면 간 Drag and Drop까지 가능하다고 합니다. 

Multiple Screens는 기본적으로 한 화면에 두 개의 Activity가 실행되지만 기존의 Activity생명주기라던지, Orientation과 같은 View 메커니즘 상의 변화는 없다고 합니다. 다만 유의할 점이 몇 가지 생겼습니다. 

유의점 

- 앱에서 화면을 landscape 또는 portrait로 제한하고 있는 경우 멀티스크린에서 view가 제대로 동작하지 않을 수 있으니 유의해야합니다.

-  Screen Zoom이라는 기능은 안드로이드 접근성을 고려해 생긴 기능으로 말그대로 화면을 Zoom을 할 수 있는 기능입니다. 기존에 High performance device를 타겟으로 한 앱이라면 320dp의 리소스가 누락되어있을 수 있는데, 이런 경우에는 resource not found exception -> app crash 가능성이 있습니다.

- Chrome Book은 아직 국내에서 많은 인기를 얻고 있지는 못하지만 미국에서 진행된 Google I/O 2016에서는 상당한 관심을 보였던 분야라고 합니다. Chrome Book에서도 Multiple Screens를 고려한 개발이 이루어져야 한다고 합니다.

제가 유의점을 들으면서 종합적으로 이해한 내용은 기존의 버전에서 앱의 화면은 비교적 정적으로 지정되어있었다면 N버전부터는 내 앱이 어떤 화면에서 어떤 해상도로 어떻게 실행 될지 알수 없는 상황이 되고 많은 UI의 가능성을 고려하지 않으면 안된다는 내용이라고 이해했습니다.

물론 멀티스크린을 무조건 지원해야하는 것은 아닙니다. 멀티스크린을 지원하지 않게 지정하려면 엑티비티 설정 중 resizeableActivity를 false 값으로 셋팅하여 지원하지 않도록 설정 할 수 있습니다. 다만 이 resizeableActivity의 default값은 true이고, Activity_task의 root에 설정된 값을 나머지 task들이 모두 같은 값을 갖게 됩니다.

구체적인 방법은 아래와 같습니다.

if I can't support Multi-Window

1. targetSdk < 24, screenOrientation = portrait | landscape

2. targetSdk = 24

   a. resizeableActivity = false

      launchMode = singleInstance | singleTask

   b. resizeableActivity = fase

      documentLaunchMode = always


1-2-2) Battery Optimization

더 나은 앱을 위해서 모든 개발자들이 고민하는 요소 중의 하나인 베터리 최적화에 대한 내용을 이야기했습니다.

구글이 생각하는 Battery Optimization을 위해 Background Activity 3가지 원칙이 있었는데요,

 1. Reduce

    - 하지말자

 2. Defet

    - 해야되면 충전 할 때 하자

 3. Coalesce

    - 여러가지 작업을 한번에 몰아서 하자

이런 원칙을 지키기 위해서 Marshmallow버전부터 있었던 Doze mode라는 것을 N에 더 강화시켰다고합니다. 안드로이드 개발을 하고있다고 하면서도 처음듣는 내용이라서 매우 부끄러웠습니당ㅠㅠ

Marshmallow에서 Doze mode는 간단히 말해서 단말이 일정시간동안 움직이지 않고 스크린이 비활성화 되어있다면 네트워크 작업, 알람 작업 등의 백그라운드 작업이 멈추게됩니다. 이 기능이 Android N에서는 한층 더 강화되어서 이동 중일때에도 스크린이 비활성화 된 경우 Doze mode가 활성화 된다고하네요.

이런 Doze mode에 대한 앱 테스트를 진행 할 수 있는 방법은 아래의 adb 커맨드로 환경을 설정해서 테스트를 진행 할 수 있습니다.

adb shell dumpsys deviceidle step (light) 

또한 베터리 관련해서 Battery Historian이라는 것을 이용하면 app의 베터리 사용량을 자세히 모니터링 할 수 있다고 하니 참고하시기바랍니다.


1-2-3) Memory Optimization

안드로이드에서 발생하는 브로드캐스트 Intent에 대해 앱이 반응하도록 만들어진 경우가 많습니다. 예를 들어  NEW_PICTURE를 이용하여 사진 촬영이 이루어지면 저장소에 전송하여 동기화를 시키는 일을 예로 들수 있습니다. 이 때 만약 NEW_PICTURE 브로드캐스트 Intent를 사용하는 앱과 서비스의 개수가 많다면 한번에 사용하는 메모리량이 많아지고, 이에 따라 불안정한 상태가 될수 있습니다. 이번 컨퍼런스에서 발표된 내용에 의하면 CONNECTIVITY_CHANGE, NEW_PICTURE, NEW_VIDEO 등의 Intent가 사라진다고 하네요.
또한 개인적으로 충격적이였던 부분은 Background Service를 점진적으로 제한해서 궁극적으로는 없앨 예정이라고합니다.(지금 당장 N버전에서부터 없어지는 것은 아닙니다.)
앱에서 백그라운드 서비스가 없을 경우의 테스트를 진행 하려면 아래와 같은 adb 커맨드를 이용하여 테스트하면됩니다.
adb shell cmd appops set <package_name> RUN_INBACKGROUND ignore  //background service     비활성화
adb shell cmd appops set <package_name> RUN_INBACKGROUND allow    //background service     활성화


1-3) Android`s New Features
앞으로 추구되는 Android의 방향에대해 요약해주셨습니다. 
1. 다양한 화면 크기와 오리엔테이션을 지원
2. 반복적으로 수행되어야하는 작업은 베터리를 최적화 할 수 있도록 지능적으로...
3. 서비스/브로드 캐스트 리시버 등 백그라운드 작업은 꼭 필요한 경우에만 사용  

첫 번째로 들었던 세션에서는 Android N뿐만아니라 앞으로 진행될 Android방향 전반에대한 내용도 들을 수 있어서 좋았던 것 같습니다. 다 듣고 난 후에 들었던 생각은 예전의(Marshmallow 이전) 안드로이드는 개방되어있고 핸들링할 수 있는 요소가 많은 장점을 가졌었다면 앞으로 나아갈 Android의 방향은 폐쇄적이지만 안정적이고, 여러 디바이스 환경에 대처 가능한 유연함을 추구하고 있는 것으로 느껴졌습니다.


2, 3. 두,세 번째 세션 
두,세 번째 세션이라고 항목을 넣기도 애매한데요,,  
두 번째 세션에서 What`s next for the web? (B track)을 들었습니다. 웹앱에 대한 내용을 기대하고 들었는데 웹앱이 크롬 어플리케이션에 대한 내용이였습니다ㅠㅠ JavaScript도 잘 모르는 상황이라 절반 정도까지 이해안되는 세션을 억지로 듣다가 Espresso에 대한 세션(B track)으로 넘어가서 어중간해졌네요
그래도 두 번째 세션에서 promise라던지 Espresso 등 중요 키워드를 들었으니 앞으로 살펴볼 요소라고 생각합니다.
특히 Espresso같은 경우에는 Android Studio에 탑재되어있고, 코드를 통해 UI QA 테스트를 진행하는 예시를 보니 굉장히 흥미로웠습니다. 잘만 활용하면 업무 상에도 적용가능할 수있을 것 같다고 생각했습니다.
세 번째 세션에서는 딥러닝에 대해서 Tensorflow를 이용하여 파이썬으로 MINIST를 핸들링하는 내용에 대해서 들었는데,
세션 진행하시는 분께서 최대한 쉽게 풀어주셨지만 기초지식이 있는 상태에서 들었어야 하는 내용이고 애초에 50분내에 다룰 수 있는 내용이 아니라는 생각이 내내 들었습니다. 아는만큼 보인다고ㅠㅠ 머신러닝에 대해 "그냥 그렇구나" 하고 멍하니 듣기만해서 적을 수 있는게 많이 없네요ㅠ   

4. Android Studio 2.2(Preview 3 기준) - 김태호 (Track A)

새롭게 나올 Android Studio 2.2에 대해서 현재까지 나온 Preview 3을 기준으로 잘 설명해주셨습니다. 개인적으로 이 세션을 듣고나서 Android Studio 2.2에 대한 기대감이 엄청나게 올라갔습니다!

4-1) Design

4-1-1) 기존에 있었던 Visual Editor가 더욱 심플하고 파워풀해졌습니다. 

몇 가지 눈에 띄는 것을 꼽아보자면 레이아웃 리소스 외 menu와 Preferences를 지원하고 에디터 내에서 스크롤 뷰의 스크롤 지원하며 속성 탭 개편을 통해 주요 속성화면과 전체 속성 화면간 전환이 이루어져서 굉장히 편리하게 개선되었습니다!

4-1-2) Constraint Layout

새롭게 추가된 Constraint Layout은 Visual Editor와 맞물려서 앱의 Layout과 View를 굉장히 간편하게 만들수 있게 되었습니다. XCode와 견주어도 더 좋으면 좋았지 떨어질 것 같지 않은 성능인 것 같았습니다. 세션 진행자 분께서 시연영상을 보여 주셨는데 기존에는 거의 xml로 작업했다면 제 기준으로 1~2시간은 족히 했을 작업을 10분도 안되서 뚝딱 하는 걸 보고 굉장히 놀랐습니다. 거의 프리젠테이션에서 도형그리기 수준(?)으로 보였습니다. 또한 기존의 레이아웃은 Relative Layout안에 Linear Layout이 배치되고, 또 안에 Layout이 배치되거나 View가 배치되는 구조가 일반적이였는데 Constraint Layout은 이러한 계층 구조를 가지지 않고 Constraint Layout안에 한번에 다 배치가 되는 구조라 계층구조가 굉장히 단순해지고 쉬워졌습니다! 

4-1-3) Layout inspector

현재 표시되고 있는 단말기 (혹은 에뮬레이터)의 뷰 구조를 확인할 때 사용하는 툴인데요, 기존에 DDMS 내에 포함되어 있던 기능과 거의 유사하며 뷰 디버깅에 용이하다고 합니다. Android Monitor Pane > Layout Inspector를 통해 사용할 수 있다고하는데, 사실 아직 개발하면서 UI 디버깅을 많이 해본 적이 없어서 그런지 Constraint Layout에 비해 크게 기대되는 기능은 아니였습니다. 역시 아는만큼 보이는 거겠지요.ㅠㅠ

4-2) Develop

코드 분석과 리소스 관리측면에 대해서 향상되었습니다. 

4-2-1) Find & Remove Unused Resources기능은 앱내에서 참조하지 않고 있는 리소스를 찾아서 제거해주는 기능이라고 합니다. Android N에서 제공하는 멀티스크린에서는 리소스의 량이 크게 증가할 거라는 생각이 들었는데, 이것과 맞물려서 유용할 것 같습니다.

4-2-2) 또한 추가된 Annotations 22.2에서 Threading Annotations를 통해서 @UIThread, @MainThread, @WokerThread, @BinderThread 등으로 지정하고 구현을 해서 런타임 에러를 많이 줄일 수 있게 될거 같습니다.

또한 기존에 타겟 sdk를 지정하고 그와 맞지 않는 api를 사용하여 개발을 하면 노란 밑줄이 가면서 잠재적인 에러를 내포하는 코드가 되곤했는데 @RequiresApi를 통해서 호출하는 단말의 api레벨에 따라 알아서 판단해서 분기해서 호출하게 됩니다.  

@Dimension, @Px 어노테이션은 px과 dp 값을 표시하게 되어 좀더 깔끔한 UI처리를 할 수 있게 도와줍니다. 

@Keep은 난독화 관련 어노테이션은 Proguard 돌릴 때 난독화를 돌리지말아라 하는 어노테이션으로 알아두면 굉장히 유용할 것 같습니다. 단, Keep 어노테이션은 Gradle plugin 2.2+를 사용 해야합니다.

4-2-3) firebase plugin이 추가되었는데 GCM등의 서비스를 제공하기 편하도록 해주는 플러그인이라고 합니다.

4-2-4) 현재 개발 중 모르는 api는 f2키를 눌러 제공되는 document를 보고 확인 할 수 있습니다. 앞으로는 sample code 또한 document와 같이 제공되어 더욱 쉽게 이해 할 수 있게 도와준다고합니다. 


4-3) Build
빌드에 대해 크게 추가되는 점들이 있습니다.
4-3-1) Jack Compiler가 향상되었습니다. Java 8의 일부 기능이 사용가능한데, 대표적으로 람다표현식을 들 수 있습니다.
4-3-2)정식버전 플러그인에서  CMake and ndk-build가 지원됩니다. externalNativeBuild{} 사용하여 적용가능하며 CMake를 사용한 예제 저장소가 공식홈페이지에 게시되어있다고하네요

4-4) TEST
4-4-1) APK Analyzer
APK의 클래스/메서드 수, 각 부분 별 차지하는 용량, 다양한 환경에 적용될 리소스 등  다양한 정보를 확인 할수 있게 되었습니다. 특히 자신이 작성하여 export한 apk뿐만 아니라 보유하고있는 apk파일을 지정하면 난독화된 부분을 제외하고 모두 볼 수있다고합니다. 개발자분들뿐만 아니라 분석가분들 입장에서도 역시 흥미롭게 볼만한 기능인 것 같습니다. 본 기능은 Build > Analyze APK...에서 사용 할 수 있습니다.

4-4-2) Espresso Test Recoder
두 번째 세션에서 제가 놓쳤던 부분에 대해 간략하게 나마 더 설명을 들을 수 있었습니다. 주된 내용은 Espresso를 이용하여 테스트 진행이 가능하지만 테스트를 위한 코드를 작성하는 일 또한 자칫 노가다가 될 수 있는데, 테스트할 동작을 에뮬레이터에서 진행하고 recoding을 하면 테스트코드를 작성해준다는 놀라운 기능이였습니다.

4번째 세션을 듣고 난 생각은 현재 업무에서 Eclipse 비중이 훨씬 더 높고, 고객사들 역시 대부분이 Eclipse를 사용하고 있기 때문에 지금 당장 Android Studio로 모든 것을 사용하기는 어렵지만 새로 개발하는 건에 대해서는 Android Studio를 사용하고 기존에 있는 코드 역시 컨버팅을 해나가는 준비가 필요하다는 생각이 들었습니다.

5. Introduce Android TV and new features from Google I/O 2016 - 이승재 (Track A)
마지막 세션이여서 그런지 코드를 비롯한 기술적인 내용보다는 Android TV에 대한 기능 및 릴리즈 현황과 앞으로의 전망에 대해 편안하게 들을 수 있는 세션이였습니다.
인상 적인 부분은 Android TV가 발매된 시점 부터 증가 추이를 그래프로 표현해준 슬라이드를 보았을 때, 6개월 단위로 Linear로 증가하는 것이 아니라 exponential적으로 증가되고 있는 점이 있었습니다. 더불어 현재 스마트폰을 타깃으로 나오는 App 시장은 이제 레드오션으로 볼 수 있고, 앞으로 Android TV시장은 블루오션일 수 있다 라는 말에 공감은 되었으나 같이 참여한 사촌형님의 개인 개발자의 입장으로써는 진입장벽이 너무나 높을 것 같다는 말 또한 이해가 되었습니다.
굉장히 의외라고 느꼈던 부분은 Android TV를 생산하고있는 회사에 삼성/LG가 빠져있는 점이 있었습니다. 자체 개발 Smart TV를 생산하기 때문인것 같기는 하지만, 샤오미 + Android와 대적 가능한 Smart TV를 만들 수 있는지에 대해서는 개인적으로 의문이 들었습니다.


끝으로 Google I/O 2016 Extended Seoul에 참석한 이 후 느낀 점을 몇자 적어보자면, 각 세션을 들으면서 생소한 단어, 기술들이 많이 있었고, 앞에서 계속 언급했듯이 아는만큼 보인다는 말을 몸으로 느낀 좋은 경험을 한 것 같습니다. 
개인적으로 많은 자극이 되었고 더욱 열심히 해야 겠다는 동기부여가 된 것 같습니다.
이상으로 긴 글 읽어주셔서 감사합니다 :)


'Study > ETC' 카테고리의 다른 글

2017년도 블로그 결산!  (0) 2018.01.09
Zip file구조  (2) 2016.10.27
Arpspoofing  (0) 2015.10.16
실전 악성코드와 멀웨어 분석 Lab03_03.exe  (0) 2014.09.01
실전 악성코드와 멀웨어 분석 Lab03-02.dll  (0) 2014.08.29

+ Recent posts