TCP 통신에서 윈도우 제어 방식을 통해 효율적인 ACK 번호를 관리한다. 패킷을 전송한 후 수신자로부터 ACK 이 돌아올 때 까지 기다리는 것은 시간낭비다. 이 시간낭비를 아예 없애진 못하고 최소화 하기위해서 윈도우 제어 방식을 고안했다. 동작 방식은 이렇다. 수신사가 수용할 수 있는 데이터 크기(Window Size)를 송신자에게 보낸다. Three-way Handshake 과정에서 보내기 때문에 통신 전에 송신자에게 Window Size에 대한 정보가 들어온다. 그리고 송신자는 수신자에게 Window Size가 넘지 않을 만큼의 패킷을 계속해서 보낸다. 여기서 중요한 점은 여러개의 패킷을 보내도 ACK이 돌아오지 않는다는 점이다. ACK이 돌아오지 않아도 송신자는 자기가 보낸 Data Size에 따..
ACK ? 기본적으로 ACK은 TCP Header에 포함되어있는 4Byte크기의 정수 데이터이다. TCP 통신에서 ACK은 패킷 도착여부를 확인 하기위해 사용된다. 위 사진과 같이 수신한 패킷의 Sequence Number와 Data의 크기에 따라 ACK 번호가 결정되게 되는데 결정할 때 사용하는 공식은 "SEQ + (Data Size)" 이다. 그러나 여기서 반드시 기억해야 할 점은 Data Size가 0이라면 같은 ACK을 반복하게 된다. 이 것을 방지해서 받은 패킷의 Data Size가 0이라면 Sequnce 번호에 1을 더한 값을 ACK으로 설정한 후 패킷을 전달하게 된다. ( 물론 위 그림은 A가 B에게 패킷을 전달하는 과정이고, 원래는 양방향으로 전달하기 때문에 서로 SEQ, ACK, Data..
Spring에서는 View에 직접 접근할 수 없다. 왜냐하면 View가 저장된 디렉토리가 WEB-INF디렉토리의 하위 디렉토리이기 때문이다. 접근하게 되면 404에러가 발생한다. 때문에 항상 Controller를 통해 View에 접근하게 되는데 이번 포스트에서는 연결하는 과정을 설명한다. Controller ? MVC 모델2 에서 사용되는 개념으로 모든 요청을 Controller에게 보내면 Controller는 이 요청을 보고 이후 어떤 작업을 진행할지 결정하게 되고, 필요에 의해서 DB접근 혹은 JSP파일로 포워딩(리다이렉트)하게 된다. 그래서 Controller에는 특정 요청(URL)에 대해 어떤 처리(Method)를 할 것인지 매핑이 되어있다. 그리고 반드시 Controller 클래스에는 @Cont..
위 사진은 가장 처음 스프링 프로젝트를 만들면 볼 수 있는 프로젝트 구성이다. src/main/java : 자바코드가 들어가는 곳. ( 대표적으로 Controller, DAO, VO 등등이 들어간다.) Controller가 존재하는 이유는, Spring에서는 조금 후 소개할 WEB-INF에 직접 접근할 수 없도록 되어있다. 그런데 모든 웹페이지 정보(JSP)는 WEB-INF에 저장되어 있고, 직접 접근이 안되기 때문에 사용자 Client는 우선적으로 JAVA코드인 Controller에 접근을 하고 Controller에서 그에 해당하는 JSP로 포워딩 시켜주게 된다. src/main/resources : 프로젝트 실행시 사용되는 자원들이 들어가는 곳. mybatis연동시 사용되는 기본적인 설정파일들과, 기..
Windows Message Loop ? 윈도우즈 프로그램에서 메세지를 읽어들이고, "윈도우 프로시저"에 메세지를 전달하는 역할 Winodws Message Loop는 윈도우즈 기반 GUI 프로그램에 반드시 포함되는 루틴이다. (엄격하지는 않고 수정도 가능하지만 유사한 기능을하는 루틴이 반드시 있어야한다.) 기본적으로 아래 그림과 같이 구성된다. 사용자가 수정할 수 있어서 조금씩 차이가 있을 수 있다. 윈도우즈 시스템은 각각 프로세스에 대해서 개별적인 메세지 큐를 할당한다. 메세지 발생시 운영체제가 해당 프로세스의 메세지 큐에 메세지늘 넣는다. (스스로 추가도 가능) 프로세스는 자신의 메세지 큐에서 메세지를 지속적으로 읽어들이며 대응하는 함수로 메세지를 전달한다. 위 Windows Message Loop..
보호되어 있는 글입니다.