REST란 Representational State Transfer의 약자. 여기에 ~ful이란 형용사형 어미를 붙여 ~한 API라는 표현으로 사용됨. 즉, REST의 기본원칙을 성실히 진킨 서비스 디자인은 RESTful하다고 표현할 수 있음.
REST가 디자인패턴이다, 아키텍처이다 많은 이야기가 존재하는데, 하나의 아키텍처로 볼 수 있음. 좀 더 정확한 표현으로 말하자면 REST는 Resource Oriented Architecture이다. API 설계의 중심에 자원(Resource)가 있고, HTTP Method를 통해서 자원을 처리하도록 설계하는 것이다.
둘다 HTTP 프로토콜을 이용해서 서버에 무엇인가 요청할 때 사용하는 방식
HTTP Body없이 요청 데이터가 HTTP Header 부분에 URL이 담겨서 전송됨. 때문에 url상의 ?뒤에 데이터가 붙어 request를 보내게됨. 이러한 방식을 url이라는 공간에 담겨서 가기 때문에 전송할 수 있는 데이터의 크기가 제한적. 또 보안이 필요한 데이터에 대해서는 데이터가 그대로 url에 노출되므로 GET방식은 적절하지 않음
POST 방식의 request는 HTTP Request Message의 Body부분에 데이터가 담겨서 전송됨. 때문에 바이너리 데이터를 요청하는 경우 POST 방식으로 보내야하는 것처럼 데이터 크기가 GET보다 크고 보안면에서 나음. 하지만 보안적 측면에서는 암호화를 하지 않는 이상 고만고만함 (어차피 요청 메시지 탈취해서 파싱하면 다 알 수 있음)
GET은 가져오는것. 즉 서버의 데이터를 가져와서 보여준다. SELECT 적인 성향. 서버의 상태나 값을 변경하는 것은 아님
반면에 POST는 서버의 값이나 상태를 변경하거나 추가하기 위해 사용.
부수적인 차이점을 더 살펴보자면, GET 방식의 요청은 브라우저에 캐싱할 수 있음. 때문에 POST 방식으로 요청해야할 것을 보내는 데이터의 크기가 작고 보안적인 문제가 없다는 이유로 GET 방식으로 요청한다면, 기존에 캐싱되었던 데이터가 응답될 가능성이 존재.
대부분의 인터넷 응용 분야들은 신뢰성과 순차적인 전달을 필요로함. UDP로는 이를 만족시킬 수 없음. TCP는 신뢰성이 없는 인터넷을 통해 종단간에 신뢰성있는 바이트 스트림을 전송하도록 특별히 설계됨. TCP는 서비스 송신자와 수신자 모두가 "소켓이라고 부르는 종단점"을 생성함으로써 이루어짐. TCP에서 연결설정은 3 way handshake를 통해 행해진다.
모든 TCP연결은 전이중, 점대점 방식이다 (full duplex, point to point) 전이중이란 전송이 양방향으로 동시에 일어날 수 있음을 의미하며, 점대점이란 각 연결이 정확히 2개의 종단점을 가지고 있음을 의미한다. TCP는 멀티캐스팅이나 브로드캐스팅을 지원하지 않는다.
위 세가지는 다른 암호화되지 않는 프로토콜에도 공통적으로 적용되는 문제점
TCP/IP 구조의 통신은 전부 통신 경로 상에서 엿볼 수 있음. 패킷을 수집하는 것만으로 도청 가능. 평문으로 통신할 경우 메시지의 의미를 파악할 수 있기 때문에 암호화하여 통신해야함
SSL로 상대 확인 가능. SSL은 상대를 확인하는 수단으로 "증명서"제공. 증명서는 신뢰할 수 있는 제 3자 기관 (CA기관)에 의해 발행되는 것이기 때문에 서버나 클라이언트가 실재하는 사실을 증명. 이 증명서를 이용함으로써 통신 상대가 내가 통신하고자하는 서버임을 나타내고, 이용자는 개인정보 누설 등의 위험성이 줄어들게 됨. 한가지 이점을 더 꼽자면 클라이언트는이 증명서로 본인확인을 하고 웹사이트 인증에서도 이용가능
완전성이란 정보의 정확성을 의미. 서버또는 클라이언트에서 수신한 내용이 송신측에서 전송한 내용과 일치한다는 것을 보장할 수 없음. 리퀘스트나 리스폰스가 발신된 후에 누군가에 의해 변조되더라도 이 사실을 알 수 없음. 이와 같이 공격자가 도중에 요청 응답을 빼앗아 변조하는 공격을 중간자 공격이라고 부름
MD5, SHA-1 등의 해시값을 확인하는 방법과 파일의 디지털 서명을 확인하는 방법이 존재. 하지만 확실히 확인할 수 있는 것은 아님. 확실히 방지하기 위해선 HTTPS 사용해야함. SSL에는 인증이나 암호화 그리고 다이제스트 기능 제공
HTTS는 SSL 껍질을 뒤집어쓴 HTTP 라고 할 수 있음. 새로운 응용 프로토콜 아님. HTTP 통신하는 소켓부분을 SSL 프로토콜로 대체하는 것 뿐. 원래 HTTP는 TCP와 직접 통신했지만, HTTPS에서는 SSL과 통신하고, SSL이 TCP와 통신하게 됨. SSL을 사용한 HTTPS는 암호화와 증명서, 안전성 보호를 이용할 수 있게됨.
HTTPS의 SSL에서는 대칭키 암호화 방식과 공개키 암호화 방식을 혼합한 하이브리드 암호 시스템을 사용. 대칭키를 공개키 방식으로 교환한 후 다음부터 통신은 대칭키를 이용하여 하는 방식.
공개키 암호화 : 공개키 비밀키 두가지 존재
대칭키 암호화 : 하나의 대칭키만 존재
평문 통신에 비해 암호화 통신은 CPU나 메모리 등 리소스를 더 많이 요구. 통신할 때마다 암호화를 하면 추가적인 리소스를 소비하기 때문에 서버 한대당 처리할 수 있는 리퀘스트 수가 상대적으로 줄어듬.
하지만 최근에는 하드웨어의 발달로 인해 HTTPS를 사용하더라도 속도저하가 거의 일어나지 않는다. 새로운 표준인 HTTP 2.0을 함께 이용한다면 오히려 HTTPS가 HTTP보다 더 빠르게 동작한다. 따라서 웹은 과거의 민감한 정보를 다룰때만 HTTPS 암호화 통신을 사용하는 방식에서 현재 모든 웹페이지에서 HTTPS를 적용하는 방향으로 바뀌어가고있다.