api

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: 21 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrNotificationSenderNotInitialized 서비스 시작 시 핵심 의존성 객체인 NotificationSender가 올바르게 초기화되지 않았을 때 반환하는 에러입니다.
	ErrNotificationSenderNotInitialized = apperrors.New(apperrors.Internal, "NotificationSender 객체가 초기화되지 않았습니다")
)

Functions

func NewEchoServer

func NewEchoServer(cfg ServerConfig) *echo.Echo

NewEchoServer 설정된 미들웨어를 포함한 Echo 인스턴스를 생성합니다.

미들웨어는 다음 순서로 적용됩니다 (순서가 중요합니다):

  1. HTTPLogger - HTTP 요청/응답 로깅 - 모든 HTTP 요청과 응답 정보를 구조화된 로그로 기록 - 민감 정보(app_key, password 등)는 자동으로 마스킹 - 요청 처리 시간, 상태 코드, IP 주소 등 기록

  2. PanicRecovery - 패닉 복구 및 로깅 - 핸들러에서 발생한 panic을 복구하여 서버 다운 방지 - 스택 트레이스와 함께 에러를 로깅 - 가장 먼저 적용되어야 다른 미들웨어의 panic도 복구 가능

  3. RequestID - 요청 ID 생성 - 각 요청에 고유한 ID를 부여 (X-Request-ID 헤더) - 로깅 및 디버깅 시 요청 추적에 사용 - 로깅 미들웨어보다 먼저 적용되어야 로그에 request_id 포함 가능

  4. Secure - 보안 헤더 설정 - X-XSS-Protection, X-Content-Type-Options 등 보안 헤더 자동 추가 - XSS, 클릭재킹 등의 공격 방어 - 가장 마지막에 적용되어 모든 응답에 보안 헤더 추가

  5. CORS - Cross-Origin Resource Sharing - 허용된 Origin에서의 크로스 도메인 요청 처리 - Preflight 요청(OPTIONS) 자동 응답 - 프로덕션 환경에서는 특정 도메인만 허용 권장

  6. ServerHeader - Server 헤더 제거 - 응답 헤더에서 Server 필드를 삭제하여 기술 스택 노출 방지 - 공격자가 서버 버전을 파악하여 취약점을 악용하는 것을 어렵게 함 - 보안 감화를 위한 조치 (Security through Obscurity)

  7. RateLimit - IP 기반 요청 제한 - IP 주소별로 초당 요청 수 제한 (기본: 20 req/s, 버스트: 40) - Brute Force 공격 방어 및 서버 리소스 보호 - 제한 초과 시 429 Too Many Requests 응답 - 로깅 전에 적용하여 과도한 로그 생성 방지

  8. BodyLimit - 요청 본문 크기 제한 (초과 시 413 응답) - 대용량 요청으로 인한 메모리 고갈 및 DoS 공격 방지

라우트 설정은 포함되지 않으며, 반환된 Echo 인스턴스에 별도로 설정해야 합니다.

func RegisterRoutes

func RegisterRoutes(e *echo.Echo, h *system.Handler)

RegisterRoutes API 서비스의 전역 라우트를 등록합니다.

이 함수는 다음과 같은 공통 엔드포인트들을 설정합니다:

  • 시스템 엔드포인트: 서비스 상태 확인(/health) 및 버전 정보(/version) (인증 불필요)
  • API 문서: Swagger UI (/swagger/*) 제공

Types

type ServerConfig

type ServerConfig struct {
	// Debug Echo 프레임워크의 상세 로깅 및 디버그 모드 활성화 여부
	// 활성화 시 상세한 에러 메시지와 스택 트레이스가 응답에 포함될 수 있으므로,
	// 운영(Production) 환경에서는 보안상 반드시 비활성화(false)해야 합니다.
	Debug bool

	// EnableHSTS HSTS(HTTP Strict Transport Security) 보안 헤더 활성화 여부
	// 이 설정이 활성화되면 브라우저에게 "앞으로 일정 기간 동안은 무조건 HTTPS로만 접속하라"고 지시하여,
	// 프로토콜 다운그레이드 공격(SSL Stripping) 및 쿠키 하이재킹과 같은 중간자 공격(MITM)을 원천 차단합니다.
	// TLS(HTTPS) 환경에서는 반드시 활성화(true)하는 것이 강력히 권장됩니다.
	EnableHSTS bool

	// AllowOrigins CORS(Cross-Origin Resource Sharing) 정책에서 허용할 도메인 목록
	// - 개발 환경: ["*"] (모든 출처 허용) 또는 ["http://localhost:3000"]
	// - 운영 환경: ["https://example.com"]과 같이 신뢰할 수 있는 특정 도메인만 명시해야 합니다.
	// 무분별한 허용은 악의적인 웹사이트가 사용자의 브라우저를 통해 API를 호출하는 보안 위협을 초래할 수 있습니다.
	AllowOrigins []string
}

ServerConfig HTTP 서버 생성에 필요한 설정을 정의합니다.

type Service

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

Service Notify API 서버(Echo 웹 서버)의 생명주기를 관리하는 서비스입니다.

이 서비스는 다음과 같은 역할을 수행합니다:

  • Echo 기반 HTTP/HTTPS 서버 시작 및 종료
  • 미들웨어 체인 설정 (PanicRecovery, RequestID, RateLimit, HTTPLogger, CORS, Secure)
  • 인증 관리 (Authenticator 생성 및 API 엔드포인트 보호)
  • API 엔드포인트 라우팅 설정 (Health Check, Version, 알림 메시지 전송 등)
  • Swagger UI 제공
  • 커스텀 HTTP 에러 핸들러 설정
  • 서비스 상태 관리 (시작/중지)
  • Graceful Shutdown 지원 (5초 타임아웃)
  • 서버 에러 처리 및 알림 전송 (예상치 못한 에러 발생 시)

서비스는 고루틴으로 실행되며, context를 통해 종료 신호를 받습니다. Start() 메서드로 시작하고, context 취소로 종료됩니다.

func NewService

func NewService(appConfig *config.AppConfig, notificationSender contract.NotificationSender, buildInfo version.Info) *Service

NewService API 서비스를 생성합니다.

func (*Service) Start

func (s *Service) Start(serviceStopCtx context.Context, serviceStopWG *sync.WaitGroup) error

Start API 서비스를 시작합니다.

서비스는 별도의 고루틴에서 실행되며, 다음 작업을 수행합니다:

  1. 서비스 상태 검증 (notificationSender nil 체크, 중복 실행 방지)
  2. Echo 서버 설정 (Authenticator, Handler, 미들웨어, 라우트)
  3. HTTP/HTTPS 서버 시작 (별도 고루틴)
  4. Shutdown 신호 대기
  5. Graceful Shutdown 처리 (5초 타임아웃)
  6. 서버 에러 처리 및 알림 전송 (예상치 못한 에러 발생 시)
  7. 서비스 상태 정리 (running 플래그 초기화)

매개변수:

  • serviceStopCtx: 서비스 종료 신호를 받기 위한 Context
  • serviceStopWG: 서비스 종료 완료를 알리기 위한 WaitGroup

반환값:

  • error: notificationSender가 nil이거나 서비스가 이미 실행 중인 경우

Note: 이 함수는 즉시 반환되며, 실제 서버는 고루틴에서 실행됩니다.

Directories

Path Synopsis
handler
system
Package system 시스템 엔드포인트 핸들러를 제공합니다.
Package system 시스템 엔드포인트 핸들러를 제공합니다.
Package middleware Echo 프레임워크를 위한 HTTP 미들웨어를 제공합니다.
Package middleware Echo 프레임워크를 위한 HTTP 미들웨어를 제공합니다.
model
domain
Package domain API 서비스의 핵심 도메인 모델을 정의합니다.
Package domain API 서비스의 핵심 도메인 모델을 정의합니다.
v1
Package v1 Notify API의 v1 버전 라우트를 정의하고 설정합니다.
Package v1 Notify API의 v1 버전 라우트를 정의하고 설정합니다.
handler
Package handler v1 API의 HTTP 요청 핸들러를 제공합니다.
Package handler v1 API의 HTTP 요청 핸들러를 제공합니다.

Jump to

Keyboard shortcuts

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