웹 서비스 동작구조와 소켓 통신

안녕하세요.

이번 글은 웹 서비스 동작구조와 소켓 통신을 알아보겠습니다.

 

글은 아래 목차로 진행됩니다.

 

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

New Multi-Channel Dynamic CMS