728x90
반응형

네트워크 통신에 대해서 알아보겠습니다.

네트워크 통신을 사용하는 이유와 네트워크 통신의 종류에 대해서 중점적으로 알아볼려고 합니다.

이 글을 다 읽으시면 네트워크 통신에 대한 전반적인 이해를 하실 수 있습니다.

네트워크 통신에 대해서 평소에 궁금하셨던 분들은 끝까지 읽어주시면 도움이 될 것 같습니다!

네트워크 통신을 사용하는 이유

앱에서 사용되는 대량의 데이터는 파일을 따로 구성하여 앱 내부에 넣어두고, 이 파일을 읽는 방식으로 처리됩니다. 

콘텐츠 서비스 앱은 최신의 데이터가 핵심요소인데요!

하지만 데이터를 파일에 저장하는 방식으로 처리하게 된다면 새로운 데이터를 추가할 때 마다 

사용자는 앱 업데이트를 받아야 하고, 그럴수록 사용자 경험은 점점 나빠지게 됩니다. 

따라서 데이터를 서버에 두고, 서버로 부터 다운받아 사용한다면 이를 해결할 수 있습니다.

서버에 새로운 데이터를 업로드하고, 앱은 이 서버로 부터 데이터를 받아내면

사용자는 앱에 대한 업데이트 없이 최신데이터를 받을 수 있습니다.

 

네트워크 통신의 종류

  • 소켓방식의 연결성 통신 : TCP/UDP
  • 프로토콜을 이용한 비연결성 통신 : HTTP, HTTPS, SMTP

즉, 네트워크 통신은 연결성이나 비연결성이냐 이 두가지로 나뉩니다.

 

소켓 방식의 연결 지향 통신

소켓을 이용한 네트워크 통신은 보통 저수준통신을 통하여 구현이 됩니다.

소켓은 전구가 결합하는 개념을 따온 것인데요!

앱과 서버가 연결되면 한쪽에서 연결을 끊기 전까지 계속 연결이 유지되기 때문에

연결 지향 통신이라고 합니다. 

 

따라서 연결을 계속 유지하기 위해서

네트워크 대역도 많이 소모되고, 서버 부하도 크기 때문에

모바일 서비스에서는 메신저, 화상통화, RPG게임 등에서 주로 사용한다고 합니다. 

 

비연결 지향 통신

비연결성 통신은 프로토콜을 사용하여 메시지를 주고 받는 방식을 말합니다. 

대표적으로 HTTP/HTTPS 프로토콜이 있으며, 웹 서비스에 주로 사용됩니다. 

소켓 통신과는 달리 요청이 들어오면 응답을 보낸 후 바로 연결을 끊습니다.

따라서 비연결성이라고 해서 연결이 아예 없는게 아니라,

요청과 응답을 완료한 후에 연결을 유지하지 않을 뿐입니다!

 

연결을 유지하지 않기 때문에 소켓 방식에 비해 상대적으로 속도가 느리지만,

네트워크 대역 소모를 많이 감소시킬 수 있고, 서버 부하도 낮출 수가 있습니다.

 

또한 연결을 끊어버리기 때문에, 클라이언트의 이전 상태를 알 수가 없다는 단점이 있는데요.

(이를 멋있는 말로 stateless라고 하고 비연결성으로 부터 파생되는 특징이라고 할 수 있겠죠!)

예를 들어 클라이언트가 과거에 로그인을 성공하더라도 나중에 다시 들어가면 말짱 도루묵이라는 거겠죠.

따라서 비연결성 통신으로 대표적인 HTTP는 cookie와 세션를 이용해서 이 문제를 해결하고 있습니다. 


쿠키(cookie)

쿠키는 클라이언트와 서버의 상태 정보를 담고 있는 정보 조각이라는 의미를 가지는데요.

아까 예를 들은 로그인을 예로 들자면, 클라이언트가 로그인에 성공하면,

서버는 로그인 정보를 자신의 데이터베이스에 저장하고 cookie를 생성하여 클라이언트에 보냅니다.

그럼 클라이언트에서는 서버에서 생성한 쿠키정보를 저장합니다.

따라서 클라이언트는 다음 번 요청 때(다음 로그인할 때) cookie를 담아서 서버에 보내고, 

서버는 cookie값을 통해 자신의 데이터베이스를 조회해서 과거 로그인 여부를 확인할 수 있는 것이죠!

쿠키는 매우 편하게 인증을 할 수 있게 해줄 수 있다는 장점을 가지지만,

클라이언트와 서버를 왔다갔다 하면서 보안의 위험성이 크다는 단점이 있다고 합니다. 

쿠키는 기본적으로 브라우저가 종료되도 유지됩니다.

 

세션(session)

세션도 기본적으로 쿠키를 사용합니다. 

하지만, 세션id만 쿠키로 저장하고, 세션 id를 id로 하여 나머지 정보들은 서버에 저장합니다. 

(이를 "세션을 유지한다고 합니다.)

이점만 다르고 과정은 위의 쿠기 방식과 비슷합니다.

서버는 세션을 생성하고 세션id를 쿠키에 담아 클라이언트에 보냅니다.

클라이언트는 이를 저장하고, 다음 요청 때 세션id 쿠키를 담아서 서버에 보내면 

서버는 세션id로 클라이언트를 식별하는 것이죠!

세션은 세션id를 제외한 나머지 데이터들을 서버에 저장하기 때문에 보안성이 높습니다.

하지만 서버에서 데이터를 더 가지고 있는 만큼 부하가 늘어난다는 단점이 있습니다. 

즉, 서버에 세션이 많이 존재하면 서버가 터질 수도 있습니다. 

따라서 기본적으로 브라우저가 종료되면 소멸됩니다. 

또한 서버에서 데이터를 바로 읽어 처리할 수 있는 쿠키에 반해, 세션은 세션id를 통해 세션을 읽어온 다음 

또 데이터를 읽어야 하기 때문에 속도가 상대적으로 느립니다. 


Restful

Rest는 HTTP기반으로 필요한 자원에 접근하는 방식을 정해놓은 네트워크 아키텍쳐입니다. ==> URL

(실무에서는 서버 개발자가 요청 형식을 정의 - > 앱 개발자가 따르는 구조)


이상으로 네트워크 통신을 해야하는 이유 및 네트워크 통신의 종류를 알아봤는데요.

꼬리에 꼬리에 무는 이야기처럼 비연결성 통신의 단점을 해결하는 쿠키와 세션에 대해서도 알아보았습니다.

네트워크 통신을 사용하는 이유에 대해서는 생활 속에서 많은 앱을 사용하면서도 

제대로 짚고 넘어가본 적이 없었는데, 저도 이번 기회에 공부하면서 처음 알게 되었어요!

모호한 개념을 확실히 알고 넘어갈 때, 더러운 창문을 깨끗이 닦는 느낌? 그런 개운함?이 있는거 같아요!

 

그럼 도움이 되셨다면 공감, 댓글, 구독을 부탁드립니다.!

 

 

 

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기