WebtoB 5 Fix#1

본 장에서는 WebtoB 5 Fix#1의 신규 기능과 이전 버전에서 변경된 기능, 버그 패치에 대해서 설명한다.

1. 신규 기능

1.1. NODE 절에 RPAHeader 설정

  • *NODE.RPAHeader = "X-Forwarded-For"와 같이 설정하면, WebtoB로 들어오는 HTTP 요청에서 Proxy 등을 거치면서 변경된 Remote IP에 Proxy 서버의 IP가 아닌 원래 요청이 발생된 Host IP로 설정할 수 있다.

    *NODE.RPAHeader 설정
    *NODE
    webtob      WEBTOBDIR = "/home/webtob_4191",
                SHMKEY = 54800,
                RPAFHeader = "X-Forwarded-For"
  • 관련이슈 : IMS-108918

1.2. USERLOGFORMAT 절 신규 생성

  • 공통으로 사용될 로그 포맷을 설정할 수 있도록 *USERLOGFORMAT 절을 추가하였다.

    기존에 VHOST가 많을 경우에 같은 포맷을 설정하고자 할지라도 각각 설정해야 했으나, *USERLOGFORMAT 절에 사용자가 로그 포맷을 설정하고 *LOGGING 절에서 해당 설정 포맷을 사용할 수 있도록 하였다.

    *USERLOGFORMAT 설정 방법
    *LOGGING
    log1        Format = "format1", FileName = "C:/TmaxSoft/WebtoB4.1.9.1/log/access.log",
                Option = "sync"
                ...
    *USERLOGFORMAT
    format1     Format = "%h %l %u %t \"%r\" %s %b"
  • 관련이슈 : IMS-108609

1.3. NODE 절에 TimeoutStatus 설정

  • TimeOut이 발생하는 경우 HTTP 상태코드를 변경할 수 있는 *NODE.TimeOutStatus 설정을 추가하였다. 기존에는 TimeOut이 발생할 경우 500 error가 발생하였으나, *NODE.TimeOutStatus 설정한 code 값으로 변경할 수 있다.

    *NODE.TimeoutStatus 설정
    *NODE
    webtob      WEBTOBDIR = "/home/webtob_4191",
                SHMKEY = 54800,
                Timeout = 300,
                TimeoutStatus = 512              # 500 (511-599)
  • 관련이슈 : IMS-110816

1.4. NODE 절에 CacheMaxCompressSize 설정

  • Compression할 때에도 memory caching하도록 *NODE.CacheMaxCompressSize 설정을 추가하였다. 설정값 이하의 압축된 응답에 대해 캐시를 적용하며, 0으로 설정하는 경우에는 캐시하지 않는다. 참고로 기존에는 압축된 응답에 대해서는 memory caching하지 않았다.

    *NODE.CacheMaxCompressSize 설정
    *NODE
    webtob      WEBTOBDIR = "/home/webtob_4191",
                SHMKEY = 54800,
                CacheMaxCompressSize = 8192              # 0 (0-)
  • 관련이슈 : IMS-111775

1.5. Disk Caching 기능 추가

  • NAS 등 서비스 리소스를 네트워크 장비에 두는 경우 static 파일을 메모리에 쌓아두는 것만으로는 한계가 있어, local disk에 caching할 수 있는 기능을 추가하였다.

    *DISK_CACHE 설정
    *NODE
    webtob      WEBTOBDIR = "/home/webtob_4191",
                SHMKEY = 54800,
                DiskCache = dc1
    
    *DISK_CACHE
    dc1
        CacheRoot = "cache/node",
        DirLevels = 5,
        MinFileSize = 8193,
        MaxFileSize = 100000000,
        RefreshTime = 3600
  • 관련이슈 : IMS-105985

1.6. Cloud 타입의 license에 만료일을 추가

  • 라이선스가 Cloud 타입이면서 expiration date를 체크하도록 추가하였다.

2. 추가 기능

2.1. WebAdmin 기능 개선

  • 기존의 WebAdmin을 사용자의 편의성 위해 기능을 개선하였다.

    동적 설정 및 제어, 설정을 변경한 후 이전 설정과 비교보기, 설정 시간 간격으로 자동으로 업데이트되는 모니터링 기능에 대하여 사용자가 편리하게 사용할 수 있도록 해당 기능을 개선하였다. 자세한 내용은 WebtoB WebAdmin 안내서를 참고한다.

2.2. Accesslog 포맷에 "%S" 설정 추가

  • Accesslog 포맷에 커넥션 구분에 따라 HTTP 또는 HTTPS를 기록할 수 있는 "%S" 설정을 추가하였다.

    Accesslog format = "%S" 설정
    *LOGGING
    log1        Format = "%h %S %l %u %t \"%r\" %s %b",
                FileName = "C:/TmaxSoft/WebtoB4.1.9.1/log/access.log",
                Option = "sync"
  • 관련이슈 : IMS-110768

2.3. URI 절의 ServerName을 동적 변경하도록 기능 추가

  • *URI 설정 내용 중 ServerName(*URI.SvrName)을 wsadmin의 set 명령어를 통해 동적으로 변경 가능하도록 기능을 추가하였다.

    *URI.ServerName을 동적 변경하는 방법
    $>wsadmin
    --- Welcome to WebtoB Admin (Type "quit" to leave) ---
    
    $$1 tmaxs4 (wsadm) [2016/08/24:18:24:10]: set -u uri1 svrname MyGroup2       # set -u [uri name] svrname [ServerName]
    new value (MyGroup2) is set for section = URI, name = uri1, fld = svrname
    
    $$2 tmaxs4 (wsadm) [2016/08/24:18:24:23]: cfg -u
        URI(0): Name = uri1,
             URI = "/jsvtest/",
             SvrType = JSV,
             SvrName = MyGroup2,
             SCGI = N,
             FCGI = N,
             Match = prefix,
             Priority(pr) = 50,
             GotoEXT = N,
             StopIfNoEXT = Y,
             Ext = ""
    
        URI(1): Name = uri2,
             URI = "/jsvtest2/",
             SvrType = JSV,
             SvrName = MyGroup,
             SCGI = N,
             FCGI = N,
             Match = prefix,
             Priority(pr) = 50,
             GotoEXT = N,
             StopIfNoEXT = Y,
             Ext = ""
  • 관련이슈 : IMS-114135

2.4. wswebadmin에 AUTHENT 절 등을 추가

  • WebAdmin을 지원하기 위한 wswebadmin에 AUTHENT, ERRORDOCUMENT, EXPIRES, DIRINDEX, HEADERS, FILTER, PRECEDING_COMMAND 절을 추가하였다. 자세한 내용은 WebtoB 관리자 안내서를 참고한다.

2.5. HTH Caching에서 메모리 Optimization하도록 기능 추가

  • 현재 url을 max url size(2k)을 default로 malloc하고 있는데, caching 수가 많아질 경우에 메모리 사용량이 많다고 생각할 수 있다. 따라서 memory optimization 기능을 추가하여 caching되는 요청 및 응답에 따른 메모리 사용량을 줄일 수 있도록 하였다.

  • 관련이슈 : IMS-114546

3. 변경 기능

3.1. WBSSL 버전 업그레이드

  • WBSSL의 버전을 기존의 "WBSSL 2.2.2"에서 "WBSSL 2.3.0_B0"로 업그레이드하였다.

    $>wbssl version
    WBSSL 2.3.0 B0 20 May 2016
  • 관련이슈 : IMS-106426

3.2. acesslog "%c" format 설정 시 기록하는 용어 변경

  • 기존에는 accesslog "%c" 포맷을 적용할 때 "hc" 또는 "hm"이 남도록 하였으나, 아래와 같이 기록하도록 변경하였다.

    • 변경 전

      "hth cache" -> "hc" : HTH cache에서 응답이 나간 경우 기록
      "hth htmls" -> "hm": Internal htmls에서 응답이 나간 경우 기록
    • 변경 후

      "mem cache" -> "hc" : 내부 cache에서 응답이 나간 경우 기록
      "disk cache" -> "dc" : Disk Cache에서 응답이 나간 경우 기록
      "sendfile" -> "sf" : Sendfile에서 응답이 나간 경우 기록
      "sendfile/disk cache" -> "sf/dc" : Sendfile이면서 Disk Cache에서 응답이 나간 경우 기록
      "remote" -> "hm" : remote에서 응답이 나간 경우 기록

3.3. expat library 이름을 expat에서 wbexpat로 변경

  • WebDAV 지원을 위한 XML Parser Library로 lib/(bin) 하위에 expat.lib(dll)를 추가하였는데 다른 미들웨어에서 동일한 이름의 해당 라이브러리를 사용하는 경우 라이브러리 충돌이 발생할 수 있다. 그에 따른 문제로 해당 라이브러리 이름을 expat에서 wbexpat로 변경하였다. (Windows 제외)

  • 관련이슈 : IMS-113202

4. 버그 패치

4.1. Filters process에서 Request header를 추가할 때 down될 수 있는 버그 수정

  • 필터에서 Request header에 특정 헤더를 추가할 때 클라이언트가 미리 끊는 등의 이유로 기존 Reqeust header가 없는 경우가 있을 수 있는데 이 경우를 체크하지 않은 경우 Filters process가 down될 수 있는 버그를 수정하였다.

4.2. ReverseProxy로 웹 소켓 사용할 때 FlowControl fail이 발생할 수 있는 문제

  • ReverseProxy로 웹 소켓을 사용할 때 뒷단의 서버가 읽어가는 것보다 클라이언트가 보내는 것이 더 빠를 때 잠시 pending한 데이터를 다시 읽지 않는 FlowControl fail이 발생할 수 있는 문제를 수정하였다.

  • 관련이슈 : IMS-111061

4.3. JSV Response를 Compression할 때 Filters process에서 처리된 결과가 반영되지 않는 문제

  • 필터에서 Set-Cookie 등을 한 경우 Compression을 처리할 때 해당 결과를 반영하지 않는 문제가 있어서 수정하였다.

4.4. COPY Method로 호출하여 같은 파일명 overwrite할 때 에러 발생 버그 수정

  • WebDAV 기능 중 같은 파일을 덮어쓸 때 "Overwrite: T" Request Header가 없을 경우에도 default가 T로 처리되도록 수정하였다.

  • 관련이슈 : IMS-112412

4.5. PROPFIND Method로 호출할 때 실패할 수 있는 문제

  • BitKinex와 같은 WebDAV 툴을 이용하여 테스트 중에 '/'로 끝나는 PROPFIND를 호출하는 경우 /index.html로 응답을 주어 'directory’가 보이지 않는 버그를 수정하였다.

  • 관련이슈 : IMS-112412

4.6. Filters process를 종료할 때 core가 발생할 수 있는 문제

  • Filters process를 wsdown으로 종료했을 경우에 core가 발생할 수 있는 문제를 수정하였다.

4.7. reverse proxy 사용 중 core 발생하거나 hth down 될 수 있는 버그 수정

  • 해당 이슈는 Reverse Proxy에서 사용하는 내부 context가 깨진 상태로 발생하였으며, context 유효성 검사 추가와 context가 유효하지 않을 때 서버 connection을 종료하도록 수정하였다.

  • 관련이슈 : IMS-114156, IMS-113270

4.8. RPAFHeader = "X-Forwarded-For" 설정에 대해 업데이트를 하지 않는 버그 수정

  • 두 개 이상의 클라이언트나 Proxy로 인하여 하나의 클라이언트로 들어오는 것과 같이 동작하여, *NODE.RPAFHeader = "X-Forwarded-For" 설정에 대해 업데이트를 하지 않는 버그를 수정하였다.

  • 관련이슈 : IMS-114804

4.9. Pipelined Request로 file download가 실패할 수 있는 버그 수정

  • Pipelined Request가 들어온 상태에서 요청처리가 끝나기 전에 또 Pipelined Request가 들어온 경우(주로 모바일에서 발생함) 발생할 수 있는 버그를 수정하였다.

  • 관련이슈 : IMS-115259