본문 바로가기

전체 글

(70)
웹 통신의 흐름 웹 브라우저에 url을 입력했을 때 통신의 흐름에 대해 알아보자. 사용자가 웹 브라우저를 통해 URL을 입력한다. 입력된 URL 중 도메인 네임을 DNS 서버에서 검색한다. DNS 서버에서 해당 도메인 네임에 해당하는 IP 주소를 찾아 사용자가 입력한 URL 정보와 함께 전달한다. 웹 페이지 URL 정보와 잔달받은 IP 주소를 이용해 HTTP Request Message를 생성한다. 요청은 TCP를 통해 서버로 전송된다. 서버는 클라이언트의 요청을 받고 응답을 전송한다. (웹 페이지 URL 정보에 해당하는 데이터를 검색하고, HTTP 프로토콜을 사용하여 HTTP Response Message를 생성하고, TCP 프로토콜을 사용하여 인터넷을 거쳐 클라이언트에게 전송한다.) 도착한 HTTP Response ..
SSL SSL이란 무엇인가? SSL(Secure Sockets Layer, 보안 소켓 계층)은 웹 사이트와 브라우저(또는 두 서버) 사이에 전송된 데이터를 암호화하여 인터넷 연결의 보안을 유지하는 표준 기술이다. HTTPS에서 클라이언트와 서버간 통신 전 SSL 인증서로 신뢰성 여부를 판단하기 위해 연결하는 방식이다. SSL 디지털 인증서 클라이언트와 서버간의 통신을 공인된 제 3자(CA) 업체가 보증해주는 전자화된 문서 SSL 인증서의 장점 1. 통신 내용 노출 변경 감지 2. 클라이언트가 접속하려는 서버가 신뢰가능한 서버인지 확인 3. SSL 통신에 사용할 공개키를 클라이언트에게 제공 암호화 방식 1. 대칭키 encoding, decoding 과정에 같은 키를 사용하며, 발송자와 수신자 둘다 키를 보유한다...
직렬화(Serialization) SSAFY 프로젝트를 진행하면서 몇몇 클래스에 Serializable 인터페이스를 상속하였는데, 이번 기회에 직렬화에 대해 자세히 알아보자. 개발을 진행하다 보면 다음과 같은 상황이 발생한다. - 생성한 객체나 데이터를 파일로 저장한다. - 저장한 객체나 데이터를 읽어온다. - 다른 서버에서 생성한 객체나 데이터를 받아온다. 우리가 생성한 객체나 데이터를 파일로 읽거나 쓸 때, 다른 서버로 보내거나 받을 때 직렬화가 꼭 필요하다. 직렬화는 왜 필요할까? 대부분의 OS의 프로세스 구현은 서로 다른 가상 메모리 주소 공간을 갖기 때문에 Object 타입의 참조값(주소값)을 전달한다면 사용할 수 없다. 때문에 서로 다른 메모리 공간 사이의 데이터 전달을 위해서는 주소값이 아닌 Byte 형태로 직렬화(변환)된 ..
HTTP와 HTTPS HTTP에 대해서는 알아봤다. 그렇다면 HTTP의 문제점에는 무엇이 있을까? 1. HTTP는 평문 통신이기 때문에 도청이 가능하다. 2. 통신 상대를 확인하지 않기 때문에 위장이 가능하다. 3. 완전성을 증명할 수 없기 때문에 변조가 가능하다. 위 3가지는 암호화를 하지 않는 다른 프로토콜에서도 공통적인 문제점들이다. 각 문제점들에 대해 조금 더 자세히 알아보자. 1. HTTP는 도청이 가능하다. HTTP는 TCP/IP 위에서 동작하며 TCP/IP 구조의 통신은 전부 통신 경로 상에서 엿볼 수 있다. 패킷을 수집하는 것만으로도 도청할 수 있다. 평문으로 통신할 경우 메시지의 의미를 파악할 수 있기 때문에 암호화하여 통신해야 한다. 보안 방법 통신 자체를 암호화한다. SSL(Secure Socket Lay..
GET과 POST의 차이 GET과 POST는 HTTP 프로토콜을 이용하여 클라이언트에서 서버로 무엇인가를 요청할 때 사용하는 방식이다. GET GET은 클라이언트에서 서버로 어떠한 리소스로부터 정보를 요청하기 위해 사용되는 메서드이다. GET 방식은 요청하는 데이터가 HTTP Request Message의 Header 부분에 URL에 담겨서 전송된다. URL 끝에 "?"를 붙이고 변수명1=값1&변수명2=값2.. 형식으로 파라미터를 작성하여 데이터를 전송한다. 이러한 방식은 URL이라는 공간에 담겨가기 때문에 전송할 수 있는 데이터의 크기가 제한적이다. 또, 보안이 필요한 데이터에 대해서는 데이터가 그대로 노출되는 문제가 있다. POST POST는 클라이언트에서 서버로 리소스를 생성하거나 변경하기 위해 데이터를 전송할 때 사용되는..
HTTP HTTP(Hyper Text Transfer Protocol)란 브라우저와 서버가 통신할 수 있도록 만들어주는 여러 프로토콜 중 하나로 인터넷에서 웹 브라우저와 웹 서버 사이에 HTML 문서(데이터)를 주고받는데 쓰이는 통신 프로토콜이다. 일반적으로 전송 계층 프로토콜로 TCP를 사용하고, 네트워크 계층 프로토콜로는 IP를 사용한다. TCP/IP에서는 IP 주소를 사용해서 통신할 컴퓨터를 결정하고, 포트 번호를 사용해서 해당 컴퓨터의 어떤 프로그램과 통신할지를 결정한다. (HTTP에서는 기본적으로 80번 포트를 사용한다.) HTTP의 특성 1. 비연결성(Connectionless) 클라이언트와 서버가 한 번 연결을 맺은 후 클라이언트의 요청에 대해 서버가 응답을 마치면 연결을 끊는다. 왜 HTTP 프로토..
@RequestMapping 사용자가 웹 페이지를 통해 요청을 하면, DispatcherServlet에서 요청에 맞는 컨트롤러를 찾아 호출해준다고 배웠다. 스프링에서는 @RequestMapping 어노테이션을 지원하여 어떤 요청에 대해 어떤 컨트롤러가 호출되어야 하는지 알려준다. 그럼 어떤식으로 동작하는지 코드와 함께 알아보자. @Controller public class RequestMappingController { @RequestMapping("/hello") public String hello(Model model){ model.addAttribute("name", "꽁탁"); return "hello"; } } 위의 코드에서 @RequestMapping를 통해 /hello라는 URL 요청에 들어오면 hello라는 뷰의 논리..
TCP와 UDP TCP와 UDP는 전송 계층(Transport Layer)에 속하며, 네트워크 애플리케이션을 설계할 때 둘 중 하나를 선택해야한다. 전송 계층은 송신자와 수신자를 연결하는 통신 서비스를 제공하는 계층으로, 데이터의 전달을 담당한다. 이러한 데이터 전달을 위해 사용하는 프로토콜이 TCP와 UDP이다. UDP (User Datagram Protocol, 사용자 데이터그램 프로토콜) UDP는 데이터를 데이터그램 단위로 처리하며 비연결형, 신뢰성 없는 전송 프로토콜이다. UDP는 흐름제어, 오류제어 또는 손상된 데이터그램의 수신에 대한 재전송을 하지 않는다. 모두 사용자 프로세스의 몫이다. UDP가 행하는 것은 포트를 사용하여 IP 프로토콜에 인터페이스를 제공하는 것이다. 종종 클라이언트는 서버로 짧은 요청을 ..