티스토리 뷰

프로그래밍

간단메모!!

ReturnToHome 2017. 8. 8. 16:57

**** 빈번하게 쓰이는 간단하지만 자주 까먹는 것들 간략 메모해 놓는 게시물 입니다. 이 포스트는 지속적으로 업데이트 예정 입니다.


-- 목차

** RequestConfig

** PoolingHttpClientConnectionManager

** IE 에서 input 에 .val() 로 데이터 변경 시 onchange 먹지 않음

** MIME Type

** TCP 3-way Handshake & 4-way Handshake


** TCP 3-way Handshake & 4-way Handshake

* 3-way handshake

TCP/IP 프로토콜을 이용해서 통신을 할 시 양방의 데이터 전송을 보장하기 위해 세션을 수립하는 과정

A -> B : SYN

B -> A : SYN ACK

A -> B : ACK

SYN : Syncronize sequence numbers

ACK : Acknowledgment


1. A 는 B 에 접속 요청 패킷인 SYN 을 보낸다. SYN 을 보내고 기다리는 이 상태를 SYN_SENT 라 한다.

2. B 는 A 의 SYN 요청을 받고 수락한다는 ACK 와 SYN Flag 가 설정된 패킷을 발송하고 요청을 기다리는데 이 상태는 SYN_RECEIVED 라 한다.

3. A 는 B 에서 ACK 를 보내고 이후로 연결이 이루어지며 데이터 교환이 이루어 지는데 이때의 B 서버 상태를 ESTABLISHED 라 한다.


* 4-way handshake

세션을 종료하기 위해 수행하는 절차.

A -> B : FIN

B -> A : ACK

B -> A : FIN

A -> B : ACK


1. A 는 B 에 연결을 종료하겠다는 FIN 플래그 전송

2. B 는 A 에 확인 메시지를 먼저 보내놓고 자신의 통신이 끝날 때 까지 대기. 이 상태가 TIME_WAIT

3. B 는 통신이 끝났으면 종료되었다고 A 에 FIN 플래그 전송

4. A 는 확인했다고 ACK 전달


이 때 B 에서 FIN 패킷을 전송하기 이전에 지연이나 패킷 유실로 인해 데이터들이 FIN 패킷 보다 늦게 도착하는 상황이 발생한다면 해당 패킷은 DROP 되고 데이터는 유실되는데 이러한 현상을 대비하여 A 는 B 로 부터 FIN 을 수신하더라도 일정시간 (default 240초) 동안 세션을 남겨놓고 패킷을 기다리는 과정이 있는데 이 과정을 TIME_WAIT 라고 한다.



** RequestConfig

RequestConfig config = RequestConfig.custom().setSocketTimeout( 10 * 1000 ).setConnectTimeout( 10 * 1000 ).build();

setSocketTimeout : connection 을 맺은 후 응답 대기시간. millisecond. 커넥션 맺은 후 10 초 동안 response 가 없으면 해제

   read timeout 이 socketTimeout 과 유사하다. 구현체에 따라 socketTimeout, readTimeout 을 알맞게 사용.

  (유사하다는 근거는 HttpClient 에 주석으로 read 의 경우 java.net.ScoketTimeoutException 을 throw 한다고 되어있다)


setConnectTimeout : connection 을 맺는 시간. millisecond. 10 초 동안 커넥션이 이루어지지 않으면 해제 (3-ways handshake)



** PoolingHttpClientConnectionManager

PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager();

connManager.setDefaultMaxPerRoute(50); // 각 HOST (IP + PORT) 당 Connection Pool 에 생성가능한 Connection 의 수

connManager.setMaxTotal( 100 ); // Connection Pool 의 수용 가능한 최대 사이즈


** IE 에서 input 에 .val() 로 데이터 변경 시 onchange 먹지 않음

function keypress(obj) {

$(obj).val('값바꿔요');

}

일 경우 chrome 은 input 에 있는 onchange 이벤트가 실행되나 ie 는 실행되지 않으므로  $(obj).val('값바꿔요').trigger('change'); 로 사용.


** MIME Type

MIME Type

Multipurpose Internet Mail Extension Type


Accept-Type : Client 가 서버에 자신이 선호하는 타입을 전달이므로 request 에만 있다. 원하는 형식으로 달라 요청하면 서버에서는 producer 에 매칭되는 값(application/xml or json ..) 이며 이 accept-type 헤더 값을 분석해서 알맞은 값으로 내려줄 수 있는 것.


Content-Type : Server 가 body 에 리턴되는 데이터 타입이 뭔지 알려주는 것. 그것을 알아야 브라우저가 파싱 가능. 예를 들어 리턴 타입이HTML 이면 브라우저가 알아서 파싱하지만 excel, pdf, ms-word 등 문서 파일이라면 다른 플러그인 등을 통해서 처리가 되어야함.

Client 에서도 Content-Type 을 명시해서 보내는 경우가 있는데 그 경우는 post, put 방식을 사용 시 body 영역에 form data 가 전달되기 때문에 서버에서도 해당 Content-Type 을 알아야 파싱이 가능하기 때문. get 방식은 url 뒤에 데이터가 전달 되기에 굳이 필요없다.




댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함