Tech story/Cloud

DevOps의 친구 DevTools! - ALM (1/2)

KT Cloud Crew 2020. 11. 9. 09:39

 

 여러분은 팀 내에서 하나의 서비스를 개발할 때 어떤 일정 관리 툴, 어떤 개발 환경 툴, 어떤 형상 관리 툴, 그리고 어떤 빌드 자동화 시스템을 사용하시나요?

 

 하나의 서비스를 완성하기까지의 과정에서 굉장히 다양한 개발 툴들이 사용됩니다. 특히 참여 인원이 많은 큰 프로젝트의 경우에는 의사소통이 더 중요해지는데, 이 툴들이 통합되지 않고 따로 동작한다면 소통이 힘들어지게 됩니다.

 

 여기서 ALM이 큰 역할을 하게 됩니다.

 

 

ALM이란 무엇인가요?

 

ALM이란, Application LifeCycle Management의 줄임말으로, 애플리케이션을 구상하기부터 수명 종료까지의 전 과정에서 사용되는 툴이나 프로세스를 관리하기 위한 접근 방법입니다. 한 마디로 개발 전반의 과정을 가시화할 수 있는 솔루션이라는 것이죠. 개발의 각 과정에서 사용되는 전문화된 도구들을 서로 유기적으로 연동하여 각 과정간의 괴리가 없도록 도와주는 역할을 합니다.

 

 

 

ALM이 왜 필요한가요?

 

 앞서 간단하게 말씀드렸지만, ALM을 적용하지 않고 프로젝트를 진행한다면 어떤 문제가 발생할까요?

 

1. 생산성 저하

 각 툴 간의 콘텐츠 공유가 제대로 이루어지지 않아, 생산성이 떨어질 수 있습니다.

 예를 들어 애플리케이션 라이프사이클 중 이슈 관리와 소스 코드 관리 시스템이 있습니다. 소스 관리 시스템에서 어떤 이슈에 대해 commit을 하였을 때, 이슈의 상태 변화에 대해 수기로 기록을 해 줘야 한다면 같은 일을 두 번 반복하는 셈이 될 것입니다.

 

2. 프로세스 일관성 유지의 어려움

 다양한 단계에서 각기 다른 툴을 사용하면 규정이나 작성 방법이 모두 다르기 때문에 통일성을 가지기 쉽지 않습니다.

 

 이러한 문제를 해결하기 위해 ALM이라는 개념이 등장하게 된 것입니다.

 

 

 

 

ALM의 구성 요소와 구성도

 

애플리케이션 라이프사이클 프로세스를 각 프로젝트의 특성마다 다양한 방식으로 나눌 수 있는데, 대표적인 방법으로 이슈 관리, 개발 환경, 소스 관리 시스템, 빌드 테스트 자동화 시스템으로 크게 나눠보았습니다. 각 구성 요소에 대해 간단하게 살펴볼까요?

 

1. 이슈 관리 툴

 이슈 관리 툴은 일정, 우선 순위, 위험도와 같은 프로젝트의 전체적인 워크로드를 관리합니다. 주요 마일스톤을 관리하여 작업 진척 사항을 모니터링 할 수 있으며, 작업별로 우선순위 및 위험도를 지정해서 리스크를 관리합니다. 이에 대한 대표적인 툴로 Redmine이나 JIRA를 들 수 있습니다.

 

2. 개발 환경 툴

 SonarQube, PMD, jUnit으로 대표되는 개발 환경 툴은, 표준 개발 환경을 통합해주고 테스트 커버리지 및 코딩 규칙을 검사하는 등 코드 품질 관리의 역할을 해 주는 툴입니다.

 

3. 소스 관리 시스템

 소스 관리 시스템은 소스 코드를 저장하고, 이 코드에 대한 변경을 체계적으로 관리, 제어해주는 툴입니다. Git과 SVN 시스템을 예로 들 수 있습니다. 많이 쓰이는 Git 원격 저장소 서비스에는 Github, Gitlab, Bitbucket이 있습니다.

 

4. 빌드 테스트 자동화 시스템

 빌드 테스트 자동화 시스템은 자동으로 테스트를 해주며 통합 빌드를 해주는 역할을 하는데요, 대표적인 툴로 Jenkins나 Travis CI를 들 수 있습니다.

 

 

 

 이를 토대로 유기적으로 연결되어 있는 ALM의 전체 구조를 살펴보자면 아래 그림과 같습니다.

 

 

 

 

 

ALM을 어떻게 구현, 사용할 수 있나요?

 

프로젝트 진행에 있어 생산성을 높여주고 일관성을 유지하도록 도와주는 ALM 방법론을 어떤 방식으로 적용할 수 있을까요?

 

 

 우선 직접 시스템을 구축하는 방법이 있습니다. 개발 도구들을 연동하여 좋은 ALM 시스템을 구축하는 작업이 필요합니다. 이 때 성공적인 ALM을 구현하기 위해 다양한 요소들을 고려해야 합니다.

 

  • 각 프로세스에 알맞는 툴을 선택해야 합니다. 개발 비용에 맞는 적절한 툴을 선택하는 것도 중요하며, 추후에 다른 툴을 추가할 수도 있으므로 연동과 관련된 부분도 고려해야 합니다.
  • 프로세스끼리 물 흐르듯이 연결되도록 연동하는 작업이 필요합니다. 각기 다른 툴을 쓰더라도, 하나의 프로세스에서 진행되는 듯한 느낌을 줘야 합니다.
  • 한 번에 모든 영역을 커버하려 하지 말고, 단계적으로 ALM을 적용해나가야 합니다. 팀의 성숙도에 따라 하나씩 진행해야 하며, 한 번에 전체를 변경했을 때 구성원들에게 큰 혼란을 불러일으킬 수 있습니다.

 

 

 위의 사항들을 모두 고려하며 ALM을 직접 구축하기에는 꽤나 많은 노력이 필요합니다. 프로세스 툴을 구축하는 과정, 각 툴을 연동하는 과정 모두 쉬운 일이 아닙니다. 부차적인 요소가 아닌 서비스 개발에만 집중하고자 ALM을 사용하는 것인데, 이 시스템을 만드는 데에 시간을 쏟는 것은 역설적인 일입니다. 따라서 많은 회사들에서 이미 구현되어 있는 통합 ALM 서비스를 제공하고 있습니다.

 

 KT 역시 ALM 상품을 출시 예정에 있습니다. 이슈 관리를 위한 Redmine, 형상 관리를 위한 Private Git 서비스인 Gitlab, 빌드 자동화 테스트를 위한 Jenkins를 클릭 몇 번만으로 구축하고 통합하여 사용할 수 있습니다.

 

 

 

마무리

 다음 컨텐츠로 KT의 ALM 서비스를 소개하도록 하겠습니다.

 

 

관련글

CI/CD 툴과 관련된 내용이 궁금하다면? ㅡ  DevOps의 친구 DevTools! - CI/CD(1/3) 포스트를 확인해 주세요.