-
제목은 젠킨스 서버 분리로 하겠습니다. 근데 이제 도커를 곁들인글또 2022. 3. 13. 14:43
들어가며
이번 글은 사이드 프로젝트 개발 팀의 개발 속도를 지연시켰던 이슈에 대해 글을 써보려 합니다.
저희 팀 서버 비용은 트래픽이 없을 경우를 생각해 최대한 아끼기로 처음에 정했었습니다.
기본 제공되는 NHN의 6개월 크레딧 + AWS 프리티어를 합쳐서 쓰기로 해서
NHN의 인스턴스, 오브젝트 스토리지 AWS의 RDS를 쓰는 전략을 가져갔습니다.
문제 상황
빌드 시 서버가 무응답 상태로 빠지는 경우가 있었습니다.
이럴 때마다 인스턴스를 재부팅해 정상 기동 시켰었습니다.
점차 이런 일이 잦아지고 배포를 할 때마다 불편을 격자 시간을 내서 해결하기로 했습니다.
발생 원인
현재 우리의 서버는 젠킨스와 애플리케이션이 하나의 서버에 띄어져 있는 구조입니다.
환경 세팅의 편의성 + 비용 줄이기 때문에 이렇게 했었습니다.
그럼 여기서 인스턴스의 스펙은 좋냐? 그건 또 아니었습니다...
초기 서버의 유지 비용을 적게 가져가기 위해 스펙을 적게 잡았기 때문입니다 (c1 m2).
(언제나 문제는 돈...)
그러다 보니 빌드 시에 뻗어 버리는 문제가 발생한 것이었습니다..
처음에는 oom이 나는 경우도 있어서 젠킨스의 메모리 사용량을 1024로 올려 주어 해결했지만 서버가 멈추는 문제는 계속되었는데요.
아아.. build 시 때마다 cpu 사용량이 100을 찍어버리고 멈추는 문제였습니다.
(기영이 패턴도 울고 갈 천당과 지옥 패턴..)
해결
QA과정 동안 젠킨스 서버를 분리하기로 했습니다.
현재 AWS 프리티어 계정으로 RDS를 이용 중이기에 해당 계정에 젠킨스 서버를 만들어 사용하는 것입니다.
NHN에 Container Registry도 있기에 이것을 이용하기로 했습니다.
항상 돈을 걱정해야 하지만 월 500원 정도는 가볍게 FLEX.
변경을 하면서 고려할 점은 몇 개가 있었습니다.
- aws 계정도 프리티어 이기에 t2 micro 밖에 못 쓰는 상황이었는데요. 메모리 1GB이기 때문에 스왚메모리 설정을 추가해 줘야 합니다.
- docker 안에서 docker 명령어를 써야 하는 상황이 있는데 docker out of docker 방식을 통해 해결할 수 있습니다.
EC2의 CPU 사용량은 2% 정도 사용하고 동시간 대의 NHN 인스턴스도 멀쩡히 잘 동작하는 것을 확인할 수 있었습니다.
마무리
이번 사이드를 진행하면서 비용 문제를 항상 생각해야 한다는 것을 느끼고 있습니다.
이번 젠킨스 분리와 이전 검색 서비스 때도..
(검색엔진 도입이 필요한가? -> 검색엔진 서버가 필요하다 ->대체할 방법은 없는가? -> MySql의 N-Gram Index가 존재하네?)
생각했어야 했는데 생각하지 않았던 것, 더 편하게 개발할 수 있었는데 어렵게 했던 것 등 많은 시행착오가 있었지만, 환경을 만들고 테스트를 하면서 많은 자신감을 얻을 수 있었습니다.
참고
'글또' 카테고리의 다른 글
디자인 패턴 적용기 (0) 2022.06.26 Mybatis 사용시 return 값을 검사하는 이유는 무엇일까 (0) 2022.05.29 jenkins 해킹 (0) 2022.03.06 검색 단어에 따라 에러가 발생한다고? (0) 2022.03.05 도커가 계속 죽어요.. OOM killer (0) 2022.01.23