티스토리 뷰
**** 빈번하게 쓰이는 간단하지만 자주 까먹는 것들 간략 메모해 놓는 게시물 입니다. 이 포스트는 지속적으로 업데이트 예정 입니다.
-- 목차
** 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 뒤에 데이터가 전달 되기에 굳이 필요없다.
'프로그래밍' 카테고리의 다른 글
Convert HTML to Image (HTML 을 이미지로 변환하여 다운로드하기) (0) | 2017.09.13 |
---|---|
쉬프트, 컨트롤 클릭 시 새탭, 새창 띄우지 않기 (Shift+Click, Ctrl+Click do not open new tabs/windows) (0) | 2017.09.02 |
자바 기초 개념 (0) | 2017.08.02 |
Windows 7 에 Redis Desktop Manager 설치하기 (0) | 2017.07.29 |
Windows 7 Redis 설치하기 (0) | 2017.07.28 |
- Total
- Today
- Yesterday
- 킹덤 호텔
- 족발
- 성계 투어
- Oracle
- 애드센스
- Namibia
- 후마리
- 토레스 델 파이네
- 푸에르토 나탈레스
- 우유니
- 캄보디아
- 빈트후크
- 햄버거
- Cusco
- Cambodia
- Uyuni
- 아구아스 칼리엔테스
- 남미 저가항공
- 칼라마
- jQuery
- 빅토리아폴스
- 쿠스코
- calama
- 남미
- aguas calientes
- 볼리비아
- 칠레
- 나미비아
- 성스러운 계곡
- 마추피추
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |