프로보노에서 진행하는 프로젝트 수행 중 발생한 일이다. 기획 단계를 지나 본격적인 개발 착수 당시(6월), 경험해본 스프링 프로젝트라고는 5월에 친구 동아리에서 진행한 해커톤이 전부였던 나는 프로젝트를 시작하려면 도커로 환경 세팅을 하는 것이 기본인 줄 알았다. 왜냐하면 해커톤 때 그렇게 했기 때문이다!
물론 지금은 그냥 버전 정도만 맞춰서 개발을 진행한 후 서버 배포할 때나 도커를 사용하는 방식도 있다는 것을 알고 있다. 아무래도 도커가 쉽지는 않다보니 대학생들끼리 하는 프로젝트에서는 이런 식으로 진행되는 경우도 꽤 있는 것 같다.(난 운이 좋아 매번 환경 세팅에 자발적으로 나서는 분이 있었지만...)
어쨌든 도커 세팅이 기본인 줄 알았던 나는 프로보노 프로젝트에서도 다행히 할 줄 아는 분이 계셔서 세팅을 해주셨다.
그런데 팀원 분께서 잘 세팅해주신 것을 빌드하는 과정에서 오류가 생겼다...! 오류가 발생한 것은 다음 명령어를 실행했을 때이다.
docker-compose build
그리고 오류가 발생했을 때 나타난 메시지는 다음과 같다.
failed to solve: process "/bin/sh -c ./gradlew bootJar" did not complete successfully: exit code: 127
대충 ./gradlew bootJar 부분에서 문제가 생겼다는 내용으로 보인다.
오류가 발생한 원인이 내 노트북쪽에 있는건지 아니면 세팅 자체에서 문제가 있는건지 모르겠어서 일단 세팅을 담당해주신 팀원 분께 연락을 드렸다. 둘이서 화면 공유를 해놓고 열심히 씨름해봤지만 해결되지 않았다...
그런데 이후 다른 팀원 분은 잘 실행이 되셨다는 연락을 받았다. 결국 내 노트북에서의 문제였던 것이다. (= 내가 알아서 해결해야 한다는 뜻)
정말 열심히 구글링을 해봤다. 한글로 검색해봤을 때 많은 결과가 뜨지 않는 것 같아 영어로도 검색해보고, 심지어 처음으로 스택플로우에 글도 써봤다.
결말은 다소 허무하다... 결론적으로는 EOL 문제였다. 내가 쓰는 Windows는 EOL이 CR(Carriage-Return, \r)과 LF(Line Feed, \n)로 되어있고, Linux나 MacOS는 LF라고 한다. gradlew 파일의 EOL을 LF로 바꿔주니 빌드가 아주 잘 되었다!
사실 이건 구글링하면서 본 해결 방법인데 초반에 해결하지 못한 이유는 다음과 같다.
Dockerfile이 오류 발생의 원인이라고 생각해서 그 파일만 EOL을 수정한 후 시도했었다. 꼭 gradlew 파일을 수정해주어야 한다!
도커 세팅을 해주신 분도 나와 마찬가지로 Windows를 사용하는 분이셨기 때문에 OS 간의 EOL 처리 차이가 문제의 원인일 것이라고 생각하지 못 했다.
여쭤보진 않았지만 아마 도커 세팅을 해주신 분에게 EOL 관련 설정이 되어있거나 github에 올라온 코드를 내 노트북으로 가져오는 과정에서 변환이 생긴 것이 아닐까 싶다.
혹시 다른 분들도 같은 문제를 겪으실까 싶어 슬랙에 바로 공유했었는데, 이후에 실제로 도움이 되었다고 말씀해주신 팀원 분들이 계셨다. 쏘 뿌듯...
나도 언젠가는 도커 세팅을 나서서 하겠다고 하는 사람이 되고 싶다! 복학 전에 꼭 공부해야지...
감사합니다. 이런 정보를 나눠주셔서 좋아요.