Repository navigation
๐[๊ธฐ๋ฅ๊ฐ์ ][Infra] ์ค์ ยท์ธํ๋ผ ์์ ๋ฐ ์ธก์ ๊ธฐ๋ฐ ํ๋ณด (์๋ธํ๋ก์ ํธ A)ย #806
Description
๐ ํ์ฌ ๋ฌธ์ ์
ํ๋ก์ ํธ๊ฐ 12๊ฐ ๋ชจ๋ / Java 346ํ์ผ ๊ท๋ชจ๋ก ์ฑ์ฅํ๋ ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ค์ ์ ์ด๊ธฐ ์ํ์์ ํฌ๊ฒ ์๋์ง ์์์ต๋๋ค. ์ฝ๋๋ฒ ์ด์ค ์ค์ธก ๊ฒฐ๊ณผ ์๋ ๋ฌธ์ ๊ฐ ํ์ธ๋์ต๋๋ค.
open-in-view์ค์ ์ด ๋ฌด์๋๊ณ ์์ต๋๋ค.application.yml์์ ์ด ํค๊ฐspring.jpa.properties.hibernate์๋์ ์๋๋ฐ, Spring Boot๊ฐ ์ธ์ํ๋ ์ฌ๋ฐ๋ฅธ ์์น๋spring.jpa์ง์์ ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋กfalse๋ก ์ ์ด๋ ์ค์ ์ด ์ ์ฉ๋์ง ์๊ณ ๊ธฐ๋ณธ๊ฐtrue๋ก ๋์ ์ค์ ๋๋ค.- ์ด์์์ SQL์ด ์ ๋ ์ถ๋ ฅ๋ฉ๋๋ค.
show_sql,format_sql,use_sql_comments๊ฐ ๋ชจ๋true์ด๊ณ ์ด์ ํ๋กํ์ ์ค๋ฒ๋ผ์ด๋๊ฐ ์์ต๋๋ค.show_sql์ ๋ก๊ฑฐ๋ฅผ ๊ฑฐ์น์ง ์๊ณ stdout์ผ๋ก ์งํํด ๋ก๊ทธ๋ ๋ฒจ๋ก ์ฐจ๋จํ ์ ์์ต๋๋ค. - ์ปค๋ฅ์
ํ ์ค์ ์ด ์ ๋ฌดํฉ๋๋ค. ์ด๋ yml์๋
hikari์ค์ ์ด ์์ด HikariCP ๊ธฐ๋ณธ๊ฐ(ํ ํฌ๊ธฐ 10)์ผ๋ก ๋์ํฉ๋๋ค. - JPA ๋ฐฐ์น/ํ์น ํ๋์ด ์ ๋ฌดํฉ๋๋ค.
default_batch_fetch_size๊ฐ ์์ด ์ง์ฐ ๋ก๋ฉ N+1์ด ๊ทธ๋๋ก N+1๋ก ๋๊ฐ๋๋ค. - ์ด์ ๋ก๊ทธ๋ ๋ฒจ์ด DEBUG์
๋๋ค.
com.romrom,suh-logger,suh-api-log๊ฐ ๋ชจ๋ DEBUG์ด๊ณlogback-spring.xml์๋ ์ค๋ณต ํ๋์ฝ๋ฉ๋ผ ์์ต๋๋ค. - ๋ฉํธ๋ฆญ ๋
ธ์ถ์ด ์์ต๋๋ค. actuator ์์กด์ฑ์ ์์ผ๋
health๋ง ๋ ธ์ถ๋ผ ์ฑ๋ฅ ๊ฐ์ ํจ๊ณผ๋ฅผ ์ธก์ ํ ์๋จ์ด ์์ต๋๋ค. - ์กด์ฌํ์ง ์๋ Flyway ์์ฑ์ด ์ค์ ๋ผ ์์ต๋๋ค.
spring.flyway.repair-on-migrate๋ Spring Boot 3.4.1์ ์ค์ ๋ฉํ๋ฐ์ดํฐ์ ์๋ ํค๋ก, "๋ง์ด๊ทธ๋ ์ด์ ์ ์๋ repair"๋ผ๋ ์ฃผ์๊ณผ ๋ฌ๋ฆฌ ์กฐ์ฉํ ๋ฌด์๋๊ณ ์์ต๋๋ค.
๐ ๏ธ ํด๊ฒฐ ๋ฐฉ์ / ์ ์ ๊ธฐ๋ฅ
์ฝ๋ ๋ณ๊ฒฝ ์์ด ์ค์ ๋ง์ผ๋ก ์ฑ๋ฅยท์์ ์ฑ์ ๊ฐ์ ํ๊ณ , ํ์ ๊ฐ์ ์์ ์ ํจ๊ณผ๋ฅผ ์ซ์๋ก ์ฆ๋ช ํ ์ธก์ ๊ธฐ๋ฐ์ ํ๋ณดํฉ๋๋ค.
open-in-viewํค๋ฅผ ์ฌ๋ฐ๋ฅธ ์์น๋ก ์ฎ๊ธฐ๋ ํ์ฌ ์ค์ ๋์๊ฐ์ธtrue๋ฅผ ๋ช ์ํฉ๋๋ค.false์ ํ์ ๋ฏธ๋ณดํธ LAZY ์ฐ๊ด๊ด๊ณ ๊ฐ์ฌ๊ฐ ์ ํ๋ผ์ผ ํ๋ฏ๋ก ํ์ ์์ ์ผ๋ก ๋ถ๋ฆฌํฉ๋๋ค.- SQL ๋ก๊น ์ stdout ์งํ ๋ฐฉ์์์ logback์ ๊ฒฝ์ ํ๋ ๋ฐฉ์์ผ๋ก ๊ต์ฒดํด ํ๋กํ๋ณ ์ ์ด๊ฐ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- HikariCP ํ ์ค์ ๊ณผ JPA ๋ฐฐ์น ํ์น ํ๋์ ์ถ๊ฐํฉ๋๋ค.
- ๋ก๊ทธ๋ ๋ฒจ ์ ์๋ฅผ yml ๋จ์ผ ์์ค๋ก ํต์ผํฉ๋๋ค.
- Prometheus ๋ฉํธ๋ฆญ์ ๋ ธ์ถํด ์ปค๋ฅ์ ํยท์ฟผ๋ฆฌยท์๋ํฌ์ธํธ p95๋ฅผ ๊ด์ธก ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
โ๏ธ ์์ ๋ด์ฉ
application.yml์open-in-viewํค ์์น ๊ต์ (spring.jpa์ง์์ผ๋ก ์ด๋)show_sql/format_sql/use_sql_comments์ ๊ฑฐ ํ dev ํ๋กํ์org.hibernate.SQL๋ก๊ฑฐ๋ก ๋์ฒดdefault_batch_fetch_size: 100,jdbc.batch_size,jdbc.fetch_size,order_inserts,order_updates,in_clause_parameter_padding์ถ๊ฐ- HikariCP ํ ์ค์ ์ถ๊ฐ (ํ ํฌ๊ธฐ 20, ๋์ ํ์ง 5์ด)
logback-spring.xml์ ํ๋์ฝ๋ฉ๋ ๋ก๊ทธ๋ ๋ฒจ ์ ๊ฑฐ โ Appender ์ ์๋ง ๋ด๋นํ๋๋ก ์ ๋ฆฌmicrometer-registry-prometheus์์กด์ฑ ์ถ๊ฐ ๋ฐ actuator์metrics,prometheus๋ ธ์ถ- ๋ฌด์๋๊ณ ์๋
spring.flyway.repair-on-migrate์ ๊ฑฐ - ์ด์ยทํ
์คํธ ํ๋กํ ๋ก๊ทธ๋ ๋ฒจ INFO ์ ํ (GitHub Secret
APPLICATION_PROD_YML,APPLICATION_TEST_YML๊ฐฑ์ ํ์) - ์ค์ ํค ์์นยท์กด์ฌ๋ฅผ ๊ฒ์ฆํ๋ ํ๊ท ๋ฐฉ์ง ํ ์คํธ ์ถ๊ฐ (Spring ์ปจํ ์คํธยทDB ๋ถํ์)
- ์ค์ ๋ฐํ์ ๋ฐ์ธ๋ฉ ๋ฐ actuator ์ธ์ฆ ๋ณดํธ ๊ฒ์ฆ ํตํฉ ํ ์คํธ ์ถ๊ฐ
- ๋ฐฐํฌ ํ Prometheus ์งํ ์์ง ๋ฐ ์ฃผ์ ์๋ํฌ์ธํธ p95 ๋ฒ ์ด์ค๋ผ์ธ ๊ธฐ๋ก
๋ณ๊ฒฝํ์ง ์๋ ํญ๋ชฉ (์๋๋ ์ด์ ์ค๊ณ์ด๋ฏ๋ก ์ ์งํ๋ฉฐ, ์ค์๋ก ๋ฐ๋๋ฉด ํ ์คํธ๊ฐ ์ก๋๋ก ๊ฐ๋ ํ ์คํธ๋ฅผ ๋ฃ์ต๋๋ค)
spring.jpa.hibernate.ddl-auto: update,spring.jpa.generate-ddl: truespring.flyway.validate-on-migrate: falseโ ์ผ๋ฉด ์ฒดํฌ์ฌ์ด ๊นจ์ง ๋ง์ด๊ทธ๋ ์ด์ ์์ ๋ฐฐํฌ๊ฐ ์ฆ์ ์ค๋จ๋ฉ๋๋ค/actuator/health์ ์ธ์ฆ ํ์ดํธ๋ฆฌ์คํธ โ Dockerfile HEALTHCHECK์ Traefik ๋ธ๋ฃจ/๊ทธ๋ฆฐ ์ ํ์ด ์์กดํฉ๋๋ค
๐ ๊ด๋ จ ๋ฌธ์
- ์ค๊ณ:
docs/superpowers/specs/2026-07-27-infra-config-hygiene-design.md - ๊ตฌํ ๊ณํ:
docs/superpowers/plans/2026-07-27-infra-config-hygiene.md
์ ์ฒด ๊ฐ์ ๋ก๋๋งต์์ ์ด ์ด์๋ ์๋ธํ๋ก์ ํธ A์ ํด๋นํ๋ฉฐ, ์ดํ B(๊ด๋ฆฌ์ ํ์ด์ง), C(๊ด์ธก์ฑ/๋ก๊น ), D(๋ฐฑ์๋ ์ฑ๋ฅ/๊ตฌ์กฐ)๊ฐ ์์ฐจ๋ก ์งํ๋ฉ๋๋ค. D์ N+1 ์ ๊ฑฐ์ OSIV ์ ํ์ ์ด ์์ ์์ ํ๋ณดํ๋ ๋ฉํธ๋ฆญ์ ๊ทผ๊ฑฐ๋ก ๊ฒ์ฆํฉ๋๋ค.
๐โโ๏ธ ๋ด๋น์
- ๋ฐฑ์๋: SUH SAECHAN
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fields์์ ์
Activity
github-actions commentedon Jul 26, 2026
Chuseok22 Issue Helper
๋ธ๋์น๋ช
์ปค๋ฐ ๋ฉ์์ง
์ค์ _์ธํ๋ผ_์์_๋ฐ_์ธก์ _๊ธฐ๋ฐ_ํ๋ณด : test : application.yml ํค ์์น ํ๊ท ๋ฐฉ์ง ํ ์คํธ ์ถ๊ฐ(#806)
์ค์ _์ธํ๋ผ_์์_๋ฐ_์ธก์ _๊ธฐ๋ฐ_ํ๋ณด : fix : open-in-view ํค ์์น ๊ต์ ๋ฐ JPA ๋ฐฐ์น ํ์น ํ๋(#806)
์ค์ _์ธํ๋ผ_์์_๋ฐ_์ธก์ _๊ธฐ๋ฐ_ํ๋ณด : feat : HikariCP ์ปค๋ฅ์ ํ ์ค์ ๋ฐ ๋์ ํ์ง ์ถ๊ฐ(#806)
์ค์ _์ธํ๋ผ_์์_๋ฐ_์ธก์ _๊ธฐ๋ฐ_ํ๋ณด : refactor : ๋ก๊ทธ๋ ๋ฒจ ์ ์๋ฅผ yml๋ก ๋จ์ผํ(#806)
์ค์ _์ธํ๋ผ_์์_๋ฐ_์ธก์ _๊ธฐ๋ฐ_ํ๋ณด : feat : Prometheus ๋ฉํธ๋ฆญ ๋ ธ์ถ ์ถ๊ฐ(#806)
์ค์ _์ธํ๋ผ_์์_๋ฐ_์ธก์ _๊ธฐ๋ฐ_ํ๋ณด : chore : ๋ฌด์๋๋ Flyway repair-on-migrate ์ค์ ์ ๊ฑฐ(#806)
์ค์ _์ธํ๋ผ_์์_๋ฐ_์ธก์ _๊ธฐ๋ฐ_ํ๋ณด : test : ์ค์ ๋ฐํ์ ๋ฐ์ธ๋ฉ ๊ฒ์ฆ ํ ์คํธ ์ถ๊ฐ(#806)
์ค์ _์ธํ๋ผ_์์_๋ฐ_์ธก์ _๊ธฐ๋ฐ_ํ๋ณด : fix : ์ต์ข ๋ฆฌ๋ทฐ ์ง์ ์ฌํญ 6๊ฑด ์์ - Hibernate ํต๊ณ ํ์ฑํ, actโฆ
Cassiiopeia commentedon Jul 31, 2026
์ค์ ยท์ธํ๋ผ ์์ ๋ฐ ์ธก์ ๊ธฐ๋ฐ ํ๋ณด (์๋ธํ๋ก์ ํธ A)
๊ฐ์
ํ๋ก์ ํธ๊ฐ 12๊ฐ ๋ชจ๋ / Java 346ํ์ผ๋ก ์ฑ์ฅํ๋ ๋์ ์๋์ง ์์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ค์ ์ ์ ๋ฆฌํ์ต๋๋ค. ์ฝ๋ ๋ก์ง ๋ณ๊ฒฝ ์์ด ์ค์ ๋ง์ผ๋ก JPA ๋ฐฐ์น ํ์นยท์ปค๋ฅ์ ํยท๋ก๊ทธ ์ถ๋ ฅ์ ์ ์ํํ๊ณ , ์ดํ ๊ฐ์ ์์ ์ ํจ๊ณผ๋ฅผ ์ซ์๋ก ์ฆ๋ช ํ Prometheus ์ธก์ ๊ธฐ๋ฐ์ ํ๋ณดํ์ต๋๋ค.
์์ ์ค ์ค์ ํค๊ฐ ์๋ชป๋ ์์น์ ์์ด ์กฐ์ฉํ ๋ฌด์๋๋ ์ฌ๋ก 2๊ฑด๊ณผ, ๋ฐฐํฌ ํ ์ค์ธก์์ ๋ฉํธ๋ฆญ ์๋ํฌ์ธํธ์ ์๋ฌด๋ ์ ๊ทผํ ์ ์๋ ๋ฌธ์ 1๊ฑด์ ๋ฐ๊ฒฌํด ํจ๊ป ์์ ํ์ต๋๋ค.
๊ด๋ จ PR: #807 (์ค์ ์์ + ์ธก์ ๊ธฐ๋ฐ), #811 (actuator ์ธ์ฆ ๊ฒฝ๋ก ๋ณด๊ฐ)
๊ธฐ๋ฅ ํ๋ฆ
๋ฉํธ๋ฆญ ์๋ํฌ์ธํธ ์ ๊ทผ ๊ฒฝ๋ก๊ฐ ์ด๋ฒ ์์ ์ ํต์ฌ ๋ณ๊ฒฝ์ ๋๋ค.
flowchart TD A(["/actuator/* ์์ฒญ"]) --> B{"AUTH_WHITELIST<br/>๋งค์นญ?"} B -->|"์ (/actuator/health)"| C["์ธ์ฆ ์์ด ํต๊ณผ"] C --> D(["200 OK"]) B -->|์๋์ค| E{"AdminJwtAuthenticationFilter<br/>์ฒ๋ฆฌ ๋์?"} E -->|"์๋์ค (์์ ์ )"| F["์ธ์ฆ ์ฃผ์ฒด ๋ฏธ์ค์ "] F --> G["hasRole ADMIN ๊ฒ์ฌ<br/>์ต๋ช ์ผ๋ก ํ์ "] G --> H(["403 โ ๊ด๋ฆฌ์๋ ์ ๊ทผ ๋ถ๊ฐ"]) E -->|"์ (์์ ํ)"| I["Bearer ํ ํฐ ๋๋<br/>accessToken ์ฟ ํค ์ถ์ถ"] I --> J{"ํ ํฐ ์ ํจ?"} J -->|์๋์ค| K(["401"]) J -->|์| L{"ROLE_ADMIN?"} L -->|์๋์ค| K L -->|์| M["SecurityContext ์ธ์ฆ ์ค์ "] M --> N(["200 โ ๋ฉํธ๋ฆญ ๋ฐํ"])๋ณ๊ฒฝ ์ฌํญ
๋ฌด์๋๊ณ ์๋ ์ค์ ๊ต์
RomRom-Web/src/main/resources/application.yml:open-in-viewํค๊ฐspring.jpa.properties.hibernate์๋์ ์์ด Spring Boot๊ฐ ์ธ์ํ์ง ๋ชปํ์ต๋๋ค.false๋ก ์ ํ ์์์ผ๋ ์ค์ ๋ก๋ ๊ธฐ๋ณธ๊ฐtrue๋ก ๋์ ์ค์ด์์ต๋๋ค.spring.jpa์ง์์ผ๋ก ์ด๋ํ๊ณ ํ์ฌ ์ค์ ๋์๊ฐ์ธtrue๋ฅผ ๋ช ์ํ์ต๋๋ค.RomRom-Web/src/main/resources/application.yml:spring.flyway.repair-on-migrate์ ๊ฑฐ. Spring Boot 3.4.1 ์ค์ ๋ฉํ๋ฐ์ดํฐ์ ์กด์ฌํ์ง ์๋ ํค๋ก, "๋ง์ด๊ทธ๋ ์ด์ ์ ์๋ repair"๋ผ๋ ์ฃผ์๊ณผ ๋ฌ๋ฆฌ ํ ๋ฒ๋ ๋์ํ ์ ์ด ์์ต๋๋ค.์ฑ๋ฅ
application.yml:default_batch_fetch_size: 100์ถ๊ฐ โ ์ง์ฐ ๋ก๋ฉ N+1์ IN ์ ๋ฐฐ์น ์กฐํ๋ก ์ ์ต๋๋ค.application.yml:jdbc.batch_size: 50,jdbc.fetch_size: 100,order_inserts,order_updates,query.in_clause_parameter_padding์ถ๊ฐapplication.yml: HikariCP ์ค์ ์ ๊ท ์ถ๊ฐ. ๊ธฐ์กด์๋ ์ค์ ์ด ์ ๋ฌดํด ๊ธฐ๋ณธ ํ ํฌ๊ธฐ 10์ผ๋ก ๋์ํ์ต๋๋ค. ํ 20, ๋์ ํ์ง 5์ด, ์ปค๋ฅ์ ํ์์์ 10์ด.๋ก๊น
application.yml:show_sql/format_sql/use_sql_comments์ ๊ฑฐ.show_sql์ ๋ก๊ฑฐ๋ฅผ ๊ฑฐ์น์ง ์๊ณ stdout์ผ๋ก ์งํํด ์ด์์์ ๋ก๊ทธ๋ ๋ฒจ๋ก ์ฐจ๋จํ ์ ์์์ต๋๋ค.application-dev.yml:org.hibernate.SQL: DEBUG,org.hibernate.orm.jdbc.bind: TRACE๋ก ๋์ฒด. logback์ ๊ฒฝ์ ํ๋ฏ๋ก ํ๋กํ๋ณ ์ ์ด๊ฐ ๊ฐ๋ฅํฉ๋๋ค.RomRom-Web/src/main/resources/logback-spring.xml: ํ๋์ฝ๋ฉ๋<logger>์ ์ ์ ๋ถ ์ ๊ฑฐ. Appender ์ ์๋ง ๋ด๋นํ๋๋ก ์ ๋ฆฌํ๊ณ ๋ก๊ทธ๋ ๋ฒจ์ ํ๋กํ yml ๋จ์ผ ์์ค๋ก ํต์ผํ์ต๋๋ค.๊ด์ธก์ฑ
RomRom-Web/build.gradle:micrometer-registry-prometheus์ถ๊ฐapplication.yml: actuator์metrics,prometheus๋ ธ์ถ.health๋ ์ ์ง.application.yml:hibernate.generate_statistics: trueโ ์ด ์ค์ ์ด ์์ผ๋ฉด Micrometer๊ฐhibernate_*๋ฉํธ๋ฆญ์ ์์ ๋ฑ๋กํ์ง ์์ต๋๋ค.RomRom-Domain-Auth/.../SecurityUrls.java:/actuator/prometheus,/actuator/metrics๋ฅผADMIN_PATHS์ ์ถ๊ฐ (๊ด๋ฆฌ์ ์ ์ฉ)RomRom-Domain-Auth/.../AdminJwtAuthenticationFilter.java:/actuator/๊ฒฝ๋ก๋ ์ธ์ฆ ์ฒ๋ฆฌ ๋์์ ํฌํจํ ์คํธ
RomRom-Web/src/test/java/com/romrom/web/config/ApplicationYamlStructureTest.java(์ ๊ท, 12๊ฐ): Spring ์ปจํ ์คํธยทDB ์์ด ๋๋ ์ค์ ํค ์์น/์กด์ฌ ํ๊ท ํ ์คํธRomRom-Web/src/test/java/com/romrom/web/config/ConfigBindingTest.java(์ ๊ท, 6๊ฐ): ์ค๊ธฐ๋ ํตํฉ ํ ์คํธ์ฃผ์ ๊ตฌํ ๋ด์ฉ
ํ๊ท ๋ฐฉ์ง๋ฅผ ๋ ๊ณ์ธต์ผ๋ก ๋๋ ์ด์
์ด๋ฒ ์์ ์ ์ถ๋ฐ์ ์ด "ํค๊ฐ ์๋ชป๋ ์์น์ ์์ด ์กฐ์ฉํ ๋ฌด์๋จ"์ด์๊ธฐ ๋๋ฌธ์, ๊ทธ ๊ณ์ธต์ ์ง์ ๊ฒจ๋ฅํ ํ ์คํธ๋ฅผ ๋ง๋ค์์ต๋๋ค.
ApplicationYamlStructureTest๋ SnakeYAML๋กapplication.yml์ ์ง์ ํ์ฑํด ํค์ ๊ฒฝ๋ก ์์ฒด๋ฅผ ๋จ์ธํฉ๋๋ค. Spring ์ปจํ ์คํธ๋ฅผ ๋์ฐ์ง ์์ DBยทRedis ์์ด ์ด๋์๋ ๋๋๋ค.ConfigBindingTest๋ ์ค์ ๋ก ์ปจํ ์คํธ๋ฅผ ๋์ Spring์ด ๊ทธ ๊ฐ์ ๋ฐ์ธ๋ฉํ๋์ง๋ฅผ ํ์ธํฉ๋๋ค.RANDOM_PORT๋ก ์ค์ HTTP ์์ฒญ์ ๋ณด๋ด ๋ณด์ ๋์๊น์ง ๊ฒ์ฆํฉ๋๋ค.๋ ๊ณ์ธต ์ค ํ๋๋ง ์์ผ๋ฉด "ํค๋ ์ฌ๋ฐ๋ฅธ ์๋ฆฌ์ ์๋๋ฐ ๋ฐ์ธ๋ฉ์ด ์ ๋๋" ๊ฒฝ์ฐ๋ "์ธํ๋ผ๊ฐ ์์ผ๋ฉด ํ๊ท ๋ฐฉ์ง ์์ฒด๊ฐ ์ฃฝ๋" ๋ฌธ์ ๊ฐ ์๊น๋๋ค.
๋ณ๊ฒฝ ๊ธ์ง ๊ฐ๋
์๋๋ ์ด์ ์ค๊ณ์ธ ์๋ ํญ๋ชฉ๋ค์ ๊ฐ์ด ์ค์๋ก ๋ฐ๋๋ฉด ํ ์คํธ๊ฐ ์คํจํ๋๋ก ๊ฐ๋๋ฅผ ๋ฃ์์ต๋๋ค.
spring.jpa.hibernate.ddl-auto: update,spring.jpa.generate-ddl: trueโ Spring์ด ์ฒ๋ฆฌ ๊ฐ๋ฅํ ์คํค๋ง ๋ณ๊ฒฝ์ Hibernate์ ๋งก๊ธฐ๊ณ ๋๋จธ์ง๋ง Flyway๋ก ์ฒ๋ฆฌํ๋ ์ด์ ๋ฐฉ์spring.flyway.validate-on-migrate: falseโ ์ผ๋ฉด ์ฒดํฌ์ฌ์ด ๊นจ์ง ๊ธฐ์กด ๋ง์ด๊ทธ๋ ์ด์ ์์ ๋ฐฐํฌ๊ฐ ์ฆ์ ์ค๋จ๋ฉ๋๋คmanagement.endpoints.web.exposure.include์healthโ Dockerfile HEALTHCHECK์ Traefik ๋ธ๋ฃจ/๊ทธ๋ฆฐ ์ ํ์ด ์์กดํฉ๋๋ค๋ฐฐํฌ ํ ๋ฐ๊ฒฌํ ๋ฉํธ๋ฆญ ์ ๊ทผ ๋ถ๊ฐ ๋ฌธ์
/actuator/prometheus๋ฅผADMIN_PATHS๋ก ๋ณดํธํ ๋ค ์ด์์์ ์ค์ธกํ๋๋ ๊ด๋ฆฌ์ ํ ํฐ์ผ๋ก๋ 403์ด ๋ฌ์ต๋๋ค.์์ธ์ ๋ ์ธ์ฆ ํํฐ ๋ชจ๋
/actuator/*๋ฅผ ์ฒ๋ฆฌํ์ง ์๋ ๊ฒ์ด์์ต๋๋ค.TokenAuthenticationFilter๋/api/๋ก ์์ํ๋ ๊ฒฝ๋ก์์๋ง Bearer ํ ํฐ์ ์ฝ๊ณ ,AdminJwtAuthenticationFilter๋/admin,/api/admin, Swagger ๊ฒฝ๋ก๋ง ๋ค๋ฃน๋๋ค. ๊ทธ ๊ฒฐ๊ณผ actuator ์์ฒญ์ ์ธ์ฆ ์ฃผ์ฒด๊ฐ ์ค์ ๋์ง ์์ ์ฑhasRole("ADMIN")๊ฒ์ฌ์ ๋๋ฌํด ์ต๋ช ์ผ๋ก ํ์ ๋์ต๋๋ค.AdminJwtAuthenticationFilter๊ฐ ์ด๋ฏธ Swagger๋ผ๋ ๋น-/api๊ฒฝ๋ก๋ฅผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๊ณ ์์ด, ๊ทธ ํจํด์ ๊ทธ๋๋ก ๋ฐ๋ผ/actuator/๋ฅผ ์ฒ๋ฆฌ ๋์์ ์ถ๊ฐํ์ต๋๋ค./actuator/health๋ ํํฐ์ ํ์ดํธ๋ฆฌ์คํธ ์ฒดํฌ๊ฐ ํ๋ฆฌํฝ์ค ์ฒดํฌ ๋ค์ ์์ด ์ฌ์ ํ ๋ฏธ์ธ์ฆ 200์ ๋๋ค.๋ฐฐํฌ ํ ์ค์ธก ๊ฒฐ๊ณผ
RomRomHikariPoolํ์ธ โ ์ค์ ์ด ์ค์ ์ด์์ ๋ฐ์๋ ์ง์ ์ฆ๊ฑฐ (๊ธฐ๋ณธ๊ฐ์HikariPool-1)show_sql์ ๊ฑฐ ํ์ธ/actuator/health๋ฏธ์ธ์ฆ 200 โ ํฌ์ค์ฒดํฌ ๊ฒฝ๋ก ์ ์/actuator/prometheus200, ๋ณธ๋ฌธ์hikaricp_ยทjvm_์งํ ํฌํจPostgreSQL
max_connections๋ ์ค์ธก ๊ฒฐ๊ณผ 200์ด๊ณ ์ฌ์ฉ๋์ 59์์ต๋๋ค. ํ 20์ด๋ฉด ๋ธ๋ฃจ+๊ทธ๋ฆฐ+ํ ์คํธ ํ๊ฒฝ์ ํฉ์ณ๋ ์ฌ์ ๊ฐ ์์ต๋๋ค.์ฃผ์์ฌํญ
์ด์ ๋ก๊ทธ๋ ๋ฒจ์ ์์ง DEBUG์ ๋๋ค
application-prod.yml์ GitHub SecretAPPLICATION_PROD_YML์์ ์์ฑ๋๋๋ฐ, ๋ก์ปฌ ์ฌ๋ณธ์ด ์ด์ ๋ฐฐํฌ๋ณธ๊ณผ ๋ฌ๋์ต๋๋ค.๋ก์ปฌ ์ฌ๋ณธ์ผ๋ก Secret์ ๋ฎ์ด์ผ๋ค๋ฉด ์ด์ Vertex AI ์์ฑ ๋ชจ๋ธ์ด ์กฐ์ฉํ ๊ตฌ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑ๋์ ๊ฒ์ ๋๋ค. Secret์ write-only๋ผ ๊ถ์ ์๋ ์ต์ ๋ณธ์ ์ฌ๊ตฌ์ฑํ ์ ์์ด ๊ฐฑ์ ์ ๋ณด๋ฅํ์ต๋๋ค.
๋ก์ปฌ ์ฌ๋ณธ์ ์ด์ ๋ฐฐํฌ๋ณธ๊ณผ ๋๊ธฐํํ๊ณ ๋ก๊ทธ๋ ๋ฒจ INFO๊น์ง ์ ์ฉํด๋์์ต๋๋ค. ๊ฒํ ํ
APPLICATION_PROD_YML๊ณผAPPLICATION_TEST_YML์ ์ง์ ๊ฐฑ์ ํ๋ฉด ๋ฐ์๋ฉ๋๋ค. ์ด๊ฒ ๋๋ฌธ์ ๋น ์ง ๊ฒ์ ๋ก๊ทธ๋ ๋ฒจ ํ๋๋ฟ์ด๊ณ , ๋๋จธ์ง ๊ฐ์ ์ ๊ณตํตapplication.yml์ ์์ด ์ด๋ฏธ ๋ฐ์๋์ต๋๋ค.ํ์ ์์
ROLE_ADMIN๊ฒ์ฌ๊ฐ ๋์ค์ ์ ๊ฑฐ๋๋ฉด ์ก์๋ผ ํ ์คํธ๊ฐ ์์ต๋๋ค.open-in-view: false๋ ์ด๋ฒ ๋ฒ์์์ ์ ์ธํ์ต๋๋ค. LAZY ์ฐ๊ด๊ด๊ณ 28๊ฐ ์ค@JsonIgnore๋ก ๋ณดํธ๋ ๊ฒ์ด 3๊ฐ๋ฟ์ด๊ณjackson-datatype-hibernate๋ชจ๋์ด ์์ด, Entity๋ฅผ ๊ทธ๋๋ก ์๋ต์ ๋ด๋ ์ด ํ๋ก์ ํธ ์ปจ๋ฒค์ ๊ณผ ๊ฒฐํฉํ๋ฉด ์ง๋ ฌํ ์์ ์ ์์ธ๊ฐ ๋ฉ๋๋ค. ์๋ํฌ์ธํธ ์ ์ ๊ฐ์ฌ๊ฐ ์ ํ๋ผ์ผ ํฉ๋๋ค.validate-on-migrate๋ฅผ ์ผ๋ ค๋ฉด ๋จผ์ ํ์ํฉ๋๋ค.๋ฐฐํฌ ์ํ ์ฐธ๊ณ
์์ ์ค ํ์ธํ ๊ฒฐ๊ณผ, ์ด์ ์ปจํ ์ด๋๊ฐ 2026-06-20 ๋น๋ ์ด๋ฏธ์ง๋ก 5์ฃผ ๋๊ฒ ๊ณ ์ ๋ผ ์์์ต๋๋ค. ๊ทธ ์ฌ์ด main์ ๋ค์ด๊ฐ ์ปค๋ฐ๋ค์ด ๋ฐฐํฌ๋์ง ์์ ์ํ์๊ณ , ์ด๋ฒ ๋ฐฐํฌ์ ํจ๊ป ์ค๋ ธ์ต๋๋ค.