notify

package
v1.2.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 18, 2026 License: MIT Imports: 10 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client notify-server REST API와 통신하는 HTTP 클라이언트 래퍼입니다. 반드시 NewClient 함수를 통해 생성해야 하며, 직접 구조체를 초기화하면 안 됩니다. 생성된 Client는 고루틴 간 공유해도 안전합니다(내부 상태 변경 없음).

기본 사용 예:

client, err := notify.NewClient(&notify.Config{
    URL:           "https://notify.example.com/api/v1/notifications",
    AppKey:        "my-app-key",
    ApplicationID: "my-app",
})
if err != nil {
    // 설정이 잘못된 경우 여기서 오류가 반환됩니다. 반드시 처리하세요.
    log.Fatal(err)
}

// 일반 이벤트 알림 (error_occurred: false)
client.Notify(ctx, "배포가 완료되었습니다.")

// 장애/에러 알림 (error_occurred: true)
client.NotifyError(ctx, "DB 연결에 실패했습니다.")

func NewClient

func NewClient(config *Config, opts ...Option) (*Client, error)

NewClient 주어진 Config 설정으로 새로운 Client를 생성하여 반환합니다.

config가 nil이거나 필드 값이 유효하지 않으면 오류를 반환합니다. 성공 시 즉시 Notify / NotifyError를 호출할 수 있는 *Client가 반환됩니다.

func (*Client) Notify

func (c *Client) Notify(ctx context.Context, message string) error

Notify 정보성 알림 메시지를 notify-server로 전송합니다.

ctx를 통해 요청의 취소(cancel)나 데드라인(deadline)을 제어할 수 있습니다. nil ctx를 전달하면 패닉이 발생합니다. context.Background()를 사용하세요.

message가 공백 문자로만 이루어진 경우(빈 메시지) 오류를 반환합니다.

func (*Client) NotifyError

func (c *Client) NotifyError(ctx context.Context, message string) error

NotifyError 에러/장애 알림 메시지를 notify-server로 전송합니다.

ctx를 통해 요청의 취소(cancel)나 데드라인(deadline)을 제어할 수 있습니다. nil ctx를 전달하면 패닉이 발생합니다. context.Background()를 사용하세요.

message가 공백 문자로만 이루어진 경우(빈 메시지) 오류를 반환합니다.

type Config

type Config struct {
	// URL notify-server의 알림 전송 REST API 엔드포인트 주소입니다.
	// 반드시 "http://" 또는 "https://" 스킴으로 시작해야 하며, 유효한 호스트를 포함해야 합니다.
	// 예: "https://notify.example.com/api/v1/notifications"
	URL string

	// AppKey notify-server가 요청의 신뢰성을 검증하는 데 사용하는 인증 키입니다.
	// notify-server 측 설정에서 발급받은 값을 그대로 입력하세요.
	// 이 값이 일치하지 않으면 서버가 401 Unauthorized 등의 오류를 반환합니다.
	AppKey string

	// ApplicationID 알림을 발송하는 애플리케이션의 고유 식별자입니다.
	// notify-server는 이 값을 통해 어떤 애플리케이션이 보낸 알림인지 구분하고,
	// 알림을 적절한 수신자에게 라우팅합니다.
	ApplicationID string

	// Timeout HTTP 요청 하나에 허용되는 최대 대기 시간입니다.
	// 0으로 설정하면 기본값인 10초가 적용됩니다.
	// 음수는 허용되지 않으며, NewClient에서 오류를 반환합니다.
	Timeout time.Duration
}

Config notify-server REST API 클라이언트를 생성할 때 필요한 모든 설정을 담는 구조체입니다.

type Option

type Option func(*Client)

Option NewClient 호출 시 Client의 기본 동작을 변경하는 함수 타입입니다.

func WithHTTPClient

func WithHTTPClient(hc *http.Client) Option

WithHTTPClient 외부에서 미리 생성한 *http.Client를 이 Client에 주입하는 옵션입니다. 기본 HTTP 클라이언트 대신 커스텀 Transport(예: 프록시, mTLS)나 테스트용 mock transport를 사용하고 싶을 때 활용하세요.

Timeout 처리 규칙:

  • 주입된 클라이언트의 Timeout이 0(무제한)이면, Config.Timeout(> 0인 경우) 또는 기본값(10초)을 폴백으로 자동 적용합니다.
  • 주입된 클라이언트의 Timeout이 이미 0보다 크면, Config.Timeout 설정은 완전히 무시되며 주입된 클라이언트의 Timeout이 그대로 유지됩니다.

[얕은 복사 주의] Timeout이 0인 경우, 원본 *http.Client를 직접 수정하지 않고 얕은 복사(shallow copy) 후 Timeout 필드만 덮어씁니다. 따라서 Transport, Jar 등 포인터 필드는 원본과 공유됩니다. 이는 http.Transport를 여러 클라이언트가 공유하도록 권장하는 Go 표준 패턴과 일치합니다.

[CookieJar 경고] 주입한 *http.Client에 CookieJar(Jar 필드)가 설정된 경우, 얕은 복사로 인해 원본 클라이언트와 쿠키 상태가 공유됩니다. 독립적인 쿠키 세션이 필요하다면 CookieJar 없이 별도의 *http.Client 인스턴스를 생성하여 주입하세요.

[nil 전달 금지] nil을 전달하면 즉시 패닉이 발생합니다. 이는 조용히 기본 클라이언트로 대체될 경우 발생할 수 있는 디버깅하기 어려운 문제를 방지하기 위한 의도적인 설계입니다.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL