Post

구름 commit 우리가 함께 성장하는 방법(2023-12-20)

구름 commit 강연을 바탕으로 애자일, 소프트웨어 장인정신, XP 실천법에 대해 정리한 후기입니다.

아래 글은 제가 2023년 12월 20일 구름 commit 프로그램을 참석한 뒤 류석문님의 강의를 토대로 개인적으로 쓴 글입니다.

소프트웨어 개발 경험과 애자일 실천, 그리고 소프트웨어 장인정신

폭포수 모델의 한계와 애자일 개발 방법론

전통적인 폭포수 모델은 논리적으로 완벽해 보이지만 변화가 큰 현실을 반영하지 못한다는 단점이 있습니다. 이에 대한 대안으로 등장한 애자일 개발 방법론은 상황에 맞춰 끊임없이 조정하고 점진적으로 구현하는 방식을 제시합니다. 하지만 애자일 방법론 역시 완벽한 해결책은 아닙니다.

애자일 실천의 현실과 문제점

애자일 방법론을 실천하는 과정에서 데일리 스탠드업, 회고, 플래닝 등이 형식만 남아 실질적인 문제 해결보다는 눈치 보기와 절차 자체에 치중하게 만드는 경우가 많습니다. 이렇게 되면 애자일이 지향하는 가치가 훼손되고 개발 효율도 떨어집니다.

소프트웨어 장인정신으로 기준 상향

애자일의 한계를 극복하고 더 나은 소프트웨어를 개발하려면 ‘소프트웨어 장인정신’이 필요합니다. 단순히 작동하는 소프트웨어를 넘어 ‘잘 만들어진 소프트웨어’를 추구하고 변화에 대응하는 것을 넘어 ‘꾸준히 가치를 더하는 것’을 목표로 해야 합니다. 개인과 상호작용을 넘어 ‘전문가 커뮤니티’를 형성하고 고객과의 협업을 넘어 ‘생산적인 파트너십’을 구축하는 것도 마찬가지입니다.

익스트림 프로그래밍 실천법, XP Practices

XP(eXtreme Programming)는 애자일 개발 방법론 중 하나로(켄트벡의 저서), 소프트웨어 개발 과정에서 실질적인 효과를 얻기 위한 구체적인 실천법을 제시합니다. XP Practices는 개발팀이 효과적으로 협업하고 고품질의 소프트웨어를 빠르게 개발하며 변화하는 요구사항에 유연하게 대응할 수 있도록 돕는 핵심 원칙입니다.

핵심 XP Practices는 다음과 같습니다.

  1. 테스트 주도 개발(Test-Driven Development, TDD)은 개발자가 실제 코드를 작성하기 전에 테스트 코드를 먼저 작성하는 방식입니다. 개발 초기 단계부터 오류를 발견해 수정할 수 있으니 코드 품질이 올라가고 유지보수도 쉬워집니다.

  2. 리팩토링(Refactoring)은 코드의 기능을 변경하지 않으면서 내부 구조를 개선하는 작업입니다. 꾸준히 리팩토링하면 코드가 읽기 좋아지고 고치기도 쉬워지며 기술 부채가 줄어 장기적인 개발 생산성까지 높아집니다.

  3. 단순한 설계(Simple Design)는 현재 요구사항을 충족하는 가장 간단한 방법으로 소프트웨어를 설계하는 원칙입니다. 불필요하게 복잡한 부분을 걷어내고 변경에 유연하게 대응하는 설계를 유지하면 개발 속도가 붙고 품질도 함께 나아집니다.

  4. 짝 프로그래밍(Pair Programming)은 두 명의 개발자가 하나의 컴퓨터로 함께 코드를 작성하는 방식입니다. 실시간 코드 리뷰와 지식 공유가 자연스럽게 이루어지고 문제 해결 능력도 길러져 팀워크와 협업이 단단해집니다.

    TDD , Refactoring, Simple Design, Pair Programming 를 할 줄 알아야 개발자라고 하시는 류석문님…

  5. 코딩 표준(Coding Standard)은 팀 전체가 일관된 스타일로 코드를 작성하도록 규칙을 정의하는 것입니다. 코드를 읽고 고치기 쉬워지는 것은 물론 팀원 간 협업도 매끄러워집니다.

  6. 지속 가능한 속도(Sustainable Pace)는 개발팀이 장기적으로 생산성을 유지할 수 있는 적절한 작업 속도를 의미합니다. 과도한 야근이나 무리한 일정을 지양하고 팀원들의 건강과 워라밸을 존중해 지속적인 성장을 도모하자는 것입니다.

  7. 메타포(Metaphor)는 개발팀이 소프트웨어 시스템을 이해하고 설명할 때 공통된 비유나 은유를 사용하는 것입니다. 팀원 간 의사소통이 원활해지고 시스템 이해도가 높아져 효과적으로 협업하게 됩니다.

  8. 지속적인 통합(Continuous Integration)은 개발자가 작성한 코드를 자주 통합하고 테스트하는 과정입니다. 통합 과정에서 발생하는 문제를 조기에 발견하고 해결해 개발 속도와 품질을 동시에 끌어올립니다.

  9. 공동 코드 소유(Collective Ownership)는 모든 팀원이 모든 코드에 대한 책임을 공유하는 원칙입니다. 특정 팀원에게 의존하는 일을 막고 팀 전체의 역량을 살려 문제를 해결하며 코드 품질을 높입니다.

  10. 전체 팀(Whole Team)은 개발에 필요한 모든 역할(개발자, 테스터, 분석가, 고객 등)을 팀에 포함시키는 것입니다. 팀원끼리 긴밀하게 협업하면서 요구사항을 정확하게 이해하고 빠르게 변화하는 환경에 유연하게 대응할 수 있습니다.

  11. 계획 게임(Planning Game)은 팀 전체가 참여해 개발 우선순위를 정하고 작업량을 추정하는 활동입니다. 활발하게 논의하는 사이 서로에 대한 이해가 깊어지고 현실적인 계획이 세워져 개발 목표 달성도 한결 수월해집니다.

  12. 작은 릴리스(Small Releases)는 개발된 기능을 작은 단위로 자주 배포하는 방식입니다. 사용자 피드백을 빠르게 반영하고 문제가 생겨도 신속하게 대응할 수 있어 개발 위험은 줄고 사용자 만족도는 올라갑니다.

  13. 고객 테스트(Customer Tests)는 실제 사용자가 직접 소프트웨어를 테스트하고 피드백을 제공하는 과정입니다. 사용자의 요구사항을 정확하게 파악하고 실제 사용 환경에서 발생하는 문제를 조기에 발견해 소프트웨어 품질을 높여 줍니다.

좋은 개발자란 뭘까요?

좋은 개발자는 뛰어난 코드 작성 능력과 논리력을 기반으로 협업과 공유에서 시너지를 냅니다. 깊이 있는 도메인 지식을 갖추고 빠른 피드백으로 끊임없이 성장하며 실천력으로 아이디어를 현실로 만듭니다.

협업의 중요성과 어려움 극복

협업은 개발 효율을 높이고 더 나은 결과물을 만들어내는 데 필수적입니다. 하지만 인간은 본능적으로 자기중심적인 사고를 하기 때문에 협업 과정에서 어려움을 겪기 마련입니다. 이를 극복하려면 상대방의 입장에서 생각하고 열린 마음으로 소통하며 서로의 의견을 존중하는 자세가 필요합니다.

결론

소프트웨어 개발에서는 단순히 기술적인 문제를 해결하는 일을 넘어 사람과의 상호작용, 학습과 성장, 협업이 만드는 시너지가 중요합니다. 소프트웨어 장인정신을 바탕으로 끊임없이 배우고 성장하며 동료들과 함께 더 나은 소프트웨어를 만들어나가는 것이 진정한 개발자의 길이라고 생각합니다.

류석문님의 책

  • 프로그래머로 산다는 것
  • 프로그래머 철학을 만나다
  • 리더의 생각
  • 리더의 세상읽기

나의 생각

류석문님이 당시에 쏘카 CTO 직책을 맡고 계셨었는데, 개발이란 업을 하시면서 얼마나 많은 생각을 하셨을지 감히 짐작도 안갈만큼 깊이 있는 강의 내용이었다고 생각합니다. XP Practices나 에자일이나 그 단어가 중요한 것이 아니라 그 안에 담긴 내용이 더 중요하다고 느껴졌습니다. 저도 좋은 동료와 함께 좋은 동료가 되어 더 나은 소프트웨어를 만들어가는데 일조하는 구성원이 되었으면 좋겠고, 실질적으로 여태까지 쌓은 경험들을 공유하는 것부터 시작해보려 합니다.

This post is licensed under CC BY 4.0 by the author.