[TIL] KDT Clouding APP - SW Engineering/Cloud Computing
[소프트웨어공학]
이론적인 이야기라고 느낄 수 있지만, 실무를 경험하고나서 보니 정말로 많이 업무와 많이 와닿는 부분이 소프트웨어 공학. 여유가 생기면 관련 도서도 많이 읽어봐야겠다.
[Reading List]
- 구글 엔지니어는 이렇게 일한다
현물이 있는 제조업에서의 제품 개발 단계(회사마다 차이가 있겠지만..)는 다음과 같이 명확하게 구분지어져 있으나,
Feasibility 검토 - ES(Engineering Sample) - WS(Working Sample) - PS(Production Sample) - 양산/QC
소프트웨어는 개발활동이 곧 제품 생산활동이고, 형상을 달리하며 지속적으로 진화하는 시스템이기에 품질을 보증하는데 어려움이 있다.
당시 지문인식기기의 SDK를 개발하는 팀에서 신제품 개발시에 하드웨어 개발 진행단계와 소프트웨어 개발 진행 단계에 맞춰야 하는 부분이나, SDK 개발 프로세스를 수정하고 확립해가는 과정(내가 한 것은 아니지만.. 많이 힘드셨을것같다는 생각..) 등 많은 생각이 들었다.
그리고
도구나 절차의 고도화보다는… 조직원들의 마음가짐이 더욱 중요
정말 와닿는 말이었다.
업무에 임하는 사람이 얼마나 본인의 업무와 제품에 대해 얼마나 애정이 있는지에 따라 결과물의 퀄리티가 달라지는 것은 사실이다. 좋은 팀원들이 모이는 회사들은 보통 지속적으로 성장하는 것을 보면 아마도 당연한 결과인 듯 싶고, 나 또한 좋은 동료들과 같은 마음으로 협업하는 기회가 왔으면 좋겠다. 혹은 기회의 장을 직접 열어보거나…!
Scrum
[단점]
- 각각의 스프린트의 결과물 도출로 인한 오버헤드
- working sample 제작에 포커스된 개발방식으로 품질 평가 측면에서 어려움이 있음. 회고가 중요함.
Code Revice
- 코드의 잠재적인 결함을 사전에 미리 방지하기 위한 목적
정해진 방법
을 통해 검토 (코드 켜놓고 먼 산 바라보기 X)
[클라우드 컴퓨팅]
Iac (Infrastructure as Code)
코드로 인프라를 정의함으로써 반복적인 인프라 생성과정을 간단하게 코드로 수행하거나, 인프라에 발생한 변경 사항을 마치 소프트웨어의 버전처럼 제어. 정형화된 배포 방식을 통해 시스템의 개발, 생성 및 운영 프로세스를 보다 효율적으로 만들어주는 기술.
(그 사람만의 노하우로 남을 것들을 이력화하고 단순반복작업을 줄여준다… 오….)
IaC 도구
- teraform
- Ansible
클라우드 서비스 모델
IaaS(Infrastrucure as a Service)
- AWS Elastic Compute Cloud(EC2), Google GCP, Microsoft Azure
PaaS(Platform as a Service)
- Heroku, AWS Elastic Beanstalk, Google App Engine
SaaS(Software as a Service)
- Salesforce CRM
IT 인프라의 운영 방식
- Own Data Center
- Colocation : 자사의 네트워크장치(서버, 로드밸런서, 스위치 등)를 데이터센터 관리 업체에 설치하여 위치시키고 관리 비용 지불
- Managed Hosting
- Cloud Computing
마이크로서비스 아키텍쳐
마이크로서비스 아키텍쳐를 적용한 어플리케이션이라고 해서 무조건 클라우드 환경이어야 혹은 클라우드에서는 이 구조로 해야하는 것은 아니나, 하지만 해당 구조와 클라우드 환경의 결합으로 얻을 수 있는 장점이 매우 많다.
지속적으로, 빠르고 자주, 안정적으로 소프트웨어를 제공하는 목적에 부합하는 구조이고, 이러한 구조에 맞는 조직 형태와 프로세스가 갖춰져야 한다. 모든 제품, 서비스에 부합하는 이야기는 아니겠지만 보통의 웹 서비스에 있어서 개발 측면에서도. 유지보수 측면에서도. 매우 효율적이고 좋은 구조이고 방식이라고 생각한다.
마이크로서비스 아키텍쳐?
- suites of independtly deployable services.
- 비즈니스 기능 단위로 개발 및 배포
- 소프트웨어 delivery performance 측면에서 유리하다. (–> 개발-배포-테스트 과정과 절차를 경량화해야함)
- 서비스 단위로 스케일 아웃 혹은 신규 기술을 적용하기 쉬워지고, 분리된 구조 형태이기에 장애도 국지적인 형태로 대형 장애를 방지할 수 있다.