f-lab-clone / ticketing-backend

[2023] Ticketing Service - PerformanceTest, Terraform, EKS, Grafana
https://github.com/f-lab-clone/ticketing-infra
5 stars 3 forks source link

Feat/64 application config #103

Closed minjun3021 closed 1 year ago

minjun3021 commented 1 year ago

What is this PR?

Key Changes

application설정 파일 타입 변경 .properties -> .yaml TestController 비활성화 -> test profile일때만 활성화 되게 함

yml 장점 계층적인 데이터 구조를 쉽게 표현할 수 있음. 들여쓰기를 이용해 구조를 명확하게 나타낼 수 있으므로, 복잡한 설정도 명확하게 표현할 수 있음. yml 단점 들여쓰기에 민감하여, 들여쓰기가 잘못되면 의도한대로 동작 하지 않을수있음.

Test Checklist

codecov[bot] commented 1 year ago

Codecov Report

All modified lines are covered by tests :white_check_mark:

Comparison is base (c4ba6df) 84.63% compared to head (fdb2d0e) 84.63%.

Additional details and impacted files ```diff @@ Coverage Diff @@ ## main #103 +/- ## ========================================= Coverage 84.63% 84.63% Complexity 152 152 ========================================= Files 42 42 Lines 729 729 Branches 31 31 ========================================= Hits 617 617 Misses 91 91 Partials 21 21 ``` | [Files](https://app.codecov.io/gh/f-lab-clone/ticketing-backend/pull/103?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=f-lab-clone) | Coverage Δ | | |---|---|---| | [...up4/ticketingservice/controller/EventController.kt](https://app.codecov.io/gh/f-lab-clone/ticketing-backend/pull/103?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=f-lab-clone#diff-c3JjL21haW4va290bGluL2NvbS9ncm91cDQvdGlja2V0aW5nc2VydmljZS9jb250cm9sbGVyL0V2ZW50Q29udHJvbGxlci5rdA==) | `100.00% <ø> (ø)` | | | [...oup4/ticketingservice/controller/TestController.kt](https://app.codecov.io/gh/f-lab-clone/ticketing-backend/pull/103?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=f-lab-clone#diff-c3JjL21haW4va290bGluL2NvbS9ncm91cDQvdGlja2V0aW5nc2VydmljZS9jb250cm9sbGVyL1Rlc3RDb250cm9sbGVyLmt0) | `100.00% <100.00%> (ø)` | | | [...com/group4/ticketingservice/utils/TokenProvider.kt](https://app.codecov.io/gh/f-lab-clone/ticketing-backend/pull/103?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=f-lab-clone#diff-c3JjL21haW4va290bGluL2NvbS9ncm91cDQvdGlja2V0aW5nc2VydmljZS91dGlscy9Ub2tlblByb3ZpZGVyLmt0) | `93.10% <ø> (ø)` | |

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

minjun3021 commented 1 year ago

ide로 실행시 프로필 세팅 예시

gralde 로 실행시 예시

./gradlew bootRun (default프로필은 local) ./gradlew bootRun -P spring.profiles.active=local (프로필 =local) ./gradlew bootRun -P spring.profiles.active=dev (프로필 =dev)

junha-ahn commented 1 year ago

@ParkJeongseop 해당 브랜치 리뷰 부탁드립니다.

그리고 Open-docs 에러도 확인 후 해결 부탁드려요.

아마 config값 달라져서 docker-compose에서 재대로 못 불러와서 생기는 문제일듯하네요

ParkJeongseop commented 1 year ago

docker-compose로 실행하는경우는 어떻게실행하나요? 그리고 컨플릭트 해결부탁드려요

junha-ahn commented 1 year ago

docker-compose up 명령어로 실행될때 local config file을 잘 받도록 수정 필요해보이네요.

아마 이거 수정하면 Generate OpenAPI Docs 정상 동작할듯합니다.

minjun3021 commented 1 year ago
 build:
      args:
        SPRING_PROFILES_ACTIVE: local
api:
    environment:
      SPRING_PROFILES_ACTIVE: local

현재 docker-compose.yml에 두곳을 수정하면 프로필과함께 실행가능합니다. 이 작업 자체는 얼마 안걸렸으나 몇가지 시도를 해봤었는데

docker-compose.yml에 직접 작성하지않고 build할때 arg를 직접 전달하는 방법을 시도해보았는데 dockerFile에서 ENV를 지정해줬음에도 불구하고 런타임시에 적용이 안되어 되게 해보려다가 결국 실패.

minjun3021 commented 1 year ago

[시도해본것]

FROM openjdk:17-jdk-slim as builder COPY gradlew . COPY settings.gradle.kts . COPY build.gradle.kts . COPY gradle gradle COPY src src RUN chmod +x ./gradlew ARG SPRING_PROFILES_ACTIVE RUN echo $SPRING_PROFILES_ACTIVE RUN ./gradlew clean bootjar -Pspring.profiles.active=$SPRING_PROFILES_ACTIVE RUN java -Djarmode=layertools -jar build/libs/*.jar extract

FROM openjdk:17-jdk-slim as runtime COPY --from=builder dependencies/ ./ COPY --from=builder snapshot-dependencies/ ./ COPY --from=builder spring-boot-loader/ ./ COPY --from=builder application/ ./

ENV SPRING_PROFILES_ACTIVE=$SPRING_PROFILES_ACTIVE ENTRYPOINT ["java","-Dspring.profiles.active=${SPRING_PROFILES_ACTIVE}", "org.springframework.boot.loader.JarLauncher"]

docker-compose.yml에는 프로필 관련 정보를 안적은 상태에서 이렇게 Dockerfile을 작성하고 docker-compose build --build-arg SPRING_PROFILES_ACTIVE="dev" 이 명령어를 실행시키면 빌드자체는 해당 프로필의 리소르와 함께 빌드가 잘됩니다 그런데 docker-compose up을 했을때 runtime시에 ${SPRING_PROFILES_ACTIVE}를 못찾는거같습니다

도커를 잘아시는분있으면 조언 부탁드려요 @junha-ahn @ParkJeongseop

junha-ahn commented 1 year ago

그래도 generate open docs는 실패하네요. 뭘까요

일단 이 문제에 대한 부분은 이런것 같습니다.

yaml 파일에서 build 아래 컨피그 값은 실제로 docker-compose build 나 up을 할때 이미지를 빌드하는 과정에 주입되는 값입니다.

그리고 environment 밑에 있는 컨피그 값은 해당 이미지로부터 컨테이너가 실행될때 주입되는 값이죠

따라서 build 밑에 컨피그는 스프링앱이 빌드할때, 즉 local properties 파일을 포함해서 빌드되도록 하는 역할 enviroment 밑의 컨피그는 spring runtime에 주입하는 값

제 개인적 추축입니다. (따로 자료조사하진않았습니다)

테스트해보실려면 build 밑의 컨피그의 키 이름과 Dockerfile에서 ARG에서 사용하는 키 이름을 동시에 변경해보세요.