728x90

안드로이드 PUSH 서버, 메신저 만드는 방법을 검색해보다가 알게된 내용을 적어둔다.


아파치 웹서버

nginx

  • 쓰레드/프로세스 기반 구조
  • 클라이언트의 요청이 들어오면 쓰레드를 생성
  • 사용자가 많으면 많은 쓰레드 생성 ==> 메모리 및 CPU 낭비, Context-Switching Overhead 발생
  • 비동기(async) 이벤트(ioctl, send, recv, epoll)기반 구조
  • 다수의 연결을 효과적으로 처리
  • 대부분의 코어 모듈이 Apache보다 적은 리소스로 더 빠르게 동작


안드로이드 앱의 구성 요소와 데이터 전달




  • 제작 : 기획부터 개발까지 하나의 서비스를 온전히 만들어내는 것
  • 개발 : 결정된 기획과 디자인을 바탕으로 소프트웨어를 구현하는 것
  • 고객이 불편한 부분을 이해하고 체감해야 한다.
  • UI 쓰레드는 UI만 처리하게 하라.
  • 다양한 화면 해상도를 지원하라
  • 화면 해상도에 맞게 다양한 리소스를 제공하라.
  • 네트워크는 항상 느리다고 가정하라.
  • 다양한 하드웨어에 대비하라. (터치스크린, 키보드, 센서)
  • 좋은 코드를 작성하라 (CPU 사용량 낮고, 메모리 사용량 낮고, 가독성은 높게)
    - 필요한 기능을 최대한 간결히 작성하라
    - 클래스/메소드/변수 이름을 명확히 하라.
    - 코드를 어렵게/복잡하게 작성하지 마라.
  • 객체는 최대한 적게 생성하라
    - static 메소드를 사용해서 객체 생성을 줄일 수 있다.
    - 반복문에서는 객체 생성을 줄여야 한다.
    - 객체를 재사용한다.
  • 불필요한 코드를 제거하라
    - 쓸데없는 캐스팅을 줄여야 한다.
  • 메소드는 정적(static) 메소드로 선언하라.
  • 클래스 내에서는 Getter 와 Setter 를 사용해서 변수에 접근하지 말라.
  • 값이 고정된 변수는 상수로 선언하라.
  • enum은 되도록 사용하지 말아라.
  • 부동소수형은 되도록 사용하지 말아라.
    정수형이 부동소수형보다 일반적으로 2배 더 빠르다.
  • 네티브 코드는 되도록 사용하지 말아라.
    - 디바이스에 따라 호환되지 않을 수 있다.
    - 디버깅을 하는 것이 쉽지 않다.
  • 자바의 코드 노하우가 반드시 안드로이드의 코드 노하우는 아니다.
    - 가독성을 위해 중첩 클래스를 사용하지 마라.
    - 클래스는 되도록 작게 생성하라.
  • 버전은 어떤 범위까지 지정할 것인가?
    - 지원하려는 플랫폼 구버전의 범위를 지정하는 것은 재량이지만,
      최신 버전의 플랫폼을 지원하는 것은 기본으로 한다.
  • 오픈소스로 공개된 많은 커스텀된 GUI 컴포넌트 코드들이 있으며, 이를 구글 검색 등을 통해 쉽게 찾아낼 수 있다. https://github.com/wasabeef/awesome-android-ui
  • 안드로이드 내부에서 기본 이미지를 제공하지만 매우 제한적이다.
    구글이 Material Design 풍의 아이콘 셋들을 오픈소스로 공개했다.
    https://github.com/google/material-design-icons/releases
  • 안드로이드 앱 개발할 시에는 다양한 버전에서의 테스트가 필요한데, Genymotion을 이용하면 쉽게 해결할 수 있다. https://www.genymotion.com/
  • 출시할 때에는 꼭 앱이 디버깅용이 아닌 출시용으로 빌드가 됐는지 확인하고, 서버도 디버깅 모드로 배포되었는지 여부를 확인한다.
  • 모든 준비가 완료되었다면, Play 스토어 등과 같은 모바일 어플리케이션 마켓 플레이스에 배포를 진행하면 된다.


블로그 이미지

Link2Me

,