-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathapplication.yml
More file actions
163 lines (158 loc) · 6.05 KB
/
Copy pathapplication.yml
File metadata and controls
163 lines (158 loc) · 6.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
spring:
application:
name: stackup
jpa:
hibernate:
ddl-auto: validate
properties:
hibernate:
format_sql: true
flyway:
enabled: true
locations: classpath:db/migration
servlet:
multipart:
max-file-size: 20MB
max-request-size: 20MB
server:
port: ${SERVER_PORT:38010}
management:
endpoints:
web:
exposure:
include: health,info
endpoint:
health:
probes:
enabled: true
# 컨테이너 healthcheck 는 이 그룹을 본다(docker-compose). 백엔드가 **자기 일을 하려면
# 반드시 필요한 것**만 넣는다 — DB·RabbitMQ. s3/aiServer 는 종합(/actuator/health)에만
# 들어간다: AI 가 죽었다고 백엔드를 rotation 에서 빼면 로그인·히스토리까지 못 쓰게 된다.
group:
readiness:
include: readinessState, db, rabbit
springdoc:
api-docs:
path: /api/v3/api-docs
swagger-ui:
path: /api/swagger-ui.html
app:
security:
jwt-secret: ${JWT_SECRET:}
access-token-ttl-seconds: ${JWT_ACCESS_TTL_SECONDS:900}
refresh-token-ttl-seconds: ${JWT_REFRESH_TTL_SECONDS:1209600}
access-token-type: ${JWT_ACCESS_TOKEN_TYPE:Bearer}
encryption-key: ${ENCRYPTION_KEY:}
oauth-state-ttl: ${OAUTH_STATE_TTL:5m}
oauth-state-byte-length: ${OAUTH_STATE_BYTE_LENGTH:32}
pkce-code-verifier-byte-length: ${PKCE_CODE_VERIFIER_BYTE_LENGTH:32}
refresh-token-byte-length: ${REFRESH_TOKEN_BYTE_LENGTH:32}
refresh-token-cookie-name: ${REFRESH_TOKEN_COOKIE_NAME:refresh_token}
refresh-token-cookie-path: ${REFRESH_TOKEN_COOKIE_PATH:/api/auth}
refresh-token-cookie-same-site: ${REFRESH_TOKEN_COOKIE_SAME_SITE:Strict}
refresh-token-cookie-secure: ${REFRESH_TOKEN_COOKIE_SECURE:true}
refresh-token-cookie-http-only: ${REFRESH_TOKEN_COOKIE_HTTP_ONLY:true}
internal-api-key: ${CORE_INTERNAL_API_KEY:}
github:
client-id: ${GITHUB_OAUTH_CLIENT_ID:}
client-secret: ${GITHUB_OAUTH_CLIENT_SECRET:}
redirect-uri: ${GITHUB_OAUTH_REDIRECT_URI:}
scopes: read:user user:email repo
oauth-base-url: ${GITHUB_OAUTH_BASE_URL:https://github.com}
token-type: ${GITHUB_OAUTH_TOKEN_TYPE:bearer}
code-challenge-method: ${GITHUB_OAUTH_CODE_CHALLENGE_METHOD:S256}
api-base-url: ${GITHUB_API_BASE_URL:https://api.github.com}
api-version: ${GITHUB_API_VERSION:2022-11-28}
connect-timeout: ${GITHUB_CONNECT_TIMEOUT:3s}
read-timeout: ${GITHUB_READ_TIMEOUT:5s}
google:
# client-id/secret 이 비어 있어도 기동한다 — Google 로그인만 비활성.
client-id: ${GOOGLE_OAUTH_CLIENT_ID:}
client-secret: ${GOOGLE_OAUTH_CLIENT_SECRET:}
redirect-uri: ${GOOGLE_OAUTH_REDIRECT_URI:http://localhost:5173/auth/google/callback}
# 레포 접근 권한은 요구하지 않는다. 신원 확인에 필요한 최소 범위만.
scopes: openid email profile
authorization-base-url: ${GOOGLE_OAUTH_AUTHORIZATION_BASE_URL:https://accounts.google.com/o/oauth2/v2/auth}
token-base-url: ${GOOGLE_OAUTH_TOKEN_BASE_URL:https://oauth2.googleapis.com}
user-info-base-url: ${GOOGLE_OAUTH_USER_INFO_BASE_URL:https://www.googleapis.com}
code-challenge-method: ${GOOGLE_OAUTH_CODE_CHALLENGE_METHOD:S256}
connect-timeout: ${GOOGLE_CONNECT_TIMEOUT:3s}
read-timeout: ${GOOGLE_READ_TIMEOUT:5s}
s3:
endpoint: ${S3_ENDPOINT:http://minio:9000}
access-key: ${S3_ACCESS_KEY:minioadmin}
secret-key: ${S3_SECRET_KEY:minioadmin}
bucket: ${S3_BUCKET:stackup}
region: ${S3_REGION:us-east-1}
path-style: ${S3_PATH_STYLE:true}
messaging:
rabbitmq:
publisher: core-server
version: v1
message:
content-type: application/json
content-encoding: UTF-8
trace-id-header: x-trace-id
template:
mandatory: true
exchanges:
durable: true
auto-delete: false
names:
core-to-ai: stackup.core-to-ai
ai-to-core: stackup.ai-to-core
realtime: stackup.realtime
queues:
durable: true
names:
ai-analyze-resume: ai.analyze.resume
ai-analyze-repository: ai.analyze.repository
ai-analyze-web: ai.analyze.web
ai-analyze-cover-letter: ai.analyze.cover_letter
ai-generate-questions: ai.generate.questions
ai-generate-followup: ai.generate.followup
ai-generate-feedback: ai.generate.feedback
ai-analyze-voice: ai.analyze.voice
ai-generate-tts: ai.generate.tts
core-callback-analysis: core.callback.analysis
core-callback-questions: core.callback.questions
core-callback-feedback: core.callback.feedback
core-callback-voice: core.callback.voice
core-callback-tts: core.callback.tts
routing-keys:
analyze-resume: analyze.resume
analyze-repository: analyze.repository
analyze-web: analyze.web
analyze-cover-letter: analyze.cover_letter
generate-questions: generate.questions
generate-followup: generate.followup
generate-feedback: generate.feedback
analyze-voice: analyze.voice
generate-tts: generate.tts
callback-analysis: callback.analysis
callback-questions: callback.questions
callback-feedback: callback.feedback
callback-voice: callback.voice
callback-tts: callback.tts
realtime-session-notify: realtime.session.notify
realtime-user-notify: realtime.user.notify
realtime-document-notify: realtime.document.notify
dead-letter:
exchange: stackup.dlx
routing-key-prefix: dlq.
retry:
max-retries: 3
initial-interval: 1s
multiplier: 2.0
max-interval: 10s
sse:
timeout: 30m
keep-alive-interval: 30s
stream-token-ttl: 60s
cors:
allowed-origins: ${CORS_ALLOWED_ORIGINS:https://your-domain}
interview:
# 질문 풀 생성 시 최근 N개 세션의 질문을 AI 에 전달해 중복 회피. 0 이면 비활성.
question-dedup:
recent-sessions: ${INTERVIEW_DEDUP_RECENT_SESSIONS:3}
max-questions: ${INTERVIEW_DEDUP_MAX_QUESTIONS:30}