Discourse AI로 인해 새로운 SSL 및 Connection Reset by Peer 오류 발생

말씀하신 대로, 처음에는 네트워크 스택 문제인 줄 알았지만, 해당 컨테이너에서 반복적으로 OpenAI API를 호출하면 정상적으로 동작합니다.

또한, 이는 2월 21일 기준으로 매우 최근의 빌드에서 테스트한 것입니다.

이를 증명하기 위해(토큰 소모를 감수하고) OpenAI 네트워크 스택을 확인하기 위한 간단한 스크립트를 작성했습니다.

  • 600초(10분) 동안 실행됩니다.
  • 초당 1회씩 채팅 완성(chat completion) 호출을 수행합니다.
  • 캐시를 피하기 위해 프롬프트를 변경합니다.

컨테이너 내부에서 ./launcher enter app을 실행하고, 아래 스크립트를 저장한 후 chmod +x test_openai.sh로 실행 권한을 부여하고, OPENAI_API_KEY=.... ./test_openai.sh로 실행하세요.

test_openai.sh
#!/bin/bash

# 실행 시간
DURATION_SECS=600

# 카운터 초기화
successful=0
unsuccessful=0
declare -A error_messages

# 백분율 계산 함수
calc_percentage() {
    local total=$(($1 + $2))
    if [ $total -eq 0 ]; then
        echo "0.00"
    else
        echo "scale=2; ($2 * 100) / $total" | bc
    fi
}

# 통계 출력 함수
print_stats() {
    local percent=$(calc_percentage $successful $unsuccessful)
    echo "-------------------"
    echo "성공한 호출: $successful"
    echo "실패한 호출: $unsuccessful"
    echo "실패율: ${percent}%"
    echo "에러 메시지:"
    for error in "${!error_messages[@]}"; do
        echo "  - $error (${error_messages[$error]} 회)"
    done
}

end_time=$((SECONDS + DURATION_SECS))

counter=1
while [ $SECONDS -lt $end_time ]; do
    # 타임아웃과 함께 API 호출 수행
    response=$(curl -s -w "\n%{http_code}" \
        -X POST \
        -H "Content-Type: application/json" \
        -H "Authorization: Bearer $OPENAI_API_KEY" \
        -d "{
            \"model\": \"gpt-4o-mini\",
            \"messages\": [{\"role\": \"user\", \"content\": \"Use this number to choose a one word response: $counter\"}]
        }" \
        --connect-timeout 5 \
        --max-time 10 \
        https://api.openai.com/v1/chat/completions 2>&1)

    # 마지막 줄(상태 코드)과 응답 본문 가져오기
    http_code=$(echo "$response" | tail -n1)
    body=$(echo "$response" | sed '$d')

    # 호출이 성공했는지 확인
    if [ "$http_code" = "200" ]; then
        ((successful++))
    else
        ((unsuccessful++))
        # 에러 메시지 추출
        error_msg=$(echo "$body" | grep -o '"message":"[^"]*"' | cut -d'"' -f4)
        if [ -z "$error_msg" ]; then
            error_msg="Connection error: $body"
        fi
        # 에러 메시지 카운터 증가
        ((error_messages["$error_msg"]++))
    fi

    # 현재 통계 출력
    print_stats

    ((counter++))
    
    # 다음 호출 전 1초 대기
    sleep 1
done

테스트 스크립트 실행 결과, 실패율은 0.5% 미만으로, 해당 규모에서는 허용 가능한 수준이었습니다.

이로써 문제는 컨테이너나 이를 구동하는 네트워크 스택이 아니라 Discourse 소프트웨어 자체에 있음을 알 수 있습니다.

최근 커밋으로 해결되지 않았다면, 더 자세히 조사해 보겠습니다.

2개의 좋아요