프로젝트 기능을 어느정도 만들고 나서 성능테스트를 제대로 하기 위해 dockerfile 을 작성하고 있었다.
스프링의 경우 .jar 파일을 생성하고 docker 에서 컨테이너를 띄울 때 .jar 파일을 실행하고 있다.
//dockerfile 중 일부...
RUN chmod +x ./gradlew
// jar 파일이 생성되는 부분
RUN ./gradlew build
COPY build/libs/Mytube-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
위 명령어들이 순조롭게 실행되다가...
RUN ./gradlew build 명령어가 영 들지를 않았다.
그래서 로컬에서 직접 실행해보았다. 그러자 어마무시한 에러 파티를 발견했다.
뭔가 로그가 많이 내려가서 다 작성하기는 어려우니 가장 대표로 눈에 띄었던 문구는....
[Consumer clientId=consumer-myGroup-2, groupId=myGroup] Sending LEAVE_GROUP request with header RequestHeader(apiKey=LEAVE_GROUP, apiVersion=5, clientId=consumer-myGroup-2, correlationId=11, headerVersion=2) and timeout 30000 to node 2147483647: LeaveGroupRequestData(groupId='myGroup', memberId='', members=[MemberIdentity(memberId='consumer-myGroup-2-e61c030a-dc17-46d3-93ea-04eb5412e50d', groupInstanceId=null, reason='the consumer unsubscribed from all topics')])
였다.
내가 삽질하게 만든 에러 로그를 전체적으로 읽고 싶은 분들을 위해... (있을 진 모르겠지만)
https://github.com/f-lab-edu/Mytube-streaming/issues/61
최대한 반복되는 로그는 제외하고 한 눈에 보려고 이슈 발행할 때 넣었다.
아무래도 kafka consumer 관련해서 뭔가 있는 것만 같았다.
그래서 kafka consumer 관련한 모든 설정을 다시 확인해봤지만 이렇다할 문제가 없어 보였다.
처음에는 topic 이 생성되지 않는건가? 싶었다.
kafka-consumer-groups --bootstrap-server localhost:9092 --describe --all-topics -all-groups
위 명령어를 kafka-consumer-groups.sh 가 있는 폴더로 이동해서 실행해 보았을 때 토픽은 문제 없이 잘 생성되어 있었다.
그렇다면 consumer group을 잘못 지정했나?
싶어 코드를 다시 들어가보면 config 파일이나, listener 어노테이션이나 다 잘 설정되어 있었다.
그 외에도 kafka 관련 설정을 계속 확인하고, 구글링하고 비슷한 사례를 찾아봤지만 문제될 코드도, 나와 똑같은 상황을 겪는 사람은 없었다.
그리고 오늘 다시 코드를 확인하며 ./gradlew build 를 계속 실행했다.
상황은 변하지 않았다.
그리고 사실 이 명령어를 칠 때마다 테스트 코드가 실패한다고 떴다.
같은 내용이나 뱉는 터미널 들여다볼 거면 이 테스트 코드나 build 에서 제외시키자- 하며 방법을 찾았다.
./gradlew build -x test
다행히 테스트 코드를 제외하고 빌드하니 아무 문제 없이 success 를 받아냈다.
그 때부터 에러 로그가 바뀌기 시작했다.
'xargs not available'
다른 개발자 분의 게시글에서 쉽게 답을 찾을 수 있었다. openjdk:17에 xargs 가 부재해서 발생하는 문제니까 사용 가능한 것으로 바꿔줘야겠다!
FROM openjdk:17-jdk-alpine AS builder
로 바꾸자 이번엔 또 다른 에러가 등장했다.
failed to solve: openjdk:17-jdk-alpine: no match for platform in manifest sha256:4b6abae565492dbe9e7a894137c966a7485154238902f2f25e9dbd9784383d81: not found
jdk 를 끌어올 때 내 노트북 코어와 호환되지 않아서 발생하지 않는 오류였다고 한다. (본인 m2 air 2022 년형)이미지를 끌어오는 플랫폼을 명시하여 해결했따.
mytube-backend:
container_name: mytube-backend
platform: linux/amd64 // 추가된 코드
build:
context: .
command: ./gradlew bootrun
restart: on-failure
ports:
- 8000:8000
expose:
- 8000
depends_on:
- mytube-mysql
- mytube-redis
- mytube-kafka
env_file: .env
해결!
내가 ./gradlew build 만 할 줄 알지 -x test 같은 속성까지는 몰랐기 발생한 참사였던 것 같다.
프로그래머는 코드를 활용할 줄 아는 사람이지 그대로 복붙하는 코더(coder)가 아님을 잊지 말자.
'개발 일기' 카테고리의 다른 글
[Spring] Failed to convert value of type 'java.lang.String' to required type 'long' (0) | 2024.06.14 |
---|---|
[ 0510 ] 오류 일기 (MyBatis, SpringBoot) (0) | 2024.05.10 |