안녕하세요.
이번 글은 웹 서비스 동작구조와 소켓 통신을 알아보겠습니다.
글은 아래 목차로 진행됩니다.
1. 구조 및 요소
1.1 Client – Server 구조
1.2 Static Web page & Dynamic Web Page
1.3 Web Server & WAS
2. Timeout
2.1 Timeout
2.2 3-Way handshake
2.3 Apache Timeout
2.4 WAS(Tomcat) Timeout
2.5 Web-WAS-DB 연동
2.6 WAS-DB 통신과 Timeout
2.7 OS level Timeout
3. 마무리
1. 구조 및 요소
- 전체 흐름
1.1 Client – Server 구조
- Client – Server 구조1
Client 가 Server에 요청을 하면 Server는 Client에 응답하는 구조
각 Request와 Response는 소켓을 통해서 통신
- Client – Server 구조2
일반적으로 Web Server는 Apache를 WAS는 Tomcat을 많이 사용
1.2 Static Web page & Dynamic Web Page
Static Web Page
- 서버에 미리 저장된 파일이 그대로 전달되는 웹페이지
Dynamic Web Page
- 서버에 있는 데이터들을 가공처리한 후 생성되어 전달되는 웹 페이지
동적 웹페이지는 사용자들이 언제나 같은 페이지를 보게 되지만
동적 웹페이지는 사용자에 따라 서론 다른 내용의 페이지를 보게 됩니다.
1.3 Web Server & WAS
- Web & WAS
Web Server
-Static Page 를 처리
-동적인 컨텐츠가 필요한 경우 해당 요청을 WAS에 전달
-WAS가 처리한 결과를 Client 에게 전달
WAS(Web Application Server)
-Dynamic Page 를 처리
-WebServer + Web Container 로 구성
WAS는 Web Server + Web Container 로 이루어져 있으며
이 때 Web Container가 동적 페이지를 처리합니다.
WAS에도 Web Server가 있기 때문에 Web Server 없이 WAS만 존재하는 것도 가능합니다.
- Web Server & WAS의 분리
1. 서버 부하의 방지
WAS가 모든 페이지를 처리할 수 있지만 그만큼 WAS에 부담이 많이 가게됨
2. 보안을 위해
WAS에는 실제 Web Application이 올라가기 때문에 외부와 직접 연결되면 중요한 파일이나 소스들이 노출 될 수 있음
3. Web Server에 여러 개의 WAS를 연결하기 위해
규모가 큰 서비스에서는 수 많은 요청을 여러군데에서 처리하기 위해 동일한 Web Application을 여러 개 띄웁니다.
4. 여러 Web Application을 서비스하기 위해
Java 서버, PHP 서버와 같이 서로 다른 서버를 하나의 Web Server 에 연결해서 서비스할 수 있습니다.
- 거래소의 Web Server & WAS
한국거래소의 Web Server와 WAS는 이중화 되어 있음
2. Timeout
2.1 Timeout
- Tiemout
Client와 Server의 요청과 응답은 여러 단계가 있음
-통신 과정 중에 문제가 발생하면 응답을 계속해서 기다리게 됨
-특정 시간이 지나도록 응답이 제대로 이루어지지 않으면 클라이언트와 서버의 접속을 끊어야함
-이 때 요청을 기다리는 한계시간이 Timeout
2.2 3-Way handshake
- 3-Way handshake
Client와 Server는 TCP 소켓으로 통신
-TCP 소켓은 Server와 Client의 연결을 확인하고 연결이 확인 되었을 때야 데이터를 전송
-Client와 Server의 연결을 확인하는 것을 3-Way handshake 라고 함
Syn / Ack + Syn / Ack 의 3단계 과정을 거쳐 3-Way handshake를 수행
-Client가 Server에게 Syn 패킷을 보냄
-Server는 받은 Syn 패킷에 +1 을 하여 Ack으로 보내고 별도의 Syn 패킷을 또 보냄
-Client가 Server에게서 정상적으로 Ack와 Syn을 받았다면 상태를 Established로 변경하고 Ack을 전송
-Server가 마지막 Ack을 정상적으로 받으면 Server도 상태를 Established로 변경
-
Server는 마지막 Ack를 받을 때 까지 대기를 하게 되는데 이 대기 시간을 Connection Timeout 이라고 함
2.3 Apache Timeout
- Apache Connection Timeout
SYN Flooding
-3-Way handshake에서 마지막 Ack를 받을 때 까지 Server는 대기
-이 때 마지막 Ack를 주지 않고 그 이전 단계의 Syn만 무수히 많이 보내서 Server의 대기 중인 상태를 많이 만드는 것
Apache Connecton Timeout
-Apache Web Server의 환경설정에서 Connection Timeout 값을 설정할 수 있음
-실제 Apache 환경설정에서는 그냥 Timeout 이라는 이름으로 되어 있음.
/etc/httpd/conf/httpd.conf
/home/approot/appserver/apache/conf/extra/httpd-default.conf
Timeout300
-Apahe 의 Timieout 기본값은 300(초)
- Keepalive Timeout
매 요청마다 3-Way handshake를 하여 Client와 Server의 연결을 확인하면 비효율적임
-연속된 요청과 응답에 대해서는 소켓을 재사용할 수 있는데 이것을 Keepalive 부름
- Apache Timeout과 동일한 파일에서 설정 가능
/etc/httpd/conf/httpd.conf
/home/approot/appserver/apache/conf/extra/httpd-default.conf
KeepAlive On/Off (default : On)
KeepAlive Timoeut 5(초) :
- 해당 시간 동안 요청이 없으면 연결을 끊음
MaxKeepAliveRequests 100
- 최대 몇번의 요청까지 연결을 계속 사용할지 결정. 0은 무제한
2.4. WAS(Tomcat) Timeout
- WAS의 Session Timeout(Tomcat)
Tomcat을 기준으로 WAS의 Session Timeout 설정에는 3가지 방법이 있으며 우선순위가 있음
1. 프로그램에 직접 코딩
<%
session.setMaxInactiveInterval(int)//초
%>
2. WEB-INF/web.xml 파일
<web-app>
<session-config>
<session-timeout>15</session-timeout>//분
<session-config>
</web-app>
3. [톰캣 설치 경로]/conf/web.xml 파일
<session-config>
<session-timeout>30</session-timeout> //분
<session-config>
2.5. Web-WAS-DB 연동
- Web – WAS – DB 연동
Apache와 Tomcat을 연동하여 사용하고 Tomcat과 DB를 연동해서 사용하기 위해서는 중간에 모듈이 필요
1.Apache – Tomcat
- mod_jk
- mod_proxy
- mod_proxy_ajp 의 3가지 모듈 사용 가능
2. Tomcat과 DB
- OJDBC 사용
2.6. WAS & DB 통신과 Timeout
- WAS & DBMS 통신과 Tiemout
WAS와 DB 통신 사이에는 3가지 Timeout이 있음
- Transaction Timeout
- Statement Timeout
java.sql.Statement.setQueryTimeout(int timeout) 메서드로 설정 가능
- JDBC Driver Socket Timeout
Socket Connect Timeout
Socket Read/Write Timeout 의 두 가지 방법이 있으며 드라이버 별로 설정 방법이 다름.
2.7. OS level Timeout
- OS level Timeout
Linux Socket Timeout
1.tcpkeepalivetime
-전송된 마지막 패킷과 첫번째 Keepalive 의 간격
-keepalive를 유지하는 시간을 의미. 기본 7200초로 설정
/proc/sys/net/ipv4/tcp_keepalive_time 7200
2. tcpkeepaliveprobes
-tcpkeepalivetime에 의해 보낸 keepalive 세그먼트를 보낼 횟수.
-기본 설정되어 있는 9회가 지나가면 연결이 종료됨
/procs/sys/net/ipv4/tcp_keepalive_probes 9
3. tcpkeepaliveintvl
- 세그먼트를보내고 다시 확인 하기 위한 시간
-처음 keepalive를 보내고 미응답시 다음 keepalive를 보낼 시간. 기본 75초
/procs/sys/net/ipv4/tcp_keepalive_intvl 75
3. 마무리
'백엔드' 카테고리의 다른 글
웹 서비스 동작구조와 소켓 통신 (0) | 2021.02.02 |
---|---|
2020 보안기술 개발 동향 (0) | 2020.06.04 |
Secure Coding 메뉴얼 3편 (0) | 2019.11.18 |
Secure Coding 메뉴얼 2편 (0) | 2019.11.11 |
Secure Coding 메뉴얼 1편 (0) | 2019.11.04 |
사내 IaaS 구축하기 (0) | 2018.06.25 |