1. 서버 2종 구현

1) Python 3

  • 강의자료에 있는 것을 그대로 옮겼다.
  • 이 서버는 http://localhost:8080 으로 접속 가능하다.
  • TCP server를 실행한다. 모든 ip주소(””, 즉 0.0.0.0)로 오는 요청을 8080 포트로 받겠다는 뜻이다. TCP server 자체는 transport layer 일을 담당하므로, HTTP실습을 위해 Application layer의 작동을 처리할 Handler가 인자로 들어간다.
  • httpd.serve_forever()를 통해 실행 상태를 유지한다. Ctrl+c로 종료할 수 있다.

2) Ours

강의자료에 있는 코드를 그대로 옮겨왔으므로, 수정 사항을 위주로 서술함.

  1. recv(1500) 으로 1회가 아니라, 데이터를 다받을때까지 loop 진행
  2. 404 응답도 Content Length 포함

  • 404패킷을 자세히 보았고, 헤더에 Content-Length가 잘 추가되었고 body길이만큼 잘 담아 보내고 있다는 것을 확인했다.
    1. html 및 css, js , jpg 파일도 파싱하도록 수정 -> 파싱 or 매핑중 편한 방식으로 진행!
  • 강의자료의 참고 코드에서는 모든 응답을 Content-Type: text/html; charset=utf-8로 보낸다. 이렇게 되면 css/js/jpg 파일들도 전부 html로 취급돼 브라우저에 제대로 렌더링되지 않는다.

  • 우선 파일에 따라 헤더의 Content-Type를 다르게 담을 수 있도록 매핑 딕셔너리를 만들었다.

  • 존재하는 파일에 대한 요청이 들어온다면 404를 처리하는 if문을 건너뛰고 200(else문에서 처리)으로 들어온다. ext로 경로의 확장자만 분리하고(파일명은 필요 없으니 _처리), MAP 딕셔너리에서 확장자에 맞는 값을 갖고와 헤더 내용이 잘 구성되도록 했다.
  • 또한 jpg는 바이너리 데이터이므로, html css js와 나누어 처리해야한다. 그대로 텍스트 인코딩을 적용하면 깨져서 안되니 파일을 열때 바이너리 모드 ’rb(read binary)’로 읽게 했다. 나머지는 ‘r’옵션을 적용해서 텍스트로 읽게 했다.
  • 만약 헤더를 수정하지 않고 기존 html만 처리할 수 있는 헤더를 쓴다면, 서버에서 CSS 파일을 text/html로 보내게 되어 다음과 같은 오류가 발생하고 렌더링이 되지 않는다.
  • 만든 웹이 잘 작동되고, 모든 것이 잘 렌더링됨을 확인할 수 있었다.

2. 서버 2종 간 비교분석

  • 이후 상세히 서술할 locust 차트 결과이다. 이것 기준으로 보면 python3서버가 ours서버에 비해 전반적으로 차트 모양에서 안정적인 양상을 보이는 듯하다. 아무래도 ours는 직접 구현한 서버이다 보니, 코드 작성 시 모든 내용을 신경쓰지 못할 수밖에 없다. 이런 이유에서 나오는 불안정함으로 보인다.

3. localhost vs. eth/wlan 비교

0. 컴퓨터1,2 준비

[ 테스트 구조 ]

  • ifconfig/ipconfig를 통해 컴퓨터1,2가 같은 네트워크에 연결되어있음을 확인할 수 있다. (IPv4 address 192.168.0.X)

  • locust설정은 모든 상황에서 위와 같이 진행했다. 약 3-5분간 실행시켰다.

1. Python 3 - localhost

서버: 컴퓨터1, locust실행: 컴퓨터1

2. Python 3 - eth/wlan

서버: 컴퓨터1, locust실행: 컴퓨터2

3. Ours - localhost

서버: 컴퓨터1, locust실행: 컴퓨터1

index.html locust 결과(Ours - localhost)

main.js locust 결과(Ours - localhost)

style.css locust 결과(Ours - localhost)

image.jpg locust 결과(Ours - localhost)

  • 파일 확장자별로 비교

4. Ours - eth/wlan

서버: 컴퓨터1, locust실행: 컴퓨터2

curl결과: 대표적으로 index.html

index.html(’/) locust 결과(Ours - eth/wlan)

main.js locust 결과(Ours - eth/wlan)

style.css locust 결과(Ours - eth/wlan)

image.jpg locust 결과(Ours - eth/wlan)

Leave a comment