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(¬ify.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 ¶
NewClient 주어진 Config 설정으로 새로운 Client를 생성하여 반환합니다.
config가 nil이거나 필드 값이 유효하지 않으면 오류를 반환합니다. 성공 시 즉시 Notify / NotifyError를 호출할 수 있는 *Client가 반환됩니다.
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 ¶
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을 전달하면 즉시 패닉이 발생합니다. 이는 조용히 기본 클라이언트로 대체될 경우 발생할 수 있는 디버깅하기 어려운 문제를 방지하기 위한 의도적인 설계입니다.