시스템개발 및 운영에서 팀의 구조는 매우 중요하다.

프로젝트 유닛

프로젝트 유닛은 하나의 시스템을 개발하는 최소 단위이다.

  1. 프로젝트 매니저 : 요구사항을 각 스크럼 팀에 분배하고 관리하며 다른 팀 간의 조율, 프로젝트 관리에 관련한 작업을 수행한다.
  2. 프로덕트 매니저 : 고객으로부터 시스템에 대한 요구사항을 수집하고 분석하여 시스템에 대한 요구사항을 정의하고 우선순위를 결정한다.
  3. 아키텍트 : 전체 시스템에 대한 구조를 설계한다.
  4. 스크럼 팀 : 하나의 스크럼 팀은 마스터를 포함하여 4~7명 정도로 구성된다.
  5. 스크럼 마스터 : 프로젝트 매니저로부터 받은 요구사항을 개발자에게 나눠주고 관리하는 역할을 한다.
  6. 개발자 : 마스터로 부터 받은 태스크를 구현한다.
  7. 테스트 : 해당 스크럼 팀에서 개발한 코드나 기능에 대해서 테스트를 진행한다.
관리 조직
  1. 프로그램 매니저 : 필수적으로 필요하며, 여러 개의 프로젝트를 동시에 관리하며 커뮤니케이션과 서비스에대한 운영, 고객지원, 판매 등 전반적인것을 관리
  2. 수석 프로덕트 매니저 : 팀 규모가 클 경우 존재한다.
  3. 엔터프라이즈 아키텍트 : 팀 규모가 클 경우 분업의 용도로 사용하는데 전체 시스템에 대한 전체적인 구조와 비느니스와 개발 간의 기술적인 소통 채널이 된다.
공통팀
  1. 빌드 엔지니어 : 전체적인 빌드 배포를 담당하는 엔지니어로 빌드 환경과 테스트 자동화 환경을 구축한다.
  2. 개발 환경 관리 엔지니어 : 개발환경에 필요한 전반적인 부분을 관리한다.
  3. 성능 엔지니어 : 전체 시스템에 대한 통합테스트와 시스템 테스트 집중관리한다.
  4. 프로젝트 관리 오피스 : 각 프로젝트 진행 상황을 모니터링하고 일정을 관리한다.
운영팀
  1. 인프라 엔지니어 : 하드웨어 장비에 대한 설치, 설정과 운영 담당
  2. 솔루션 엔지니어 : 미들웨어 운영
  3. DBA : 데이터베이스 운영자

계속해서 모니터링을 해야하므로 24/7 운영을 한다.

  • Hand Over : 근무 시간이 끝난 후에 다음팀에게 인수인계 하는것
서비스 운영

관리자 : 서비스에 대한 관리를 한다.

고객지원 : 기술지원이나 고객 불만 접수 같은 고객 지원 서비스를 담당한다.

 

 

이 글은 코드프레소 DevOps Roasting 코스를 수강하면서 작성한 글입니다.

* 스크럼(Scrum)은 프로젝트관리를 위한 상호,점진적 개발방법론이며, 애자일 소프트웨어 공학 중의 하나이다.

소프트웨어 개발은 애자일 개발 방법론을 기반으로 진행되어 진다. 이 방법론의 특징은 협업을 중요시하며 태스크를 관리하는 기법을 중심으로 진행된다. 따라서 이런 태스크를 관리하는것이 매우 중요한데 이를 도와주는 대표적인 태스크 관리 시스템으로 JIRA가 있다.

JIRA : 스크럼 방법론을 기반으로 태스크 관리 도구이며 프로젝트를 관리할 수 있게 하는 도구다.

주요기능 정리 

JIRA를 사용하기 전에 먼저 엑셀을 통해서 구현하고자 하는 서비스의 주요 기능을 정의 하여 팀원들과 공유하여 리뷰하면서 수정하며 정리한다.

이때, 위와 같이 두 단계로 나눠서 Feature(기능)을 기술하는데 기능 1에선 일반적으로 생각할 수 있는 기능을 기술하고 기능 2에서는 상세 기능을 정의하는데 이런 기능 리스트를 정의할 때 4가지중요한 점이 있다.

  1. “As a {user}, I want to do {something}나는 {사용자}로서 {무엇을}하고 싶다.” 형태의 스토리 기술 방법을 사용하여 서술한다.
  2. 스토리 : 전체적으로 기능이 스토리 형태로 흐름을 가져가야 순서대로 기능을 기술할 수 있고 이해하기 편하며, 조금 더 빠짐없이 리뷰가 가능하다.
  3. 테스트 가능 : 각 기능은 테스팅이 가능한 수준으로 디테일하게 서술되어야한다.
  4. 디자인 가능 : 디자이너가 기능에 있는 스토리에 따라서 UX를 만들 수 있는 정도로 충분히 기술되어야 한다.
  • UX 는 User eXperience로 쉽게 말해 사용자 경험을 의미합니다. 어떤 서비스나 기능을 제공할 때 사용자의 경험을 분석하여 보다 편하고 효율적인 방향으로 진행 될수 있도록하는 과정과 결과이다.
JIRA Agile Board(애자일 보드)

엑셀로 작성해둔 기능들을 JIRA에 기능들을 등록하기 전에 Agile Board를 알아야 한다.

스크럼 애자일 방법론을 보면 ‘스크럼 보드’라는 것이 소개되어 있는데 해야 할 일(To Do), 진행중인 일(In Progress), 완료된 일(Complete)로 진행 단계에 맞추어 일을 나누는 것이다. 이러한 스크럼 보드를 웹 형태로 만들어 놓은 것이 JIRA의 애자일 보드이다. 이렇게 단계별로 나누어서 일을 관리하게 되면 각자 해야할 일들을 작성 해 두어 자세한 기능관리가 가능하다.

애자일 보드는 팀원과의 협력을 도와주는 서비스 이므로 팀원들을 초대한다.

이름에는 본인이 진행하고자 하는 프로젝트의 이름을 적는다.

이렇게 하면 빈 애자일 보드를 생성할 수 있다.

이슈의 종류

JIRA에 입력되는 해야 할 일 기능들을 ‘이슈’라고 정의 하는데 이슈에는 몇가지의 타입이 존재한다.

  1. Epic : LV1 기능으로 주요 기능들을 중심으로 정의한다.
  2. Story : 사용자가 직접 사용하는 기능이다.
  3. Story Point : 개발에 걸리는 시간이나 난이도를 지정한다.
  4. Chore : 사용자가 이용하는 기능이 아닌 개발자만 개발해야하는 내용을 작성한다.
  5. Task : 해야하는 일 이지만 개발과는 다른 업무 ( 회의, 기획, 문서작성 등 )
  6. Bug : 테스트 엔지니어에 의해서 테스팅 되고 버그로 리포팅된 타입이다.
  7. Sub Task : 스토리나 초어를 개발하는 과정에서 세부적인 업무의 할당이다. 이러한 세부 업무의 할당은 개별 개발자에게 할당되며 0.5에서 2일 정도에 끝날 수 있는 테스크가 할당이 되어야 한다.
에픽 등록

홈 화면에서 ‘c’를 누르면 이슈 만들기 창이 뜨는데 이슈 유형을 에픽으로 수정하여 이름과 설명 요약을 작성하면 된다.

그러면 이와 같이 에픽이 만들어진것을 확인할 수 있다.

이슈 등록과 매핑

Priority : 해당 이슈가 얼마나 중요한지를 나타내는 척도로

  1. Blocker : 해결되지 않으면 프로젝트가 진행될 수 없는 경우
  2. Critical : 프로젝트 진행은 가능하나 해결하지 않으면 정상적인 서비스 개발이 어려운 경우
  3. Major : 꼭 개발해야 하는 경우
  4. Minor : 개발은 해야 하나 없어도 상관 없는 경우
  5. Trivial : 있으나 없으나 크게 상관 없는 경우

릴리즈 버전 정의와 맵핑

릴리즈 : 작동 가능한 서비스 가능한 상태로 만드는 것, 운영 서버로 올리는 것

요즘 애자일 에서는 ‘쇼트 릴리즈’ 방식을 사용하여 짧은 주기로 릴리즈 한다. 보통 이상적인 경우 스프린트 하나가 끝나고 난 후 릴리즈를 하게 된다.

어떠한 기능을 언제 릴리즈 할 것인가를 정의 하는 것을 ‘릴리즈 계획’이라고 하는데 JIRA는 이 기능을 지원하고 있다.

스프린트 계획

스토리 포인트 부여하고 스프린트를 생성하고 기간을 설정한다.

스프린트 시작,진행

작업의 상태 설정

  • 코멘트를 이용한 진행 상태 추가
  • 해당 이슈를 해결하는데 필요한 내용이나 무슨 일을 했는지에 대한 로그를 남기는 것으로 커뮤니케이션 용도로 사용한다. (알람-이메일)

Version Control System 연동을 이용한 이슈별 코드 변경 추적 : JIRA는 Git 에 커밋 할 때 해당 이슈에 #을 넣어서 커밋하게 되면 해당 이슈에 관련된 소스코드 변경 부분을 링크로해서 반영 부분을 보여준다.

JIRA의 확장

JIRA는 개인별 혹은 프로젝트별로 대시보드를 구성해서 현황을 쉽게 확인 할 수 있다.

  1. 사용자별 이슈 할당 현황 : 팀원별로 할당된 이슈의 수를 모니터링 하여 적절하게 이슈를 분산해서 배치할 수 있다.
  2. Block, Critical, Major 이슈 개수 : 중요도가 높은 이슈들은 항상 모니터링하는 것이 좋다.
  3. 신규생성 대 해결되는 이슈 그래프 : 스프린트 끝으로 갈수록 이슈가 생성되는 그래프를 해결되는 이슈 그래프가 쫒아가야한다.
  4. 나에게 할당된 이슈
  5. 내가 모니터링하고 있는 이슈
  6. 다른 프로젝트의 진척 상황 : 프로젝트 매니저의 경우 여러개의 프로젝트의 진척사항을 모니터링 하는것이 좋다.

모바일 클라이언트 : 모바일을 통한 JIRA의 사용 (코멘트, 위치 서비스)

가용성에 대한 추가적으로 고가용성을 위한 Master-Slave Architecture에 대한 내용이다.

Master-Slave Architecture는 기본적으로 위와 같은 구조로

  1. Master는 Read/Write가 가능하고 Slave는 Read만 가능하다.
  2. 하나의 Master에 여러개의 Slave가 붙을 수 있다.
  3. Master는 변경 사항을 기록하고 그 결과는 Slave에 전달한다.

대표적으로 3가지의 규칙에 맞추어 작동하는데 이러한 Master-Slave구조가 고가용성을 위한 구조가 되는 이유는 바로 Sentinel의 역할 때문이다. 대표적인 Sentinel의 역할이 3가지 있다.

  1. 모니터링 : Sentinel은 Master와 Slave가 제대로 동작하는지 지속적으로 감시한다.
  2. 자동 장애조치 : 운영중에 Master가 다운됐을 경우, Slave만 작동하게 되어 Read 동작만 수행할 수 있다. 따라서 Downtime이 증가하게 되고 가용성은 떨어지게 된다. 이때, Master가 복구되지 않은 경우 관리자의 간섭 없이 Slave를 Master로 승격 시켜주고 기존의 Master는 Slave로 강등되어 복구 후에 새로운 Master에 대한 Slave의 기능을 수행하게 된다.
  3. 알림 : Sentinel은 감시하고있는 인스턴스들이 failover됐을때 client에게 알리거나 관리자에게 이메일 또는 SMS로 알릴 수 있다.
  • 참고
  • 다운 판단의 기준은 default 3000ms로 30초이며 파라미터 수정할 수 있다.
  • Sentinel의 구성 방식 : Slave의 수보다 많은 홀수의 갯수로 구성된다.
  • Quorum 값을 만족하는 Slave가 Master로 승격할 수 있다.

 

이 글은 코드프레소 DevOps Roasting 코스를 수강하면서 작성한 글입니다.

 

 

 

가용성은 서버와 네트워크, 프로그램 등의 정보 시스템이 정상적으로 사용 가능한 정도를 말한다.

 

가용성을 구하는 식

Uptime : 정상 사용 시간

Downtime : 정상 사용 불가 시간

Uptime + Downtime : 전체 사용 시간

 

전체 사용 시간 중에 정상 사용시간이 얼마만큼인가를 나타내주는 척도로 이 값이 높은 것을 고가용성이라고 한다.

IT관점에서의 가용성은 요구 기능을 서비스 중단 없이 성능을 유지하며 요구 시간동안 성능을 유지하는 정도이다.

 

 

이 글은 코드프레소 DevOps Roasting 코스를 수강하면서 작성한 글입니다.

+ Recent posts