개발 일기

속도와 무관하게 꾸준히 나아가는 개발자가 되겠습니다.

개발

[서버] 서버 구축기

욱씨 2025. 8. 31. 00:09

최근 사내 GPU 서버가 설치되어서 서버 세팅할 일이 생겼습니다.

회사엔 사수가 단한명도 없기때문에 (4개월차 개발자인 제가 제일 오래된 개발자......)

맨땅에 해딩하며 사내 개발자들이 사용할 수 있게 세팅을 해야합니다.

 

요즘 회사에서 인프라와 DevOPS + 백엔드 개발을 담당하고 있기에 서버 담당자도 제가 되었습니다,,

좋은 기회이기에 맛있게 섭취를 해보도록 하겠습니다,,,,, 😚

 

그러면 서버 구축기 시작합니다.

 

1. 서버의 목적

먼저 서버를 세팅하고 사용자에게 맞게 만들기 위해서는 서버의 목적을 알아야한다고 생각합니다.

목적에 따라 구축하고 환경을 조성해야할 방향이 달라진다고 생각하기에 

서버의 목적부터 정의를 했습니다.

 

현재 회사에서 운영중인 클라우드 서버가 3개가 있는데

이중 1개의 AWS 인스턴스에는 도커 컨테이너가 약 40~50개 정도 띄워져있습니다.

아주 엉망이라고 할 수 있죠...? 개선하고자 몇차례 건의하였으나 별다른 답변을 듣지못했습니다,,, 😥

 

실질적인 서비스는 몇개 없지만 현재 회사 특성상 하나의 서비스라도 조금씩 변형해가며

여러 국가사업에 지원하고 사업비를 받아서 연명해가는 상황이며 이미 끝난 용도의 컨테이너도 정리가 안되고있는 상황,,,

 

하여 클라우드 비용을 아낌과 동시에 불필요한 서비스는 없애는것 보다는 

현재 설치하는 서버로 옮겨서 필요할때 꺼내볼 수 있도록 하겠다는 요구사항을 받았습니다.

 

또한 최근 LLM으로 여러가지 프로젝트를 시도중인 상황이기에 모델훈련 용도로도 사용이 됩니다.

👌 서버의 목적
1. AWS에 배포는 되어있지만 사용되지않는 서비스를 가져와서 배포한다.(도커 사용)
2. AI 팀의 모델 훈련과 테스트를 진행한다.

(다만, 리눅스에서 관리자 권한은 최소화할것.)

 

 

2. 서버 설계

위 목적에 따라 어떤 그룹으로 분리하고, 어떤 방식으로 향후 배포환경을 분리할지 고민을 해보았습니다.

 

아예 쿠버네티스로 노드로 분리하여 그룹별로 다른 노드를 사용하게 할것인지

아니면 하나의 OS상에서 다함께 사용하지만 그 안에서 분리할 것인지...

 

사내 서버사용자가 많지 않기때문에 리소스 충돌은 흔치않을 것이라 판단하였으며,

쿠버네티스로 분리하게 될 경우 현재 정해진 자원을 쪼개서 할당하는 방향으로 해야됩니다.

이렇게 자원을 쪼갤 경우 보유한 리소스를 100% 활용하기엔 무리가 있을 것 같고,

AI 팀에 GPU를 다 준다고 한들 배포할때도 GPU가 필요하기에

쿠버네티스 환경으로의 분리는하지 않았습니다.

 

따라서 한 OS 체제안에서 모두가 활동하며, 주로 사용하는 Docker에 대해서만 환경분리를 하도록 하였습니다.

서버 내 그룹분리

3. Rootless Docker

Docker에 대해서 분리를 한다면 어떤 방식이 있을까요?

 

평소 사용하는 Docker는 Rootful한 도커로 도커 그룹에 속해있는 사람들은 docker.sock를 사용하여 모두가 하나의 소켓을 공유합니다. 이 방식에 대해서 곰곰히 생각해본 결과 Rootful한 Docker말고, Rootless Docker로 서로를 분리하고, 각 그룹에 해당하는 docker.sock를 생성한 뒤 그룹끼리 공유하는 방법으로 설계하였습니다.

 

또한 팀을 분리하고 도커를 분리하기 위함은 용도의 분리가 존재했지만, 기존 AWS에 docker 컨테이너가 40개가 넘도록 배포되어있고 누가 무엇을 관리하는지도 경계가 명확치 않았기 때문에 누군가의 실수는 곧 다른사람이 배포해 둔 환경에 영향을 미치는 단점이 있었습니다. 

 

이 이유가 도커를 사용하는 것 뿐 아니라 그룹별로 분리하는 것을 결정한 이유 입니다.

 

Docker 분리

 

rootless docker에 대한 더 자세한 내용은 공식문서에서 확인할 수 있습니다.

https://docs.docker.com/engine/security/rootless/

 

Rootless mode

Run the Docker daemon as a non-root user (Rootless mode)

docs.docker.com

 

 

위 방식으로 서버를 설계하였으며, 구현은 다음 글에서 진행하도록 하겠습니다.

 

 

이상 서버 설계 내용 읽어주셔서 감사합니다.