네이티브 애플리케이션의 정확한 정의가 뭘까요?

일단 저는 네이티브 앱이 무엇을 두고 얘기하는지 아는 사람입니다.
그런데 이걸 다른 사람한테 설명을 해 주려고 하는데, 정확히 어떻게 설명해야 할지 잘 모르겠더라고요.
일단 지금 준비해둔 설명은

애플리케이션이 구동되는 플랫폼에서 기본적으로 지원하는 방식으로 개발된 애플리케이션

인데요, 뭔가 충분하지 못한 것 같은 느낌이 들어서요.
혹시 다른/더 좋은 의견 있으신가요?

2 Likes

대조되는 표현으로 설명하면 좋지 않을까 싶어요.

네이티브 앱은 플랫폼 위에서 바로 실행되고, 네이티브가 아닌 앱은 웹 기술이나 에뮬레이션 등으로 중간 단계를 거쳐 실행되는 차이가 있다.

예시를 들어 설명해도 좋고요.

예를들어 카카오톡 PC버전은 윈도우 위에서 바로 실행되는 네이티브 앱이고, 디스코드는 일렉트론이라는 웹 기술로 만들어져 네이티브 앱이 아니다.

2 Likes

이 생각을 하다가, “그럼 닷넷은 네이티브가 아닌가? Java 기반 안드로이드 앱은 달빅/ART를 거치니 네이티브가 아닌가? 그건 아니잖아!” 해가지고 제가 맨 처음에 했던, 좀 더 완화된 정의가 나온 것이긴 합니다.
원래는 바이너리로 컴파일되어 직접적으로 CPU에 의해 실행되는? 그런 방향으로 설명을 하려고 했는데, 그것들만 네이티브라고 부르긴 힘들 것 같더라고요.

1 Like

네이티브 앱의 정의를 엄밀하게 내리는 게 목표라면 전 도움이 되지 못할 것 같네요.
다만 일반인을 대상으로 설명할 때 너무 엄밀한 정의를 말하면 이해하기 힘들어하는 경우가 많더라고요.
그리고 네이티브 앱을 XiNiHa님의 원글과 같이 정의해도, 어느 정도까지 범위의 기능을 쓰면 기본적으로 지원하는 방식으로 개발된건지 모호하죠. 사실 모든 프로그램은 타깃 머신에서 ‘기본적으로’ 지원하는 방식으로 돌아간다는 건 익히 아실테고요. 엄밀하게 정의하려고 한다면 한도 끝도 없을 것이라는 얘깁니다.

네이티브 앱에 대한 일반인의 이해를 돕는 게 목표라면, 예시와 대조되는 표현으로 설명하는 것도 나쁘지 않아보입니다.

3 Likes

결국은 프로그램 아래에 레이어가 얼마나 있냐 정도로 판단할 수 있을것 같네용 ㅎㅎㅎ

스택이 주렁주렁한데 네이티브라고 할 순 없으니유 ㅎㅎㅎㅎ

1 Like

좋은 답변들 주셨는데 저도 끼어 TMI 해본다면,

가장 낮은 layer 로 내려가면 보이는 것이

1. micro instruction
2. macro instruction

입니다.

비슷한 예를 더 든다면 근대 인텔 CPU 의
RISC part 가 micro instruction 이고
legacy 와의 호환을 위해 RISC 위에 구현된
CISC part 가 macro instruction 이겠지요.

또 다른 예를 든다면

micro instruction { mouse_down, mouse_move, mouse_up }
macro instruction { mouse_click, mouse_drag, mouse_double_click, mouse_drag_drop, ... }

같은 비유도 가능하고

micro instruction : API
macro instruction : SDK

같은 비유도 가능하겠죠.
관점을 펑 터트리시라고 주절주절 나열한건데,

CISC via RISC architecture 를 사용하는 이상 엄밀한 수준의 native 는 없다고 보셔도 되고,

아이폰용 native application 인 카카오톡을
PC 아이폰 에뮬 같은데서 구동시키면 native application 이 아니게 되는 것이니,

native 냐 아니냐는 binary 레벨의 관점과 runtime environment 레벨의 관점으로 또 나뉜다고 보이죠.
심지어 요즘은 VM 도 docker 레벨로 작아졌기에 마치 process 와 thread 의 관계 처럼 보이니까요.

즉, 관용적 의미의 native application 은 흔히 native 개발환경으로 만들어진 product 를 말하는 말하는 것이고,
소프트웨어적인 별도의 가상 머신을 runtime 에 거치지 않는 것이지만 ( 반례 LLVM )

추상적 관점에서 바라볼때는 이런식으로 개념을 폭파시켜버릴 수 있으리라 생각합니다.
BIOS 코드도 중간단계를 거치는 오늘날의 컴퓨팅 환경에서
엄밀한 native application 이란 점점 찾아보기 힘들어지는 것이죠.

physical layer 들이 점점 개발자와 사용자로 부터 숨겨져 logical layer 를 접하게 되는 현상인데,

native 의 대응어가 foreign 인 것 처럼, 우리나라 사람이 우리나라에 있을 때 native 지만,

다른 나라에 가면 foreign 인 것이니, native 라는 단어 자체도 마치 속지주의 속인주의 처럼

관점에 따라 시점에 따라 달라지는 것이 당연한 개념이겠지요.