diff --git a/.github/workflows/prod-cd.yml b/.github/workflows/prod-cd.yml index 7a2601800..9030c80f5 100644 --- a/.github/workflows/prod-cd.yml +++ b/.github/workflows/prod-cd.yml @@ -2,7 +2,7 @@ name: "[PROD] Build Gradle and Deploy" on: push: - branches: [ "release" ] # todo: 스테이지 서버 cd 테스트 후 master 로 변경 필요 + branches: [ "master" ] workflow_dispatch: jobs: @@ -33,7 +33,7 @@ jobs: run: chmod +x ./gradlew - name: Build with Gradle - run: ./gradlew bootJar -Dspring.profiles.active=prod + run: ./gradlew bootJar - name: Copy jar file to remote uses: appleboy/scp-action@master @@ -59,7 +59,7 @@ jobs: host: ${{ secrets.HOST }} username: ${{ secrets.USERNAME }} key: ${{ secrets.PRIVATE_KEY }} - source: "./docker-compose.yml" + source: "./docker-compose.prod.yml" target: "/home/${{ secrets.USERNAME }}/solid-connect-server/" - name: Run docker compose @@ -72,4 +72,4 @@ jobs: script: | cd /home/${{ secrets.USERNAME }}/solid-connect-server docker compose down - docker compose up -d --build + docker compose -f docker-compose.prod.yml up -d --build diff --git a/.github/workflows/stage-cd.yml b/.github/workflows/stage-cd.yml index 7aa70fe65..41ff68b37 100644 --- a/.github/workflows/stage-cd.yml +++ b/.github/workflows/stage-cd.yml @@ -2,7 +2,7 @@ name: "[STAGE] Build Gradle and Deploy" on: push: - branches: [ "stage-test" ] # todo: 스테이지 서버 cd 테스트 후 release 로 변경 필요 + branches: [ "release" ] workflow_dispatch: jobs: @@ -33,7 +33,7 @@ jobs: run: chmod +x ./gradlew - name: Build with Gradle - run: ./gradlew bootJar -Dspring.profiles.active=prod + run: ./gradlew bootJar - name: Copy jar file to remote uses: appleboy/scp-action@master @@ -59,7 +59,7 @@ jobs: host: ${{ secrets.STAGE_HOST }} username: ${{ secrets.STAGE_USERNAME }} key: ${{ secrets.STAGE_PRIVATE_KEY }} - source: "./docker-compose.yml" + source: "./docker-compose.stage.yml" target: "/home/${{ secrets.STAGE_USERNAME }}/solid-connect-stage/" - name: Run docker compose @@ -72,4 +72,4 @@ jobs: script: | cd /home/${{ secrets.STAGE_USERNAME }}/solid-connect-stage docker compose down - docker compose up -d --build + docker compose -f docker-compose.stage.yml up -d --build diff --git a/Dockerfile b/Dockerfile index 4742ac87a..773d1ba16 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,7 +8,7 @@ ARG JAR_FILE=./build/libs/solid-connection-0.0.1-SNAPSHOT.jar COPY ${JAR_FILE} app.jar # 시스템 진입점 정의 -ENTRYPOINT ["java", "-jar", "/app.jar", "--spring.profiles.active=prod"] +ENTRYPOINT ["java", "-jar", "/app.jar"] # 볼륨 설정 VOLUME /tmp diff --git a/docker-compose.yml b/docker-compose.prod.yml similarity index 92% rename from docker-compose.yml rename to docker-compose.prod.yml index 8813a4e58..9517a07aa 100644 --- a/docker-compose.yml +++ b/docker-compose.prod.yml @@ -25,7 +25,8 @@ services: ports: - "8080:8080" environment: + - SPRING_PROFILES_ACTIVE=prod - SPRING_DATA_REDIS_HOST=redis - SPRING_DATA_REDIS_PORT=6379 depends_on: - - redis \ No newline at end of file + - redis diff --git a/docker-compose.stage.yml b/docker-compose.stage.yml new file mode 100644 index 000000000..3a97a6411 --- /dev/null +++ b/docker-compose.stage.yml @@ -0,0 +1,33 @@ +version: '3.8' + +services: + redis: + image: redis:latest + container_name: redis + ports: + - "6379:6379" + network_mode: host + + redis-exporter: + image: oliver006/redis_exporter + container_name: redis-exporter + ports: + - "9121:9121" + environment: + REDIS_ADDR: "localhost:6379" + depends_on: + - redis + network_mode: host + + solid-connection-stage: + build: + context: . + dockerfile: Dockerfile + container_name: solid-connection-stage + ports: + - "8080:8080" + environment: + - SPRING_PROFILES_ACTIVE=stage + depends_on: + - redis + network_mode: host diff --git a/src/main/java/com/example/solidconnection/application/service/ApplicationQueryService.java b/src/main/java/com/example/solidconnection/application/service/ApplicationQueryService.java index 170d7cf13..3208d24af 100644 --- a/src/main/java/com/example/solidconnection/application/service/ApplicationQueryService.java +++ b/src/main/java/com/example/solidconnection/application/service/ApplicationQueryService.java @@ -46,7 +46,8 @@ public class ApplicationQueryService { * - 1지망, 2지망 지원자들을 조회한다. * */ @Transactional(readOnly = true) - @ThunderingHerdCaching(key = "application:query:{1}:{2}", cacheManager = "customCacheManager", ttlSec = 86400) + // todo: 임시로 단일 키로 캐시 적용. 추후 캐싱 전략 재검토 필요. + @ThunderingHerdCaching(key = "applications:all", cacheManager = "customCacheManager", ttlSec = 86400) public ApplicationsResponse getApplicants(SiteUser siteUser, String regionCode, String keyword) { // 국가와 키워드와 지역을 통해 대학을 필터링한다. List universities diff --git a/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java b/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java index dec092f5e..ea05c3c0c 100644 --- a/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java +++ b/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java @@ -4,6 +4,7 @@ import com.example.solidconnection.application.dto.ApplyRequest; import com.example.solidconnection.application.dto.UniversityChoiceRequest; import com.example.solidconnection.application.repository.ApplicationRepository; +import com.example.solidconnection.cache.annotation.DefaultCacheOut; import com.example.solidconnection.custom.exception.CustomException; import com.example.solidconnection.score.domain.GpaScore; import com.example.solidconnection.score.domain.LanguageTestScore; @@ -18,14 +19,9 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; import java.util.Optional; -import java.util.Set; import static com.example.solidconnection.custom.exception.ErrorCode.APPLY_UPDATE_LIMIT_EXCEED; -import static com.example.solidconnection.custom.exception.ErrorCode.CANT_APPLY_FOR_SAME_UNIVERSITY; import static com.example.solidconnection.custom.exception.ErrorCode.INVALID_GPA_SCORE; import static com.example.solidconnection.custom.exception.ErrorCode.INVALID_GPA_SCORE_STATUS; import static com.example.solidconnection.custom.exception.ErrorCode.INVALID_LANGUAGE_TEST_SCORE; @@ -48,6 +44,11 @@ public class ApplicationSubmissionService { // 학점 및 어학성적이 모두 유효한 경우에만 지원서 등록이 가능하다. // 기존에 있던 status field 우선 APRROVED로 입력시킨다. @Transactional + // todo: 임시로 새로운 신청 생성 시 기존 캐싱 데이터를 삭제한다. 추후 수정 필요 + @DefaultCacheOut( + key = {"applications:all"}, + cacheManager = "customCacheManager" + ) public boolean apply(SiteUser siteUser, ApplyRequest applyRequest) { UniversityChoiceRequest universityChoiceRequest = applyRequest.universityChoiceRequest(); diff --git a/src/main/resources/secret b/src/main/resources/secret index 88d71bb3e..f7b34bdc6 160000 --- a/src/main/resources/secret +++ b/src/main/resources/secret @@ -1 +1 @@ -Subproject commit 88d71bb3ee42d1733e4e7dcdb9516a4fa0a5bea9 +Subproject commit f7b34bdc615f141ac82ed05c10557f95f5b45a04