백엔드 개발자로서 HTTPS가 안전하다는 것은 누구나 안다. 하지만 "HTTPS 통신 중 서버의 개인키(Private Key)가 탈취되면 과거의 데이터는 안전한가?"라는 질문을 받는다면 자신 있게 대답할 수 있을까? 오늘은 단순히 HTTPS의 흐름을 넘어, RSA와 Diffie-Hellman(ECDHE)의 결정적 차이, 완전 순방향 비밀성(PFS)의 원리에 대해 정리해 본다. 1. 키 교환의 두 가지 경우: RSA vs Diffie-HellmanHTTPS 핸드쉐이크의 핵심은 "데이터를 암호화할 대칭키를 어떻게 안전하게 나눠가질 것인가?"이다. 여기엔 크게 두 가지 방식이 있다. RSARSA는 클라이언트가 직접 키를 만들어 교환한다. 클라이언트가 PMS(Pre-Master Secret)를 생성한 뒤, 서버..
Network
채팅 서버를 구현하려고 공부중인데, 멀티스레드로 구현하라는 힌트를 받았다. 왜 굳이 멀티스레드일까? 단일 스레드 서버 구현먼저 간단한 서버를 구현해보자. import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class SimpleServer { public static void main(String[] args) { try { ServerSocket serverSocket = new ServerSocket(80..
HTTP는 클라이언트와 서버 간 통신의 프로토콜로, 백엔드 개발자는 이 프로토콜을 이해해야 효율적인 API와 서비스를 개발할 수 있다. 최근 많이 사용하는 RESTful API를 개발할 때도, HTTP는 필수적인 개념이다. 개발자는 각 상황에 적합한 HTTP 메서드(GET, POST, PUT, DELETE 등)를 선택하고, 적절한 상태 코드를 반환함으로써 일관되고 직관적인 API를 개발할 수 있어야 한다. 하지만 HTTP는 데이터가 평문으로 전송되기 때문에 보안이 취약하다는 문제점이 있다. 이를 해결하기 위해 SSL/TLS 암호화를 더한 HTTPS가 등장했다. 따라서, 백엔드 개발자는 HTTP와 HTTPS에 대해 철저히 이해하고 있어야 한다. HTTP에 관하여HTTP(Hyper Text Transfer..
LG cns 최종 면접에서 3-way handshake에 대해 설명해달라는 질문을 받았었다. 그 당시에는 어렴풋이 알고 있는 것들을 두서 없이 설명해서 아쉬움이 있었다. 백엔드 개발자가 네트워크 전문가 수준으로 알 필요는 없지만, 기본적인 개념을 이해하면 커넥션 풀링 설계나 Keep-Alive 설정을 더 효과적으로 구현할 수 있다. MSA나 분산 시스템(아직 MSA가 정확히 뭔지 설명하진 못한다...)을 설계할 때, 네트워크 통신은 핵심이라고 한다. 3-way handshake, 4-way handshake에 대해 알아보자. 3-way handshakeTCP 3-way handshake는 연결을 시작할 때 사용하는 프로토콜이다. 클라이언트와 서버가 3단계 과정을 통해 논리적 연결을 맺는다. 3-way ..