컴퓨팅/소프트웨어

웹 브라우저, 파이어폭스 렌더링 속도 끌어올리기 2/2

epician 2016. 11. 14. 08:30

파이프라이닝은 현재 잘 쓰이지 않는 기술이라 쓸까말까 망설이다가, 내용도 길어지고 해서 별도의 포스트로 나누었습니다.

1부: 2016/11/13 - [컴퓨팅/소프트웨어] - 웹 브라우저, 파이어폭스 렌더링 속도 끌어올리기 1/2

8. HTTP Pipelining 설명

이전 글에서 웹 서버와의 네트워크 연결 개수를 늘리는 방법을 설명했는데, 파이프라이닝도 그것과 아주 유사한 개념입니다.

위 그림을 설명하면 이해가 쉬울 것 같네요. Client는 웹 브라우저이고 Server는 웹 서버를 말합니다.

왼쪽 도식이 일반적인 전송을 설명한 것입니다. 클라이언트에서 서버로 뭔가 요청을 하면 서버는 이에 응답하는 상황이 순차적으로 3번에 걸쳐서 일어나고 있습니다. '요청 -> 대기 -> 응답' 이게 일반적인 전송 특성입니다.

오른쪽 도식은 파이프라이닝을 설명하고 있는데, 클라이언트에서 대기 과정 없이 요청 3개를 한꺼번에 날리고 서버 쪽에서도 3개의 응답이 한꺼번에 도착합니다. 이때 사용하는 실제 네트워크 연결은 하나입니다. 하나의 연결을 마치 여러 개처럼 활용하는 것이 파이프라이닝입니다.

이 기술을 쓰게 되면 네트워크 환경이 열악한 경우, 정말 드라마틱한 성능 향상을 경험하기도 합니다. 단, 기술적인 문제 탓에 대부분의 웹 브라우저에서 이 기술을 쓰지 않도록 설정해두고 있습니다. IE, Chrome은 물론이고 Firefox도 이 기능이 구현은 되어 있는데, 사용하지 않도록 꺼두고 있습니다.

9. HTTP Pipelining 의 문제점

파이프라이닝은 3G 무선통신처럼 네트워크 회선 자체의 응답속도(레이턴시)가 느린 환경에선 빛을 발할 수 있습니다. 반대로 얘기하면 광랜처럼 네트워크 속도가 빠른 경우엔 별 효과를 보지 못하기도 합니다. 또, 제법 심각한 문제가 있어서 거의 쓰이질 않고 있습니다.

오랜된 웹 서버 중에 파이프라이닝을 제대로 처리하지 못하는 서버들이 있습니다. 파이프라이닝의 기술적인 핵심 가운데 하나가 웹 서버에 들어온 요청은 반드시 같은 순서대로 응답해야 한다는 것입니다. 하지만, 오래된 일부 웹 서버는 이 규칙을 지키지 않고 있습니다.

웹 서버에 1~3번까지의 3개의 요청이 도착하면 뭔가 처리를 해서 1~3에 해당하는 응답을 같은 순서대로 해야합니다. 예를 들어보죠. 화면에 4개의 그림을 시계방향으로 배치하기 위해 4개의 그림 파일을 요청했는데, 이게 순서가 뒤섞여서 도착하면 최악의 경우 그림 배치 순서가 잘못될 수 있습니다.

가끔 그림파일 뒤섞이는 정도야 납득할 수 있다쳐도, 순차적으로 받아온 결과를 가지고 연속된 계산을 해야 할 경우엔 문제가 정말 심각해질 수 있습니다. 정상적인 상태라면 100이라는 값이 먼저 들어오고 이걸 50으로 나누어서 결과값 2를 표시해줘야 하는데, 100과 50의 순서가 뒤바뀌면 50 / 100 = 0.5라는 심각한 오류를 초래할 수도 있습니다.

따라서, 가벼운 웹서핑이 아닌 뭔가 중요한 작업을 한다면 100% 신뢰하기 어려운 파이프라이닝은 사용하지 않는 게 좋습니다. 파이프라이닝 처리 때문에 발생하는 웹 서버쪽의 성능문제도 있는데, 요건 글의 주제에서 많이 벗어나니 생략~

더 자세한 내용은 아래 페이지를 참고하세요.

  1. https://en.wikipedia.org/wiki/HTTP_pipelining
  2. https://developer.mozilla.org/en-US/docs/Web/HTTP/Connection_management_in_HTTP_1.x

10. HTTP Pipelining 설정

상세설정 페이지(about:config)에서 pipelining으로 검색하면 여러 설정이 나타나는데, 이 가운데서 network.http.pipelining.max-optimistic-requests를 8로 설정하고, network.http.pipelining 과 network.http.proxy.pipelining 을 true 값으로 바꿔줍니다. 그런 다음, 웹 브라우저를 종료했다가 다시 시작하면 이 내용이 적용됩니다.

설정했다면 자주 가는 웹사이트를 들락거리며 렌더링 속도를 체감해보세요. 효과가 있는지 없는지는 앞서 설명한 여러 요인에 의해 다를 수 있습니다.

[참고]
HTTP Pipelining은 HTTP/2 프로토콜에서 HTTP Multiplexing 이라는 이름의 기술로 개선되었습니다. 이전 프로토콜(HTTP/1.1)에서 거론되는 문제를 대부분 해결했는데, HTTP/2 프로토콜 자체가 표준화된지 얼마 되지 않아 아직 널리 쓰이진 않고 있습니다.

Updated at 2017/07/06
파이어폭스 54 버전부터 파이프라이닝 구버전(HTTP/1)에 대한 지원이 제거됐습니다. 따라서, 관련 설정기능도 삭제됐습니다.

11. 내부 DB 단편화 제거

Firefox는 캐쉬관리 등을 위해 Sqlite라는 데이터베이스를 사용하고 있습니다. Sqlite는 굉장히 널리 사용되는 데이터베이스인데, 치명적인 단점이 하나 있습니다. 오래 사용하다보면 단편화가 심각하게 발생한다는 것인데, 이로 인해 페이지 렌더링 성능이 떨어질 수도 있습니다.

만약, Firefox를 아주 오랫 동안 사용했다면 유지보수 차원에서 이 데이터베이스 단편화를 제거해주는 것도 나쁘지 않습니다.

SpeedyfoxSpeedyfox

Speedyfox라는 프로그램으로 이 작업을 진행할 수 있으며, 아래 웹사이트에서 내려받을 수 있습니다.

http://www.crystalidea.com/speedyfox

3부에서 계속 됩니다.

3부: 파이어폭스 51, 멀티-프로세스(e10s) 강제 활성화