클라이언트와 서버, 웹(web)과 앱(app)

디지털 리터러시 강좌의 맛보기 강의입니다.

강의 대본 보기

디지털 환경의 서비스를 구성하는 기반 구조인 클라이언트와 서버, 그리고 서비스를 개발하는 주요 환경인 웹과 앱에 대해서 살펴보도록 하겠습니다. 디지털 인프라 아키텍처 상에서 클라이언트 서버는 이 네모 박스로 이해해 볼 수 있습니다. 이걸 클라이언트라고 표현을 하고요. 오른쪽에 있는 네모 박스를 서버라고 표현을 해요. 클라이언트와 서버는 뭐냐, 클라이언트라는 건 어떠한 서비스를 요청하는 시스템 또는 프로그램을 클라이언트라고 하고요, 클라이언트 요청을 처리하는 시스템 또는 프로그램을 서버라고 얘기할 수가 있습니다. 그러면 클라이언트가 어떠한 요청을 하고 그 요청을 처리해서 그 서버는 요청 결과를 클라이언트에 전송을 하게 되는 거예요. 그럼 이 둘 사이에는 어떻게 커뮤니케이션을 진행하게 될까요? 실제 네트워크 상에서 단말 간에 커뮤니케이션을 진행하기 위해서는 프로토콜이라는 통신 규약을 활용합니다. 이 통신 규약에서 TCP/IP를 기반으로 범용적으로 통신할 수 있도록 하는 역할이 바로 인터넷 환경이라고 보시면 됩니다. 한마디로 인터넷 환경을 통해서 클라이언트와 서버는 효과적으로 커뮤니케이션을 진행할 수 있다고 이해하시면 됩니다. 그러면 클라이언트와 서버에 대해서 좀 더 자세하게 이해하는 시간을 갖도록 하겠습니다. 인터넷에는 수많은 장치들이 연결되어 있습니다. 그 장치들 중에서 클라이언트는 사용자가 보는 화면에서 사용자가 상호작용을 하면서 서비스를 요청하는 컴퓨터 또는 프로그램을 의미합니다. 대표적으로 크롬이나 엣지, 카카오톡, 사용자 PC, 휴대폰 등이 대표적인 클라이언트가 되는 거예요. 서버는 클라이언트 요청에 따라서 클라이언트에 서비스를 제공하는 시스템 또는 프로그램이라고 지칭할 수 있고요. 제공하는 서비스 유형에 따라서 웹 서비스 서버, 데이터베이스 서버, 파일 서버, 검색 엔진 서버, 카카오톡 메시지 서비스 서버 등으로 불립니다. 그러면 이 환경에서 직업적 관점에서는 개발자라고 한다면 서비스 요청을 처리하는 개발을 할 거냐라고 하는 걸 우리는 서버 개발자라고 표현하고요. 그리고 서버에게 요청을 하는 프로그램을 개발할 거냐라고 한다면 클라이언트 개발자라고 얘기를 합니다. 클라이언트 서버 환경에서 프로그램이 개발되는 방식에 따라 웹과 모바일 앱으로 구분할 수 있습니다. 이 둘 사이의 차이점은 다음과 같습니다. 웹이라고 하는 건 이렇게 설명드리도록 하겠습니다. 웹에서 클라이언트는 브라우저가 담당을 합니다. 브라우저가 담당하고 브라우저에서 어떤 요청을 받으면 서버에서 서비스를 제공합니다. 그런데 웹이라고 하는 건 동작하는 모든 코드가, 모든 프로그램이 서버에만 존재합니다. 프로그램이 서버에 존재해요. 그리고 서버에서 어떤 요청은 url.naver.com 같은 URL 요청이 딱 들어오면 그 요청 URL을 해석해서 URL 뒤에 있는 path에 따라서 만약에 보면 naver.com/blog라고 한다면 블로그에 해당하는 어떠한 프로그램이 하나 실행이 됩니다. 실행된 결과물이 HTML 이 완성이 되고 완성된 HTML이 그대로 다운로드 돼서 다운로드 된 HTML을 브라우저가 그대로 화면에 보여줘서 이 프로그램이 동작해요. 그런데 프로그램이 동작하는 게 모두 다 서버에 있다는 게 가장 큰 특징이에요. 그러다 보니까 웹 환경에서는 서버에서 모든 서비스를 개발해요. 모든 서비스를 개발하니까 예를 들어서 제가 지금 버전 1.0을 개발했고요. 버전 1.0에 어떤 버그가 있어요. 버그가 있으면 버그를 해결하기 위해서는 어떻게 돼요? 서버에 접속해서 v1.1 패치를 만들어서 업로드만 하면 업로드가 완료된 이후에 유저가 URL을 통해서 요청을 하면 개선된 코드가 그대로 다운로드가 됩니다. 그래서 실제 유지보수나 그리고 브라우저를 통해서 실행되기 때문에 이 녀석은 단말에 관계없이 PC에서 접속하던, 휴대폰에서 접속하던, 리눅스에서 접속하던 브라우저만 있으면 동일하게 다 HTML을 해석해서 동일한 서비스 개발이 가능합니다. 그러다 보니까 가장 보편적인 개발 방식이 바로 웹 환경이라고 보시면 됩니다. 이 웹은 좀 더 자세하게 살펴보면 월드 와이드 웹의 줄임말이고요. 인터넷망으로 세계 각지를 연결하는 서비스예요. 웹 브라우저가 있어야 서버와의 통신에서 정보를 출력할 수 있습니다. 사용자가 보는 웹 페이지의 HTML, CSS 등의 동작 정보 원본은 웹 서버에 있어요. 웹 서버의 정보가 업데이트가 되면 사용자는 새로고침하면 언제라도 변경된 정보를 열람할 수 있습니다. 웹 환경을 개발할 수 있는 주요 개발 스택이 HTML, HTML5, CSS, JavaScript 같은 언어를 이용해서 웹 개발을 진행한다고 이해하시면 됩니다. 그에 비해서 앱이라고 하는 것은 이렇게 동작합니다. 클라이언트가 있고 서버가 있는데 실제 대부분의 프로그램이 바로 클라이언트에 존재하는 게 바로 앱이에요. 대부분의 동작 소스 코드가 클라이언트에 있으니까 어떤 일이 발생해야 될까요? 최초 유저가 이 앱을 사용하기 위해서는 앱 스토어 앱 스토어라는 곳에 단말을 통해서 접속을 합니다. 유저가 사용하는 클라이언트 유형이 iOS면 애플 쪽 앱 스토어에 접속을 할 거고, 유저가 사용하는 단말이 안드로이드다 라고 한다면 구글 플레이스토어에 접속을 하게 됩니다. 플레이스토어에 접속해서 내가 원하는 배포를, 클라이언트의 다운로드를 위한 서비스를 우리가 앱 스토어에 업로드를 해 두는 거예요. 업로드를 해주면 클라이언트가 앱 스토어를 통해서 이 앱을 다운로드 받습니다. 다운로드하고 설치를 하면 클라이언트에 이 코드가 그대로 삽입되게 되는 거예요. 그리고 이 클라이언트를 실행하면 대표적인 게 카카오톡이 되겠죠. 카카오톡 같은 앱을 실행하면 이제부터는 어떤 정보는 클라이언트에 존재하고 어떤 정보는 서버에 존재하게 됩니다. 개인 정보라든가 예를 들어서 이미지라든가 그런 것들은 클라이언트에 존재하겠죠. 그리고 통신하면 통신 메시지 같은 경우는 서버에 존재할 거예요. 그러다 보니까 어떤 요청을 보냈고 요청을 받고 서비스를 제공하고 있는데 지금 버전 1.0에 문제가 생겼어요. 버전 1.0 문제가 생기면 웹 환경에서는 서버에서 코드를 그대로 수정해서 수정된 코드를 그대로 올려놓으면 유저가 브라우저를 새로 고침하는 순간 이 1.1 코드가 유저에게 실행이 돼요. 그런데 앱 환경에서는 1.0 환경에서 내가 1.1이라고 하는 새로운 앱을 다시 배포를 하려고 해요. 그럼 어떻게 하냐, 새로운 1.1 버전을 앱 스토어에 1.1로 업로드를 다시 해줘야 돼요. 업로드를 해주면 어떤 유저는 예를 들어서 유저가 3명이 있으면 어떤 유저는 버전 0.9를 사용하는 유저가 있고, 어떤 유저는 버전 1.0 앱을 사용하는 유저가 있고, 어떤 유저는 버전 1.1 앱을 사용하는 유저가 발생할 수도 있습니다. 그래서 이런 부분을 방지하기 위해서 반드시 배포에 대한 버전을 처리하는 그러한 추가적인 로직이 필요해요. 그래서 주로 많이 하는 것들이 서버에 앱이 실행하면 서버에 버전 체크 알고리즘을 갖다 놓고 지금 앱이 버전 1.0인데 이 1.0을 사용해도 된다, 아니면 반드시 이건 필수 패치가 됐으니까 1.0 유저는 반드시 앱을 사용하려면 앱 스토어에 다시 접속해서 업데이트를 해서 업데이트를 하는 순간 1.1이 다시 다운로드가 돼서 버전 1.1이 된 다음에 사용할 수 있도록 하는 정책들을 서버에 만들어 놔야 됩니다. 그러면 웹과 비교해 보면 앱이 상당히 불편할 수도 있겠죠. 그러면 장점은 뭐가 있을까요? UI나 사용자 인터랙션이 되게 화려할 수가 있습니다. 그리고 실행 시 속도가 웹보다 훨씬 빠를 수가 있어요. 그래서 게임이라든가 사용자 인터랙션이 되게 중요한 그런 서비스에서는 웹 환경이 아니라 모바일 앱을 기반으로 서비스를 기획할 수가 있습니다. 이 두 환경은 어떤 게 탁월하게 좋다가 아니라 장단점이 존재한다고 보시면 될 거예요. 그래서 앱은 스마트폰 등장으로 대중화된 용어로서 운영 체제 위에 독립적으로 동작하는 애플리케이션 프로그램을 의미합니다. 앱 프로그램의 동작 정보 원본은 사용자 기기에 들어 있어요. 따라서 앱의 동작 정보를 업데이트 하려면 새로운 앱 버전을 다운로드 해야 됩니다. 그리고 일부 모바일 웹 정보를 출력하는 앱을 제외한다고 얘기했는데 이 녀석은 이 특징을 판단하기 위해서 웹 앱이라고 해서 껍데기는 앱이지만 실제 동작하는 건 웹으로 구현할 수가 있어요. 그러니까 앱에 브라우저를 내장시킨 거예요. 그리고 그 다음에 URL을 클릭하면 URL이 실행되도록 해서 마치 실제 사람들은 모바일 앱이라고 생각하지만 동작은 웹처럼 동작하게 할 수도 있습니다. 이건 특별한 목적에 따라서 기획할 수가 있고요. 일반적으로는 보면 대부분 다 모바일 앱 코드로 만들어지게 될 거고요. 그럴 때 사용하는 개발 환경은 안드로이드나 iOS에 맞는 플랫폼 언어를 사용하게 됩니다. 자, 이상으로 해서 클라이언트와 서버, 웹과 앱에 대해서 살펴봤습니다.

이 강좌의 맛보기 강의

디지털 리터러시
디지털 리터러시강좌 자세히 보기