1. Issue Description
▶ 도커에서 compose 스크립트를 이용하여 프로젝트를 빌드하고 Altair에서 http://localhost:8080/graphql 로 쿼리 요청 시
▶ 브라우저 상에서 http://localhost:8080/graphiql 입력 시
2. 원인 추론
1. 도커 컨테이너 IP로 접속
http://{도커_컨테이너_IP_주소}:{컨테이너_포트}/graphiql
→ 응답하는 데 시간이 너무 오래 걸려 실패
2. 디버깅
logging.level.root=DEBUG
로그 레벨을 설정하여 도커 컨테이너 터미널에서 디버깅 확인.
→ 포트 접속도 되고 /graphiql로 GET 요청이 들어오는 것까지 확인. 포트 문제인가 했는데 그건 아닌 것 같다. 그런데 response가 나가지 않음.
추측. 혹시 GraphQL Schema 파일을 인지하지 못하는 건가?
- Schema 파일을 인지하지 못해도 Spring이 실행이 되는가?
→ 실행이 된다. 즉, 실행이 된다고 해도 Schema 파일이 있고 없고는 확인할 수 없다.(간단한 프로젝트 만들어 확인) - 여러 번 프로젝트를 로컬, Docker에서 돌리다가 알아 낸 것. GraphQL 스키마 파일을 Spring Boot 에서 잘 확인했을 경우 프로젝트 실행 시 이런 로그가 나와야 한다.
- 간단한 프로젝트를 만들어 Schema 없이 query 요청을 만들고 프로젝트를 build했는데 똑같이 graphiql 연결이 되지 않는다.
3. 도커 내 프로젝트 파일 확인
도커 내 프로젝트 파일을 확인해서 Schema 파일이 존재하는지 확인하려고 했는데 jar 파일로 배포 시 프로젝트 파일 확인이 되지 않는다고 한다.
Spring Boot 어플리케이션을 Jar 파일로 패키징 시 소스 코드가 포함되지 않고, 컴파일된 클래스 파일과 리소스 파일만이 Jar 파일에 포함되기 때문에 도커 내에 내 소스 코드를 복사하지 않는 이상 도커 내에서 프로젝트 파일을 확인할 수 없다.
4. application.properties 변경해보기
도커 내 프로젝트에서 디버깅을 해보기 위해 application.properties 에서 다음 옵션을 추가했는 데 디버깅이 되지 않았다.
logging.level.root=DEBUG
즉, application.properties가 도커에서 적용되지 않는다는 것을 알 수 있다.
추측. resources 자체가 Docker에서 적용되지 않는 것인가?
Dockerfile에서 로컬 코드에 있는 application.properties를 도커에 직접 복사하고 설정 파일 경로를 바꿔주니 application.properties가 잘 적용이 되었다.
COPY src/main/resources/application.properties /app/application.properties
ENTRYPOINT ["java","-jar","app.jar", "--spring.config.location=/app/application.properties"]
3. 해결
- Dockerfile 코드에 Schema file을 COPY하는 코드 추가
- application.properties에 Schema 경로 지정
Dockerfile
FROM eclipse-temurin:17-jdk-alpine
WORKDIR /app
VOLUME /tmp
COPY build/libs/*.jar /app/app.jar
COPY src/main/resources/application.properties /app/application.properties
COPY src/main/resources/graphql /app/graphql
ENTRYPOINT ["java","-jar","app.jar", "--spring.config.location=/app/application.properties"]
application.properties
spring.graphql.schema.locations=file:/app/graphql/**
4. 결과
'STUDY > Trouble Shooting' 카테고리의 다른 글
Timestamped ZonedDateTime 오류 (0) | 2024.05.22 |
---|---|
Redis Docker Container와 Spring Boot 연결이 안 되는 오류 (0) | 2024.05.22 |
만료된 토큰에서 토큰에 저장된 정보를 가져올 수 없는 오류 (0) | 2024.05.22 |
Slack Webhook을 이용한 메시지 미리보기가 안되는 오류 (0) | 2024.05.22 |
GraphQL - mutation 실행 시 필드 값이 null로 들어오는 오류 (0) | 2024.04.18 |