1. 네트워크 모델


네트워크(Network)란 여러 기기들이 데이터를 교환할 수 있는 인터넷 망을 의미한다.

데이터를 요청하는 쪽이 클라이언트(Client), 요청을 확인하고 응답을 보내는 쪽이 서버(Server)이다. 네트워크를 구성하는 모델은 많은 경우가 있지만 대표적인 2티어, 3티어 모델을 살펴보자.


1) 2티어 모델

1

클라이언트에서 데이터를 요청(Request)하면 서버에서 응답(Response)를 통해 결과를 보여주는 단순한 방식이다.


2) 3티어 모델

2

DB 중간에 응용 서버를 두어 여러 클라이언트들의 요청 트래픽 분산 처리, 요청을 받아 필요한 데이터에 액세스하여 클라이언트에게 응답을 보내주는 역할을 한다. 클라이언트측에서 보면 응용서버가 실제 DB처럼 보인다.


위에서 서버라고 하여 실제로 방대한 데이터를 저장하는 저장소로만 생각하면 안된다. 예를 들어 서로 다른 두 개의 모바일이 P2P(Peer-to-Peer) 통신을 하는 경우에는 각각의 모바일 단말이 클라이언트와 서버가 될 수 있다.


2. 소켓과 HTTP


데이터 통신 방식에는 대표적으로 소켓(Socket) 통신 방식과 HTTP(Hyper-Text Transfer Protocol) 요청 방식이 있다. 소켓과 HTTP 통신 방식과 차이에 대해 알아보자.


1) HTTP

HTTP 프로토콜은 클라이언트로부터 요청이 오면 응답을 하고 곧바로 연결을 종료한다. 따라서 단방향 통신으로 보아야하며, 서버에서는 클라이언트측으로 요청을 보낼 수 없다. 가장 대표적인 경우가 웹 페이지 요청이다. 사용자가 인터넷 브라우저에서 특정 페이지에 접속하는 행위는 웹 서버로 웹 페이지 화면을 띄워달라는 요청을 보내는 것이다. 웹 서버에서는 웹 페이지를 구성하는데 필요한 데이터를 응답으로 보내고 곧바로 연결을 종료한다.


2) 소켓

소켓이란 네트워크에서 클라이언트와 서버가 데이터를 주고받기 위한 소프트웨어적인 장치이다. 일종의 창구 개념으로 보면된다. 데이터를 주고받으려면 클라이언트와 서버 모두 소켓을 뚫어주어야한다.

소켓 통신에서는 클라이언트와 서버 사이의 연결이 지속되고 실시간으로 양방향으로 데이터를 주고받는다. 실시간 스트리밍 중계방송 등이 소켓통신을 활용한 경우에 해당한다. 만약 실시간 스트리밍을 HTTP 통신으로 구현하려면 실시간 화면 업데이트를 위해 끊임없이 요청과 응답이 오고가야 하므로 엄청난 부하가 걸릴 것이다. 따라서 이러한 경우 소켓 통신이 유리하다.



3. 안드로이드 네트워킹


안드로이드에서는 소켓을 사용하기 위해서 기본적으로 표준 자바의 java.net 라이브러리를 그대로 사용한다.

단, 안드로이드에서는 네트워킹을 사용할 때 반드시 지켜야 할 것들이 있다.


  1. 최신 버전의 안드로이드는 네트워크킹을 사용할 때 반드시 스레드를 사용해야한다.
  2. 따라서 네트워크를 통해 UI에 접근할 때는 메인스레드의 핸들러를 통해서 한다.

+ Recent posts