Skip to content

Releases: DevNewbie1826/httperror

Release v1.2.4

04 Dec 06:01

Choose a tag to compare

  1. 구조 단순화:
    * NewErrorReporterMiddleware, ErrorReporterMiddleware, ReportError 등 미들웨어 관련 코드를 모두 삭제했습니다.
    * ResponseWriter 래퍼(Wrapper) 등 복잡성을 유발하는 요소도 제거했습니다.
    2. Global Handler 패턴 도입:
    * SetErrorHandler 함수를 통해 전역 오류 처리 방식을 커스터마이징할 수 있도록 변경했습니다.
    * 기본값으로 제공되는 DefaultErrorHandler는 JSON 응답을 표준으로 하되, 간단한 HTML 협상(Negotiation)도 지원합니다.
    3. 버그 수정:
    * Critical Fix: DefaultErrorHandler에서 WriteHeader 호출 전에 헤더(Content-Type)를 설정하도록 순서를 올바르게 수정했습니다.
    4. 사용성 개선:
    * 모든 헬퍼 함수(httperror.NotFound, httperror.BadRequest 등)의 시그니처를 func(w, r, msg) 형태로 변경했습니다.
    * 이제 핸들러 내에서 httperror.NotFound(w, r, "메시지") 한 줄로 즉시 응답을 보낼 수 있습니다.

Release v1.2.3

26 Nov 11:31

Choose a tag to compare

fix(responsewriter): Implement http.Pusher and http.Hijacker interfaces

responseWriter가 http.ResponseWriter를 감싸면서 내부의 http.Pusher 및 http.Hijacker 인터페이스 기능들이 마스킹되는 문제가 있었습니다. 이로 인해 gzip 미들웨어와 같은 스트리밍 컴포넌트,
HTTP/2 또는 웹소켓 연결 처리 시 비정상적인 동작이나 응답 종료 오류로 인한 "무한 로딩" 현상이 발생할 수 있었습니다.

이 변경 사항은 responseWriter에 Push 및 Hijack 메서드를 추가하여 해당 인터페이스들을 투명하게 전달하도록 합니다. 이를 통해 미들웨어 체인 내에서 ResponseWriter의 모든 기능을 올바르게
노출하여 호환성과 안정성을 개선합니다.

Release v1.2.2

26 Nov 09:27

Choose a tag to compare

responseWriter의 Flush 메서드가 실제로는 헤더와 데이터를 클라이언트로 전송함에도 불구하고, 내부적으로 헤더 작성 여부(wroteHeader)를 갱신하지 않는 버그를 수정했습니다.

이전에는 Flush 이후에 에러가 발생할 경우, 미들웨어가 응답이 아직 시작되지 않았다고 오판하여 이미 압축(gzip)되거나 전송된 스트림 뒤에 JSON 에러 데이터를 덧붙이는 문제가 있었습니다. 이
수정으로 스트리밍 중 에러가 발생하더라도 잘못된 혼합 응답(corrupted response)을 보내지 않도록 보장합니다.

Release v1.2.1

26 Nov 08:48

Choose a tag to compare

오류 보고 미들웨어의 responseWriter가 http.Flusher 인터페이스를 구현하지 않아, gzip 압축 미들웨어와 같이 Flush 메서드를 사용하여 버퍼링된 데이터를 클라이언트에 전송하는 다른
미들웨어들과 호환성 문제가 발생했습니다.

Flush 메서드를 구현함으로써 responseWriter는 이제 기본 http.ResponseWriter에 Flush 호출을 올바르게 위임하여, 스트리밍 응답의 적절한 처리와 gzip 클라이언트 및 기타 플러시 의존 구성
요소와의 호환성을 보장합니다. 이는 gzip과 함께 사용할 때 보고되었던 "무한 로딩" 문제를 해결합니다.

Release v1.2.0

25 Nov 03:41

Choose a tag to compare

✨ 주요 변경 사항 (Key Changes)

  1. net/http/httptest 의존성 제거
  • 변경 전: 모든 응답을 httptest.NewRecorder를 통해 메모리(bytes.Buffer)에 버퍼링한 후 전송.
  • 변경 후: 경량화된 커스텀 ResponseWriter 래퍼(Wrapper)를 사용하여 오버헤드 제거.
  • 효과: 불필요한 메모리 할당을 제거하고, 테스트 패키지가 운영 코드에 포함되는 문제를 해결했습니다.
  1. Zero-copy (sendfile) 지원
  • io.ReaderFrom 인터페이스를 구현하여 커널 레벨의 sendfile 시스템 콜 최적화를 지원합니다.
  • 효과: http.ServeFile 등을 사용하여 대용량 파일을 전송할 때, 데이터를 유저 공간(User Space)으로 복사하지 않고 커널에서 바로 네트워크로 전송하므로 CPU와 메모리 사용량이 획기적으로
    감소합니다.
  1. 메모리 효율성 개선 및 지연 시간(Latency) 감소
  • 변경 전: 핸들러 처리가 끝날 때까지 클라이언트는 응답을 받지 못함 (High TTFB). 대용량 응답 시 OOM(Out Of Memory) 위험 존재.
  • 변경 후: Pass-through 방식으로 변경되어, 핸들러가 데이터를 쓰는 즉시 클라이언트로 스트리밍됩니다.

⚠️ 주의 사항 (Behavior Changes)

미들웨어의 동작 방식이 Buffering에서 Pass-through로 변경됨에 따라 에러 처리 동작이 일부 변경되었습니다.

  • 기존: 응답을 일부 작성했더라도, 에러가 발생하면 작성된 내용을 버리고 에러 JSON을 반환할 수 있었습니다.
  • 현재: 응답 헤더가 이미 전송된(Committed) 이후에는 ReportError가 호출되어도 에러 JSON으로 응답을 변경할 수 없습니다.
    • 권장 패턴: 가능한 모든 에러 검증을 마친 후 w.Write나 w.WriteHeader를 호출하도록 핸들러 로직을 구성하십시오.

🛠 기술적 세부 사항

  • http.ResponseController 등 최신 Go 기능과의 호환성을 위해 Unwrap() 메서드를 구현했습니다.

Version 1.1.0

10 Aug 11:35

Choose a tag to compare


English

Release v1.1.0

This release focuses on improving the reliability and stability of the httperror middleware. It includes a critical bug fix for the error
handling logic and introduces a comprehensive test suite for the entire library.

✨ Features & Enhancements

  • Greatly Increased Test Coverage: Introduced a comprehensive test suite, bringing the project's test coverage to over 99%. This significantly
    improves the reliability and stability of the library.
  • Added MIT License: The project is now officially licensed under the MIT License.
  • Added Test Coverage Badge: The README.md now includes a Codecov badge to display the current test coverage.

🐛 Bug Fixes

  • Corrected Middleware Behavior: Fixed a critical bug in NewErrorReporterMiddleware where it would fail to set the correct error status code if
    the handler had already written a response (e.g., by calling w.WriteHeader(http.StatusOK)). The middleware now correctly buffers the handler's
    response, ensuring that reported errors are always handled properly and overwrite any response the handler might have attempted to send.

한국어

릴리즈 v1.1.0

이번 릴리즈는 httperror 미들웨어의 신뢰성과 안정성을 향상시키는 데 중점을 두었습니다. 오류 처리 로직의 심각한 버그를 수정하고, 라이브러리
전체에 대한 포괄적인 테스트 스위트를 도입했습니다.

✨ 기능 및 개선 사항

  • 테스트 커버리지 대폭 향상: 포괄적인 테스트 스위트를 도입하여 프로젝트의 테스트 커버리지를 99% 이상으로 끌어올렸습니다. 이를 통해 라이브러리의
    신뢰성과 안정성이 크게 향상되었습니다.
  • MIT 라이선스 추가: 프로젝트에 공식적으로 MIT 라이선스를 적용했습니다.
  • 테스트 커버리지 배지 추가: README.md에 현재 테스트 커버리지를 표시하는 Codecov 배지를 추가했습니다.

🐛 버그 수정

  • 미들웨어 동작 수정: 핸들러가 이미 응답을 작성한 경우(예: w.WriteHeader(http.StatusOK) 호출), NewErrorReporterMiddleware가 올바른 오류 상태
    코드를 설정하지 못하는 심각한 버그를 수정했습니다. 이제 미들웨어는 핸들러의 응답을 올바르게 버퍼링하여, 보고된 오류가 항상 제대로 처리되고
    핸들러가 보내려고 시도했을 수 있는 모든 응답을 덮어쓰도록 보장합니다.

Version 1.0.0

09 Aug 11:50

Choose a tag to compare

✨ New Features

  • Implemented ErrorReporterMiddleware for centralized HTTP error handling.
  • Added a comprehensive set of helper functions for all standard HTTP status codes (e.g., NotFound, BadRequest).
  • The middleware provides a default JSON error handler.
  • Added NewErrorReporterMiddleware to allow for custom error handlers.

📖 Documentation

  • Created a detailed README.md with examples for both standard net/http and the chi router.