드림학기제 중간 보고서 - YangJJune/U-Compass GitHub Wiki

중간보고

프로젝트 주차 목표

  1. 공동 목표
    • 색다른 UI로 보는 상대적 위치 추적 어플, U-Compass 앱 런칭
    • 앱 개발 과정에서 U-Compass에 주어진 요구사항을 충족하기 위한 가장 효율적인 소켓 통신 아키텍처 조사 및 연구 내용 논문 또는 보고서 발행
    • 통신 과정에서의 정보 보호를 위한 보안 취약점 파악하고 정보 보안 기술을 습득 및 적용
    • 조사한 효율적인 소켓 통신 아키텍처를 빠르게 이용할 수 있는 오픈소스 라이브러리 제작 및 배포
    • 모바일 앱 아키텍처, 클린 아키텍처에 대한 공부 및 적용
    • 앱 성능 최적화 방안에 대한 모색
  2. 양석준 목표
    • 모바일 디바이스 통신에서의 소켓 프로그래밍을 진행
    • 현재 상황에 맞는 여러 아키텍처를 제시한 뒤, 가장 성능이 좋으며 효율이 좋은 아키텍처 탐색
    • 더 나아가, 직접 연구하여 만든 아키텍처를 누구나 쉽게 설정할 수 있도록 오픈소스 형태로 배포
  3. 조익성 목표
    • 네트워크 관련 소켓 통신 방법 학습
    • Jetpack Compose 프레임워크를 사용한 안드로이드 앱 개발 사용
    • 안드로이드 컴포즈 관련 여러 문서들을 보고 학습한 뒤, 해당 문서들을 활용하는 샘플 코드 작성
    • 학습한 내용을 바탕으로 이후 앱 구현에서 사용할만한 내용들 정리

프로젝트 주차 진행 내용

양석준

  • 네트워크 통신과 소켓
    • 네트워크 통신
    • OSI 모델 - OSI 7계층
    • HTTP 통신 vs 소켓 통신
  • 소켓통신 구현 및 TCP UDP
    • TCP / UDP의 정의 및 특성
    • 소켓통신 과정 및 구현
  • NAT 보안 문제와 1:N 소켓 통신
    • NAT (Network Address Translation)의 정의 및 용도
    • 모바일 환경에서 발생하는 NAT 보안 문제
    • ThreadPool 사용을 통한 1:N 소켓 통신 구현
  • 패킷 손실의 관리와 메모리에 대하여
    • TCP의 오류 검출
    • UDP 패킷 손실
    • Clumsy를 이용한 UDP 패킷 손실 실험
    • 메모리와 변수 그리고 IO
  • 네트워크 토폴로지
    • 각종 네트워크 토폴로지 학습 및 조사
  • Multiplexing NonBlocking IO 네트워크 아키텍처 조사
    • Multiprocessing
    • Multithreading
    • Multiplexing
    • IO Multiplexing의 구현 방법
    • Discord와 Slack의 네트워크 아키텍처 조사

조익성

  • Compose 기반 뷰 시스템과 XML 기반 뷰 시스템의 차이
    • XML 기반 뷰 시스템, Compose 기반 뷰 시스템
    • 각각의 장단점 정리
    • 두 뷰 시스템 간의 차이를 코드를 예시를 들어 정리
  • Compose UI 아키텍처
    • Composable 의 상태
    • Compose 에서의 Side Effect
    • CompositionLocal
    • 관련 코드 구현
  • Compose 네비게이션, 레이아웃
    • Compose 네비게이션 조사 및 구현 방법 정리
    • Layout 단계에서의 Modifier
    • 관련 코드 구현
  • Compose Theme, Animation
    • Compose 시스템에서 Theme 를 설정하는 법
    • Compose 에서 제공하는 Animation Api 정리
    • 관련 코드 구현
  • 안드로이드 Permission, Sensor
    • Compose 에서 사용자가 앱 권한을 허용하는 법
    • 안드로이드에서 제공하는 Sensor 의 종류
    • Sensor 를 사용해 위도 경도를 바탕으로 상대 기기가 위치하는 방향 추적
    • 관련 코드 정리
  • 안드로이드 클린 아키텍처, Koin
    • 본 의미의 클린 아키텍처
    • 안드로이드에서 적용할 수 있는 클린 아키텍처
    • 클린 아키텍처 기반 KMP 에서 사용할 수 있는 의존성 주입 도구 Koin
  • 실내 측위 기술
    • 기본 GPS 활용 방법의 한계점
    • Wifi 기반 실내 측위 기술
    • INS (관성 항법 장치) 기반 실내 측위 기술

프로젝트 주차 진행 결과

양석준

  • 네트워크 수업을 수강하였으나 다시 한 번 개념을 잡아보고자 그리고 익성이에게 관련 내용을 공유하고자 네트워크 및 소켓의 기본 개념을 시작으로 드림학기제 학습을 진행하였습니다.
  • TCP와 UDP의 속도에 관하여 UDP는 TCP보다 빠른 것은 자명하였으나 얼마나 빠른지 확인을 하고 싶어 직접 실험환경을 구축하고 진행하였습니다. 그 결과 네트워크 전송속도가 늘어날수록 exponential하게 TCP와 UDP의 속도 차이가 증가함을 확인할 수 있었습니다. 또한 TCP UDP의 패킷 손실 관리법이 다름에 따라 해당 부분에서의 속도 차이 역시 실험을 진행하였습니다.
  • 그러나 NAT와 모바일 통신에 대하여 학습하던 중 계획에 차질이 생기게 됩니다. NAT 보안 정책에 따라 모바일 환경에서 데이터 네트워크를 사용하던, Wi-Fi를 사용하던 포트포워딩이 불가능하거나 방화벽 정책을 뚫을 수 없는 상황이 되었습니다. 따라서 사용할 수 있는 아키텍처가 한정되어 기존 계획과 달리 하나의 효율적인 네트워크 아키텍처를 구성하자는 것으로 방향을 틀었습니다.
  • 이에 따라 네트워크 토폴로지를 학습하고, 더 빠르고 효율적인 아키텍처를 위해 Multiplexing 기법을 통한 IO를 학습하고 실습해보았습니다.
  • 다른 실시간 서비스들은 어떠한 아키텍처를 사용하는지 조사하고 기존의 공부 내용을 토대로 저희만의 아키텍처를 구상하였습니다.

조익성

  • 드림학기제 담당 교수님이신 지정희 교수님의 모바일 프로그래밍 강의를 수강하고 있으며, Android 개발자로 진로를 희망하고 있습니다. 이번 기회를 통해서 Android 와 Jetpack Compose 시스템에 대해 심도있게 공부할 수 있었습니다.
  • Android Developers 공식 문서를 읽으며 주차별 학습 내용을 정리했습니다. 안드로이드 Compose 소개부터 시작해서 공식 문서에서 제공하는 목차 순서대로 학습을 진행했습니다.
  • 구현할 U-Compass 프로젝트에서 적용시킬 수 있는 기술들을 학습할 수 있었습니다. 관련 내용을 기타에 포함된 링크로 서술하겠습니다.

기타

교수님 코멘트

  • 담당 교수님께서 모바일 기기에서 실내 측위 기술에 조금 더 집중하는 것이 좋다고 말씀하셔서 관련 내용을 추가로 조사했습니다.
  • 기존엔 GPS 기반으로 실내에서 위치 좌표를 주고 받으려 했었으나, 실내에선 GPS 인터럽트가 심해 정확한 정보를 알 수 없었습니다. 따라서 모바일 기기에서의 실내 측위 기술을 조사해본 결과
    • Wifi , Bluetooth , UWB , INS 기술이 있었습니다.
    • 블루투스(비콘) 기반 기술은 새로 하드웨어 비콘을 설치하는 등에 작업이 필요해 저희 서비스에서는 부적합하다고 생각했습니다.
    • UWB 기술은 고도화된 인프라가 선행되어야 하기 때문에 범용적으로 적용할 수 없다 생각했습니다.
    • Wifi , INS 기반 실내 측위 시스템이 범용적으로 적용할 수 있고 초기 설치나 비용이 들지 않아서 저희 서비스에 적합하다고 생각했습니다.

https://github.com/YangJJune/U-Compass/wiki