인프라 엔지니어 취업 준비사항(Feat.IT기술면접)
인프라 엔지니어 취업 준비사항
인프라 엔지니어로 IT업체에 취업을 준비하려고 한다면 다양한 환경에 대한 얄팍한 지식을 습득하고 있어야 합니다.
회사에서나 고객사에서 요구하는 사항을 맞춰 주는 것도 문제지만 각 인프라들을 연결해 주는 역할을 하고 있으므로 다방면에 대하여 지식을 습득할 필요가 있습니다.
IT업계 취업, 인프라 담당자의 관점에서 3가지 본 단상
마음가짐
우린 도구입니다. 개발자와 개발자간의 연골고리가 되는 도구입니다. 그러지 않고서는 최종적인 프로젝트가 완료 되지 않을 뿐더러 프로젝트가 파행으로 갈 수 있습니다.
항상 스마트폰은 꺼지지 않아야 하며 시스템이 다운된 경우에는 무슨일이 있더라도 1시간 이내에 응답해 줘야하는 의무 아닌 의무도 있습니다. 여기선 해결이 아니라 응답입니다. 오해하면 안됩니다.
하드웨어(Hardware)
기본적으로 전공자분들은 아시겠지만 컴퓨터 또는 서버, 그리고 각종장비들이 어떤 역할을 하는지를 알아야 합니다.
스펙을 알면 더 좋겠지만 그런 내용은 공식홈페에지에 가서 윤독을 하셔서 그 때마다 상황에 맞는 스팩을 가진 장비를 제안하는 정도로만 알고 있으면 됩니다.
예를 들면 현재 CPU는 x86과 arm이라는 두 회사의 CPU가 가장 많이 팔리고 있으며 대체적으로 X86의 CPU가 대부분 시장에서 주류를 차지 하고 있습니다.
여러분이 스쳐지나가면서 많이 들어본 회사인 ‘인텔’이라는 회사가 만든 CPU를 많이 사용하고 있으며 여기에는 기본적으로 운영체제는 윈도우와 리눅스를 사용합니다. 이 내용은 후술하는 운영체제 항목에서 더 자세하게 다루도록 하겠습니다.
제가 지금 단락에서 말하고 싶은 것은 하드웨어의 작동을 이해하여야 한 다는 것 입니다. 내가 지금 서버를 어디에서 설치해서 어느 스위치에 연결한 뒤 어떻게 라우팅 되어서 서비스가 되는 지 중간 과정을 이해할 줄 알아야 설명을 할 수 있습니다.
여기서 CPU가 뭐니, RAM이 뭐니 이런 이야기는 책에서 찾으시고 현재 프로젝트 또는 상황에 맞는 용도에 하드웨어를 말 할줄 아는 능력입니다.
그래야 하드웨어가 고장이 났을때 파트너사에 넘기기 전 대략적인 진단을 할 수 있으며 운이 좋으면 남는 예비부속품으로 교체하여 장애를 처리할 수 있습니다.
또한 증설시에도 정확한 부속품과 스팩을 사전에 파악하여 불필요한 소요를 제기하지 않고 현장에서 빠른 시간내로 해결할 수 있는 능력을 가질 수 있어야 합니다.
네트워크(Network)
네트워크 개념
네트워크는 Net + Work 의 합성어로써 컴퓨터들이 통신 기술을 이용하여 그물망처럼 연결된 통신 이용 형태를 의미합니다. 좀더 쉽게 말하자면 “두 대 이상의 컴퓨터들을 연결하고 서로 통신(이야기)할 수 있는 것” 이것이 바로 네트워크 입니다.
누구는 네트워크의 정의를 이렇게 내립니다. ‘어떤 연결을 통해 컴퓨터의 자원을 공유하는 것’이라고 말이죠.
IEEE(Institute of Electrical and Electronics Engineers:국제 전기 전자 공학회)에서는 네트워크를 다음과 같이 정의 하였습니다.
“몇 개의 독립적인 장치가 적절한 영역내에서 적당히 빠른 속도의 물리적 통신 채널을 통하여 서로가 직접 통신할 수 있도록 지원해 주는 데이타 통신 체계”라고 말입니다.
네트워크의 장단점
장점
네트워크의 장점을 말하자면 우리는 파일공유를 통해 다른 네트워크에 있는 컴퓨터의 파일에 접근 할 수 있게되고, 미디어 스트리밍으로 사진, 음악 또는 비디오 등의 디지털 미디어를 네트워크를 통해 재생할 수 있게 되며, 광대역 인터넷 연결을 공유할 수 있게되어 각 PC 마다 별도의 인터넷 계정을 구입할 필요가 없게됩니다.
또한 프린터 공유로써 각 PC 마다 프린터를 공유하는 대신 한대의 프린터를 구입하여 네트워크에 있는 모든 사람이 사용할 수 있게 되며, 무엇보다 인터넷에서 다른 사람과 만나 PC, 게임 콘솔 등을 통해 네트워크 게임을 즐길수 있습니다.
또한 유선으로 책상에서만 PC 작업을 해야 한다는 제약조건이 있다면 무선전파를 이용한 무선 네트워크로 책상에서 벗어나 웹작업을 할수 있다는 큰 장점을 가지게 됩니다.
단점
단점으로는 바이러스나 악성코드, 원치 않는 정보를 받게 되며 해킹으로 인한 개인 정보 유출 등 네트워크가 가능 해지면서 보안상의 문제점이 생기며 되며 무엇보다 데이터 변조가 가능하다라고 볼수 있겠습니다.
네트워크 종류
- PAN ( Personal Area Network ) : 가장 작은 규모의 네트워크
- LAN ( Local Area Network ) : 근거리 영역 네트워크
- WAN (Wide Ares Network) : 광대역 네트워크
- MAN (Metropolitan Area Network) : 대도시 영역 네트워크
- VAN (Value Added Network) : 부가가치 통신망 정보의 축적과 제공, 통신속도와 형식의 변화, 통신경로의 선택 등 여러 종류의 정보서비스가 부가된 통신망입니다.
추가적인 네트워크 종류로는 WLAN, SAN, CAN, GAN, VPN, ISDN, Intranet, Extranet등 분류하게 됩니다.
실제로 인프라 엔지니어가 담당하는 네트워크는 LAN과 WAN의 중간 영역이며 그 외의 구간은 알고만 계시면 좋을 것 같습니다.
추가적으로 OSI 7계층도 공부하시면 좋은데 이건 너무 양이 방대해서 전문적으로 공부하면 시간이 많이 소요되며 OSI 7계층은 공부해 두시길 바랍니다.
방화벽(Firewall)
방화벽은 원치 않는 트래픽으로부터 네트워크를 보호하는 네트워크 보안 솔루션입니다. 방화벽은 사전 프로그래밍된 일련의 규칙에 따라 들어오는 악성코드를 차단합니다. 이러한 규칙은 네트워크 내의 사용자가 특정 사이트 및 프로그램에 액세스하는 것을 방지할 수도 있습니다.
방화벽은 보안 수준이 낮은 환경에서네트워크 트래픽을 사용자 인증 및 검사를 한 후에 보다 안전한 환경으로 이동해야 한다는 단순한 아이디어를 기반으로 합니다.
이렇게 하면 권한이 없는 사용자, 장치 및 애플리케이션이 보호된 네트워크 환경 또는 세그먼트에 침입하는 것을 방지할 수 있습니다. 방화벽이 없으면, 네트워크의 컴퓨터 및 장치는 해커에 취약해질 수 있고 공격의 쉬운 표적이 될 수 있습니다.
고급 방화벽은 더 이상 오늘날의 복잡한 사이버 위협 전망으로부터 네트워크를 단독으로 방어할 수 없지만, 이러한 장치는 여전히 적절한 사이버 보안 시스템을 조성하기 위한 기본 구성 요소로 간주됩니다.
사이버 공격에 대한 1차 방어선의 일환으로 방화벽은 발신 트래픽, 애플리케이션 계층 트래픽, 온라인 트랜잭션, 통신 및 연결(예: IPSec 또는 SSL VPN), 동적 워크플로를 포함한 모든 트래픽에 대한 필수 모니터링 및 필터링을 제공합니다.
기본 기능은 사이버 공격에 대해 최대한의 보호를 제공하지 않을 수 있으므로 적절한 방화벽 구성도 필수입니다.
특히 IoT 및 최종 사용자 장치의 양이 증가하고 IT 및 보안 팀의 전반적인 중앙 집중식 제어가 감소함에 따라 네트워크 경계를 통과하는 더 많은 장치, 사용자 및 애플리케이션으로 인해 디지털 환경이 더욱 복잡해짐에 따라, 기업은 점점 사이버 공격에 훨씬 더 취약해지고 있습니다.
따라서 방화벽이 어떻게 작동하는지, 어떤 다양한 유형을 사용할 수 있는지, 어떤 것이 네트워크의 어느 영역을 보호하는 데 가장 좋은지 이해하는 것이 중요합니다.
ACL(Access Control List)
트래픽 필터링과 방화벽을 구축하는데 가장 중요한 요소로, 허가되지 않은 이용자가 라우터나 네트워크의 특정 자원을 접근하려고 하는 것을 차단합니다.
라우터 인터페이스에 적용함으로써 특정 패킷을 필터링 가능하고 발신지 주소, 목적지 주소, TCP/UDP 포트 번호 같은 사항들을 기반으로 허락과 거부를 할 수 있습니다.
- 표준 ACL : 출발지 주소만들 참조해 패킷 전달 여부를 결정
- 확장 ACL : 출발지 뿐 아니라 목적지, 프로토콜 까지 참조해 패킷 전달 여부를 결정
- 예시 : access-list 100 deny tcp host 3.3.3.3 host 2.2.2.1 eq telnet
- 뜻 : 100번 정책으로 출발지가 3.3.3.3 인 서버에서 도착지가 2.2.2.2 서버의 텔넷만 포트 차단
- named 표준 ACL : ACL 선언시 번호가 아닌 사용자가 설정한 값을 사용하는 표준 ACL
- named 확장 ACL : ACL 선언시 번호가 아닌 사용자가 설정한 값을 사용하는 확장 ACL
인바운드(Inboudn)/아웃바운드(OutBound)
방화벽은 전달되는 패킷의 정보(프로토콜, 포트, IP 주소 정보)를 바탕으로 전송을 허용 또는 거부하는 시스템입니다.
이때 외부 네트워크에서 발생해 내부 네트워크로 패킷이 전달되는 것을 Inbound 트래픽이라고 하며, 내부 네트워크에서 발생해 외부 네트워크로 패킷이 전달되는 것을 Outbound 트래픽이라고 합니다.
즉, 방화벽의 Inbound, Outbound 규칙은 패킷의 전달 방향(내부, 외부)과 통신 프로토콜, 포트, IP 주소를 기준으로 트래픽을 허용하거나 거부하는 규칙을 의미합니다.
방화벽 구성방식과 종류까지 하면 방화벽 엔지니어로 완전히 업무를 하게 되니 인프라 엔지니어 에서는 여기까지 아셔도 될 것 같습니다.
물론 방화벽도 공부하면 복잡하고 양도 방대하니 별도로 공부를 하셔야 합니다.
시스템
시스템이라고 하면 너무 광범위하니 이걸 환경으로 분류해서 클라우드와 온프레미스로 짤라야 하나 AD와 LDAP으로 분류해야 하나 고민이 크지만 그냥 아는데로 다 써보기로 하였습니다.
온프레미스(On-premise)
부르는 사람에 따라서 ‘온프라미스‘나 ‘온프레미스‘로 불리는데 부르는 사람 마음은데 어차피 스펠링은 저걸로 쓰니까 상관 없습니다.
돌아와서 여러분이 아시다 시피 전반적으로 알고 있는 서버실에 구축된 환경 자체를 일컫는 말입니다. 서버팜이라고 부르는 곳이며 대기업이나 중견기업의 경우에는 서비스를 제공하기 위하여 자체적으로 구비된 경우가 많으며 국내에서는 KT나 SK브로드밴드, LG유플러스에서 운영하는 IDC센터(International Data Corporation)라고 부르는 환경에 다양한 회사의 여러가지 시스템들이 구축되어 운영되고 있습니다.
우리나라에서 70%가까이 구축된 있는 환경이므로 당분간 온프레미스에 관련된 취업소요는 당분간 안정적으로 존재할 것 입니다.
소위 인트라넷 또는 내부망을 보통 여기에 구축하며 외부망과 통신을 원한다면 라우팅이 되는 L3장비인 라우터나 L3스위치를 통해 ISP업체를 통해서 외부로 서비스를 제공하기도 합니다.
보통 벤데사들은 온프레미스를 기준으로 프로그램을 개발하기 때문에 거의 업계의 표준환경이라고 보시는 분들도 있고 요즘은 클라우드 환경으로 전환하는 회사들도 많이 있기 때문에 약간씩 축소되고 있지만 그렇다고 해도 아직은 70%나 구축된 환경이므로 절대 무시해서는 안 됩니다.
클라우드로 전환했다가 모종의 사연으로 인해 다시 온프레미스 환경으로 회귀한 사례들도 적지 않기 때문에 온프레미스를 등한 시 하면 안 됩니다.
클라우드(CLOUD)
클라우드(Cloud)란, 광대한 네트워크를 통하여 접근할 수 있는 가상화된 서버와 서버에서 작동하는 프로그램과 데이터베이스를 제공하는 IT 환경을 의미합니다. 클라우드를 이용하면 필요한 컴퓨팅 자원을 인터넷으로 쉽게 이용할 수 있습니다.
책팔이였던아마존이 구축한 AWS, 마이크로소프트에서 제공하는 Azure, 구글이 만든 GCP(Google Cloud Platform)가 있으며 국내에서는 KT와 네이버 클라우드가 점유률을 높혀가고 있습니다.
특히 아마존의 AWS가 업계표준같은 느낌인 것 같은데 딱히 정해진 표준은 없고 사용하는 클라우드에 맞춰서 시스템을 구축하면 됩니다.
이전에 말씀드린 온프레미스의 유일한 단점인 유동성을 어느정도 해결한 온라인 환경이며 온프레미스의 있는 시스템들을 온라인 환경인 클라우드와 연동하거나 클라우드간 연동을 하여 재해재난 복구(DR, Disaster Recovery)구축을 할 수 있습니다.
온프레미스 처럼 서버나 장비들이 서버실이나 IDC센터에 도착해야만 작업을 할 수있는 것과는 다르게 클라우드는 지금 고객이 어떤 서비스를 원한다면 바로 접속하여 시스템을 구축할 수 있습니다.
물론 단점이 있는 데 쓰는데로 요금이 부과되며 시스템마다 요금은 천차만별 입니다.
클라우드 사업자 유형으로는 크게 클라우드 기반으로 IT 인프라 및 SW 서비스를 제공하는 사업자(CSP, Cloud Service Provider)와 클라우드 도입을 위한 컨설팅, 전환/구축, 운영 서비스를 제공하는 사업자(MSP, Managed Service Provider)로 나눌 수 있습니다.
CSP는 클라우드 인프라와 플랫폼, 소프트웨어, 애플리케이션 등을 제공하는 역할을 합니다. 이들은 클라우드 서비스를 기반으로 인프라 및 서비스를 제공하고, 기업이나 조직은 이를 이용하여 애플리케이션을 개발하거나 운영하는 등의 업무를 수행합니다.
반면 MSP는 기업이나 조직의 클라우드 서비스 운영을 지원하는 서비스를 제공하는 클라우드 회사입니다. 기업이나 조직이 클라우드 서비스를 이용하면서 발생할 수 있는 문제를 해결하고, 클라우드 서비스를 최적화하도록 지원합니다.
이를 위해 백업과 복원, 보안 감사 및 모니터링, 애플리케이션 지원, 인프라 관리 등의 서비스를 제공합니다.
따라서 CSP는 클라우드 서비스를 기반으로 인프라 및 서비스를 제공하고, MSP는 이를 운영하며 기업이나 조직의 비즈니스 요구에 따라 클라우드 서비스를 지원하는 역할을 합니다.
Azure에서 계약 방식에 따라 연간 정액 방식으로 계약할 수 있는데 이 내용은 마이크로 소프트의 Azure 영업사원 분들과 이야기를 해보시는 게 더 좋습니다.
그래서 초기 비용은 온프레미스 환경 구축이 더 많이 들지만 장기적인 운영비용은 클라우드가 더 발생할 수도 있습니다.
그래서 이점은 충분히 숙지하신다음에 어떤 환경에서 시스템을 구축할 것인가를 논한뒤에 작업에 착수해야 할 것 입니다.
클라우드의 개념
클라우드는 클라우드, 클라우드 컴퓨팅, 클라우드 서비스들로 나뉘며 차이점은 다음과 같습니다.
클라우드 컴퓨팅(Cloud Computing)이란, 클라우드를 이용하여 컴퓨팅 자원을 사용하는 기술적인 방법입니다. 이는 서버, 스토리지, 네트워크 등의 자원을 가상화하여 사용자에게 제공하며, 필요에 따라 이를 확장하거나 축소할 수 있습니다.
클라우드 서비스(Cloud Service)란, 클라우드 컴퓨팅을 기반으로 제공되는 서비스를 의미합니다. 이는 다양한 형태로 제공될 수 있으며, 대표적으로는 SaaS(Software as a Service, 소프트웨어 기반 서비스), PaaS(Platform as a Service, 플랫폼 기반 서비스), IaaS(Infrastructure as a Service, 인프라 기반 서비스) 등이 있습니다.
즉, 클라우드는 개념적인 측면에서의 인터넷을 통한 컴퓨팅 자원의 제공을 의미하며, 클라우드 컴퓨팅은 이를 기술적인 측면에서 구현하는 기술입니다. 마지막으로, 클라우드 서비스는 클라우드 컴퓨팅을 기반으로 다양한 형태로 제공되는 서비스를 의미합니다.
클라우드 컴퓨팅은 확장 가능하고 탄력적인 IT 지원 기능이 인터넷 기술을 사용하여 서비스로 제공되는 컴퓨팅 스타일입니다.
클라우드 컴퓨팅이란 사용량에 따라 지불하는 셀프서비스 방식으로 인터넷 표준 기술을 통해 제공되는 표준화된 기술 제공 기능(서비스, 소프트웨어 또는 인프라)입니다.
클라우드 서비스 종류로는 인프라 서비스, 플랫폼 서비스, 소프트웨어 서비스 등이 있습니다.
IaaS(Infra as a Service, 인프라 기반 서비스)란, 서버, 스토리지 및 네트워크 등과 같은 컴퓨팅 리소스(IT 인프라)를 제공하는 서비스입니다.
PaaS (Platform as a Service, 플랫폼 기반 서비스)란, 애플리케이션을 개발, 실행, 관리하기 위한 플랫폼을 제공하는 서비스입니다.
SaaS(Software as a Service, 소프트웨어 기반 서비스)란, 사용자가 애플리케이션을 사용하기 위해 구매/설치하는 대신 인터넷을 통하여 원하는 SW를 사용할 수 있도록 제공해 주는 서비스입니다.
클라우드 컴퓨팅 종류로는 퍼블릭 클라우드, 프라이빗 클라우드, 하이브리드 클라우드, 멀티 클라우드가 있으며 각 구성 방식마다 클라우드 컴퓨팅 장단점을 지니고 있습니다.
여기서 퍼블릭 클라우드(Public Cloud)란, 인터넷을 통해 누구나 접근할 수 있는 클라우드 서비스로 클라우드 공급자가 제공하는 인프라를 공유하기 때문에 비교적 저렴한 가격으로 이용할 수 있습니다.
프라이빗 클라우드(Private Cloud)란, 기업이나 조직 내에서 구축한 클라우드 서비스로 인터넷을 통한 접근이 아닌 내부망을 통해 접속하며, 기업이 직접 인프라를 구축하고 운영합니다.
비교적 높은 보안성과 특정한 요구사항에 맞춤화된 서비스 제공이 가능합니다.
하이브리드 클라우드(Hybrid Cloud)란, 퍼블릭 클라우드와 프라이빗 클라우드를 결합한 형태의 클라우드 서비스입니다.
퍼블릭 클라우드와 프라이빗 클라우드 간의 데이터 연계를 통해 비즈니스 유연성을 높일 수 있습니다. 기업의 요구사항에 따라 각각의 클라우드 환경에서 최적의 서비스를 제공할 수 있습니다.
멀티 클라우드(Multi Cloud)란, 둘 이상의 클라우드 서비스 제공업체에서 제공하는 클라우드 서비스를 하나의 애플리케이션 또는 비즈니스에 통합하여 사용하는 방식을 말합니다.
즉, 여러 클라우드 서비스를 혼합하여 최적의 비즈니스 결과를 도출하는 것을 목표로 합니다.
클라우드 장점
클라우드 서비스는 필요에 따라 자원을 확장하거나 축소할 수 있으므로, 기업이나 조직이 직접 인프라를 구축하는 것보다 더욱 유연하고 빠르게 서비스를 제공할 수 있습니다. 서버 용량을 늘리거나 애플리케이션을 추가할 때 기존 인프라를 업그레이드하는 번거로운 작업이 필요하지 않습니다.
클라우드 서비스는 여러 지역에 분산되어 운영되기 때문에 지리적인 재해나 기술적 장애가 발생해도 서비스의 가용성과 신뢰성이 높습니다. 이를 위해 클라우드 서비스 공급자는 여러 대의 서버를 사용하고, 서버가 중단될 경우 자동으로 다른 서버로 전환되는 기능 등을 제공합니다.
클라우드 서비스 공급자는 고성능 하드웨어와 최신 기술을 사용하여 클라우드 서비스를 제공하며 기업이 자체적으로 인프라를 구축하는 것보다 더 높은 성능을 적용할 수 있습니다.
또한 클라우드 서비스 공급자는 보안과 업데이트에 대한 책임을 지고, 최신 보안 기술을 적용하여 서비스를 운영함으로써 기업이 자체적으로 보안 및 업데이트에 대한 작업을 수행할 필요성을 줄여줍니다.
클라우드 서비스는 필요한 리소스를 쉽게 프로비저닝하고, 소프트웨어를 빠르게 배포할 수 있으며 다수의 사용자가 쉽게 협업하고, 문서와 파일을 공유할 수 있습니다.
이는 기업이 새로운 소프트웨어를 개발하거나 기존 소프트웨어를 업그레이드하는 데 걸리는 시간을 단축할 수 있을 뿐만 아니라 기업의 생산성과 협업 능력을 향상하는데 큰 도움을 줍니다.
클라우드 도입 시 고려해야 할 사항
클라우드에서는 기업과 사용자의 데이터 보안 및 개인정보 보호가 중요한 요소입니다. 특정 산업이나 국가에서는 데이터 보호, 개인정보 보호 및 규제 준수와 관련된 법적 요구사항을 충족해야 합니다.
또한, 사용자의 데이터가 외부 서버에 저장되므로 보안 및 개인정보 문제가 발생할 수 있습니다. 따라서 데이터 암호화, 접근 제어, 및 정기적인 보안 검사를 통해 보안을 강화해야 합니다.
또한, 클라우드 서비스 공급자의 보안 및 개인정보 보호 정책을 확인하고, 기업의 보안 요구사항과 일치하는지 평가하도록 합니다.
기존 시스템에서 클라우드로 데이터를 이전하는 과정에서 호환성 문제가 발생할 수 있습니다. 따라서, 데이터 이전 전에 호환성을 확인하고, 필요한 경우 데이터 변환 도구를 사용하여 호환성 문제를 해결해야 하며 클라우드 서비스 공급자가 제공하는 마이그레이션 지원을 활용할 수도 있습니다.
클라우드 환경에서도 서버 문제로 인해 서비스 중단이나 데이터 손실 또는 시스템 장애의 위험이 있습니다. 따라서, 서비스 중단에 대비하여 다중 클라우드 전략을 사용하거나, 로컬 인프라와 클라우드 인프라를 결합하는 하이브리드 클라우드 방식을 고려해야 합니다.
또한, 데이터 백업 및 복구 전략을 수립하고, 정기적으로 백업을 수행하여 데이터 손실을 방지합니다. 클라우드 서비스 공급자가 제공하는 복구 옵션과 서비스를 검토하고, 필요에 따라 다중 클라우드 전략을 사용하여 리스크를 분산시키는 방법이 있습니다.
클라우드 서비스의 성능이 기업의 요구와 일치해야 하며, 필요에 따라 쉽게 확장할 수 있어야 합니다. 우선 서비스 품질, 가격, 지원 등을 고려하여 여러 클라우드 서비스 공급자의 비교 분석을 통해 기업의 요구사항과 가장 적합한 클라우드 서비스 공급자를 선택합니다.
서비스 공급자의 성능 벤치마크 및 확장성 옵션을 확인하고, 시스템을 모니터링하여 성능 이슈를 신속하게 해결할 수 있는지도 확인해야 합니다.
클라우드 인프라를 관리하고 운영하는 데 필요한 기술 및 인력 자원이 부족할 수 있습니다. 따라서, 직원들의 역량을 향상하기 위한 교육을 실시하거나, 클라우드 관리를 전문적으로 도와주는 외부 업체와 협력할 수 있습니다.
하지만, 특정 클라우드 서비스 공급자에게 과도하게 의존하게 되면, 해당 공급자의 정책 변경이나 가격 변동에 취약해집니다. 따라서, 의존성을 줄이기 위해 표준화된 프로토콜 및 API를 사용하고, 필요한 경우 다른 클라우드 서비스 공급자로 쉽게 전환할 수 있는 전략을 마련해야 합니다.
또한, 클라우드 서비스가 기업의 성장과 함께 쉽게 확장될 수 있는지도 평가하고 유연한 계약 조건과 SLA(Service Level Agreement)를 통하여 서비스 품질을 보장해야 합니다.
Azure 인프라 엔지니어
제가 하고 있는 Azure 클라우드 인프라 엔지니어이고 아직 AWS나 GCP은 해본적이 없어서 말씀드리기가 어렵습니다.
짧게 말하면 기본적인 Windows 데스크탑 OS들이 있으며 현재는 윈도우 10,11을 위주로 공부하시면 좋을 것 같습니다.
서버는 2016부터 2022까지 이며 2012R2는 현재 EOS가 만료 되었기 때문에 더이상 정상적인 후속지원을 받기는 어렵습니다.
EOS는 보통 10년을 잡으면 되고 이사이에는 정상적인 MS로 부터 후속지원을 받을 수 있기 때문에 사용학시는 데 지장은 없습니다.
지금은 2019로 많이 구축이 되어 있고 추후에 2022로 많이 업그레이드 할 것으로 예측됩니다.
EOS : 더 이상 제품을 구매할 수 없거나 서비스의 지원 혹은 운영이 끝나는 것을 의미합니다. SW 측면에선 단종과 거의 비슷한 개념입니다.
Active Directory
마이크로소프트의 시스템을 쓰는 가장 큰 이유 입니다. 어쩌면 마이크로소프트가 dnlsehdn 계열에서 유일하게 내세울 수 있는 시스템들 중 몇개 안되는 것들 중 하나일 겁니다.
액티브 디렉터리(Active Directory, 줄여서 AD)는 마이크로소프트가 윈도우용 환경에서 사용하기 위해 개발한 LDAP 디렉터리 서비스의 기능입니다.
주 목적은 윈도우 기반의 컴퓨터들을 위한 인증 서비스를 제공하는 것이며 주로 윈도우 환경에서 동일한 데이터베이스를 사용하여 다음을 비롯한 다양한 네트워크 서비스를 제공합니다.
- LDAP 계열 디렉터리 서비스
- 커베로스 기반 인증
- DNS 기반 이름 지정 및 기타 네트워크 정보
또, 액티브 디렉터리는 또한 관리자들에게 정책을 할당하고, 소프트웨어를 배치하고, 중요한 업데이트를 조직에 적용하는 것을 허용합니다.
액티브 디렉터리는 중심 데이터베이스에 있는 정보와 설정값을 저장하며 액티브 디렉터리 네트워크는 몇 백 개의 객체들이 포함된 조그마한 설치본부터 수백만 개의 객체들이 포함된 커다란 설치본까지 다양합니다.
액티브 디렉터리는 1996년에 미리 보기 버전으로 나왔으며, 윈도우 2000 서버 에디션과 더불어 처음 공개되었으며, 윈도우 서버 2003에서는 기능이 확장되고 관리 기능이 개선되었습니다.
액티브 디렉터리는 오래된 윈도우 문서들 안에서 NTDS (NT 디렉터리 서비스) 라고도 불린다. 이러한 이름은 몇 개의 AD 이진 파일들에서도 볼 수 있습니다.
액티브 디렉터리가 소프트웨어 배포 기능을 제공한다는 잘못된 관점이 있는데 소프트웨어 배포는 LDAP 프로토콜과 결합하여 동작하면서 부가적인 계획 특성을 사용하는 별도의 서비스에 의해 실행되는 것입니다다.
액티브 디렉터리는 소프트웨어 배포를 자동화하지 않지만 다른 서비스가 소프트웨어 배포를 제공할 수 있는 구조를 제공합니다.
Powershell
당연한 이야기지만 리눅스에서 bashshell 등의 다양한 쉘스크립트가 있다면 윈도우에는 파워쉘이 있고 사용빈도는 때때로 사용합니다.
마이크로소프트 Windows PowerShell은 시스템 관리 및 자동화 등을 목적으로 설계된 명령줄 셸 및 스트립팅 언어입니다.
일반적으로 Unix, Linux 등에서 접해본 Shell과 상당히 유사하며, 커멘드 기반의 화면에서 시스템의 상태 모니터링, 설정변경, 서비스 제어 등을 할 수 있는 환경을 제공합니다.
Windows Server 2008 R2 및 Windows 7에서는 Windows PowerShell 2.0을지원하고, Windows Server 2012 및 Windows 8에서는 Windows PowerShell 3.0을지원 합니다.
OS의 기본 기능 외에 추가 기능(ActiveDirectory Domain Services, Windows BitLocker Drive Encryption, DHCP Serverservices, Group Poliucy, Remote Desktop Services, and Windows Server Backup ) 에대한 관리 기능 또한 제공하고 있습니다.
Azure CLI
Azure CLI(명령줄 인터페이스)는 Azure에 연결하고 Azure 리소스에서 관리 명령을 실행하는 플랫폼 간 명령줄 도구입니다. 대화형 명령줄 프롬프트 또는 스크립트를 사용하여 터미널을 통해 명령을 실행하도록 허용합니다.
대화형 사용을 위해 먼저 Windows의 cmd.exe 또는 Linux 또는 macOS의 Bash와 같은 셸을 시작하고 셸 프롬프트에서 명령을 실행합니다. 반복 작업을 자동화하려면 선택한 셸의 스크립트 구문을 사용하여 셸 스크립트로 CLI 명령을 어셈블한 후 스크립트를 실행합니다.
Linux, Mac 또는 Windows 컴퓨터에 로컬로 Azure CLI 설치할 수 있습니다. 또한 Azure Cloud Shell을 통해 브라우저에서 사용하거나 Docker 컨테이너 내부에서 실행할 수도 있습니다.
컨테이너(Container)
컨테이너의 정의라고 하면 컨테이너는 소프트웨어 서비스를 실행하는 데 필요한 특정 버전의 프로그래밍 언어 런타임 및 라이브러리와 같은 종속 항목과 애플리케이션 코드를 함께 포함하는 경량 패키지입니다.
컨테이너는 운영체제 수준에서 CPU, 메모리, 스토리지, 네트워크 리소스를 쉽게 공유할 수 있게 해주며 컨테이너가 실제로 실행되는 환경에서 애플리케이션을 추상화할 수 있는 논리 패키징 메커니즘을 제공합니다.
컨테이너의 이점은 컨테이너화를 통해 책임을 깔끔하게 분리할 수 있습니다. 즉, 개발자는 애플리케이션의 로직과 종속 항목에 집중하고, IT 운영팀은 특정 소프트웨어 버전 및 구성과 같은 애플리케이션의 세부 요소 대신 배포 및 관리에 집중할 수 있습니다.
컨테이너는 Linux, Windows, Mac 등의 운영체제를 가리지 않고, 가상 머신, 물리적 서버, 개발자 컴퓨터, 데이터 센터, 온프레미스 환경, 퍼블릭 클라우드 등 사실상 어느 환경에서나 구동되므로 개발 및 배포가 크게 쉬워집니다.
컨테이너는 운영체제 수준에서 CPU, 메모리, 스토리지, 네트워크 리소스를 가상화하므로 개발자에게 다른 애플리케이션으로부터 논리적으로 격리된 OS 환경을 제공합니다.
컨테이너와 VM은 차이가 있습니다. 기본 하드웨어에 대한 액세스 권한을 갖는 호스트 운영체제 위에서 Linux 또는 Windows 같은 게스트 운영 체제를 실행하는 VM의 개념은 많은 사용자가 이미 익숙할 것입니다.
컨테이너는 종종 가상 머신(VM)과 비교됩니다. 컨테이너는 가상 머신과 마찬가지로 애플리케이션을 관련 라이브러리 및 종속 항목과 함께 패키지로 묶어 소프트웨어 서비스 구동을 위한 격리 환경을 마련해 줍니다. 그러나 아래에서 살펴보듯 VM과의 유사점은 여기까지입니다.
컨테이너를 사용하면 개발자와 IT 운영팀이 훨씬 작은 단위로 업무를 수행할 수 있으므로 그에 따른 이점이 훨씬 많습니다.
- 컨테이너는 VM보다 훨씬 더 경량입니다.
- 컨테이너는 OS 수준에서 가상화되고 VM은 하드웨어 수준에서 가상화됩니다.
- 컨테이너는 OS 커널을 공유하며 VM에 필요한 것보다 훨씬 적은 메모리를 사용합니다.
도커(Docker)
도커는 오픈소스 커뮤니티 프로젝트, 오픈소스 프로젝트 툴, 해당 프로젝트를 주로 지원하는 기업인 도커사 및 해당 기업이 공식 지원하는 툴을 포함해 여러 의미를 뜻합니다. 기술과 기업의 명칭이 같아서 혼란스러울 수도 있습니다.
간단하게 그 개념을 설명하면 다음과 같습니다.
IT 소프트웨어 도커는 OS컨테이너를 만들고 사용할 수 있도록 하는 컨테이너화 기술입니다. 오픈소스 Docker 커뮤니티는 모든 사용자가 혜택을 누릴 수 있도록 이러한 기술을 개선하기 위해 노력합니다.
도커라는 기업은 Docker 커뮤니티의 작업을 기반으로 하여 보안을 강화하고 이러한 개선 사항을 더 큰 커뮤니티에 공유합니다. 그런 다음 엔터프라이즈 고객을 위해 개선되고 강화된 기술을 지원합니다.
Docker를 사용하면 컨테이너를 매우 가벼운 모듈식 가상 머신처럼 다룰 수 있습니다. 또한 컨테이너를 구축, 배포, 복사하고 한 환경에서 다른 환경으로 이동하는 등 유연하게 사용할 수 있어, 애플리케이션을 클라우드에 최적화하도록 지원합니다.
쿠버네티스(Kubernetes, k8s)
쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장가능한 오픈소스 플랫폼이다. 쿠버네티스는 선언적 구성과 자동화를 모두 용이하게 해줍니다.
쿠버네티스는 크고, 빠르게 성장하는 생태계를 가지고 있습니다. 쿠버네티스 서비스, 기술 지원 및 도구는 어디서나 쉽게 이용할 있습니다.
쿠버네티스란 명칭은 키잡이(helmsman)나 파일럿을 뜻하는 그리스어에서 유래했습니다. K8s라는 표기는 “K”와 “s”와 그 사이에 있는 8글자를 나타내는 약식 표기입니다.
구글이 2014년에 쿠버네티스 프로젝트를 오픈소스화했다. 쿠버네티스는 프로덕션 워크로드를 대규모로 운영하는 10여년 이상의 과 커뮤니티의 최고의 아이디어와 적용 사례가 결합되어 있습니다.
컨테이너는 애플리케이션을 포장하고 실행하는 좋은 방법이며 프로덕션 환경에서는 애플리케이션을 실행하는 컨테이너를 관리하고 가동 중지 시간이 없는지 확인해야 합니다.
예를 들어 컨테이너가 다운되면 다른 컨테이너를 다시 시작해야 하는데 이 문제를 시스템에 의해 처리한다면 더 쉽지 않을까요?
그것이 쿠버네티스가 필요한 이유이며 쿠버네티스는 분산 시스템을 탄력적으로 실행하기 위한 프레임 워크를 제공합니다.
애플리케이션의 확장과 장애 조치를 처리하고, 배포 패턴 등을 제공한다. 예를 들어, 쿠버네티스는 시스템의 카나리아 배포를 쉽게 관리할 수 있습니다.
쿠버네티스는 아래의 목적으로 사용됩니다.
- 서비스 디스커버리와 로드 밸런싱 쿠버네티스는 DNS 이름을 사용하거나 자체 IP 주소를 사용하여 컨테이너를 노출할 수 있다. 컨테이너에 대한 트래픽이 많으면, 쿠버네티스는 네트워크 트래픽을 로드밸런싱하고 배포하여 배포가 안정적으로 이루어질 수 있습니다.
- 스토리지 오케스트레이션 쿠버네티스를 사용하면 로컬 저장소, 공용 클라우드 공급자 등과 같이 원하는 저장소 시스템을 자동으로 탑재할 수 있습니다
- 자동화된 롤아웃과 롤백 쿠버네티스를 사용하여 배포된 컨테이너의 원하는 상태를 서술할 수 있으며 현재 상태를 원하는 상태로 설정한 속도에 따라 변경할 수 있다. 예를 들어 쿠버네티스를 자동화해서 배포용 새 컨테이너를 만들고, 기존 컨테이너를 제거하고, 모든 리소스를 새 컨테이너에 적용할 수 있습니다.
- 자동화된 빈 패킹(bin packing) 컨테이너화된 작업을 실행하는데 사용할 수 있는 쿠버네티스 클러스터 노드를 제공한다. 각 컨테이너가 필요로 하는 CPU와 메모리(RAM)를 쿠버네티스에게 지시한다. 쿠버네티스는 컨테이너를 노드에 맞추어서 리소스를 가장 잘 사용할 수 있도록 해줍니다.
- 자동화된 복구(self-healing) 쿠버네티스는 실패한 컨테이너를 다시 시작하고, 컨테이너를 교체하며, ‘사용자 정의 상태 검사’에 응답하지 않는 컨테이너를 죽이고, 서비스 준비가 끝날 때까지 그러한 과정을 클라이언트에 보여주지 않습니다.
- 시크릿과 구성 관리 쿠버네티스를 사용하면 암호, OAuth 토큰 및 SSH 키와 같은 중요한 정보를 저장하고 관리할 수 있다. 컨테이너 이미지를 재구성하지 않고 스택 구성에 시크릿을 노출하지 않고도 시크릿 및 애플리케이션 구성을 배포 및 업데이트할 수 있습니다.
AKS(azure kubernetes service)
Kubernetes는 컨테이너화 된 애플리케이션의 자동 디플로이, 스케일링 등을 제공하는 관리시스템으로 오픈 소스 기반의 솔루션 입니다.
Microsoft Azure의 Kubernetes 서비스(AKS)를 사용하여 컨테이너화된 애플리케이션을 더 쉽게 배포하고 관리가 가능하며 Jenkins, Terraform 등의 오픈소스 도구를 활용하여 손쉽게 파이프라인을 추가 및 관리 할 수 있습니다. 이러한 특성으로 개발자의 운영에 대한 복잡성 및 관리에 대한 업무 부담을 감소시키고 마스터 노드에 대한 추가 비용이 발생하지 않아 효율적인 인력 및 비용 관리가 가능합니다.
- 간편한 배포 및 관리
- Kubernetes 클러스터를 생성하기 위해 etcd 을 포함한 수십개의 구성요소 추가 설치 불필요
- az aks create 명령어 한 줄이면 즉시 AKS 클러스터를 프로비저닝
- 컨테이너화된 앱을 빌드 후 Kubernetes에 배포하기 위해 복잡한 Dockerfile / Helm chart 작업 없이 draft init / draft create / draft up 명령으로 쉽게 배포 가능
- 안정적인 응용 프로그램 확장 및 실행
- 빌트-인 자동 확장
- 성능과 도달성을 가속화하는 글로벌 데이터센터
- ACI를 사용하여 AKS 클러스터에서 탄력적으로 버스팅
- 오픈 소스 도구 & API로 원하는 방식으로 작업
- 100% 오픈 소스 Kubernetes
- 생태계에서 서비스와 도구를 최대한 활용
- OSBA를 통해 SLA가 지원되는 Azure 서비스와 손쉽게 통합
- 몇 번의 클릭만으로 CI/CD 설정
- DevOps Project로 CI/CD 파이프라인을 통해 설정
- Jenkins와 같은 기존 도구로 작업 가능
- 지리적으로 복제되는 컨테이너 레지스트리 사용
Git
비단 인프라 엔지니어라고해서 개발툴로 취급받는 깃허브를 등한시 해서는 안되는 시기입니다. Bicep, Terraform등 IaC(Infrastructure as Code)기술을 취급하고 있기 때문에 깃허브를 잘 쓰는지 여부는 인프라 엔지니어에게 한 가지 전공필수가 되었습니다.
대표적인 무료 Git 저장소입니다. 2008년 공개했습니다. Git 호스팅 기능 덕분에 GitHub는 자유 소프트웨어와 오픈소스의 성지로 떠올랐습니다. 본사는 미국 샌프란시스코에 있습니다.
경쟁사 SourceForge는 애드웨어, 해킹, 바이러스 등등의 문제로 많은 개발자들의 신뢰를 잃어 사실상 망했으며, 대부분의 프로젝트가 GitHub 쪽으로 이주하게 됐숩니다.
마스코트는 고양이와 문어를 합친 모습의 Octocat입니다. 새 모양 실루엣의 트위터 로고가 마음에 든 깃허브 관리자가 그 디자이너에게 제작을 의뢰했다고 합니다.
원래는 공개 프로젝트만 무료였고 비공개 프로젝트는 결제를 해야 했으나, MS에 인수된 이후 2019년 1월 초부터 비공개 저장소를 무료로 제공하기 시작했고, 2020년 4월 중순부터 비공개 저장소 공동 작업자수 제한도 풀렸습니다.
요즘은 깃허브를 사용할 줄 모른다면 아마도 IT업계에서 살아 남기 힘드실 겁니다. 적어도 깃허브의 사용용도는 알고는 있어야 하며 데브옵스에 관심이 있으시다면 깃을 사용할 줄 알아야 합니다.
여기서는 깃허브 사용법이나 명령어를 나열하기 보단, 물론 그럴 정도로 깃허브를 잘 아는 것도 아니지만 어떻게 구동되고 누가 사용하고 어떻게 동작하는지도 알아야 합니다.
물론 당연한 이야기지만 잘 사용하면 더 좋습니다.
데브옵스(DevOps)
‘DevOps’는 ‘development(개발)’와 ‘operations(운영)’가 합쳐진 단어이지만, 단순히 각각의 용어를 결합한 것 이상의 포괄적인 아이디어와 방식을 나타냅니다. DevOps에는 보안, 협업 방식, 데이터 분석을 비롯해 기타 여러 요소가 포함됩니다. 그렇다면 DevOps가 구체적으로 무엇을 의미하는 것일까요?
DevOps는 새로운 소프트웨어 기능, 개선 요청 또는 버그 수정 등 하나의 아이디어가 개발에서 배포에 이르는 프로세스의 속도를 높임으로써 더 빨리 프로덕션 환경에 전달되어 사용자에게 가치를 전달하도록 합니다.
이러한 접근 방식을 적용하려면 개발 팀과 운영 팀이 자주 커뮤니케이션하고 팀원들과 공감하면서 업무에 접근해야 합니다. 확장성과 유연한 프로비저닝도 필요합니다. DevOps를 확립하면 셀프 서비스와 자동화를 통해 다양한 이점과 경쟁력을 얻을 수 있습니다.
대개 표준 개발 환경에서 코딩 작업을 하는 개발자는 IT 운영 담당자와 긴밀하게 협력하여 소프트웨어 빌드, 테스트, 출시 속도를 가속화할 수 있습니다.
이는 곧 코드 변경도 더 빈번해지고 인프라도 보다 역동적으로 사용해야 한다는 의미입니다. 전통적인 관리 전략은 이러한 종류의 요구를 충족할 수 없으므로, 경쟁력을 강화하려면 몇 가지 변화가 필요합니다.
DevOps는 오픈소스 원칙에 부합하는 협업 문화와 투명한 애자일 접근 방식을 활용합니다.
오픈소스 소프트웨어 프로젝트의 문화는 DevOps 문화를 구축하기 위한 청사진으로 볼 수 있습니다. 자유로운 정보 공유는 오픈소스 커뮤니티에서의 협업에 대한 기본적인 접근 방식입니다.
이를 통해 의사 결정 과정에서 투명성을 높이거나, 실패에 대한 두려움을 없앰으로써 실험적인 프로젝트를 권장하거나, 신뢰와 협업을 장려하는 보상 시스템을 구현하는 등의 기업 문화의 변화를 이끌어낼 수 있습니다.
많은 조직에서 이러한 유형의 이니셔티브를 지원하기 위한 디지털 트랜스포메이션 컨설팅 서비스를 찾고 있습니다.
올바른 리더십과 인센티브 프로그램을 제공하면 개발 및 운영 팀이 열린 문화를 적극적으로 조성하는 데 도움이 될 수 있습니다.
그러나 이 문화가 조직 전체에 확산될 때 DevOps의 효과가 가장 크게 나타납니다. DevOps라는 명칭은 개발과 운영을 지칭하지만 DevOps는 모두를 위한 것입니다.
고객이 개방적인 접근 방식을 채택하여 DevOps의 구현을 통해 성과를 획득하도록 지원합니다.
Iac(Infrastructure as Code)
소프트웨어 정의 또는 프로그래밍 가능한 인프라로도 불리는 IaC는 물리적인 반복 가능한 디지털 구성 파일을 위한 하드웨어 구성 및 구성 도구를 지양합니다.
IaC는 높은 수준의 설명적인 코딩 언어를 사용하여 IT 인프라 프로비저닝을 자동화하고 수작업 관리와 서버, 스토리지, 데이터베이스 연결과 같은 인프라 요소 프로비저닝이 필요하지 않습니다.
IaC는 DevOps의 핵심적인 관행이며, 새로운 소프트웨어 애플리케이션 개발 및 배포 시 프로세스를 더욱 간소화합니다.
IaC를 통해 인프라 관리를 ‘시프트 레프트(shift left)’ 처리할 수 있어 배포 파이프라인 마지막의 수작업 단계가 아니라 개발자 또는 DevOps 팀의 제어 권한으로 이동할 수 있습니다.
Iac가 중요한 이유는 얼핏 보면 IaC는 과거에 수작업이었던 일(IT 인프라 구성)을 단순히 디지털화하는 것으로 새롭지 않은 것처럼 보입니다.
하지만 이러한 전환에 따라 IT 직원들이 수십 년 동안 겪어 온 다양한 주요 문제를 해결할 수 있습니다.
IT 인프라 관리는 복잡하고 많은 인력이 필요할 뿐 아니라 비용도 많이 듭니다. 프로세스의 각 단계에서 엔지니어, 유지관리 기술 전문가, 기타 담당자들이 필수 작업을 수행할 수 있어야 합니다.
조직은 이러한 전문가의 급여 요구 사항을 충족할 수 있어야 합니다. 또한 적절한 조율 및 자원 배치 요구 사항을 충족하려면 더 많은 관리 비용이 필요합니다.
모니터링 및 가시성 문제도 기존 구성의 잠재적인 문제입니다. 기존 인프라 구성은 여러 개인 또는 팀에 의존하므로 일관성이 없으며 모니터링 및 성과 최적화가 매우 어려워지는 경우가 종종 있습니다.
이러한 비일관성으로 인해 잘못된 매개변수가 사용되는 경우 잘못된 구성 문제로 인해 잠재적으로 심각한 영향이 발생할 수 있습니다. 잘못된 구성으로 인해 많은 사람에게 영향을 주는 대규모 시스템 중단이 발생하는 경우가 많습니다.
마지막으로, 수작업 구성을 위해서는 시스템 관리자가 새로운 서버를 구성해야 하기 때문에 수요 증가에 대한 대응 속도가 느립니다.
자원에 대한 수요가 급증함에 따라, 수작업 구성으로 인해 효과적인 확장이 불가능하고 기업이 증가하는 업무를 처리하기가 어렵습니다. 또한 사용할 수 있는 백업 서버가 없어 애플리케이션 가용성이 낮아집니다.
IaC의 장점은 효과적인 IaC는 기존의 인프라 구성에 관련한 수많은 문제와 비효율성에 대한 해결책을 제공합니다. 조직이 IaC를 통해 얻을 수 있는 장점이 있습니다.
IaC를 사용하면 스크립트를 실행하는 것만으로 완전한 인프라를 간단하고 빠르게 구축할 수 있습니다. 이는 환경에 상관없이 소프트웨어 개발 수명주기의 모든 단계에 걸쳐 가능합니다.
IT 직원과 운영 팀이 직접 구성을 담당하는 경우에는 불일치가 발생할 수밖에 없습니다. 하지만 IaC 파일이 정보의 기본 소스인 경우에는 조직이 데이터 관리 도구 및 정책을 추가하여 필요할 때마다 여러 번 적합한 구성을 지속적으로 배포할 수 있습니다.
IaC 파일의 장점인 모든 변경 사항에 대한 명확한 기록을 유지관리한다는 점은 종종 간과되기도 합니다. 누가(책임 소재가 문제가 되는 경우) 언제 어떤 변경 사항을 적용했는지 손쉽게 검토할 수 있습니다.
그리고 IaC는 액세스 가능한 리포지토리에서 이전 버전을 유지관리하므로 문제가 발생하는 경우 개발자가 이전 인스턴스로 돌아가 이전 환경을 재배포할 수 있습니다.
조직은 인프라 아키텍처 배포를 코드화하고 자동화하여 개발 수명주기 전체에 걸쳐 효율성과 생산성을 크게 향상할 수 있습니다.
테스트는 여러 스테이징 환경에서 동시에 발생할 수 있으며, 이러한 스테이징 환경은 몇 분만에 생성되고 배포될 수 있습니다. 또한 IaC를 통해 지속적 통합 및 지속적 배포 기법을 손쉽게 적용할 수 있습니다.
IaC의 모든 장점 중에서도 가장 큰 장점은 비용 절감과 수익 증대일 것입니다. 조직은 구성 및 배포를 자동화하여 하드웨어, 인사, 교육, 관리에 관련한 다양한 비용을 절감함과 동시에 숙련된 IT 인력이 보다 큰 가치를 창출하는 작업에 에너지를 다시 집중할 수 있습니다.
운영체제(Opertaing System)
운영 체제(OS)는 쉽게 이야기해서 하드웨어를 관리하는 프로그램입니다. 운영체제는 컴퓨터를 각종 하드웨어 자원과 소프트웨어 자원을 효율적으로 운영관리함으로써 사용자가 시스템을 이용하는데 편리함을 제공하는 소프트웨어입니다.
그렇기에 운영체제(OS)는 모든 하드웨어와 소프트웨어를 관리하는 컴퓨터 시스템인 “실행 관리자”라고 볼 수 있습니다.
운영체제(OS)가 없던 시절에는 사람이 컴퓨터에 프로그래밍을 한 이후에 공통기능을 추가적으로 일일이 넣어줘야 했습니다. 이러한 작업을 전부 하드웨어 혹은 기계어인 어셈블리어로 처리하다보니 프로그래머들에게 많은 장애물이 되었습니다.
운영체제는 이러한 컴퓨터 하드웨어에 대한 지식없이 프로그램을 용이하게 만들 수 있도록 도와주는 소프트웨어입니다.
윈도우즈(Windows)
윈도우는 마이크로소프트사가 개발한 운영체제로 애플이 개인용 컴퓨터에 처음으로 도입한 그래픽 사용자 인터페이스(GUI) 운영 체제인 맥 OS에 대항하여, 당시 널리 쓰이던 MS-DOS에서 멀티태스킹과 GUI 환경을 제공하기 위한 응용 프로그램으로 처음 출시되었습니다.
현재 전 세계 90%의 개인용 컴퓨터에서 쓰고 있으며, 서버용 운영 체제로도 점차 영역을 넓혀 나가고 있습니다.
윈도우 운영 체제의 경우 큰 시장 점유율을 차지하고 있는 까닭에 일반 사용자들에게 매우 익숙할뿐 아니라 호환되는 유명한 응용 프로그램이 많다는 장점을 지니고 있지만, 그만큼 보안 문제에서는 취약한 부분이 많은 운영 체제로 인식되기도 합니다.
하지만 사실 보안문제에선 취약한 부분이 다른 운영체제와 차이날 정도로 독보적으로 많은 것은 아니기에 오늘날에 PC에서 가장 많이 사용하는 운영체제로 자리매김하고 있습니다.
GUI(그래픽 사용자 인터페이스)
키보드로 명령어를 직접 입력하지 않고, 마우스로 아이콘이나 메뉴를 선택하여 모든 작업을 수행하는 방식입니다.
선점형 멀티태스킹(Preemptive Multi-Tasking)
동시에 여러개의 프로그램을 실행하는 멀티태스킹(멀티 프로그래밍)을 하면서 운영 체제가 각 작업의 CPU 이용시간을 제어하여 응용 프로그램 실행 중 문제가 발생하면 해당 프로그램을 강제 종료시키고 모든 시스템 자원을 반환하는 방식입니다.
FAT32 파일 시스템 사용
32 Bit FAT(File Allocation Table)을 사용합니다. 지금은 USB등에서 사용하는 시스템 체계이며 보통 데스크탑이나 노트북에 설치된 운영체제는 NTFS를 사용합니다.
※ FAT32, 클러스터, FAT
Fat 32 : 파일은 디스크에 클러스터 단위로 저장되는데, FAT32 는 기존에 사용하던 FAT 16에 비해 클러스터 크기가 작아 하드디스크 공간 낭비를 줄일 수 있습니다.
클러스터 : 여러개의 섹터를 모은 것으로 운영체제가 관리하는 파일 저장의 최소 단위이며 한개의 크기는 4~32KB입니다. 이것도 조절할 수 있으며 크기에 따라 성능이 좌우 됩니다. 클수록 성능 위주의 세팅이라고 보시면 됩니다.
FAT : 파일이나 하위 디렉터리가 디스크의 어느 위치에 저장되어 있는지 위치 정보를 저장하는 테이블입니다.
NTFS : Windows 및 Windows Server의 최신 버전에 대한 기본 파일 시스템인 NTFS는 보안 설명자, 암호화, 디스크 할당량 및 풍부한 메타데이터를 비롯한 전체 기능 집합을 제공합니다.
CSV(클러스터 공유 볼륨)와 함께 사용하여 장애 조치(failover) 클러스터의 여러 노드에서 동시에 액세스할 수 있는 지속적으로 사용 가능한 볼륨을 제공할 수 있습니다.
제조사(마이크로소프트) 말에 의하면 보안성과 성능을 향상시켰다고는 하시는 데 잘 모르겠습니다.
PnP(Plug and Play, 자동감지 기능)사용
컴퓨터 시스템에 프린터나 사운드 카드 등의 하드웨어를 설채했을 때, 해당 하드웨어를 사용하는 데 필요한 시스템 환경을 운영체제가 자동으로 구성해주는 기능입니다.
운영체제가 하드웨어의 규격을 자동으로 인식하여 동작하게 해주므로 PC주변장치를 연결할 때 사용자가 직접 환경을 설정하지 않아도 됩니다.
플러그 앤 플레이 기능을 활용하기 위해서는 하드웨어와 스프트웨어 모두 플러그앤 플레이를 지원해야 합니다.
OLE(Object Linking and Embedding)사용
다른 여러 응용 프로그램에서 작성된 문자나 그림 등의 개체(Object)를 현재 작성중인 문서에 자유롭게 연결(Linking)하거나 삽입(Embedding)하여 편집할 수 있게 하는 기능입니다. OLE로 연결된 이미지를 원본 프로그램에서 수정하거나 편집하면 그 내용이 그대로 해당 문서에 반영됩니다.
255자의 긴 파일명 사용
파일이름을 지정할 때 VFAT(Virtual File Allocation Table)을 이용하여 최대 255자까지 지정할 수 있습니다. 파일 이름에 공백을 넣을수도 있으며, 한글로는 127자까지 지정할 수 있습니다.
Single-User 시스템
컴퓨터 한대를 한 사람만이 독점해서 사용합니다. 하지만 Active Directory에 가입된 컴퓨터라면 그 도메인 아네 가입된 사용자 한정으로 한 컴퓨터에 다양한 사용자로 사용할 수 있습니다.
기타 특징
1. Windows는 기존 DOS와 Winodws 3.1의 기능을 포함합니다.
2. 네트워크 구축 및 통신에 관련된 여러 네트워크 연결을 용이하게 수행하도록 여러가지 프로토콜 및 기능을 지원합니다.
3. 사운드, 동화상 등의 멀티미디어를 쉽게 사용할 수 있는 기능을 지원합니다.
4. CD-ROM의 Auto Display : CD-ROM 드라이브에 CD를 삽입하면 Autorun.inf 파일에 의해 자동 수행됩니다. 하지만 요즘에는 CD롬을 안써서 의미는 퇴색되었습니다.
5. 설치 마법사를 통해 대화식으로 소프트웨어를 설치하고 제거할 수 있습니다.
6. Windows는 가상기억장치를 사용합니다.
리눅스(Ninux)
핀란드 헬싱키 대학에서 운영체제를 공부하던 리누스 토발즈에 의해 개발 되었습니다. 처음부터 소스코드를 모두 공개하는 무료 오픈소스 운영체제입니다.
배포판에 포함된 기본 커널을 사용자가 직접 최신의 커널로 업그레이드 할 수 있으며 보통 커널 업그레이드, 커널 컴파일을 업그레이드 합니다.
최근 배포판은 안정되어 과거에 비해 커널 업그레이드에 대한 부담은 줄었습니다.
커널(Kernel)
리눅스 운영체제의 핵심입니다. 운영체제와 사용자 사이에는 커널과 셸이 존재합니다. 운영체제에서 사용하는 언어와 사용자 언어가 다르기 때문에 사용자가 명령을 입력하면 셸에서 명령얼 받아 운영체제가 사용할 수 있는 언어로 셸을 통해 번역을 수행합니다.
이렇게 번역된 언어를 커널로 전달하고 커널은 해당하는 작업을 수행한다. 즉, 커널이 실제로 운영체제를 운영합니다.
셸(Shell)
사용자와 커널의 중간에서 사용자의 명령어를 해석하여 커널에게 전달하며 일종의 명령어 해석기입니다.
커맨드라인형(명령줄)과 그래픽형 두 종류로 나뉘며. 커멘드 라인 셸은 운영체제 상에서 명령줄 인터페이스(CLI)를 제공하고, 그래픽 셸은 그래픽 사용자 인터페이스(GUI)를 제공합니다. 커널이 수행하는 작업은 실제로 사용자에게 보여지지 않고 커널이 작업한 결과값이 셸에 의해 사용자가 이해할 수 있는 언어로 번역되어 화면에 출력됩니다.
- 리눅스에서 대화형 사용자 인터페이스를 의미
- 사용자가 입력하는 명령어를 이해하고 실행하는 역할
- 운영체제 바깥 계층에 위치
- 사용자와 커널의 의사소통 담당
- cshell, bourneshell, vashshell, tcshell 등의 다양한 종류가 있음
독립된 플랫폼
거의 모든 CPU를 완벽하게 지원하여 여러 환경에서 구동가능한 독립된 플랫폼을 갖는 범용 운영체제입니다.
유닉스와 마찬가지로 UID, GID를 가지며 USER, GROUP, OTHER 로 구분하여 각 디렉터리과 파일의 접근여부에 관한 권한을 제어합니.
이와 같은 특징으로 동일 그룹안의 USER는 서로 파일을 공유할 수 있고 디렉터리 또는 파일 관할 권한을 부여할 수 습니다음.
리눅스 시스템을 사용하는 사용자 계정도 관리자(ROOT)와 일반사용자(USER)로 구분하여 권할별 보안관리라 가능합니다.
여러개의 파일 시스템이 존재하기 때문에 각각의 파일시스템의 성격에 맞도록 ID를 부여할 수 있음.
빠른 업그레이드
윈도우 운영체제와 같은 비공개형 운영체제는 사용중 버그가 발견되어도 사용자는 수정할 수 없고, 오직 마이크로 소프트사에서 공식적으로 패치버전을 설치해야 하며 새 버전 배포까지 상당한 시간이 걸립니다.
리눅스는 오픈된 운영체제로 커널 및 프로그램에 대한 버그 및 업그레이드가 전 세계 수많은 개발자들에 의해 개발되고 수정되기 때문에 업그레이드 속도와 버그 해결이 신속하게 이루어져 사용자에게 빠른 업그레이드의 편의성을 제공합니다.
강력한 네트워크 지원
리눅스 시스템을 네트워크 서버로 사용하기 위해서는 간단한 몇가지 환경설정(IP주소, 도메인네임, 넷마스크, 게이트웨이 등) 만으로도 곧바로 네트워크 서버를 사용할 수 있고 인터넷이나 이더넷에 안정적으로 연결이 가능합니다.
또한 클라이언트 프로그램 지원 뿐만 아니라 웹서버, DB서버, 메일서버, 뉴스서버, 네임서버 등의 네트워크 서버기능도 제공하고 있어 강력한 네트워크를 지원합니다.
멀티태스킹(다중작업)과 가상 터미널 환경 지원
멀티태스킹은 동시에 여러 작업을 처리하는 개념으로 예를들면 웹브라우저를 통해 인터넷을 검색함과 동시에 다른 창에서는 문서를 작성하는 등 여러 시스템 자원의 동시 사용을 의미합니다. (멀티태스킹 기능은 윈도우 환경에서도 가능)
가상 터미널 환경은 하나의 모니터에 여러개의 가상 화면을 두는 기능을 의미합니다. 리눅스는 기본적으로 6개의 가상 콘솔이 설정되어 있어 간 창마다 다른 작업을 진행할 수 있습니다.
유닉스와 호환성
과거 네트워크를 주로 사용하고자 할 경우의 운영체제는 유닉스 또는 윈도우 NT중 하나를 선택하여 사용해 왔습니다.
유닉스는 워크스테이션용 운영체제로 대학이나 연구기관, 기업 등에서 많이 사용하고 있지만 뛰어난 성능 및 안정성에 비해 높은 비용의 시스템으로 개인이나 중소규모의 기업에서 사용하기에는 다소 어려움 존재합니다.
이런 경우 리눅스를 채택하면서도 유닉스에 사용하는 프로그램 등을 별도의 수정 없이도 사용이 가능합니다.
공개형 오픈 소스 운영체제
리눅스가 보다 빠르게 정착할 수 있었던 계기는 비공개형 윈도우 운영체제와 달리 오픈소스로 공개되어 있어 누구나 소스코드를 변경, 개발, 재배포 할 수 있어서 이다. 전 세계 프로그래머들에 의해 안정적이고 강력한 운영체제로 진화되어 가고 있습니다.
예전부터 사용 해왔던 리눅스는 거의 무료라 점과 유닉스와의 호환성을 장점으로 오늘날 상용화된 운영체제로 발전합니다 .
이러한 계기로 상업용 리눅스도 출시되었지만 유닉스의 높은 가격대에 비해 저렴한 비용으로 엔터프라이즈 환경에서 가장 안정적이고 뛰어난 성능을 가지며 리눅스 업체로부터 유지보수 등의 지원을 받을 수 있게 되었습니다.
다중 사용자 환경
터미널이나 네트워크를 통해서 한 시스템에서 여러 사용자가 많은 프로그램을 동시에 사용할 수 있는 다중 사용자 환경을 지원합니다. 즉, 저렴한 비용으로 많은 작업을 동시에 수행할 수 있습니다.
구형 PC등에서도 효율적으로 리눅스 전용 컴퓨터로 사용할 수 있고 네트워크 서비스 기능도 운영할 수 있을 만큼의 기능을 제공하므로 저급 사양의 개인용 PC(집에서 놀고있는 컴퓨터라던지) 에서도 큰 문제 없이 인터넷과 서버 구축등이 가능합니다.
최근에 CentOS의 기술지원이 종료되어서 관련한 이슈들이 있습니다. 서버 마이그레이션 또는 OS마이그레션등을 통하여 해결하고 있으니 이 점도 알아두시면 좋으것 같습니다.
데이터베이스(DataBase)
데이터베이스는 전자적으로 저장되고 체계적인 데이터 모음입니다. 여기에는 단어, 숫자, 이미지, 비디오 및 파일을 포함한 모든 유형의 데이터가 포함될 수 있습니다.
DBMS (데이터베이스 관리 시스템) 라는 소프트웨어를 사용하여 데이터를 저장, 검색 및 편집할 수 있습니다.
컴퓨터 시스템에서 데이터베이스라는 단어는 모든 DBMS, 데이터베이스 시스템 또는 데이터베이스와 관련된 응용 프로그램을 나타낼 수도 있습니다.
여러 사람이 공유하고 사용할 목적으로 통합 관리되는 정보의 집합이다. 논리적으로 연관된 하나 이상의 자료의 모음으로 그 내용을 고도로 구조화함으로써 검색과 갱신의 효율화를 꾀한 것 입니다.
즉, 몇 개의 자료 파일을 조직적으로 통합하여 자료 항목의 중복을 없애고 자료를 구조화하여 기억시켜 놓은 자료의 집합체라고 할 수 있습니다.
공동 자료로서 각 사용자는 같은 데이터라 할지라도 각자의 응용 목적에 따라 다르게 사용할 수 있습니다.
데이터베이스의 특징
- 실시간 접근성
- 지속적인 변화
- 동시 공유
- 내용에 대한 참조
- 데이터 논리적 독립성
데이터베이스의 장단점
- 데이터베이스 장점
- 데이터 중복 최소화
- 데이터 공유
- 일관성, 무결성, 보안성 유지
- 최신의 데이터 유지
- 데이터의 표준화 가능
- 데이터의 논리적, 물리적 독립성
- 용이한 데이터 접근
- 데이터 저장 공간 절약
- 데이터베이스 단점
- 데이터베이스 전문가 필요
- 많은 비용 부담
- 데이터 백업과 복구가 어려움
- 시스템의 복잡함
- 대용량 디스크로 엑세스가 집중되면 과부하 발생
인프라 엔지니어 관점에서는 DB의 설치 및 이중화 정도와 간단한 쿼리 정도 해볼 수 있는 능력을 갖추면 좋고 튜닝이라 슬로우쿼리 확인할 줄 아는 정도는 조금 더 공부를 하시는 게 좋을 것 같습니다. 아니면 전문적인 DBA에게 맡기시는 게 더 나을 수도 있습니다.
마치면서
아무튼 간에 쓰다보니 이것 저것 주절주절 했는데 적지 않은 양이네요. 저는 제가 안다는 내용은 적은 것 같은데 어디서는 좀 모자르고 어디서는 좀 넘치고 그런 것 같은데 아무튼 인프라 엔지니어에 관심있는 분들은 심심할 때 읽어 보시면 좋을 것 같습니다.