다수의 서버에 DB 및 웹사이트 배포시 가장 좋은 방법은 어떤 방법이 있을까요?

안녕하세요.

현재 상황은 예를 들면 10개의 그룹이 있고 각 그룹별로 DB와 웹사이트가 1개씩 존재한다고 할 경우
배포시에 매번 DB와 웹사이트를 중지하고 파일을 복사하고 다시 올리고 이 작업을
수동으로 반복적으로 하고 있습니다.

네트워크 구조는 중앙서버가 있고 각 그룹별은 각각의 개별 네트워크로 각 그룹끼리는 통신이 안되고 중앙서버에서 각 그룹서버로 접근하는 구조입니다. AD는 각 그룹별로 분리되어 있습니다.

이 배포 프로세스를 자동화 하고자 C#으로 중앙서버에서 각 그룹의 정보(네트워크, 인증, DB 연결정보 등)를 입력하여
각 그룹별 서버에 DB와 웹사이트를 배포하는 방법을 고민중에 있는데요.

어떤 기술을 통해 배포를 하는 것이 가능한지 또는 가장 보편화된 방법인지에 대해 가이드를 받고 싶습니다.

어떤 방법이 베스트일지에 대해 딱히 방향이 안잡혀서 전문가님들의 조언 부탁드립니다.

좋아요 2

바로 딱 생각나는건 Docker네요…

좋아요 2

답변 감사합니다.
제가 아직 Docker사용경험이 없어서 자세하게 사용하는 방법을 잘 모르는데요.
대충 알기론 Docker가 컨테이너를 갈아끼는 형식(?)으로 배포를 한다고 이해하고 있는데
그럼 배포할 Docker컨테이너를 만들고 C#으로 관리하는 관리 어플을 만드는 형식이랄까요?
C#이 굳이 필요 없을지요. 에고 Docker에 대해서 공부 좀 해보겠습니다.

답변 감사합니다.

좋아요 2

도커 전문가님들이 많이 계시기 때문에, 자세한건 @dimohy 님이나 다른 고수님들이 답변해주실거 같습니다;; :grin:
제가 잠깐 사용해 본 도커는 하나의 OS에 서로 다른 서버나 DB를 여러개 돌릴 수 있는 방식입니다.
서로 다른 서버에서 같은 DB를 참조하게 할 수도 있고요. 그렇지 않게 관리할 수도 있습니다.
각각의 서비스나 DB는 컨테이너라는 단위로 생성하고 관리합니다.
같은 OS에 속해있고, 여러개의 서비스가 돌아가더라도 특정 컨테이너만 중단하고, 업데이트하는게 굉장히 단순해지는거죠…
저같은 경우 웹서비스에 익숙하지 않고, 업무상 접점이 거의 없어서 도커는 저절로 안 쓰게 되었지만요.
러닝커브가 조금 존재한다는 단점이 있겠지만(뭐든 그렇겠지만…) 장점이 굉장히 많은 툴 같아요.

좋아요 2

이것 자체가 자동화가 안되어 있는 환경이 문제 인것 같은데욤
빌드 → 유닛테스트 → 배포 과정을 자동으로 처리할 수 있도록 즉 CI/CD 환경을 구축하면 모든 고민은 해결 될 것 같습니다.

관련해서는 요즘은 젠킨스를 많이 쓰고 있습니다. 또 간단한 프로젝트 규모에서는 GitHub Actions를 이용하기도 하구요

따라서 이미 웹서버가 잘 구축되어 있는 상태에서 웹App에 대한 배포만의 고민이라면 CI CD로 해결하면 될 것 같구요

신규로 웹서버 환경 자체를 여러곳에 세팅 및 배포 되어야 한다면

CI CD와 더불어 도커를 활용하면 될 것 같습니다.

좋아요 3

네 답변 감사합니다~^^;
Docker에 대해서 많이 듣긴 했지만 저도 직접적으로 다뤄볼 일이 없었는데요.
제품 Package 및 배포 관련 일이 주어지다 보니 자연스럽게 이쪽 내용이 필요하게 됐습니다.
자세한 답변 감사합니다. 말씀하신 부분에 대해 확인 해 보겠습니다.

좋아요 2

우선 답변 감사드립니다 .
네 우선 저희가 개발 과 배포에 대한 자동화가 전혀 되어있지 않은 상황입니다.
앞으로 해 나가야 할 과제이기도 해서 이번 기회에 제대로 한번 해볼려고 합니다.
가이드 해주신 CI/CD와 Docker에 대해 집중적으로 알아보겠습니다.

좋아요 2

자동배포가 아니라면 반자동(?)이라면 간단하게는

Docker, Portainer, Portainer_agent를 사용하면 될것 같습니다.
private registry가 있으면 좋겠네요.

배포이미지는 registry로 올리고…vs에서 dockerfile이 지원되니 어려운건 없을듯합니다.
중앙서버 Docker, Portainer
그룹서버 Docker, Portainer, Portainer agent
중앙서버의 Portainer에서 각 그룹서버의 Container를 핸들링하면 되지 않을까 싶습니다.
Container재시작시 registry에서 latest 이미지를 다운받게끔하면 되지 싶습니다.

좋아요 2

네. 답변 감사드립니다.~ ^^
말씀 주신 부분에 대해서 우선 궁극적으로는 그렇게 가야 할 것 같습니다.
우선은 한단계 씩 밟아나가야 할 것 같습니다.
그래도 이런 방법도 가능하구나 하는 아이디어가 생겨서 방향이 잡혀 나가고 있습니다.
다시 한번 감사합니다.~

좋아요 1