webService.Communication.SSL

웹 서비스와 통신하는 다른 방법

by jeromeNa

webService.Communication.url 글에서 보면 포트를 열어서 여러 개 서비스가 가능하도록 했다. 항구라는 말 그대로 포트에는 다수의 접속자가 접속할 수 있다. 대부분 Request 하고 Response를 받는다. 사용자가 Request를 하면 서버에서 Response가 올 때까지 대기한다. Response가 전달되면 서버는 바로 연결을 끊어버린다. 다시 Request를 하면 다시 연결하고 Response를 전달한다. 그리고 바로 연결을 끊어버린다.


서버 입장에서는 연결된 상태를 계속 유지하고 있을 이유가 없기 때문이다.


유지하는 것 자체가 자원 낭비이고, 수많은 요청마다 연결을 계속 유지한다면 과부하가 걸릴 수도 있다. 요청할 때만 응답을 주니 실시간으로 데이터를 받고 싶을 때 불편하다. 이것을 해결하고자 나온 개념이 소켓(Socket)이다.




소켓(Socket)은 흔히 알고 있는 멀티탭에 전원을 꼽는 소켓과 같은 의미다. 나와 서버에서 제공하는 소켓에 선을 이어서 연결 상태를 계속 유지하는 개념이다. 소켓에 연결하면 서버에서 데이터의 업데이트나 뭔가 액션이 발생할 경우 따로 요청하지 않아도 데이터를 실시간으로 전달받을 수 있다.


소켓은 채팅에서 많이 사용하는 방식이다. 채팅방에 들어가는 것에서부터 소켓 연결이 이루어진다. 상대방이 메시지를 보내면 소켓에 연결된 나에게 메시지를 전달하게 된다. 소켓은 서버 자원 CPU, Memory 등이 한계가 있기 때문에 한계를 넘어가면 더 이상 소켓을 만들 수가 없다. 멀티탭도 소켓 개수가 있다. 다 연결된 상태에서 더 연결하고 싶으면 하나는 제거하고 연결해야 한다. 웹 서비스의 소켓도 같다고 보면 된다.




지금까지 Host, Request, Response, Scheme, Port, URL, URI, Socket을 알아봤다. 여기에서 하나만 더 보도록 하자. 온라인이면 시도 때도 없이 뉴스에 등장하는 보안을 넘어갈 수는 없다. 특히나 내 개인정보가 있는 데이터는 반드시 보안이 있어야 한다.


HTTP 통신은 보안이 없는 일반적인 통신 방식이다. 보안이 없는 통신으로 내 개인정보로 요청할 경우 해커의 대상이 되기 쉽다. 그래서 이를 보완하기 위해 개인정보가 들어간 민감한 통신은 암호화하여 통신할 수 있도록 만들기에 이른다. 이렇게 나온 개념이 HTTPS (HyperText Transfer Protocol Over Secure Socket Layer)다. ‘안전한 소켓 층의 HTTP’라는 의미로 해석될 수 있을 듯하다.


SSL (Secure Socket Layer)는 사용자와 서버 간의 인증서 인증키를 가지고 암호화, 복호화하는 방식을 말한다. 이렇게 암호화된 네트워크상에 HTTP 통신이 될 수 있도록 만든 통신 방식이 HTTPS 다.


HTTPS에서 통신되는 데이터는 암호화, 복호화를 거쳐 오가게 되며, 서버와 나와 주고받는 데이터를 다른 네트워크가 데이터를 위조, 변조를 하지 못하게 된다. 참고로 https로 접속하여 응답받은 데이터 안에서 http 일반 통신은 차단된다. 이 부분은 실제 개발에 필요한 주의점이기 때문에 개발 과정에서 다시 말하도록 하겠다.




keyword