devlog of ShinJe Kim

[TIL] 2019-10-11

|

Today I Learned

안드로이드 서비스를 공부하고 있는데 이 Service라는 것이 대체 무엇인지 명확하게 이해가 되지 않는다. CTO님이 안드로이드 용어 공부를 할 때에는 운영체제에서의 정의와 안드로이드에서의 정의를 구분하여 이해하라고 말씀해주셨다. 그래서 각각의 정의를 찾아보았다. 사실 아직도 완벽히 머리에서 정리되지는 않는다.. 반복만이 살길이다

운영체제에서의 서비스란?

찾아본 정의를 모두 나열해보았다.

  • 운영체제에서 응용 프로그램을 실행할 때, 응용 프로그램이 필요로 하는 공통적인 기능들을 서비스라는 형태로 만들어 제공해주는 것. 프로세스, 메모리, 파일 등 플랫폼의 자원 관리도 해준다.
  • 시스템에서 동시에 실행되는 다른 프로세스들 간의 보호를 강화하는 것.
  • 근본적인 하드웨어를 통해서는 직접 제공되지 않는 새로운 기능성을 제공하는 것.

서버는 반드시 백그라운드 서비스로 만들어서 돌려야 한다. 만약 그렇지 않으면 터미널을 끄면 서버가 죽어버린다. 이를 방지하기 위해서는 키보드/모니터 등의 장치와 연결되지 않는 별도의 세션을 만들어야하는데 이렇게 만드는 것을 데몬화라고 한다.

운영체제에서의 세션이란 프로세스들 사이에서 통신을 하기 위해 메시지 교환을 통해 서로를 인식한 이후부터 통신을 마칠 때까지의 기간이라고 한다. 이 때, 세션이 끊기지 않는 서비스들을 데몬이라고 부르기도 하고 서비스라고 부르기도 한다(예: 키보드 입력이 끊기지 않는 것).

아래는 OS에서 제공하는 서비스 기능들이다.

  • User Interface
  • Program execution
  • I/O operation
  • File system manipulation
  • Communications
  • Error detection
  • Resource allocation
  • Accounting
  • Protection and Security

그래서 운영 체제에서의 서비스가 한 마디로 뭐예요? 라고 누군가 나에게 물어본다면, 음.. 아직 잘 모르겠다ㅠ 한번에 완벽히 이해하는게 더 이상한 것일거야.. 집에 가서 운영체제 책 보고 다시 정리해야지.

안드로이드에서의 서비스란?

우리가 ‘안드로이드 서비스 개발해요’라고 말 할 때의 서비스는 기반 환경 및 플랫폼을 의미한다. 그렇다면 내가 지금 공부하고 있는 안드로이드 컴포넌트로서의 서비스는 무엇인가? 블로그에 열심히 정리하였지만 무어라 한마디로 정의하기가 어렵다(머릿속에서 정리가 안되었기 때문이겠지).

Service 공식 문서의 정의는 아래와 같다.

애플리케이션에서 백그라운드에서 실행해야 할 작업이 있을 때 시스템에 알려주며, 애플리케이션의 일부 기능을 다른 애플리케이션에 노출시킬 수 있는 기능을 제공한다.

Service Overview 공식 문서에서 정의하는 바는 아래와 같다. 조금 더 이해하기 쉬운 정의이다.

서비스란 백그라운드에서 오래 실행되는 작업을 수행하도록 하는 애플리케이션의 컴포넌트를 의미한다.

그럼 공식 문서에서 포그라운드(foreground)도 서비스의 한 유형이라고 설명하는건 뭐야? 라며 의문을 가졌었다. 여기서 말하는 포그라운드는 운영체제상의 포그라운드를 의미하는 것이 아니라 안드로이드 내에서 정의내린 포그라운드를 의미한다. 공식 문서의 정의를 살펴보자.

포그라운드

포그라운드 서비스는 사용자에게 잘 보이는 몇몇 작업을 수행합니다. 예를 들어 오디오 앱이라면 오디오 트랙을 재생할 때 포그라운드 서비스를 사용합니다. 포그라운드 서비스는 알림(Notification)을 표시해야 합니다. 포그라운드 서비스는 사용자가 앱과 상호작용하지 않을 때도 계속 실행됩니다.

그러니깐 실제로 백그라운드에서 동작하는 오디오 재생도 알림(Notification)을 표시하면 안드로이드에서는 포그라운드 서비스로 정의된다는 것이다.

이 정의를 머릿속에 각인시키면서 Service 공식문서를 정리한 내용을 반복하여 읽어보자.

Comments