프로그램 다운타임 최소화 아이디어
실습으로 익히려면 학습 트랙의 12. 모니터링과 운영 인수인계를 참고하세요.
프로그램 다운타임은 프로그램 버전 업데이트, 정기 보안 패치, 하드웨어 결함, 소프트웨어 버그, 네트워크 문제 등 다양한 이유로 특정 시스템이나 서비스가 의도되거나 예상치 못한 이유로 작동을 멈추는 시간을 말합니다. 프로그램 다운타임은 다음과 같은 주요 요인에 의해 영향을 받습니다.
- 프로그래밍 언어
- 개발 프레임워크
- 서버 인프라
- 데이터베이스 관리 시스템(DBMS)
- 네트워크 인프라
- 사용자 수 대비 트래픽
- 대외 서비스 연동
개발자들에게 이는 중요한 이슈입니다. 왜냐하면 다운타임 동안에는 사용자들이 서비스를 이용할 수 없게 되며, 이는 잠재적인 수익 손실을 초래할 수 있기 때문입니다.
프로그램 다운타임 구분
정확한 다운타임 시간을 예측하는 것은 매우 어렵습니다. 이는 보안 패치, 프로그램 버전 업데이트, 개발 환경, 코드 품질, 인프라, 그리고 예상치 못한 외부 요인들에 따라 크게 달라질 수 있기 때문입니다.
따라서, 특정 기술에 대한 다운타임 시간을 정확히 알려면 해당 기술과 서비스을 사용하는 실제 시스템의 모니터링 데이터를 현장 상황에 따라 분석하고 적용해야 합니다.
코드 품질에 따라 다운타임 시간이 크게 달라집니다. 코드 품질을 높이기 위한 다양한 방법들을 시도하는 것은 기본입니 다.
의도된 다운타임과 예상치 못한 다운타임을 구분하는 것은 중요합니다.
- 의도된 다운타임: 프로그램 버전 업데이트나 정기 보안 패치를 위해 서버를 중지하는 것
- 장애로 인한 다운타임: 하드웨어 결함이나 소프트웨어 버그, 외부 연동 서비스의 예상치 못한 원인으로 인한 서버가 중지하는 것
의도된 다운타임 최소화 아이디어
프로그램에 필요한 주요 기능들을 모듈화
HandStack 에서는 프로그램 다운타임을 최소화하기 위해 프로그램에 필요한 주요 기능들을 모듈화하고, 각 모듈을 독립적으로 업데이트할 수 있도록 설계합니다. 이를 통해 프로그램의 다운타임을 최소화할 수 있습니다.
다음은 서버에 배포되는 각 모듈의 업데이트 주요 파일들 입니다.
modules
│
├─dbclient
│ │ dbclient.deps.json
│ │ dbclient.dll
│ │ dbclient.pdb
│ │ dbclient.staticwebassets.runtime.json
│ │ module.json
│ ├─Contracts
│ └─wwwroot
│
├─function
│ │ function.deps.json
│ │ function.dll
│ │ function.dll.config
│ │ function.pdb
│ │ function.runtimeconfig.json
│ │ function.staticwebassets.runtime.json
│ │ module.json
│ │ node.config.json
│ │ package-lock.json
│ │ package.json
│ ├─Contracts
│ └─wwwroot
│
├─logger
│ │ logger.deps.json
│ │ logger.dll
│ │ logger.pdb
│ │ logger.staticwebassets.runtime.json
│ │ module.json
│ ├─SQL
│ └─wwwroot
│
├─repository
│ │ module.json
│ │ repository.deps.json
│ │ repository.dll
│ │ repository.pdb
│ │ repository.staticwebassets.runtime.json
│ ├─Contracts
│ └─wwwroot
│
├─transact
│ │ module.json
│ │ transact.deps.json
│ │ transact.dll
│ │ transact.pdb
│ │ transact.staticwebassets.runtime.json
│ ├─Contracts
│ └─wwwroot
│
└─wwwroot
│ bundleconfig.json
│ compilerconfig.json
│ gulpfile.js
│ module.json
│ package-lock.json
│ package.json
│ wwwroot.deps.json
│ wwwroot.dll
│ wwwroot.pdb
│ wwwroot.staticwebassets.runtime.json
├─Contracts
└─wwwroot
각 모듈에 기능을 추가하거나 수정할 때는 해당 모듈만 업데이트하면 되므로, 다른 모듈에 영향을 주지 않습니다. 이를 통해 프로그램의 다운타임을 최소화할 수 있습니다.
ack 프로그램은 시작시 다음과 같은 모듈을 선택적으로 사용 유무를 결정하여 실행됩니다.
# 모놀리식 구성으로 프로그램 실행
ack --modules=wwwroot,transact,dbclient,graphclient,function,command,prompter,repository,logger,forwarder --port=8421
# 마이크로 서비스 구성으로 프로그램 실행
ack --modules=wwwroot --port=8001
ack --modules=repository --port=8002
ack --modules=logger --port=8003
ack --modules=transact,dbclient,graphclient,function,command,prompter --port=8004
ack --modules=function --port=8005