Http 통신 vs Socket 통신


단말기와 웹서버와 통신 방식은 다음과 같이 크게 두 가지로 구분할 수 있습니다. 


    ① HTTP 통신

    ② Socket 통신


HTTP와 Socket의 가장 큰 차이점은 접속(Connection)을 유지하는지의 여부입니다. 물론 파일 전송만을 전문으로 처리하는 FTP도 있지만 이것은 HTTP를 확장한 개념이므로 HTTP에 포함시키겠습니다.



1. HTTP 통신


HTTP 통신은 웹브라우저에 정보를 표시하는 것과 같이 클라이언트의 요청이 있을 때 서버가 해당 페이지에 대한 자료를 전송하고 곧바로 연결을 끊는 방식입니다. 현재 여러분이 제 블로그를 보고 있지만 맨 처음 이 페이지가 보여지는 순간만 서버와 연결되고 현재는 서버와 접속이 끊어진 상태입니다. 이 상태에서 F5 키를 눌러 새로고침을 하거나 다른 페이지로 이동하면 그때 다시 서버에 연결이 될 것입니다.


이렇게 하는 이유는 단 한가지. 서버의 부하를 줄여서 다른 접속을 원활하게 처리하기 위해서입니다. 여러분이 F5 키를 계속 누르거나 아예 F5 키에 연필을 꽂아서 클라이언트가 서버를 계속해서 물고 늘어지면 서버는 이 클라이언트의 연결을 유지하느라 다른 컴퓨터의 응답이 늦어질 것입니다. 이런 방식으로 여러 대의 PC가 서버를 붙잡고 늘어져서 서버가 다른 일을 하지 못하도록 하는 것을 DDOS 공격이라고 하죠...



2. Socket 통신


Socket 통신은 클라이언트가 서버와 접속이 되면 서버나 클라이언트에서 강제로 접속을 해제할 때까지는 계속해서 접속이 유지됩니다. 따라서 서버의 능력이 무한대가 아닌 이상 동시에 접속할 수 있는 클라이언트의 수가 제한이 될 수 밖에 없겠죠. 



Socket 통신은 실시간으로 정보 교환이 필요하는 채팅이나 온라인 게임, 실시간 동영상 강좌 등에 사용됩니다. 따라서 이와 같은 경우가 아니라면 서버와의 통신은 HTTP를 사용하는 것이 시스템의 자원을 보다 효과적으로 사용할 수 있습니다.



3. 시스템의 구성


단말기가 서버에 접속하기 위해서는 서버에 단말기의 응답을 처리하는 별도의 프로그램이 있어야 합니다. 저는 이것을 서버 모듈이라고 부르겠습니다. 서버 모듈은 C, PHP, Java, ASP 등 다양한 언어로 작성될 수 있을 것지만, 제가 사용하는 서버가 아파치 웹서버를 사용하므로 PHP로 구성하기로 합니다. 서버와 통신하기 위한 시스템의 구성은 다음 그림과 같습니다.




출처: http://k9e4h.tistory.com/150 [Kim's :D]

'서버 > 기술' 카테고리의 다른 글

CURL 이란?  (0) 2018.12.22
restful api  (0) 2018.12.03

CURL 이란?


서버와 통신할 수 있는 커맨드 명령어 툴이다. 웹개발에 매우 많이 사용되고 있는 무료 오픈소스이다 curl의 특징으로는 다음과 같은 수 많은 프로토콜을 지원한다는 장점이 있다.

다양한 지원 프로토콜들
DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, Telnet, TFTP

또한 SSL 인증 방식 역시 가능하다.


여기서 내가 가장 잘 알고 있는 프로토콜은 역시나 HTTP와 HTTPS이다. 

HTTP 통신은 프로젝트에서도 많이 사용해 봤기 때문에 익숙하다.


가장 많이 사용하는 프로토콜들 몇 가지를 알아보겠다.




첫 번째, HTTP 프로토콜이다.


HTTP: HTTP(Hypertext Transfer Protocol)는 인터넷상에서 데이터를 주고 받기 위한 서버/클라이언트 모델을 따르는 프로토콜 이다. 애플리케이션 레벨의 프로토콜로 TCP/IP위에서 작동한다.

가장 성공적인 인터넷 프로토콜이다. HTTP가 없었다면 인터넷은 지금과는 전혀 다른 모습이였을거다.

HTTP는 어떤 종류의 데이터든지 전송할 수 있도록 설계돼 있다. 인터넷상에서 흔히 볼수 있는 HTML로 작성된 문서는 HTTP로 보낼 수 있는 데이터의 한 종류일 뿐이다. 이미지, 동영상, 오디오, 텍스트 문서들 아무튼 종류를 가리지 않는다.

Transfer라는 해석 그대로 데이터를 전송하겠다라는 의미로 앞에 Hypertext 가 붙은 이유는 하이퍼텍스트 기반으로 데이터를 전송하겠다는. 간단히 말해서 링크기반으로 데이터에 접속하겠다는 의미가 되겠다.


HTTP는 서버/클라이언트 모델을 따른다. 클라이언트에서 요청(request)를 보내면 서버는 요청을 처리해서 응답(response)한다.

  1. 클라이언트 : 서버에 요청하는 클라이언트 소프트웨어가 설치된 컴퓨터. chrom, firefox, ie등의 클라이언트 소프트웨어를 이용한다. 클라이언트는 URI를 이용해서 서버에 접속하고, 데이터를 요청할 수 있다.
  2. 서버 : 클라이언트의 요청을 받아서, 요청을 해석하고 응답을 하는 소프트웨어가 설치된 컴퓨터. Apache, nginx, IIS, lighttpd 등이 서버 소프트웨어다.

웹서버는 보통 표준포트인 80번 포트로 서비스한다.




두 번째, FTP 프로토콜이다.


Fileile Transfer Protocol의 줄임말이다. 하나의 호스트에서 다른 호스트로 파일을 옮기기 위한 TCP기반 프로토콜이다. 보통 FTP는 웹상에 파일을 올리기 위한 목적으로 널리 사용되고 있다. FTP는 서버&클라이언트 모델을 따른다. 클라이언트는 서버에 연결해서 파일 업로드 및 다운로드 요청을 하고, 요청을 받은 서버가 응답 데이터로 파일을 전송하거나 수신한다. 




세 번째, STMP 프로토콜이다.


간이 전자 우편 전송 프로토콜(Simple Mail Transfer Protocol, SMTP)은 인터넷에서 이메일을 보내기 위해 이용되는 프로토콜이다. 사용하는 TCP 포트번호는 25번이다. 상대 서버를 지시하기 위해서 DNS의 MX레코드가 사용된다. RFC2821에 따라 규정되어 있다. 메일 서버간의 송수신뿐만 아니라, 메일 클라이언트에서 메일 서버로 메일을 보낼 때에도 사용되는 경우가 많다.

SMTP는 텍스트 기반의 프로토콜로서 요구/응답 메시지뿐 아니라 모든 문자가 7bit ASCII로 되어있어야 한다고 규정되어 있다. 이 때문에 문자 표현에 8비트 이상의 코드를 사용하는 언어나 첨부파일과 자주 사용되는 각종 바이너리는 마임(MIME)이라고 불리는 방식으로 7비트로 변환되어 전달된다.

SMTP는 메시지를 생성하는 방법을 규정하지 않는다. 메시지 생성을 위하여 로컬 편집이나 단순한 전자 우편 응용이 사용된다. 메시지가 생성되면 호출된 SMTP가 메시지를 받고 TCP를 이용하여 다른 호스트의 SMTP에게 전달한다.



네 번째, TELNET이다.


텔넷.tele network의 준말. 멀리 떨어진 컴퓨터에 연결해 이쪽 컴퓨터를 그쪽에 연결된 터미널로 만들어 주는 인터넷 표준 프로토콜이다. 흔히 컴퓨터 통신을 할 때 쓰는 이야기 등과 같은 터미널 에뮬레이터를 생각하면 된다. 다만 텔넷은 인터넷을 통해서 연결된다는 점만이 다르다. 실제로 하이텔이나 천리안 등 PC통신도 인터넷에 연결하면 텔넷으로 들어갈 수 있다. 텔넷 접속을 하기 위해서는 일반 통신프로그램이나 텔넷 전용 프로그램이 필요하다.



'서버 > 기술' 카테고리의 다른 글

Http 통신 vs Socket 통신  (0) 2019.01.06
restful api  (0) 2018.12.03

 REST의 정의

UTTP URI로 잘 표현된 리소스에 대한 행위를 HTTP Method로 정의한다. 리소스의 내용은 json, xml, yaml

등의 다양한 표현 언어로 정의된다.


REST의 특징

 1)Uniform (유니폼 인터페이스)

Uniform Interface는 URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처

스타이를 말한다.


 2)Stateless (무상태성)

REST는 무상태성 성격을 갖는다. 다시 말해 작업을 위한 상태정보를 따로 저장하고 관리하지 않는다. 세션

정보나 쿠키정보를 별도로 저장하고 관리하지 않기 때문에 API 서버는 들어오는 요청만을 단수히 처리하면

된다. 때문에 서비스의 자유도가 높아지고 서버에서 불필요한 정보를 관리하지 않음으로써 구현이 단순해진다.


 3)Cacheable (캐시 가능)

REST의 가장 큰 특징 중 하나는 HTTP라는 기존 웹표준을 그래도 사용하기 때문에, 웹에서 사용하는 기존 인프라

를 그대로 활용이 가능하다. 따라서 HTTP가 가진 캐싱 기능이 적용 가능하다. HTTP 프로토콜 표준에서

사용하는 Last-Modified 태그나 E-Tag를 이용하면 캐싱 구현이 가능하다.


 4) Self-descriptiveness(자체 표현 구조)

REST의 또 다른 특징 중 하나는 REST API 메시지만 보고도 이를 쉽게 이해 할 수있는 자체 표현 구조로 되어

있다는 것이다.


 5)Client - Server 구조

REST 서버는 API 제공, 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보)등을 직접 관리하는 구조로 각

각의 역할이 확실히 구분되기 떄문에 클라이언트와 서버에서 개발해야 할 내용이 명확해지고 서로간 의존성이

줄어들게 된다.


 6)계층형 구조

REST 서버는 다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘

수 있고 PROXY, 게이트웨이 같은 네트워크 기반의 중간매체를 사용할 수 있게 한다.




 RESTFUL API의 장점

 1) rest api 메시지 자체를 읽기만 하는 것으로도 메시지의 본래 의도를 파악할 수 있을 정도로 쉽게 이해가 된다. HTTP 인프라를 그대로

이용하기 때문에 REST를 사용하기 위해 별도의 인프라를 요구할 필요가 없다.

 2)리눅스 서버에 있는 웹서버에 윈도우에서 동작하는 웹 브라우저가 붙어서 동작할 수 있다.


RESTFUL API의 단점

 1)HTTP 메소드의 한계에 묶인다.

간단한 수준의 메소드만 지원할 수 있다.

 2)표준이 없어서 관리하기 어렵다.

어떤 가이드는 특정한 REST API에는 맞지만 또 다른 곳에는 맞지 않을 수 있다.

 3)RDBMS와 어색한 관계

REST API를 RDBMS에 적극적으로 사용하기 위해서는 RESTful한 테이블 구조가 필요하게 되는데, 이것보

다는 NoSQL쪽이 더 잘맞는 추세다.


참고 : https://meetup.toast.com/posts/92

'서버 > 기술' 카테고리의 다른 글

Http 통신 vs Socket 통신  (0) 2019.01.06
CURL 이란?  (0) 2018.12.22

+ Recent posts