개발은 코드 짜는거 아니야? 라고 단순하게 생각할 수 있습니다.
하지만, 코드는 도구일 뿐 그 코드를 '어떻게' '왜' 그렇게 설계했는지가 무엇보다 중요하다고 생각합니다.
소프트웨어 개발은 복잡한 과정으로, 수많은 요구사항과 기능을 충족시키기 위해 체계적인 계획과 설계가 필요합니다. 이러한 설계는 개발의 초기 단계에서부터 시작되며, UML(Unified Modeling Language)은 이러한 설계를 시각적으로 표현하고 이해하기 쉽게 도와주는 강력한 도구입니다.
UML은 다양한 다이어그램을 제공하여 시스템의 다양한 측면을 모델링하고 문제를 해결하는 데 도움을 줍니다. 이러한 다이어그램을 작성하는 과정은 개발자들이 시스템을 보다 명확하게 이해하고, 요구사항을 명세화하며, 설계 결정을 내리는 데 도움이 됩니다.
본격적인 개발을 시작하기 전에 UML을 작성하는 것은 다음과 같은 이유로 중요합니다.
요구사항 이해 : UML 다이어그램을 작성하는 과정은 개발자들이 시스템의 요구사항을 이해하고 명세화하는 데 도움을 줍니다. 이를 통해 개발자들은 시스템의 기능과 동작을 명확히 파악할 수 있습니다.
설계 결정 지원 : UML은 시스템의 구조, 동작, 상호 작용 등을 시각적으로 표현하는 다양한 다이어그램을 제공합니다. 이러한 다이어그램을 작성하고 검토함으로써 개발자들은 설계 결정을 내리는 데 도움을 받을 수 있습니다.
팀 협업 강화 : UML 다이어그램은 개발 팀 간의 의사 소통을 강화하고 협업을 촉진합니다. 시스템의 구조와 동작에 대한 시각적인 표현은 팀원들이 이해하기 쉽고 토론하기 용이하도록 돕습니다.
변경 관리 : 개발 초기에 UML을 작성함으로써 시스템의 구조와 요구사항을 명확히 이해하고 문제를 미리 파악할 수 있습니다. 이를 통해 나중에 발생할 수 있는 변경에 대비하고, 변경을 관리할 수 있습니다.
필자의 경험을 섞어서 이야기를 해보겠습니다.
저는 이미 개발 중인 어플리케이션의 중간 투입으로 백엔드 서버 개발자로 투입된 적이 있습니다. 이 경험을 통해 UML 작성의 중요성과 그 이점을 명확하게 이해하게 되었습니다.
처음에는 이미 존재하는 백엔드 서버 코드를 '뜯어보는' 과정이 저에게 주어졌습니다. 하지만 코드만으로는 전반적인 시스템 구조와 각 모듈 간의 관계를 이해하기 어려웠습니다. 그래서 UML을 활용하여 기존 코드를 분석하고 문제를 해결하는 데 큰 도움이 되었습니다.
UML을 사용하여 클래스 다이어그램을 작성하고 기존 코드의 클래스와 메서드 간의 관계를 시각적으로 파악할 수 있었습니다. 이를 통해 코드의 구조를 더 잘 이해하고, 수정이 필요한 부분을 빠르게 식별할 수 있었습니다.
또한, 유즈케이스 다이어그램을 통해 시스템의 기능적 요구사항을 명확히 이해하고, 이를 기반으로 개발해야 할 기능을 파악할 수 있었습니다. 이는 새로운 기능을 추가하거나 기존 기능을 변경할 때 개발자들 간의 의사 소통을 원활하게 해주었습니다.
또한, UML 다이어그램을 작성하는 과정에서 시스템의 설계 결정에 대해 토론할 수 있는 기회를 가졌습니다. 이는 팀 간의 협업을 강화하고, 개발자들이 서로의 의견을 공유하고 존중할 수 있도록 도왔습니다.
전체적으로 UML을 작성하는 과정은 개발 초기에 시스템을 명확하게 이해하고 문제를 미리 파악하는 데 큰 도움이 되었습니다. 또한, 기존 코드를 분석하고 이해하는 데도 많은 도움이 되었으며, 팀 간의 협업을 강화하고 효율적인 개발을 가능하게 했습니다.
UML(Uniform Modeling Language)은 소프트웨어 개발에서 시스템의 설계, 분석, 구현 등을 시각적으로 표현하기 위한 표준화된 언어입니다. UML 다이어그램은 이러한 UML 언어를 사용하여 시스템의 다양한 측면을 모델링하고 표현하는데 사용됩니다. 다양한 UML 다이어그램 유형이 있으며, 각각의 유형은 특정한 측면이나 관점에서 시스템을 나타냅니다.
UML 다이어그램은 개발 과정에서 요구사항 분석, 설계, 구현, 테스트 등 다양한 단계에서 사용됩니다. 이러한 다이어그램을 통해 시스템의 구조와 동작을 시각적으로 이해하고 문제를 해결할 수 있습니다.
개발자라고 해서 단순히 개발을 잘해서는 안됩니다.
내가 풀고자 하는 문제가 무엇인지 명확하게 이해해야하며, 어떻게 풀어야 하는지 누구보다 잘 이해해야 합니다.
그래서 저는 모든 다이어그램에 대해서 어느정도 이해도가 있어야 한다고 생각합니다.
그중에서도 백엔드 서버 개발자가 중심이 되어 작성해야 하는 UML은 다음과 같습니다.
+--------------+ +----------------+
| Customer | | Order |
+--------------+ +----------------+
| -customerId | | -orderId |
| -name | | -orderDate |
| -email |<>-------*-| -totalAmount |
+--------------+ +----------------+
Customer OrderSystem PaymentGateway
| | |
|---placeOrder()-->| |
| | |
| |---processPayment()->|
| | |
|<--orderConfirmed-| |
| | |
+-----------+ +-------------+
| Backend | | Database |
+-----------+ +-------------+
| | depends| |
| |-------->| |
| | | |
+-----------+ +-------------+
+---------------+ +---------------+
| Backend | | Database |
| Server | | Server |
+---------------+ +---------------+
| | | |
| | | |
+---------------+ +---------------+
이러한 UML 다이어그램은 백엔드 개발자가 사용하는 일반적인 유형입니다. 그러나 사용되는 다이어그램의 종류는 프로젝트나 팀의 요구 사항, 개발 방법론에 따라 달라질 수 있습니다. UML의 목표는 백엔드 개발 프로세스 전반에 걸쳐 커뮤니케이션, 설계 명확성 및 개발 효율성을 향상시키는 것입니다.
솔직히 말해서 협업하는 개발자끼리 모여서 직접 화이트보드에 그려가면서 작성을 하는게 좋긴 합니다. 소통하기 원활하고 바로바로 수정을 할 수 있습니다. 툴에 익숙해질 필요도 없고요.
하지만, 문서화를 시키는 것은 필수입니다.
그러기 위해서는 다음과 같은 도구들을 활용할 수 있습니다.
두개 다 유명한 툴이죠. 저는 UI를 짤 때 피그마를 활용해서 짭니다. 커뮤니티도 너무 잘되어 있어서 레퍼런스나 뭐.. 유용한거 찾기 너무 좋습니다.
피그잼은 유저 플로우나 개발 아키텍쳐를 주로 나타내곤 합니다.
저는 둘다 써봤는데 draw.io는 자동으로 클라우드 저장이 됩니다.
구글 드라이브와 연동시켜서 협업을 할 수도 있어서 저는 draw.io가 훨씬 좋았습니다.
그리고 starUML은 조금 .. 불편했습니다. 설명이 불친절하다고 해야하나..
암튼 draw.io 추천드립니다.
지금까지 UML에 대해 알아봤습니다.
본격적으로 개발하기 전, UML 설계하여 보다
1. 효율적이고
2. 유지보수가 용이하며
3. 협업하기 좋은
개발을 진행하기 바랍니다.