티스토리 뷰
개발 모델
모놀리식 아키텍처 : 애플리케이션 계획, 설계, 개발, 테스트, 배포 모든 과정을 한번에 수행하는 모델이다.
ex) 쇼핑몰 만들어서 배포하는 프로젝트를 하나의 처음부터 끝까지 개발.
다 끝난 다음에 배포한다.
업데이트 하려면 서버를 다운시키고 업데이트 해야 한다.
마이크로서비스 아키텍처 : 애플리케이션의 각 요소(기능) 별로 계획, 설계, 개발, 테스트, 배포하는 모델이다.
요즘 추세이다.
서비스 자체는 그대로 돌아가는데, 어느 순간에 갑자기 메뉴가 추가된다.
이게 가능한 것은 개발되는 동안에 운영되기 때문이다.
워터폴 : 요구사항 정의 > 디자인 > 개발 > 테스트 > 배포 과정이 순차적으로 진행된다.
서비스 전체를 싹 다 뜯어고친다.
조금을 고치기 위해서 전체를 고쳐야 할 수 있다.
애자일 : 변화하는 고객의 요구 사항에 빠르게 대응하기 위한 민첩한 개발 방식으로, 작은 단위 별로 디자인 > 개발 > 테스트 과정을 반복한다.
개발 방법론
데브옵스(DevOps) : 개발 및 테스트부터 배포 및 운영까지의 업무를 통합해서 앱 개발 및 배포 속도를 높이려는 접근방식이다.
워터폴에서는 개발팀과 서비스 Operation Team으로 나뉘어졌으나,
인프라 차원에서 자신이 급하게 고치기 위해서, 한 팀이 되어서 개발할 수 있는 환경이다.
CI/CD
CI/CD : Continuous Integration / Continuous Delivery, Deployment(연속적인 통합 / 연속적인 배포)
애플리케이션 개발 및 배포 단계를 자동화하여 보다 짧은 주기로 빠르게 애플리케이션을 제공하는 방법론이다.
개발을 할 때 코딩을 한다.
그리고 커밋을 한 다음에 빌드하고 배포를 한다.
만약에 운영되고 있는 서비스에 버그가 발생하면 서비스를 멈추고 모든 과정을 매번 거쳐야 한다.
CI/CD의 툴을 사용하면 코드만 작성했을 때, 커밋되고 빌드되는 게 자동화된다.
이게 CI/CD이다.
DevOps, CI/CD를 지원하는 대표적인 클라우드 서비스 - AWS, Azure, GCP, NCP
소프트웨어 릴리스 워크플로, 코드 빌드 및 테스트, 배포 자동화 , CI/CD 통합 프로젝트
No Code
코딩 경험이 전혀 업는 사람을 위한 개발 접근 방식이다.
코딩을 완전히 건너뛰고 GUI 환경에서 어플리케이션 개발이 가능하다.
기획자나 마케터 같은 사람들이 쓴다.
No Code의 장점
1. 개발 지식 없이 서비스 개발이 가능하다
2. 비즈니스 이해도 향상
3. 사용자가 보는 화면을 실시간을 확인하며 개발하기 때문에 디자인 고민 시간을 단축한다.
No Code 단점
1. 개발 한계점이 명확하다. 커스터마이징이 거의 불가능.
2. 사용자 증가에 따른 최적화가 어렵다.
3. 코딩이 아니지만 서비스 사용법 학습 필요
Low Code
No code와 동일하게 GUI를 활용하나 커스텀 코딩이 가능하다.
좀 더 수준이 높다. 개발자 대상이다.
개발자가 사용하는 이유는, 반복되는 코드들이 많기 때문이다.
이미 있는 템플릿을 가져와서 그 상태에서 우리 회사에 맞게 뜯어고친다.
빠르게 개발하고, 오류를 줄일 수 있다.
장점
1. 프로그램 개발에 걸리는 시간 단축
2. 개발비 절감
3. 오류 감소
4. 인력 확보 용이
단점
1. 자유도 낮음
2. 개발자 창의성에 악영향 가능성 존재
3. 보안 수준이 낮아 해킹 위험성 존재
대표적인 No Code, Low Code 서비스
웹사이트 빌더
Mobile 앱 빌더
Web 앱 빌더
기업 내부용 툴, 앱 빌더
업무 자동화 툴
데이터, 개발 생산성
스프레드시트 기반 개발, 협업 툴
재무, 금융 특화 툴
결제, 지불 처리
주문, 구독, 상품관리
분석 및 대시보드
폼 빌더
시민 개발자
개발자가 아니지만 업무용 소프트웨어를 직접 개발하는 임직원이다.
IT 부서가 주도하는 개발
사업부서가 주도하는 개발
전통적인 IDE 등 코드작성기 사용
로우 코드, 노코드 플랫폼, 툴 사용
업무 자체가 개발인 임직원
업무를 위해 개발을 하는 임직원
앱 운영 관련 기술
고가용성(HA, High Availability) - 서버의 어떤 자원을 최대한 많이 활용할 수 있는 능력
서버 하드웨어 구성요소는 다양한 부품이 서로 유기적으로 연결되어 있다.
따라서 서버 하드웨어 장애는 하나가 고장났을 때도 서버의 모든 요소마다 장애가 발생할 수 있다.
그리고 서버 소프트웨어의 구성요소도 OS, OS 기본 프로그램, 다양한 애플리케이션이 함께 동작한다.
서버 소프트웨어 장애는 OS 자체 버그, 보안 취약점, 애플리케이션 문제 등으로 인한 장애가 발생할 수 있다.
SPOF(single Point of Failure) :단일 장애 지점 , 하나에 장애가 발생하면 전체 시스템이 다운되는 현상
고가용성 : 시스템이 긴 시간동안 아애 없이 안정적으로 운영되도록 취하는 조치이다.
고가용성 유지 방법
이중화 : 서비스의 안정성을 위해 각종 자원(하드웨어, OS, 미들웨어, DB 등)을 이중 혹은 그 이상으로 구성하는 기술
각 요소 별로 이중화 하는 방법이 다르며, 2대로 이중화 한다 하더라도 장애 발상 가능성을 완벽하게 배제하기 어려움
두 서버를 모두 운영해야 하기에 비용 증가, 자원 낭비라는 단점이 있음
클러스터링 : 여러 대의 컴퓨터를 병렬로 연결한 시스템으로, 여러 대의 서버를 가상의 하나의 서버처럼
사용하는 기술
실제 운영 서버에서 장애가 발생하면 운영 서버에 있는 데이터들이 standby 서버로 넘어가고, 원래 서버가 정상으로 돌아오면 다시 돌아온다.
모니터링
지속적인 감시, 감찰을 통해 대상의 상태나 가용성, 변화 등을 확인하고 대비하는 것.
시스템의 상태나 상황에 문제가 발생하면, 즉각 관리자에게 알림을 보내 빠르게 대처할 수 있도록 도와줌.
서버 모니터링: 서버 하드웨어 자원 보유 현황, 상태, 자원 사용 현황을 지표로 보여줌.
애플리케이션 모니터링: JAVA 애플리케이션의 사용자 수, 자원 사용 현황, 트랜잭션 상태 등을 지표로 보여줌.
APM: Application Performance Monitoring
애플리케이션의 트랜잭션 상세 보기를 통해서 버에서 처리된 시간, SQL 처리 시간, 쿼리 정보 등을 확인 가능.
이 정보를 통해 애플리케이션 성능 분석 및 튜닝을 할 수 있음.
자세한 정보를 확인해서 튜닝한다.
DBMS 모니터링 : 데이터베이스 성능을 항상 최상의 상태로 유지할 수 있도록 도와줌
네트워크 모니터링 : 네트워크의 전반적인 상태를 분석해 안정적인 네트워크를 제공할 수 있도록 도와준다.
클라우드모니터링: 클라우드 자원 사용 현황 및 운영하는 애플리케이션 상태를 보여줌.
AWS CloudWath, Azure Monitor, GCP Cloud Monitoring
클라우드 비용 모니터링 플랫폼: 자원 사용량에 따라 과금되는 클라우드 서비스 비용을 상세히 보여줌.
하나의 클라우드 뿐만 아니라 다수의 클라우드 사용 현황을 단일 화면에서 모니터링하고 관리할 수 있음.
비용 정보를 보여주는 것에 그치지않고, 비용 최적화 방안 및 이상 비용을 탐지해서 알려줌
그런데 이런 게 다 각자 나뉘어져 있다.
너무 복잡하니까 한 사람이 전체 현황을 파악할 수 있게 옵저버빌리티가 대두되었다.
옵저버빌리티
기존 모니터링과 옵저버빌리티의 차이: 모니터링은 무엇이 잘못되었는지를 알려주지만 옵저버빌리티는
잘못된 이유를 이해할 수 있도록 함, 알려지지 않고 모르고 있던 문제를 빠르게 탐지, 조사, 해결하는 데 도움을 줌.
모니터링 - 알고 있는 위험 요소가 잘못될 가능성에 주목.
옵저버빌리티 - 예상하지 못했던 요소를 찾아내고 그 발생 원인을 설명.
- 마이크로서비스로 증가한 복잡성
- 똑같은 문제가 똑같이 반복되지 않음
- 멀티 테넌시에 대한 디버깅의 문제
- 모니터링만으로는 안전을 보장하기 어려움
옵저버빌리티를 구성하는 3가지 요소 : Metrics, Traces, Logs
Metircs : 문제가 있는가?
Traces : 어디에 문제가 있는가?
Logs 문제가 왜 발생하는가?
풀스택 옵저버빌리티 솔루션의 4가지 특징
1. 인프라부터 최종 사용자가 사용하는 애플리케이션까지 전체 스택 관장
2. 실시간으로 데이터를 수집하고 분석
3. 클라우드 기반 애플리케이션의 데이터를 수집하고 내보내는 오픈텔레메트리 지원
4. 데이터의 양이 늘어나도 문제없이 분석할 수 있도록 자동으로 확장한다.
옵저버빌리티가 알아서 탐색을 하다가, 자기가 알아서 고친다.
AI가 들어가 있다.
자동화
자동화 : 정보 기술 서비스 및 솔루션을 제공하는 데 사용되는 하드웨어, 소프트웨어, 네트워킹 구성 요소, 운영 체제(OS), 데이터 스토리지 구성 요소를 제어하기 위해 사람의 개입을 줄이면서 임무를 수행하는 기술을 사용하는 것이다.
핵심은 병렬 실행이 가능하고, 총 업무 시간을 획기적으로 단축한다는 것이다.
IaC(Infra as a Code) : 개발자가 직접 코드를 만들어 IT 인프라를 생성, 배치, 관리하는 기술
IaC를 통해 반복적인 작업을 코드로 처리함으로써 업무시간을 획기적으로 단축시키고 오류를 사전 방지 가능하다.
업무구성: Playbook이라는 템플릿을 제공해 어떤 업무를 자동화 할 것인지 손쉽게 구성 가능
ATower
Job 워크플로우 생성 : 업무 Playbook을 구한 다음, 구체적으로 어떻게 실행될 것인지 워크플로우 생성
AIOps
AIOps : AI + Ops(Operations), IT 운영의 자동화 및 관리를 위해 빅데이터 분석에 머신러닝을 적용하는 것
1. Observe(관제) : 특정 인시던트(장애 등의 사건)이 발생했을 때
현상 분석을 위한 각종 데이터를 자동으로 수집하고 분석
2. Engage(운영) : 수집된 데이터를 분석해 장애 원인을 진단하고 해결 방안을 담당자에게 자동으로 전달
3. Act(자동화) : AI가 제시한 방안을 기반으로 담당자가 직접 문제를 해결,
어떨 떄는 해결 방안까지 제시한다.
이 때 스크립트, 런북(Playbook), ARA(Application Release Automation) 활용 가능