Search

프로젝트하면서 마주친 오류들

도커 컴포즈로 CI/CD 변경 이후 액션 오류

AWS의 SSH에서 진행 중에 다음과 같은 문제들이 발생.

1. 무중단 배포 문제

도커 컴포즈로 배포 변경 후 무중단 배포가 깨짐. 처음에 아예 모든 포트를 중단했다가 다시 실행시키는 방식이어서, 다시 해당 타겟 포트로 작동되게끔 수정했으나 타겟 포트를 못찾는 문제 발생.

2. 도커 컴포즈 실행 시 타겟 포트 문제

도커 컴포즈로 실행 시 자꾸 타겟 포트를 못찾는 현상 발생. 확인 결과, docker-compose에서 처음부터 해당 네임으로 진행해야 작동하는 것으로 파악.

3. 컨테이너 버전 충돌 문제

타겟 해결 후 테스트 중에 컨테이너 버전이 달라도 같은 이름이 있으면 오류 발생. 해결책으로 기존 타겟 컨테이너 중지 및 제거하고 진행.

SSH와 GitHub Actions 간 차이

SSH에서는 문제가 없었으나, GitHub 저장소에 푸시한 후 GitHub Actions에서 문법 오류가 발생했습니다. 이는 로컬 환경과 GitHub Actions 환경의 차이로 인한 것으로 파악됩니다.

4. GitHub Actions 환경 변수 접근 문제

GitHub Actions 워크플로우에서 $GITHUB_ENV는 주로 워크플로우 자체 내에서 사용되며, SSH를 통해 원격 서버에서 실행되는 스크립트에서는 직접 접근할 수 없어서 문법 오류 발생. 해결책으로 ::set-output을 사용하여 값을 설정.

5. 헬스 체크 오류 발생

해당 이미지에선 도커 활성화 체크
막상 AWS SSH에서 도커 컴포즈 실행시 로그 상 문제없어 보였는데..액션 이후 로그를 보니까 JavaMailSender 오류 발생..
도커파일에 application-email.properties 파일을 Docker 이미지에 포함시키기
COPY src/main/resources/application-email.properties /app/application-email.properties
Plain Text
복사
상대 경로로 지정된 파일이 존재함에도 불구하고 빌드 시 파일을 찾지 못해 빌드 실패가 발생하여 주석 처리.
SSH에서 계속 테스트를 진행하며, 컴포즈 파일 업데이트 후 로그를 확인하니 JavaMailSender 오류가 발생.
(컨테이너 버전 충돌 테스트 시 compose 파일을 이전 버전으로 진행하고나서 현재 최신 버전으로 변경하지 않아 문제 발생.)
compose 파일을 다시 최신 버전으로 변경 후 로그를 확인했으며, 문제가 해결.
COPY 명령어를 제거하고 액션 실행 시 성공적으로 빌드되었습니다.

배포 사이트에서 타임리프 템플릿 오류

aws에서 배포된 ip로 한번 회원가입을 진행해봤다. 근데 반응이 없어서 콘솔창을 켜보니
해당 오류가 발생
이상하게 로컬에서는 잘됐는데 배포하고 나니까 발생.
블루 로그를 까보니까 회원가입 소스 중에서
template might not exist or might not be accessible by any of the configured Template Resolvers...
String message = templateEngine.process("mail/send-mail", context);
Java
복사
여기서 경로를 인식 못해서 mail/send-mail 파일을 찾을 수 없어서 발생한 케이스다
application-dev.properties에
# Thymeleaf cache setting spring.thymeleaf.cache=false spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html
Plain Text
복사
해당 값 추가하니까 이제 파일 잘 찾아서 파싱 잘되서 넘어간다.

이때 놓쳤던 점.

로컬에서 해당 프로퍼티 소스를 수정하고
./gradlew clean build
Plain Text
복사
를 해줬어야 했는데 이거 안하고 계속 최신 이미지 빌드 및 푸시만 함…
docker build -t zero0zone/vintage:latest . docker push zero0zone/vintage:latest
Plain Text
복사
그래서 aws ssh 에서 계속 이미지 pull해서 설치해주면 자꾸 템플릿 오류가 해결이 안되서 3일내내 뭐지 했다가 진행 과정을 멘토님께 설명드린 후에 새로 빌드안하고 예전껄로 이미지 푸쉬한걸 깨달음..ㅋㅋ

프로메테우스 오류 수정 과정

1. 초기 문제 상황

Prometheus가 /metrics 엔드포인트에서 유효하지 않은 응답을 받고 있었음.

2. 문제 해결 시도

prometheus.yml 수정

metrics_path: '/actuator/prometheus'
Plain Text
복사

SecurityConfig.java 수정

new AntPathRequestMatcher("/actuator/**") .requestMatchers("/actuator/prometheus", "/actuator/health").permitAll() .requestMatchers("/actuator/**").permitAll()
Plain Text
복사

3. 지속된 오류

위의 수정에도 불구하고 오류가 계속 발생.

4. 원인 파악

(커밋 하기 전 로컬에서 선 테스트 상황)
로컬에서만 프로메테우스 설정을 수정하고 빌드 후 컨테이너만 새롭게 변경 후
AWS SSH에서 도커 컴포즈로 최신 버전으로 내려받고 실행시킬때 AWS에 있는 프로메테우스 설정 파일을 수정하지 않고 진행.
도커 컴포즈가 이전 버전의 설정으로 계속 실행됨.

5. 해결

AWS에서 프로메테우스 설정 파일을 수정하여
문제를 해결.