diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index 7a87a7e..b86b709 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -48,7 +48,6 @@ - 메서드 레벨 `@DisplayName`은 `"{HTTP_METHOD} {endpoint} - {비즈니스 의미}"` 형식을 따른다. - 내부 클래스(`inner class`)명은 비즈니스 행위를 기반으로 작명한다. (`CreateTests`, `FindAllTests` 등 CRUD 용어 지양) - 테스트에서는 인증, 페이즈 조건은 검증하지 않음 - 횡단 관심이므로 별도의 인증테스트, 페이즈테스트에서 모두 몰아서 검사하기 때문 -- 테스트 환경에서 외부 리소스(이메일, 외부 API 등)가 실제로 호출되지 않도록, `build.gradle.kts`의 `tasks.withType` 블록에서 `systemProperty()`로 설정값을 주입하여 비활성화한다. 별도의 테스트용 설정 파일을 생성하지 않는다. ## 버전관리 규칙 diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 2fbe5a0..c37b627 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -13,7 +13,7 @@ permissions: # 이 파이프라인이 필요로 하는 설정값 목록: # Required Variables (비민감): EC2_HOST, EC2_USERNAME -# Required Secrets (민감): EC2_SSH_PRIVATE_KEY, SOFIA_DATASOURCE_URL, SOFIA_DATASOURCE_PASSWORD, SOFIA_DATASOURCE_USERNAME +# Required Secrets (민감): EC2_SSH_PRIVATE_KEY, SOFIA_DATASOURCE_URL, SOFIA_DATASOURCE_PASSWORD, SOFIA_DATASOURCE_USERNAME, SOFIA_KAKAO_SKILL_KEY # Optional Secrets (민감): NOTIFICATION_WEBHOOK_URL jobs: @@ -45,11 +45,13 @@ jobs: SOFIA_DATASOURCE_URL: ${{ secrets.SOFIA_DATASOURCE_URL }} SOFIA_DATASOURCE_PASSWORD: ${{ secrets.SOFIA_DATASOURCE_PASSWORD }} SOFIA_DATASOURCE_USERNAME: ${{ secrets.SOFIA_DATASOURCE_USERNAME }} + SOFIA_KAKAO_SKILL_KEY: ${{ secrets.SOFIA_KAKAO_SKILL_KEY }} run: | { echo "SOFIA_DATASOURCE_URL=${SOFIA_DATASOURCE_URL}" echo "SOFIA_DATASOURCE_PASSWORD=${SOFIA_DATASOURCE_PASSWORD}" echo "SOFIA_DATASOURCE_USERNAME=${SOFIA_DATASOURCE_USERNAME}" + echo "SOFIA_KAKAO_SKILL_KEY=${SOFIA_KAKAO_SKILL_KEY}" } > deploy/secrets.env - name: EC2 배포 diff --git a/deploy/deploy.sh b/deploy/deploy.sh index acfa387..f8e1acd 100755 --- a/deploy/deploy.sh +++ b/deploy/deploy.sh @@ -33,7 +33,7 @@ build_log_file() { } refresh_secrets_from_env() { - local secret_keys=("SOFIA_DATASOURCE_URL" "SOFIA_DATASOURCE_PASSWORD" "SOFIA_DATASOURCE_USERNAME") + local secret_keys=("SOFIA_DATASOURCE_URL" "SOFIA_DATASOURCE_PASSWORD" "SOFIA_DATASOURCE_USERNAME" "SOFIA_KAKAO_SKILL_KEY") local available=false for key in "${secret_keys[@]}"; do diff --git a/gradle.properties b/gradle.properties index d064203..1fda163 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ org.gradle.console=plain org.gradle.logging.level=quiet org.gradle.warning.mode=summary -ywcheong.sofia.version=26b.04.01.1 +ywcheong.sofia.version=26b.04.01.2 ywcheong.sofia.jdk_version=21 \ No newline at end of file diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 59e24d6..793c4c9 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -22,10 +22,10 @@ sofia: task: seconds-per-character: 3.942 late-threshold-hours: 48 - reminder-enabled: false + reminder-enabled: true kakao: skill: - secret-token: replace-me-11!! + secret-token: ${SOFIA_KAKAO_SKILL_KEY} first-boot: create-admin-if-empty: false admin-student-number: 18-100 diff --git a/src/test/kotlin/ywcheong/sofia/config/TestScenarioHelper.kt b/src/test/kotlin/ywcheong/sofia/config/TestScenarioHelper.kt index 95e0785..11fcf8c 100644 --- a/src/test/kotlin/ywcheong/sofia/config/TestScenarioHelper.kt +++ b/src/test/kotlin/ywcheong/sofia/config/TestScenarioHelper.kt @@ -48,7 +48,7 @@ class TestScenarioHelper( private val logger = KotlinLogging.logger { } companion object { - const val DEFAULT_KAKAO_SECRET = "replace-me-11!!" + val DEFAULT_KAKAO_SECRET: String = "replace-me-11!!" } init { diff --git a/src/test/resources/application.yml b/src/test/resources/application.yml index 93ade1a..05d6f9e 100644 --- a/src/test/resources/application.yml +++ b/src/test/resources/application.yml @@ -5,6 +5,9 @@ sofia: enabled: true task: reminder-enabled: true + kakao: + skill: + secret-token: replace-me-11!! spring: jpa: hibernate: