본문 바로가기
전공 공부/소프트웨어공학

[소프트웨어공학] DevOps, XP (eXtreme Programming)

by Yujin Chang 2024. 10. 17.

DevOps (Development + Operations)

정의

소프트웨어 개발(Development)과 운영(Operations)을 통합해 개발 속도와 배포 품질을 향상시키는 방법론이자 문화. 자동화, 협업, 지속적 통합/배포(CI/CD)를 핵심으로 하여, 소프트웨어의 개발부터 배포, 운영, 유지보수까지의 전 과정을 효율적으로 관리함.

핵심 개념

  1. 협업: 개발팀과 운영팀이 긴밀히 협력하여 팀 간의 장벽을 허물고, 서로 다른 목표를 공유하면서 함께 소프트웨어를 개발하고 배포함. 서로 다른 팀들이 공통의 목표를 위해 일하는 문화를 조성하여, 커뮤니케이션을 강화하고 문제를 빠르게 해결함.
  2. 자동화: 코드의 빌드, 테스트, 배포, 모니터링 등 여러 단계를 자동화함. 자동화를 통해 오류를 줄이고, 반복적인 작업에 소요되는 시간을 절약하여 배포 속도를 높임.
  3. 지속적 통합(CI), 지속적 배포(CD)
    • CI(Continuous Integration): 개발자가 코드를 자주 커밋하여 중앙 저장소에 통합하고, 이를 자동으로 빌드하고 테스트하여 통합 과정에서 발생하는 문제를 조기에 발견함
    • CD(Continuous Delivery/Deployment): CI를 통해 검증된 코드를 자동으로 운영 환경에 배포하여 고객에게 빠르게 새로운 기능이나 수정 사항을 제공함
  4. 인프라 자동화: 서버, 네트워크, 데이터베이스와 같은 인프라를 코드로 정의하고 자동화하여, 인프라 환경을 일관되게 관리하고 신속하게 배포함
  5. 모니터링 및 피드백: 소프트웨어가 운영되는 동안 성능, 에러, 사용자 활동 등을 실시간으로 모니터링하여 문제가 발생하면 빠르게 대응할 수 있도록 함
  6. 빠른 배포 주기: DevOps의 핵심 목표 중 하나는 소프트웨어를 더 빠르게 고객에게 전달하는 것. 이를 통해 기업은 경쟁력 있는 소프트웨어를 신속하게 출시하고, 시장의 변화에 빠르게 대응할 수 있음.

XP (eXtreme Programming)

정의

고품질 소프트웨어를 신속하게 개발하고 변화하는 요구사항에 민첩하게 대응하는 것을 목표로 하는 애자일 방법론. 엄청나게 빠른 속도로 애자일을 돌리는, 애자일의 극단적인 버전이라고 봐도 무방함.

핵심 개념

  • 작은 규모의 자주 릴리즈되는 시스템을 통해 점진적 개발을 지원
  • 고객 참여는 팀과의 전일제 고객 참여를 의미
  • 페어 프로그래밍을 통해 코드에 대한 집단 소유권을 가짐
  • 정기적인 시스템 릴리즈를 통해 변화를 지원
  • 지속적인 리팩토링을 통해 단순성 유지

요즘은 XP 자체는 널리 쓰이지 않지만, XP의 주요 기법들은 여전히 다른 소프트웨어 개발 방법론에서 자주 사용되고 있음.

XP 주요 기법

  1. 사용자 스토리 작성: 소프트웨어가 어떤 기능을 수행해야 하는지를 간단한 이야기 형식으로 작성하는 기법. User Requirements를 명확히 하기 위한 방법으로 많이 사용됨
  2. 리팩토링: 코드의 외부 동작을 바꾸지 않으면서 내부 구조를 개선하는 기법
  3. TFD (테스트 우선 개발): 실제 코드를 작성하기 전에 먼저 테스트 코드를 작성하는 방법. 테스트를 제일 중요시하여 개발.
  4. 페어 프로그래밍: 두 명의 개발자가 한 컴퓨터에서 함께 코드를 작성하는 방법. 한 명은 코드를 작성하고 다른 한 명은 그 코드를 검토하면서 실시간 피드백을 주는 식