TCP? UDP?
둘 다 인터넷 프로토콜 스위트의 핵심 프로토콜 중 하나로, 네트워크 통신에서 데이터를 전송하는 방법을 정의함.
TCP (Transmission Control Protocol)
- TCP는 연결 지향적인 프로토콜로, 데이터 전송을 시작하기 전에 먼저 두 시스템 간에 연결을 설정. 이는 '3-way handshaking' 과정으로 이루어지고, 순서는 다음과 같다:
- 클라이언트가 서버에게 SYN 패킷을 보내 연결 요청.
- 서버는 SYN 패킷을 받고, SYN과 ACK (Acknowledgement) 패킷을 동시에 클라이언트에게 전송.
- 클라이언트는 ACK 패킷을 서버에게 보내 연결을 확립.
- TCP는 이런 방식으로 데이터의 순서와 신뢰성을 보장함. 패킷이 손실되면 재전송을 요청하고, 도착한 패킷의 순서가 바뀌었다면 원래의 순서대로 재배열함.
UDP (User Datagram Protocol)
- 반면, UDP는 연결이 설정되지 않은 상태에서 데이터를 전송하는 비연결형 프로토콜.
- 이는 데이터를 빠르게 전송할 수 있는 장점이 있지만, 패킷의 도착 순서나 손실에 대한 보장이 없다.
- 따라서, 신뢰성이 중요한 애플리케이션보다는 실시간성이 중요한 서비스에서 주로 사용됨.
자바 스프링에서는 TCP와 UDP 통신을 위해 java.net 패키지의 Socket과 DatagramSocket 클래스를 사용할 수 있다.
TCP에는 Socket과 ServerSocket 클래스를, UDP에는 DatagramSocket과 DatagramPacket 클래스를 사용.
이렇게 TCP와 UDP의 신뢰성 차이는 각 프로토콜의 특성과 그에 따른 처리 과정에서 비롯됨.
TCP는 데이터의 신뢰성을 보장하기 위해 연결 설정과 패킷 관리 과정을 거치지만, UDP는 이러한 과정 없이 빠르게 데이터를 전송함.
http? https?
둘 다 웹 상에서 정보를 주고받는 프로토콜.
http
- HTTP는 클라이언트에서 서버로 요청을 보내고, 서버에서 클라이언트로 응답을 전달하는 방식으로 동작.
- 하지만 HTTP는 암호화되지 않은 상태로 데이터를 전송하기 때문에, 중간에서 데이터를 가로채거나 변조하는 것이 가능.
https
- 반면, HTTPS는 SSL(Secure Sockets Layer) 또는 그 후속인 TLS (Transport Layer Security) 프로토콜을 사용하여 통신 내용을 암호화함. 이로 인해 중간에서 데이터를 가로채더라도 내용을 알아볼 수 없음.
SSL인증서?
- SSL 인증서는 이러한 암호화된 통신을 가능하게 하는 도구.
- 데이터가 원본 그대로 전송되었는지 확인하는 역할.
- 인증서는 공개키 암호화 방식을 사용하는데, 이는 데이터를 암호화하는 키와 복호화하는 키가 서로 다른 방식.
SSL인증서 적용 과정
- 서버는 공개키를 클라이언트에게 제공
- 클라이언트는 이를 이용해 데이터를 암호화하여 전송.
- 서버는 자신만이 가지고 있는 비밀키로 암호화된 데이터를 복호화합니다.
-
장점
I) 데이터의 기밀성: 중간에서 데이터를 가로채도 복호화할 수 없음.
II) 데이터의 무결성: 데이터가 전송 중에 변조되지 않았음을 보장.
III) 인증: 클라이언트는 SSL 인증서를 통해 서버의 신원을 확인할 수 있음.
-
단점
I) 처리 속도: 암호화와 복호화 과정으로 인해 HTTP에 비해 처리 속도가 느림.
II) 인증서 발급 및 관리: 인증서를 발급하고 유지하기 위한 비용과 노력이 필요.
스프링 자바에서는 HttpServlet
클래스를 통해 HTTP 요청을 처리할 수 있고, java.net.http.HttpClient
클래스를 이용해 HTTP 또는 HTTPS 요청을 보낼 수 있다.
단, HTTPS 설정을 위해서는 서버 설정에 SSL 인증서를 등록해야 한다.