[IT 인프라 4대장]
1대장) Hardware(HW)
- 서버 장비, 데이터 저장 스토리지, 기타 장치 등
2대장) Network
- 애플리케이션 사용자(Client)를 서버와 리모트로 연결 해주는 것
3대장) Operating System, 운영체제(OS)
- 하드웨어와 소프트웨어를 제어하고 사용자가 컴퓨터(서버)를 사용할 수 있도록 해주는 프로그램
4대장) Middleware
- 서버가 특정 목적 및 기능을 수행하는데 도움을 주는 소프트웨어
미들웨어는 OS와 비즈니스를 처리하는 애플리케이션 사이에 들어가는 각종 소프트웨어를 말한다. 웹 서버, DBMS, 시스템 모니터링 툴 등이 있다. 오픈 소스부터 상용 솔루션까지 다양하므로 꼼꼼히 검토 후 필요한 요건에 따라 선정해야 한다.
서버(Server)는 프로그램이 설치되어 있는 HW를 의미하기도 하지만, Client에게 서비스를 제공해준다는 개념적인 의미
1번 노트북(Client)에서 필요한 사항들을 요청하고 2번 노트북에서 네트워크를 통하여 서비스를 제공한다면 2번 노트북은 서버(Server)가 된다.
서버의 구성요소
1) CPU: 중앙처리장치
- CPU는 코어(Core)와 캐쉬(Cache)로 구성되어 있다. 코어는 CPU의 연산 회로인데, 코어가 많을수록 동시에 처리할 수 있는 연산의 수가 늘어나기 때문에 코어는 많을수록 고성능이다. 또한, CPU는 고속으로 움직이기 때문에 메모리와의 처리 속도를 완화 시키기 위하여 캐쉬가 사용된다. 따라서, 캐쉬는 클수록 고성능이다.
특히 GPU(Graphics Processing Unit)는 그래픽을 처리하는데 특화된 프로세서인데, CPU가 직렬 처리에 최적화된 몇 개의 코어로 구성된 반면, GPU는 병렬 처리에 최적화된 작고 많은 코어로 이루어져 있다.
따라서 딥러닝이나 수치해석 등 대량의 데이터를 고속으로 처리해야하는 분야에서는 CPU와 GPU를 함께 사용해서 처리 성능을 높이는 GPU 컴퓨팅 방식이 사용된다. 이 방식은 연산이 많이 필요한 부분을 GPU에게 넘기고 나머지 코드만을 CPU에서 처리하는 방식이다.
2) 메모리: 주기억장치
- CPU가 직접 접근할 수 있는 기억장치를 바로 메모리라고 한다. 메모리는 기억을 담당하는 부분이기 때문에 데이터 용량이 크거나 데이터 전송 속도가 고속일수록 고성능이지만, 서버용으로는 전력 소모가 적으며 오류 처리가 탑재되어 있는 것을 사용한다. 3) 스토리지
- 스토리지는 데이터를 영구적으로 저장하는 장치이다. 데이터 스토리지는 서버를 만드는데에 직접 사용되지는 않지만, 서버의 성능을 좌우하는데에는 아주 중요한 역할을 한다. 아무리 좋은 성능을 가지고 있는 서버를 사용하더라도 스토리지의 성능이 받쳐주지 않는다면, 서버는 제대로된 컴퓨팅 파워를 낼 수가 없다. 스토리지의 용량이나 읽기, 쓰기, 속도가 시스템 전체에 영향을 주며 하드디스크나 SSD가 사용된다.
Infrastructure as code
인프라 구성 관리 툴
* Bootstrapping : OS 시작을 자동화
서버 OS 를 설치, 가상 환경 설정, 네트워크 구성 설정 등
Vagrant
* Configuration : OS 나 미들웨어의 설정을 자동화
OS 설정, 각종 미들웨어 설치 및 설정
Ansible, Chef, Puppet
* Orchestration : 여러 서버 관리를 자동화
Kubernetes : 컨테이너 오케스트레이션의 사실 살 표준(de facto standrad). 줄여서 k8s 라고도 부름.
CI / CD
지속적인 통합은 제대로 동작하는 코드를 자동으로 유지하기 위한 방법이다. CI 환경이 구성되어 있지 않으면 빌드가 깨지는 경우도 많고 심지어 깨진 걸 모르는경우도 있다. CI 환경에서 개발자가 코드를 커밋하면 Jenkins 와 같은 인테그레이션 툴이 코드 커밋을 감지해 자동으로 빌드와 테스트를 수행하고 코드 품질을 점검한다. 문제가 있을 경우 해당 개발자에게 피드백이 가서 빠르게 조치하고 좋은 품질의 코드를 계속 유지할 수 있다.
단위 테스트를 통과한 모듈이 다른 환경에서도 똑같이 동작한다는 보장은 없다. 각종 설정이나 네트워크, 권한 등 인프라 환경에 의존하는 부분이 많은데, 이러한 부분을 코드로 관리한다면 개발 멤버가 항상 동일한 환경에서 개발할 수 있어 테스트가 쉽고 환경 구성 관리가 더욱 쉬워진다.
https://sangbeomkim.tistory.com/m/87
'DevOps' 카테고리의 다른 글
PM2, Nginx //front app 배포 (0) | 2023.06.13 |
---|---|
Docker & Kubernetes (0) | 2023.01.29 |
AWS EC2 + Docker + AWS ECS를 통한 orchestration (1) | 2023.01.23 |
CI(Continuous Integration)/CD(Continuous Delivery) (0) | 2023.01.11 |
Node.js, Nginx 관계 (0) | 2022.11.16 |