IT Infra의 기초

이제는 개발자로써 프로그래밍만을 하는 것에서 끝나지 않고 지속적인 운영관리에 대한 부분도 역할을 맡고 있습니다. 이러한 기술적 변화는 기존 시스템 개발자와 소프트웨어 개발자 간의 간극이 더 커졌다고 생각하고 있습니다. 그렇다면 전반적인 아키첵터와 각 인프라에 대한 기초 내용들을 함께 보면서 어떻게 달라지고 현 상황은 어떻게 되는지 이야기 해보도록 하겠습니다.

소프트웨어 생명주기와 역할

소프트웨어는 기본적으로 생명주기를 가지고 있습니다. 

소프트웨어 생명주기

생명주기라는 것은 어찌보면 소프트개발에서 필수적인 영역이라고 생각하는데요. 필수적이라고 보는 이유는 알게 모르게 우리가 이러한 방식으로 개발을 하고 있기도 하고 또 더욱 체계적인 개발을 하게 만드는데 이해를 해야 하는 영역이 제대로 구분이 되어져 있다고 생각합니다. 그럼 각 영역에 있어서 업무 기준으로 다시 세분화하고 나누어 봤을때 아래와 같습니다.

 

 

위 그림에 대한 설명을 하자면 아래와 같습니다.

#PM/PO 의 경우 아이디어 스토밍을 통해 아이디어를 제시하고 요구사항들을 만들어 서비스 기획자에게 전달합니다.

#기획자는 서비스를 기획과 화면설계를 하여 퍼블리셔에게 전달합니다.

#퍼블리셔는 디자인을 입혀 리액트코드로 퍼블리싱 합니다.

#프론트개발자는 디자인을 기반으로 이벤트 처리할 수 있는 핸들러와 클라이언트 요청에 대한 디테일한 처리와 기술적 문제를 처리하게 됩니다.

지금은 이렇게 디자인, 퍼블리셔, 프론트엔드를 구분하고 있지만 많은 회사에서 프론트엔드가 처리하고 있는 경우가 많습니다. 

 

마지막으로 #백엔드개발자는 서비스를 사용할 수 있는 인터페이스를 API를 개발하고 데이터베이스에 대한 접근을 관리하게 됩니다. 

 

소프트웨어 생명주기와 함께 각 업무의 영역을 나누어 어떤 작업자가 해당 업무를 수행하게 되는지 알아 보았습니다. 현재는 많은 형태의 아키텍처가 나와서 위와 같은 방식으로 개발이 되지 않은 경우도 있는데, 대부분 많은 IT 업체에서 위와 같은 방식으로 사용하고 있습니다. 

 

여기서 알아야 하는 것은 백엔드에서 WebApplicationServer와 Application Server의 간의 혼동으로 인해 모든 API 개발은 프론트 개발이라고 하는 분이 종종 있었습니다. 제대로 알아야 하는 것은 WAS 는 Application Server의 한 일종으로 프로토콜을 Http를 사용한다면 WAS로 분리된다고 보면 되는 것이고 이것은 백엔드라는 것입니다. 

 

이렇게 영역을 나누는 것을 우선적으로 보여주는 것이 이후에 여러 아키텍처를 구성할 때, 해당 역할에 따라 구분을 하여 더욱 세분화 하게 됩니다. 그렇기에 초반에 이러한 내용을 좀 더 정리를 하면서 진행을 하는 것이 다음 아키텍처에 대한 이해도를 높이는데 더욱 도움이 될 것이라고 생각합니다. 

 

인프라

인프라도 이전과 현재 많은 변화가 일어나고 있는 부분중 하나 입니다. 이전의 인프라는 하드웨어와 네트워크 그리고 프로토콜을 의미하는 단어 였습니다. 

 

그래서 이러한 인프라에 대한 이해라고 했을 때 기본적으로 프로토콜은 무엇인지 네트워크는 무엇인지를 이해하는게 주 업무 였다고 생각합니다. 하지만 IT가 성장을 하면서 이러한 부분이 확장이 되었다고 보는데요. 바로 클라우드 서비스라는 개념이 추가가 된 것입니다. 

클라우드 서비스는 우리가 잘 알고 있는 AWS 부터 시작해서 자주 쓰고 있는 MS Office 365 등 전체를 의미하고 있는데요. 이러한 클라우드 서비스 라는 것에 좀 더 자세하게 알아보도록 하겠습니다. 

 

클라우드 서비스에는 여러가지 항목이 존재합니다. 

 

#IaaS (Infrastructure as a Service) 는 OS를 포함한 서버를 하나의 인스턴스로 제공해주고 있는 서비스를 의미합니다. 우리가 잘 알고 있는 AWS EC2가 여기에 해당하게 됩니다. 

#PaaS (Platform as a Service) 는 도커와 k8s 서비스를 의미 하는데요. 이러한 서비스까지 확장하게 과정을 보게되면 우리가 알고 있는 VM(Vertual Machine)으로 자원을 여러개로 나눌 수 있게 되는데 이 과정에서 Guest OS는 전체 기능이 포함된 OS를 설치하게 되면서 자원의 비효율성이 발생합니다. 특히나 같은 OS를 여러 VM에 올리게 된다는 것은 중복된 부분을 최소화 할 수 있다라는 것입니다.

 

Docker나 k8s로 서비스를 올리게 될때는 OS에서 불필요한 기능을 빼고 필요한 서비스와 라이브러리를 하나의 이미지로 만들어 컨테이너라는 영역으로 배포하게 됩니다. 이렇게 함으로써 불필요한 자원 소모를 최소화하여 최대한 많은 서비스를 배포할 수 있게 됩니다. 

#SaaS (Software as a Service) 는 기능 전체를 플랫폼이나 여러 서비스로 제공하여 사용자가 별다른 설정 없이 바로 사용할 수 있는 형태를 의미합니다. 대체로 우리가 사용하고 있는 MS Office가 여기에 해당하게 됩니다. 

#Faas (Function as a Service) 는 함수 기반으로 서비스를 제공하는 것으로 요즘에 자주 보이게 되는 Serverless 라는 것이 여기에 해당하게 됩니다. FaaS와 다른 서비스의 가장 큰 차이점으로는 코드와 함수 기반으로 서비스를 만들고 해당 서비스를 필요로 할 때만 사용하고 평소에는 운영하지 않고 있어 적은 비용으로 관리를 할 수 있다라는 것입니다. 

'Infra > Architecture' 카테고리의 다른 글

왜 컨테이너 인가? VM vs Container  (0) 2024.10.16
3 Tier Layer 와 IDC  (0) 2024.10.11