프로젝트 과정에서 생긴 자잘한 이슈 모음

wagyu·2024년 10월 26일
0

글을 써야하는데, 뭔가 글감이 없었다. 개발과정에서 자잘한 이슈들은 많았지만, 뭔가 와! 하는 이슈는 특별히 없었다. 그래서 어떡하지... 하다가 그 자잘한 모든 이슈들을 한번 모아보고자 했다.

이곳 저곳에서 다양하게 문제가 생겨서 독자에게 실제로 도움이 될 진 모르겠지만, 일단 정리해보았다.

VPN에 붙은 상태에서 사이드카가 연결이 안되네..?

저번에 VPN 사용 과정에서 핫스팟이 꺼지는 이슈와 연장선상에 있는 이슈였다. 아이폰 핫스팟에 붙은 상태에서 VPN을 키고 사이드카를 연결하려고 하니,

기타 오류가 발생하였습니다! (32002 에러) / 기기가 연결이 해제되었습니다!

이렇게 계속 뜨면서 연결이 안되는 것이었다.

이유도 모른체 잉... 왜 안되지.. 하며 순서를 바꿔가며 시도하던 중,
핫스팟 연결 -> 사이드카 연결 -> VPN 사용 순서로 해보니 결과적으로 원하던 상태가 되었다.
조사한 대로면 사이드카도 핫스팟이 연결된 상태에선 와이파이로 맥북과 통신하는 듯 하다. 그러면 저번 글에 이어서 VPN을 킨 상태에서는 IPv6를 로컬에서만 통신하게 설정해두었으니 아이패드 사이드카가 연결되고 싶어도 연결이 안되는 현상이 발생한 것 같다. (물론 아닐 수도 있다)

도커파일 작성하는 과정에서 킹받아버린 것

llm을 서빙하는 과정에서 triton inference server / vllm_backend를 사용하고 싶어서 이것저것 만지고, 결과적으로 서빙을 성공했는데.. llm의 sampling parameter를 바꿀 때마다 다시 서버를 껏다 켰다 하는 과정이 너무 귀찮았다. 그래서 이걸 컨테이너로 한번에 띄우면 편하겠다 싶어서 도커파일을 작성하는데

나는 도커파일을 작성해본 경험이 너무 적어서 계속 인터넷을 뒤져가면서 했다. 그리고 그 과정에서 막힌 부분이
pip3 할 때나, huggingface-cli login 같은 명령어를 수행할 때 등, 토큰이나 git credential y/n, 사용자 이름 및 패스워드를 터미널에 직접 입력하는 부분이었다.

나는 진짜 단순하게 생각해서

. . .
RUN <username>
RUN <password>
RUN huggingface-cli login
RUN <대충 TOKEN>
. . .

이런 식으로 작성하고 이미지를 빌드했더니, 당연히 안되었다. RUN이라는 명령어는 이런 식으로 동작하는 명령어가 아니었다.

결과적으로는

https://$PIP_USERNAME:$PIP_PASSWORD@pypi

와 같은 방식으로 넘기거나,

RUN huggingface-cli login --token $HUG_TOKEN --add-to-git-credential

위처럼 넣어서 한 줄로 바꾸는 등의 노력으로 자동화 할 수 있었다.

하지만 여기로 한번에 온건 아니고.. 챗지피티에게 물어보면서 Linux expect 스크립트로 계속 입력하게 만드려고 시도했었다.

물론 위 방식이 좋은 방식인가? 라고 물어보면 아닐거다. 환경변수에 중요한 정보를 넣어두고 이걸 이미지로 만들어 사용하는 것이라 개인적으로 하는 프로젝트이거나 특별한 경우가 아니고서야 이렇게 하면 안될 것 같다.

다른 경우엔 어떻게 하는지 조금 찾아보고 싶다.

/docker-entrypoint-initdb.d에 있는 sql 파일이 실행되지 않아요!!

mysql을 docker container로 띄우기위해 첫 init.sql 파일을 실행시켜서 데이터베이스를 구성하는 dockerfile을 작성한 뒤 이미지로 만들었다.
문제는 이미지 생성 후 docker container run 명령어를 입력한 뒤에 발생했다.

미리 잡아둔 volume 안에 mysql 컨테이너를 띄우는 과정에서 생기는 여러 파일들이 생기고, 데이터베이스도 생기긴 했는데 실제로 직접 들어가서 보니 데이터베이스, 테이블 등이 전혀 생기지 않은 것이다.

그래서 처음에 생각한건 '아, docker-entrypoint-initdb.d에 init.sql이 안 들어갔나?' 여서 다음과 같이 들어가서 확인했다.

$ docker exec -it my_db_image bash
$ cd docker-entrypoint-initdb.d

하지만 init.sql이 존재하였다. 존재하는데 테이블이 없단 얘기는 정상적으로 실행되지 않았다는 얘기여서 실제로 실행시켜보니

$ ./init.sql
$ bash: ./init.sql: Permission denied

init.sql에 실행권한이 빠져있었다! 그래서 docker도 실행을 못 시킨 것이었다.
그래서 컨테이너에서 빠져나와 해당 컨테이너를 삭제하고, init.sql이 들어있는 폴더에서

$ chmod 755 init.sql

다음과 같이 실행 권한을 준 뒤, 컨테이너 이미지를 다시 빌드하였다.
그리고 실행하니 정상적으로 돌아가는 것을 확인할 수 있었다.

프로젝트가 너무 바빠서, 다음 글은 좀 더 제대로 된 글감을 가지고 와서 글을 쓰고 싶다는 생각이 들었다.

profile
개발조아

0개의 댓글