블라인드 같은 어플을 만들기 위해서 클라이언트와 서버가 각각 필요하다는 것을 지난 글들을 통해 배웠습니다. 그러면 이제 “프론트엔드 개발자, 백엔드 개발자 구합니다!”라고 채용 공고를 올리면 될까요?
🙅♂️ 물론 아닙니다.
좋은 대답을 얻기 위해서는 좋은 질문을 해야 하듯, 좋은 개발자를 채용하기 위해서는 좋은 공고를 올려야 합니다.
좋은 공고란 원하는 개발자의 기술 스택과 특징을 구체적으로 적어놓은 공고입니다.
단순히 채용하는 개발 분야만 적어두는 건 ‘나는 개발에 대해 잘 몰라요’라고 광고하는 것이나 다름 없습니다.
따라서 좋은 개발자들은 기피할 것이고, 오히려 안 좋은 의도를 가졌거나 실력이 없는 개발 업체들이 연락을 할 가능성이 높습니다.
잠깐! 기술 스택이 뭐냐고요?
바로 설명 들어가겠습니다!
기술 스택
우리가 집을 지으려고 한다고 생각해 보겠습니다. 기술자에게 가서 ‘집 하나 지어주세요’ 라고 하면 과연 원하는 결과를 얻을 수 있을까요? 아마도 기술자는 어떤 형태의 집을 원하는지부터 시작해서 크기, 재료, 공법 등 여러 가지 질문을 우리에게 할 것입니다.
‘저는 잘 모르겠으니 알아서 지어주세요’라고 한다면 과연 결과물에 대해 우리가 만족할 확률이 얼마나 될까요? 대충 찰흙을 집어 던졌을 때 내가 원하는 모양이 나올 가능성과 비슷할 것입니다.
‘블라인드 같은 어플 하나 만들어주세요’라고 하는 것도 별반 다르지 않습니다. 블라인드 클라이언트 어플을 만들기 위해서도 다음과 같은 여러 가지 결정들이 필요합니다.
- 스마트폰으로만 사용하게 할 것인가, 컴퓨터로도 접속이 가능하게 할 것인가?
- 아이폰과 안드로이드 중 어느 쪽을 개발할 것인가? 혹은 둘 다 개발할 것인가?
- 어떤 식으로 프로그램을 설계할 것인가?
이런 식으로 어떤 기술을 써서 어플을 만들지 결정을 해야 합니다. 그리고 하나의 결정은 그 이후에 내리는 결정들에도 영향을 미치게 됩니다.
이렇게 어플을 만들기 위해 사용하는 도구, 설계, 기술들의 집합을 가리켜 기술 스택이라고 합니다.
그렇다면 클라이언트 개발에서의 기술 스택에는 무엇이 있을까요?
앱? 웹? 웹앱?
제일 먼저 결정해야 하는 것은 스마트폰에서만 쓸 수 있는 앱(app)을 만들 것인지, 아니면 웹(web)으로 만들 것인지 여부입니다. 앱은 뭐고 웹은 뭘까요? 그리고 웹앱은 또 뭘까요?
앱(또는 어플)은 어플리케이션(application)의 줄임말로 아이폰의 경우 앱 스토어를 통해, 안드로이드 폰의 경우 구글 플레이, 원스토어, 갤럭시 스토어 등을 통해 스마트폰에 다운 받아 설치하는 프로그램을 말합니다. 국민 어플인 카카오톡, 유튜브, 쿠팡, 배민 등도 전부 앱입니다.
쉽게 구분하자면 우리가 윈도우를 쓸 때 MS 워드, 액셀, 한글 등을 ‘컴퓨터에 깔아서’ 썼던 것처럼 스마트폰에 설치를 해서 사용하는 것들은 전부 앱이라고 보시면 됩니다.
‘어? 근데 요즘은 인터넷으로도 워드나 엑셀 쓸 수 있던데? 그럼 걔네도 앱인가?’
반은 맞고 반은 틀립니다.
혹시 인터넷으로 워드나 엑셀을 쓰실 때 뭔가 설치를 하셨었나요? 아마도 따로 설치한 기억이 없으실 겁니다. 그리고 ‘인터넷으로’ 썼다고 하셨는데, 이것을 조금 정확히 표현하자면 웹 브라우저(크롬, Edge, 웨일 등)를 켜신 후 거기서 주소를 입력하거나 검색을 해서 워드나 엑셀 페이지를 띄우셨을 것입니다.
그리고 프로그램을 설치하는 과정은 없었지만 예전에 ‘윈도우에 깔아서 쓰던’ 워드나 엑셀과 기능상의 차이는 크게 없었을 것입니다. 단지 브라우저를 통해서 기능을 썼다는 점이 다르고, 윈도우에서 쓰던 것보다는 약간 느리다는 정도가 달랐을 것입니다.
바로 위에서 앱은 ‘스마트폰에 설치하는 프로그램’을 지칭한다고 했는데, 이는 좁은 의미에서의 어플리케이션입니다. 넓은 의미에서 말하는 어플리케이션은 사용자가 원하는 기능을 쓸 수 있게 해주는 응용 프로그램 전부를 뜻하고, 이 프로그램이 컴퓨터에 깔아서 또는 스마트폰에 다운 받아서 쓰는 경우에는 ‘네이티브 앱’, 인터넷 창을 띄워서 브라우저 안에서 쓰는 경우에는 ‘웹 앱’이라고 합니다. (잠깐! 인터넷 창을 띄우는 것도 컴퓨터에 설치를 해서 쓰는 거니까 네이티브 앱일까요? 바로 다음 부분에서 다룹니다.)
비슷한 용어가 많이 나와서 헷갈리실테니 한 번 정리하겠습니다.
- 일상적으로 말하는 ‘앱’: 네이티브 앱
- ‘앱’의 넓은 의미: 응용 프로그램 = 사용자에게 기능을 제공하는 프로그램.
- 네이티브 앱: 컴퓨터에 설치하거나 앱 스토어 등을 통해 스마트폰에 다운 받아서 쓰는 앱
- 웹 앱: 크롬, 엣지 등을 통해 브라우저를 띄워서 ‘인터넷 창’ 안에서 쓰는 앱
네이티브 앱 vs. 웹 앱
그렇다면 네이티브 앱과 웹 앱의 차이는 무엇일까요? 바로 위에서 설명했던 ‘직접 설치를 해서 썼냐’ 또는 ‘인터넷 창을 띄워서 썼냐’의 차이입니다.
‘그게 뭐’라고 생각하실 수도 있는데, 이 차이가 기술적으로 무엇을 의미하는지, 그리고 각각 어떤 장단점이 있는지 알아보겠습니다.
‘네이티브’의 뜻은 ‘토종의’ 또는 ‘현지의’ 라는 뜻을 가지고 있습니다. 우리가 ‘직접 설치를 했다’고 표현했던 것처럼, 프로그램을 컴퓨터에서 직접 실행할 수 있도록 저장하는 과정을 필요로 하고, 앱을 실행할 때 중간에 다른 프로그램을 끼지 않고 직접 컴퓨터에서 실행을 한다는 것입니다.1)
반면에 ‘웹’은 흔히 우리가 말하는 ‘인터넷 창’의 기능을 썼다는 의미입니다.
인터넷을 통해 주소를 입력하면 브라우저에서 이해할 수 있는 언어로 작성된 문서와 코드를 다운 받게 됩니다. 그리고 이 코드를 브라우저 안에서 실행함으로써 사용자에게 기능을 제공하게 됩니다. 즉, 컴퓨터에서 직접 실행을 하는 게 아니라 브라우저 안에서 사용자가 원하는 기능을 수행합니다. 워드라는 어플리케이션을 브라우저라는 어플리케이션 안에서 돌아가게 한다고 보시면 됩니다.
이 둘의 장단점은 명확합니다.
장점 | 단점 | |
네이티브 앱 | 컴퓨터가 직접 기능을 수행하기 때문에 빠르다. | 컴퓨터에 직접 프로그램을 설치하는 과정이 필요하다. |
웹 앱 | 컴퓨터가 직접 실행을 하지 않고 브라우저가 중간에 껴서 기능을 수행하기 때문에 상대적으로 느리다. |
직접 설치를 하는 과정이 없다. |
브라우저를 통해 실행하는 웹 앱이 네이티브 앱보다 느린 이유는 스위스 칼과 전문 용도의 칼과 비교해보시면 이해하기 쉽습니다.
스위스 칼은 다양한 용도로 쓸 수 있습니다. 가위도 있고, 칼도 있고, 병따개 등 다양한 기능을 가지고 있습니다. 그래서 캠핑을 가거나 여행을 갈 때 유용하지만, 우리가 스위스 칼을 집에서 요리할 때에도 쓰나요?
전문 회칼이나 가위 등이 스위스 칼보다 휴대성은 부족하지만, 자기만의 기능을 수행하는 데에 있어서는 스위스 칼과 비교도 안 되게 좋습니다.
마찬가지로 브라우저는 스위스 칼처럼 다양한 컨텐츠를 보여주기 위해 만든 도구입니다. 문서를 보여주기도 하고, 검색 창을 띄워주기도 하고, 엑셀이나 워드 등의 기능도 수행할 수 있습니다. 하지만 스위스 칼처럼 하나의 용도를 위해 최적화 된 도구가 아닙니다.
반면에 네이티브 앱은 전문 도구처럼 단 하나의 용도를 위해 만들어진 도구입니다. 브라우저처럼 다양한 것을 하지는 못하지만 엑셀이면 엑셀, 워드면 워드의 기능만을 전문적으로 수행하기 위해 만들어졌기 때문에 최적화가 되어 있고 속도가 빠릅니다.
추가적으로 성능 외적으로 중요한 현실적인 한 가지를 말씀드리자면, 바로 ‘즉시 업데이트 여부’입니다.
네이티브 앱은 위에서 언급했듯이 설치하는 과정이 필요합니다. 그리고 스마트폰 앱에서는 앱 스토어 또는 구글 플레이 등 앱 마켓을 통해서 설치하게 됩니다.
애플이나 구글 등 앱 마켓을 관리하는 입장에서는 혹시라도 자기의 앱 마켓에 피싱 앱이나 잔인한 컨텐츠 등을 퍼뜨리는 앱이 있다고 소문이 나면 피해가 막심할 것입니다. 따라서 앱을 마켓에 올릴 때 심사를 굉장히 까다롭게 하는 편입니다. 처음 등록할 때가 제일 깐깐하지만 이후 새로운 버전으로 업데이트를 할 때에도 매번 심사를 요청해야 되며, 심사 기간은 짧게는 몇 시간, 길게는 며칠이 걸리기도 합니다.
근데 만약 앱에서 치명적인 버그가 발견됐다고 하면 어떨까요? 급하니까 심사 없이 바로 앱 스토어에 업데이트 시켜 줄까요?
아닙니다. 제 경험상 급한 버그가 있다고 빠른 심사를 요청해도 보통의 심사 시간과 크게 차이나는 것을 못 봤습니다. 때문에 초반에 앱을 출시했을 때에는 특히나 빠르게 업데이트를 할 수 없다는 점이 부담스럽게 다가올 수 있습니다.
반면에 웹앱은 브라우저를 통해 인터넷에서 즉시 앱을 실행하기 위한 요소들을 다운로드 받는 방식이기 때문에 혹시라도 수정해야 될 사항이 있으면 앱 스토어의 심사를 거치지 않고도 업데이트를 배포하는 것이 가능합니다.
이런 차이점들도 어떤 기술 스택을 선택할지 결정하실 때 고려를 해보시면 좋을 것 같습니다.
오늘은 기술 스택이 뭔지, 그리고 클라이언트의 기술 스택 중 제일 먼저 고려해야 할 네이티브 앱과 웹 앱에 대해 알아봤습니다. 그리고 네이티브 앱과 웹 앱 각각의 장단점에는 어떤 것이 있는지 알아봤습니다.
다음 글에서는 조금 더 깊이 들어가서 네이티브와 웹 각각 어떤 기술 스택이 있는지 자세히 알아보겠습니다.
궁금하신 점이 있으시거나 추가적으로 다뤘으면 좋겠다 싶은 내용들은 댓글로 달아주시고, 이 글이 IT를 이해하는 데 도움이 되셨다면 좋아요와 구독 부탁드립니다.
감사합니다!
1) 기술적으로 정확하게 따지면 프로그램이 컴퓨터에게 직접 명령을 내리는 것은 아니지만, 대략 그런 느낌이라고 이해하셔도 문제될 것은 없습니다.
'스타트업 개발자 채용' 카테고리의 다른 글
블라인드 어플을 만드는 데 필요한 것들-3 (3) | 2024.02.19 |
---|---|
블라인드 어플을 만드는 데 필요한 것들-2 (0) | 2024.02.13 |
블라인드 어플을 만드는 데 필요한 것들 (1) | 2024.02.06 |