연구한 이야기/문제 해결 이야기
jenkins(image) 에서 docker buildx를 사용하고 싶어요!
jenkins와 docker jenkins 에서 도커 이미지를 빌드하는 것은 흔한 일이다. 하지만, jenkins 서버를 만약 docker container로 띄웠다면 조금 복잡해진다. 이 때, jenkins에서 도커를 사용하는 방식에 따라 dood, did 로 나뉘게 된다. docker out of docker 젠킨스의 docker가 아닌, 호스트의 docker를 젠킨스에서 사용할 수 있도록 한다. docker in docker 젠킨스의 docker image 내부에 docker를 추가로 설치한다. 둘 중 어떤 것을 쓸 지 고민해보고 찾아보다가, dood로 결정했다. 아무래도 호스트의 docker를 바로 쓰는 것이 did보다 더 쾌적할 것으로 보인다. 또한, 대부분이 dood를 권장한다. 정확히는, d..
CMake 와 static library에서의 종속성 관리
target이 static library인 CMake를 서브프로젝트로 포함시키는 구성에서의 종속성 관리. 회사에서 개발하는 게임은, 엔진을 자체 수정하며 작업하기에, 다양한 내부 라이브러리를 링크해서 사용한다. 지금껏 iOS 환경에서는 XCode를 직접 수정해가며 종속성을 관리하고 프로젝트들을 링킹했는데, 이번에 서브 프로젝트들을 CMake로 관리하려고 했다. 각 서브프로젝트의 CMakeLists.txt별로 존재하는 다양한 라이브러리 파일들..(ffmpeg라던지 zlib라던지 ssl이라던지..) 이들을 메인 프로젝트가 알 수 있게 해야 했다. 하지만, static library가 target 인 CMake를 XCodeProj로 만들 때, 종속성 정보를 메인 프로젝트로 전달해 줄 방법이 없었다. 그래서 방..
서버 스트레스테스트 시 일정 주기로 멈춰요!
RUST만든 웹서버를, jmeter를 통해 stress test를 진행하였다. 만든 서버는 config 파일을 watch 하고 읽어서, 웹으로 들어온 요청에 json으로 적절히 응답해주는 간단한 서버이다. 그런데..! 스트레스 테스트 시 몇십 초 이후, (약 7000+개의 connection이 이뤄진 다음), connection 이 아무리 시간이 지나도 이루어지지 않는다. 그런데, 또 몇십 초 지나면, 일부 connection은 수립되기는 한다. 이 현상이 반복되고 있었다... 여러 문제를 체크해 보았다. 로컬에서 테스트도 해보고, cpu부하나 대역폭도 체크해 보았다. 처음에는 무지하게도 `TIME_WAIT` 을 의심했는데, TIME_WAIT을 없애기 위해 연결 종료시에 linger를 이용해 RST를 보..
docker exec format error
RUST로 (잘 만든) 서버를 도커로 패키징하여 aws ec2 t4g nano 인스턴스에 올렸다! exec format error exec failed, exec format error 라는 명령어와 함께 실행이 안된다. 해결 X86_64 환경에서 개발한 이미지는, 기본적으로 AMD 아키텍처에서 동작한다. ARM CPU 환경을 지원하기 위해서는 해당 아키텍처에서 개발해야 한다. 혹은, docker buildx 등을 사용해서 멀티아키텍처 개발을 한다. 클라우드 빌드를 통해 각 아키텍처마다 build를 할 수도 있겠다.