Repository navigation
Glossary
donghoong2 edited this page Oct 27, 2026
·
1 revision
develop
04c0e10(2026-10-27) 기준
위키와 코드에 나오는 도메인 용어, 상태값, 기술 용어를 한곳에 모았다. 같은 개념을 여러 페이지가 다르게 설명하던 곳은 코드를 기준으로 한 줄로 맞췄고, 용어마다 코드에서 쓰는 이름을 함께 적어 위키 용어로 코드를 찾아갈 수 있게 했다.
arc42 12절 용어집(Glossary) 형식을 따른다. "코드 이름"은 코드베이스에서 실제로 쓰는 클래스·enum·컬럼·설정 키를 그대로 적었고, 코드 이름이 없는 개념은 —로 둔다. 용어와 코드 이름이 다르면 코드 이름이 맞다. 각 절 안은 한글 용어를 가나다순으로, 그 뒤에 영문 용어를 알파벳순으로 놓았다. 상태 사이의 전이는 레포 문서에, 각 결정의 경위는 결정 로그에 있다.
| 용어 | 뜻 | 코드 이름 |
|---|---|---|
| 검수 | 손해사정사가 AI 초안을 검토·수정해 자기 의견을 붙이는 일 | ReportReview |
| 검수 대기 목록 | 손해사정사가 검수할 사건을 고르는 목록. 지역·사고 유형으로 거른다 | PendingReviewController |
| 검수본 | 손해사정사별로 격리된 검수 작업본. 리포트당 손해사정사 한 명에 한 행이다 |
ReportReview (report_reviews) |
| 경쟁 검수 | 같은 AI 초안을 여러 손해사정사가 서로 격리된 채 각자 검수하고, 사용자가 그중 하나를 고르는 구조 | — |
| 리포트 | 사용자가 접수한 사고 건과 그에 대한 AI 초안. 원본 콘텐츠는 바뀌지 않고 생명주기 상태만 바뀐다 |
Report (reports) |
| 무음 실패 | 실패가 어떤 이벤트로도 알려지지 않아 사용자가 알 수 없는 상태. 스윕러로 알림을 보내 없앤다 | — |
| 보류 | 손해사정사가 당장 볼 수 없는 사건을 사유와 함께 검수 대기 목록에서 빼 두는 것 |
ReportHold (report_holds), HoldReason
|
| 사건번호 | 사람이 부르는 리포트 식별자. yyyyMMdd-NNNNNN 형식이고 전역 시퀀스로 발급해 번호 빈틈이 생길 수 있다 |
case_no, CaseNoGenerator, core.report_case_seq
|
| 상담 시작(상담 수락) | 사용자가 제안 하나를 골라 그 손해사정사와 채팅방을 여는 행동. 제안과 리포트가 COUNSELING이 된다 |
PATCH /reports/{reportId}/proposals/{proposalId} |
| 스켈레톤 | 검수 제출 때 별도 트랜잭션으로 먼저 확보해 두는 빈 검수본 행 | ReportReviewSkeletonInitializer |
| 실패 사유 | 확정 실패의 대표 원인. 재업로드로 풀리는 UNREADABLE_FILE을 가장 낮은 우선순위에 둬 다른 사유와 섞이면 고르지 않는다 |
AnalysisFailureReason |
| 실패 저널 | AI 워커가 OCR 작업 실패를 기록하는 AI 소유 테이블. 일시 실패와 확정 실패를 terminal로 구분하고, 백엔드는 SELECT만 한다 |
ai.ocr_job_failures, OcrJobFailureView
|
| 알림 타입 | 인앱 알림·푸시의 종류. 시스템 실패 통지는 도메인 접두어를 붙이고 수신 설정과 무관하게 항상 보낸다 |
NotificationType (ANALYSIS_FAILED, REPORT_BLOCKED, REPORT_NEEDS_REUPLOAD 등) |
| 읽음 커서 | 채팅방의 참여자별 마지막 읽은 시각. 안 읽은 메시지 수를 세는 기준이다 |
ChatRoom.markRead, user_last_read_at·adjuster_last_read_at
|
| 자격 신청 | 손해사정사가 등록번호·자격증·등록증을 내고 관리자 승인을 받는 절차 | AdjusterApplication |
| 쟁점 | 보상에 영향을 주는 판단 항목. AI가 뽑은 쟁점과 손해사정사가 추가한 쟁점이 있다 |
ReportIssue, ReportReviewIssue (report_issues_reviews) |
| 제안 | 사용자에게 전달된 손해사정사의 검수본. 검수본과 같은 행이며 API에서는 proposal이라 부른다 |
ReportReview, ReviewStatus
|
| 채택(담당 확정) | 사용자가 채팅방에서 손해사정사를 담당으로 확정하는 것. 리포트는 CLOSED, 제안은 ACCEPTED가 된다 |
Report.accept(), PATCH /chats/{chatRoomId}/accept
|
| 형제 제안 | 같은 리포트에 달린 다른 손해사정사의 제안. 한 제안이 담당으로 확정되면 나머지는 REJECTED가 된다 |
— |
| AI 초안 | AI 워커가 만든 보상 분석 결과. 사용자에게 직접 보여주지 않고 손해사정사 검수를 거친다 |
reports, ReportIssue (report_issues) |
| B2B2C | AI → 손해사정사 → 사용자 순으로 결과가 전달되는 서비스 구조 | — |
| OCR 트리거 | AI 워커에 OCR과 초안 생성을 시작하라고 보내는 SQS 메시지. 문서 1건당 하나를 보낸다 | OcrJob |
| 용어 | 뜻 | 코드 이름 |
|---|---|---|
| 리포트 상태 | 리포트의 검수·매칭 생명주기. 정상 흐름은 AWAITING_INSPECTION → AWAITING_ADOPTION → COUNSELING → CLOSED다 |
ReportStatus (reports.status) |
| 분석 처리 상태 | OCR·AI 분석이 어디까지 왔는지. 리포트 상태와 다른 축이며 저장하지 않고 조회 때 계산한다. 값은 PROCESSING·COMPLETED·FAILED·BLOCKED·NEEDS_REUPLOAD
|
AnalysisState, ReportAnalysis
|
| 쟁점 검토 상태 | 검수본 안 쟁점의 처리 결과. 수락 ACCEPTED, 수정 MODIFIED, 제외 EXCLUDED, 손해사정사가 새로 넣은 ADDED
|
IssueReviewStatus |
| 제안 상태 | 제안(검수본)의 상태. 검수 등록 SENT → 상담 중 COUNSELING → 채택 ACCEPTED 또는 거절 REJECTED
|
ReviewStatus |
AWAITING_ADOPTION |
제안이 1건 이상 있고 사용자 선택을 기다림 | ReportStatus |
AWAITING_INSPECTION |
접수됨, 검수 대기 | ReportStatus |
BLOCKED |
AI 입력 가드레일(보험·법률 외 주제, PII 복호화 실패 등)이 차단한 리포트. AI 워커가 원시 SQL로 직접 쓰는 종료 상태이고, 분석 처리 상태에도 같은 이름의 값이 있다 |
ReportStatus, AnalysisState
|
CLOSED |
담당 손해사정사가 확정됨. 고객용 응답에는 "MATCHED"로 나간다 |
ReportStatus, ReportResponseSupport.customerStatus
|
COUNSELING |
사용자가 특정 제안으로 상담 중. 리포트와 제안 양쪽에 같은 이름의 값이 있다 |
ReportStatus, ReviewStatus
|
NEEDS_REUPLOAD |
OCR 품질 미달(신뢰도 미달 + 이름·도메인 정보 미검출)로 AI가 생성을 건너뛴 리포트. 실패가 아니라 품질 판정이라 실패 저널에 남지 않는다. 종료 상태이며 회복은 새 리포트 업로드뿐이다 |
ReportStatus, AnalysisState
|
NOT_SELECTED (미채택) |
접수 후 1주일 안에 상담 완료(CLOSED)되지 못했거나 검수를 하나도 받지 못한 리포트가 스윕으로 도달하는 상태. 신규 검수는 막지만 진행 중인 상담은 유지되고 COUNSELING으로 돌아갈 수 있어 종료 상태가 아니다 |
ReportStatus, ReportNotSelectionSweeper
|
| 용어 | 뜻 | 코드 이름 |
|---|---|---|
| 가입 티켓 | 소셜 인증을 통과한 신규 사용자에게 주는 5분짜리 purpose=signup JWT. /auth/register에서 회원 생성에 쓴다 |
SignupTicket, SignupTicketProvider
|
| 개발용 로그인 | 소셜 로그인 없이 테스트 사용자(닉네임을 주면 그 사용자)의 access_token 쿠키를 바로 내주는 엔드포인트. app.dev-login.enabled=true일 때만 생기고, dev에서는 공유 시크릿 헤더가 필수이며 prod에서는 기동이 막힌다. 로컬 개발과 dev 부하테스트에 쓴다 |
DevAuthController (POST /auth/dev/login), DevLoginService, DevLoginGuard
|
| 매직바이트 | 파일 앞부분의 포맷 시그니처. 선언된 Content-Type과 대조해 실제 타입을 확인한다 | ChatAttachmentService |
| 미인증 손해사정사 | 자격 신청 후 관리자 승인 전인 손해사정사. 검수·제안을 할 수 없다 | UNCERTIFICATED_ADJUSTER |
| 봉투 암호화 | 데이터는 DEK로 암호화하고 DEK는 KMS CMK로 감싸 함께 저장하는 키 관리 방식. PII 컬럼에 AES-256-GCM으로 쓴다 |
PiiCipher, PiiEnvelope, EncryptionKeyStore
|
| 블라인드 인덱스 | 암호화 컬럼을 동등 조건으로 찾기 위해 따로 저장하는 HMAC-SHA256 값 | PiiHmac |
| 블랙리스트 | 탈퇴한 사용자의 남은 access 토큰을 userId 단위로 막는 Redis 엔트리. 로그아웃 때는 등록하지 않는다 |
TokenBlacklistRepository (auth:blacklist:{userId}) |
| 수동 REST OAuth |
oauth2Login 없이 프론트가 넘긴 인가코드를 백엔드가 직접 교환하는 소셜 로그인 방식 |
OAuthProviderStrategy, OAuthClientRouter
|
| 역할 | 사용자 권한 구분. 이 값으로 인가하는 방식이 RBAC다 |
Role (USER / CERTIFICATED_ADJUSTER / UNCERTIFICATED_ADJUSTER / ADMIN), CustomUserDetails, @PreAuthorize
|
| 핸드셰이크 인증 | WebSocket 업그레이드 요청의 access_token 쿠키를 검증하는 단계 |
ChatHandshakeInterceptor |
| AAD | 암호문에 묶는 추가 인증 데이터. {table}:{column}을 넣어 암호문을 다른 컬럼으로 옮겨 쓰지 못하게 한다 |
PiiAad |
| access 토큰 | 보호 API 인증에 쓰는 30분짜리 JWT. access_token HttpOnly 쿠키(Path /)로만 받는다 |
JwtProvider, CookieProvider, jwt.access-token-expiry
|
| DEK / CMK | 데이터 암호화 키 / DEK를 감싸는 KMS 마스터 키 | KmsEnvelopePiiDataKeyProvider |
| fail-closed | 필요한 설정·조건이 없으면 기능을 열지 않거나 기동을 막는 정책. 예: dev에서 시크릿 없이 개발용 로그인을 켜면 기동 실패 | DevAuthController |
| fail-fast 가드 | 안전하지 않은 설정으로 뜨려 하면 기동을 멈추는 컴포넌트 |
PiiCryptoProdGuard, DevLoginGuard
|
| fail-open | 의존 시스템이 장애일 때 검사를 건너뛰고 통과시키는 정책. 예: Redis 장애 시 블랙리스트 조회 | — |
| Lua CAS | Redis Lua 스크립트로 GET·비교·SET/DEL을 원자적으로 수행하는 compare-and-set. refresh 회전에 쓴다 |
RefreshTokenRepository.rotate, RefreshTokenRepository.RotateResult (ROTATED / NOT_FOUND / MISMATCH) |
MISMATCH |
저장된 refresh 토큰이 제시한 값과 달라 이미 회전됐거나 탈취된 것으로 보고 키를 지우는 회전 결과 | RefreshTokenRepository.RotateResult.MISMATCH |
| pgAudit | PostgreSQL 감사 로그 확장. 객체 단위 감사로 원문이 저장된 민감 테이블의 SELECT를 기록한다 | — (RDS 파라미터 설정) |
| refresh 토큰 | access 재발급에 쓰는 14일짜리 JWT. refresh_token 쿠키(Path /auth)로 받고 Redis refresh:{userId}에 사용자당 1개 저장한다 |
RefreshTokenRepository, jwt.refresh-token-expiry
|
| RTR (Refresh Token Rotation) | refresh 토큰을 한 번 쓰면 버리고 새 토큰으로 바꿔 재사용·탈취를 탐지하는 방식 |
RefreshTokenRepository.rotate, AuthTokenService
|
| SUBSCRIBE 인가 | 채팅방을 구독할 때 세션 사용자가 그 방 참여자인지 확인하는 단계 | ChatSubscribeInterceptor |
| 용어 | 뜻 | 코드 이름 |
|---|---|---|
| 값 객체(VO) | 식별자 없는 불변 값. record로 만든다 |
AmountRange, LicenseProof, ReportAnalysis 등 |
| 멱등 키 | 중복 실행을 걸러 내는 식별자. OCR 메시지에서는 job_id다 |
OcrJob.jobId |
| 문서화된 예외 | native query 금지 규칙에서, 리포지토리에 사유 주석을 달고 허용한 경우 | — |
| 부분 수정(PATCH) | 보낸 필드만 반영하는 계약. null·필드 없음은 유지하고 빈 값은 비운다 |
ReviewReportRequest, ReportReview.updateReviewContent
|
| 스윕러 | 주기적으로 대상 행을 찾아 상태 전이나 알림을 처리하는 스케줄러. 미채택 전이용 하나와, AI 워커가 남긴 실패·차단·재업로드 신호를 알림으로 바꾸는 알림 스윕러들이 있다 |
ReportNotSelectionSweeper, *NotificationSweeper
|
| 아웃박스 릴레이 | OCR 아웃박스 행을 폴링해 SQS로 발행하는 스케줄러 | OutboxRelay |
| 아웃박스 프로세서 | 회원 탈퇴 후처리 아웃박스 행을 폴링해 Redis 정리·Apple 토큰 폐기를 수행하는 스케줄러 | OutboxProcessor |
| 커서 페이지네이션 | 마지막 항목의 (created_at, id)를 불투명 커서로 넘겨 다음 페이지를 찾는 방식 |
ChatMessageRepositoryImpl |
| 통지 시각 컬럼(알림 가드) | 알림을 한 번만 보내도록 null에서 시각으로 한 방향으로만 바뀌는 멱등 가드 컬럼 | reports.*_notified_at |
| 트랜잭셔널 아웃박스 | 외부 부수효과를 "할 일" 행으로 도메인 변경과 같은 커밋에 적재하고 별도 스케줄러가 처리하는 패턴. 탈퇴 후처리용과 OCR 발행용 두 테이블이 있다 |
OutboxEvent (outbox_events), OcrOutboxEvent (kafka_outbox_events) |
| AFTER_COMMIT 리스너 | 트랜잭션이 커밋된 뒤에 도는 이벤트 리스너. 알림 생성·FCM 발송에 쓴다 | @TransactionalEventListener(phase = AFTER_COMMIT) |
| Aggregate / Root | 불변식을 함께 지키는 엔티티 묶음과 그 진입점. 외부는 Root 메서드로만 상태를 바꾸고, Aggregate끼리는 ID로 참조한다 | — |
| at-least-once | 한 번 이상 실행될 수 있음을 전제로 하는 전달 보장. 처리 로직이 멱등이어야 한다 | — |
| at-most-once (best-effort) | 실패해도 재시도하지 않아 많아야 한 번 실행되는 전달 | — |
| Bounded Context | 도메인 경계 단위. domain/ 아래 패키지 하나다 |
auth, user, adjuster, report, chat, notification, upload
|
dead-letter (FAILED 파킹) |
재시도 한도를 넘겨 자동 처리를 멈추고 운영 확인 대상으로 남긴 아웃박스 행 | 아웃박스 status = FAILED
|
| degrade | 일부 조회가 실패해도 전체를 실패시키지 않고 더 낮은 판정으로 응답하는 것 | ReportAnalysisStatusQueryService |
| dual-write 문제 | 서로 다른 두 저장소(DB와 Redis 등)에 원자적으로 쓸 수 없어 생기는 불일치 | — |
| fan-in | AI 워커가 한 청구의 문서 완료 수가 doc_total에 닿으면 리포트를 생성하는 방식 |
— (AI 워커) |
FOR UPDATE SKIP LOCKED |
다른 트랜잭션이 잠근 행은 건너뛰고 잠기지 않은 행만 가져오는 PostgreSQL 잠금 조회. 다중 인스턴스 아웃박스 폴링에 쓴다 | — |
| Redis relay | 한 인스턴스에서 발행한 채팅 메시지를 Redis pub/sub으로 모든 인스턴스의 세션에 전달하는 구조 |
ChatEventPublisher, ChatMessageSubscriber
|
REQUIRES_NEW 별도 빈 |
새 트랜잭션이 필요한 메서드를 프록시가 걸리도록 다른 빈으로 뺀 것. 자기 호출로는 새 트랜잭션이 열리지 않는다 |
ReportHoldInitializer, TerminalFailureJournalReader 등 |
| STOMP | WebSocket 위에서 구독·메시지 프레임을 다루는 텍스트 프로토콜 | — |
| upsert | 식별자가 있으면 갱신하고 없으면 추가하는 것 | ReportReview.upsertIssue |
| 용어 | 뜻 | 코드 이름 |
|---|---|---|
| 관리 포트 | actuator를 API 포트(8080)와 분리해 띄우는 9292 포트. dev·prod에서만 분리하고 외부에는 health·info만 연다 |
MANAGEMENT_SERVER_PORT (기본 8080) |
| 노드 부트스트랩 | 커널 설정, 런타임·kubelet 설치, 라벨·taint처럼 노드를 클러스터에 붙이기까지의 작업 | — |
| 단일 진실원 | 배포 파일·설정의 기준은 레포 하나이고 서버에서 직접 고치지 않는다는 원칙 | deploy/ |
| 드리프트 | 코드(선언)와 실제 인프라 상태가 어긋난 것. 매니페스트 레포가 관리하는 리소스는 Argo CD가 OutOfSync로 보여 주지만, 레포 밖에서 손으로 바꾼 상태는 아무도 알려 주지 않는다 | — |
| 매니페스트 레포 | dev 클러스터의 차트·환경별 values·Argo CD Application을 둔 별도 private 레포. Argo CD는 이 레포만 본다 | — |
| 모니터링 인스턴스 | Prometheus·Grafana·Loki·Tempo가 compose로 도는 dev 관측 전용 EC2 | deploy/monitoring/ |
| 버퍼 풀 축소 | 적은 데이터로 디스크 I/O를 재현하려고 RDS shared_buffers 등을 일부러 낮추는 것 |
— |
| 스키마 명시 규칙 | 새 테이블·인덱스 마이그레이션에 core.를 붙여야 한다는 규칙 |
db/migration/V{n}__*.sql |
| 슬로우쿼리 로그 | 임계 시간(기본 1초)을 넘은 쿼리를 바인드 값 없이 남기는 Hibernate 로그 |
org.hibernate.SQL_SLOW, SLOW_QUERY_THRESHOLD_MS
|
| 시나리오 풀 | 부하테스트 시드 데이터를 소비 API별로 나눈 묶음(P 제안, D 상담, M 지속, I 검수 대기) | K6ScenarioSeedWriter |
| 시드 러너 | 부하테스트용 계정·상태 조합 데이터를 기동 때 한 번 채우는 러너. 프로파일과 프로퍼티 두 겹으로 켠다 |
K6AdjusterSeedRunner, K6ScenarioSeedRunner
|
| 컨트롤 플레인 | API 서버·etcd·스케줄러가 도는 클러스터 관리 노드. 현재 1대다 | — |
| 핫 로우 락 | 많은 트랜잭션이 같은 행을 갱신하려 해 그 행의 락이 직렬화 지점이 되는 현상. 사건번호 당일 카운터가 이 문제를 냈다 | — |
| Alloy | 컨테이너 stdout 로그를 모아 Loki로 보내는 수집 에이전트 | — |
| app-of-apps | root Application 하나가 레포 디렉터리를 읽어 나머지 Application을 만드는 Argo CD 구성 | — |
app.commit |
이미지에 구운 빌드 커밋 해시. /actuator/info로 노출해 배포 반영을 확인한다 |
app.commit |
application 태그 |
모든 메트릭에 붙는 공통 라벨. 공개 Spring 대시보드가 이 라벨로 대상을 고른다 | management.metrics.tags.application |
| Argo CD | 매니페스트 레포를 보고 클러스터를 Sync하는 GitOps 컨트롤러 | — |
| Cilium | eBPF 기반 CNI. kube-proxy를 대체하고 Hubble로 네트워크 플로우를 관측한다. 현재 dev 클러스터의 CNI다 | — |
| CNI | 파드 네트워크를 만드는 플러그인. Flannel → Calico → Cilium 순으로 바꿨다 | — |
core / ai / corpus 스키마 |
각각 백엔드, AI 엔진, 약관 청킹 파이프라인이 소유하는 PostgreSQL 스키마. 앱은 core만 쓰고 다른 스키마는 GRANT로 받은 범위만 읽는다 |
— |
currentSchema |
JDBC URL에서 앱의 기본 스키마 해석 순서(core,public)를 고정하는 파라미터 |
application.yml datasource URL |
| derived field | Grafana가 Loki 로그 본문의 traceId를 뽑아 Tempo 트레이스로 잇는 설정 |
datasource.yml |
| DLQ | 처리에 실패한 메시지를 따로 모으는 SQS 큐. 현재 넣지 않았다 | — |
| eBPF 데이터플레인 | iptables 대신 커널 BPF 맵으로 패킷을 처리하는 방식. iptables에 규칙이 안 보이는 게 정상이다 | — |
| ESO (External Secrets Operator) | Secrets Manager 값을 주기적으로 읽어 k8s Secret으로 만드는 오퍼레이터. ECR pull 토큰도 이것으로 발급한다 | ExternalSecret |
| exemplar | 메트릭 샘플에 붙은 traceId. 메트릭에서 트레이스로 바로 넘어가게 해 준다 | --enable-feature=exemplar-storage |
| GitOps | Git 레포의 선언 상태에 클러스터를 맞추는 배포 방식. 클러스터에 쓰는 주체는 Argo CD 하나다 | — |
| halfvec | pgvector의 float16 벡터 타입. halfvec(1024)로 쓴다 |
— |
| HNSW | 그래프 기반 근사 최근접 벡터 인덱스 | — |
| Hubble | Cilium의 플로우 단위 네트워크 관측 도구 | — |
| IMDS hop limit | 인스턴스 메타데이터 응답이 넘을 수 있는 네트워크 홉 수. 너무 낮으면 파드가 IMDSv2 토큰을 받지 못한다 | http_put_response_hop_limit |
| JDBC 쿼리 스팬 | DataSource 프록시가 쿼리 실행마다 만드는 Observation 스팬·타이머 | jdbc.query |
| k3s | 경량 Kubernetes 배포판. 처음에 썼다가 kubeadm으로 바꿨다 | — |
| kube-prometheus-stack | 클러스터 안에서 node-exporter·kubelet cAdvisor·kube-state-metrics로 지표를 모으는 수집 스택. 중앙 Prometheus로 remote_write한다 | — |
| kubeadm | etcd·인증서·컨트롤 플레인까지 직접 조립해 클러스터를 세우는 공식 도구. dev 클러스터의 부트스트랩 방식이다 | — |
| local-path PVC | 노드 로컬 디스크를 쓰는 볼륨. 처음 만들어진 노드에 묶인다 | — |
| NetworkPolicy | 파드 간 허용 통신을 선언하는 k8s 리소스. Flannel은 지원하지 않는다 | — |
| NoData=OK | 시계열이 없을 때 알림을 울리지 않는 Grafana 알림 설정 | noDataState |
| percentiles-histogram | 타이머에 히스토그램 버킷을 노출해 p95·p99를 계산할 수 있게 하는 Micrometer 설정 | management.metrics.distribution.percentiles-histogram |
| presigned URL | 짧은 유효기간으로 서명한 private S3 객체 접근 URL. 업로드·채팅 첨부 서명 유효기간은 모두 5분이다 |
S3Presigner, S3UploadService, ChatAttachmentUploader
|
| prune | Git에서 빠진 리소스를 클러스터에서도 지우는 Argo CD 옵션. 데이터·CRD 리소스에서는 끈다 | — |
| Reloader | Secret이 바뀌면 그 값을 쓰는 파드를 롤링 재시작하는 컨트롤러 | — |
| remote_write | 클러스터 Prometheus가 수집한 시계열을 중앙 Prometheus로 밀어 넣는 방식 | --web.enable-remote-write-receiver |
| selfHeal | 클러스터의 수동 변경을 Git 상태로 되돌리는 Argo CD 옵션 | — |
| semantic-release |
main push마다 커밋 type으로 다음 버전을 정해 태그·릴리즈 노트를 만드는 도구 |
.releaserc.json |
| Server-Side Apply | 적용 내용을 어노테이션에 남기지 않는 apply 방식. 256KB를 넘는 큰 CRD에 쓴다 | — |
| SLO 가드레일 | 성능 목표와 짝을 이루는 오류율 기준. 빠르기만 하고 오류가 많으면 통과가 아니다 | — |
| SSM 배포 | SSH 대신 AWS SSM send-command로 서버에 배포 명령을 보내고 결과를 폴링하는 방식. 지금은 prod와 모니터링 인스턴스에만 쓴다 |
deploy-prod.yml, deploy-dev.yml의 deploy-monitoring job |
| taint / toleration | 노드에 일반 파드가 못 올라오게 막고(taint) 허용할 파드만 예외로 두는(toleration) 장치. GPU 노드 격리에 쓴다 | — |
| time-slicing | GPU 한 장을 여러 파드가 시간 분할로 나눠 쓰는 device plugin 기능. VRAM은 격리되지 않는다 | — |
| Traefik | 클러스터 입구 Ingress 컨트롤러. /actuator는 9292로, 나머지는 8080으로 보낸다 |
— |
| verify-deploy | dev 배포 후 /actuator/info의 app.commit이 이번 커밋과 같아지는지 확인하는 단계 |
deploy-dev.yml의 verify-deploy job |
성능 · 부하테스트
데이터 · API 계약
- 500 144건과 포괄 예외 핸들러
- 평점이 항상 0점
- 검수 대기 숫자 불일치
- 프론트 계약 드리프트
- core 스키마 통일
- 리포트 무음 정지
- OpenAPI camelCase 드리프트
- OpenAPI 상태코드 드리프트
인증 · 메시징
배포 · 관측성
Kubernetes
Kubernetes
레퍼런스