Skip to content

2.2 유비쿼터스 언어: 정의와 효과를 이해하고 팀에서 실천해 보기 #1537

@jongfeel

Description

@jongfeel

2.2 유비쿼터스 언어: 정의와 효과를 이해하고 팀에서 실천해 보기

2.2.1 들어가기 전에

설계적 기법을 적용하지 않고도 도메인 주도 설계를 실천할 수 있습니다.
이를테면 프로젝트 초기 단계에서 유비쿼터스 언어를 도입하는 것만으로도 개발 현장에서는 충분한 효과를 얻을 수 있습니다.

도메인 주도 설계의 핵심을 ‘개발자가 자신이 모르는 영역의 과제를 도메인 전문가의 지식을 빌려 최단 거리로 소프트웨어를 구현하는 방법을 고민하는 것’이라고 생각합니다.

2.2.2 유비쿼터스 언어란?

유비쿼터스 언어의 정의

유비쿼터스(Ubiquitous)는 라틴어로, 어디에나 존재한다는 것을 의미한다.
IT 분야에서는 컴퓨터나 네트워크를 원하는 시간에 장소에 상관없이 사용할 수 있는 상태 등을 가리키는 용어이다.

<도메인 주도 설계>에서는 유비쿼터스 언어가 대표적으로 다음과 같은 용도로 사용된다고 설명하고 있습니다.

  • 시스템의 결과물인 코드를 설명한다.
  • 작업이나 기능을 표현한다.
  • 개발자와 도메인 전문가가 의사소통한다.
  • 도메인 전문가끼리 요구사항이나 개발 계획 또는 기능을 표현한다.

필자는 유비쿼터스 언어의 본질이 ‘프로젝트에서 그 팀이 해결하려는 과제를 현시점에서 관심사로 나타낸 것으로, 결국 무엇을 의식하고, 무엇을 의식하지 않을 것인가를 결정하는 사고의 틀’이라고 보고 있습니다.

COLUMN 엔지니어가 도메인 전문가의 지식을 빌려야 하는 이유는 무엇일까?

엔지니어가 도메인 전문가와 협력하면 다음과 같은 이점을 얻을 수 있다고 생각합니다.

  • 소프트웨어를 올바른 방향으로 확장할 수 있다.
  • 생략해야 할 부분과 중요하게 처리해야 할 부분이 명확해진다.
  • 도메인 전문가가 제안한 것보다 더 나은 해결책을 제시할 수도 있다.

유비쿼터스 언어의 효과

  • 팀 간 의사소통의 불일치 해소
  • 복잡한 개념의 관계성 정리
  • 도메인 이해의 첫걸음

도메인 전문가와 유비쿼터스 언어를 논의하고 결정하는 과정에서 개발자들은 도메인에 대한 이해를 높일 수 있습니다.
이것은 현시점에서 사용자에게 제공하고자 하는 가장 이상적인 소프트웨어가 무엇인지를 이해하는 것으로 이어집니다.

2.2.3 유비쿼터스 언어의 도입을 실천하기

가상의 프로젝트 사례

당신은 어떤 프로젝트의 개발 책임자입니다.
개발 중인 것은 ‘해외 특허 번역 교열 시스템’이며, 당신의 팀은 그 프로젝트의 개발을 담당하고 있습니다.

이번에 요구사항이 추가되어 ‘번역문의 제안을 번역문으로 수용하는 기능’을 구현하게 되었습니다.

서문

‘번역문의 제안을 번역문으로 수용하는 기능’을 개발할 때 ‘번역문의 제안’이 프로젝트 고유의 용어이며 이 기능의 주축이 됩니다.

오해가 없도록 언제 어디서든 쉽게 사용할 수 있는 유비쿼터스 언어로 만들어 보겠습니다.

2.2.4 유비쿼터스 언어를 만들어 보기

업무 흐름과 요구사항을 깊이 이해한다

이번 요구사항의 배경은 ‘번역문의 제안을 번역문으로 수용하는 기능’을 만들어 번역문의 제안을 수용하고 번역본을 완성할 수 있도록 하는 데 목적이 있습니다.

도메인 지식 없이 떠올릴 수 있는 용어를 나열해 본다

‘번역 제안’

‘번역문 제안’

‘번역문의 제안’의 의미를 물어보면 ‘번역문 누락에 대한 번역문의 제안’이라고 설명해줘야 할 것입니다.

도메인 전문가와 함께 문제를 분석한다

도메인 전문가와 이야기하는 동안 문제는 다음 두 가지라는 것을 알게 되었습니다.

  • 번역문: ‘문’이라는 용어가 글 전체를 나타내는 것인지 한 문장을 나타내는 것인지 애매하다.
  • 제안: 해외 특허 번역 교열 시스템에는 제안 기능이 두 가지가 있어서, 단순하게 ‘제안’이라고만 하면 어느 쪽인지를 특정할 수가 없다.

공통적인 부분과 구분해야 할 부분을 고려해서 최종적으로는 ‘번역의 누락’은 ‘누락 알림’으로, ‘부적절한 번역’은 ‘오역 알림’으로 이름을 구별했습니다.

유비쿼터스 언어의 결정

결과적으로 ‘번역문의 제안’은 ‘누락 알림 코멘트’로, ‘부적절한 번역’은 ‘오역 알림 코멘트’로 구분해 표현하기로 했습니다.

유비쿼터스 언어의 효과

  • 팀 간 의사소통의 불일치 해소
  • 복잡한 개념의 관계성 정리
  • 도메인 이해의 시작점

여기서 흥미롭게 봐야 할 대목이 ‘알림’이라는 개념의 등장입니다.
이것은 원래의 업무 흐름에는 없던 용어이지만, 유비쿼터스 언어를 결정하는 과정에서 도메인 전문가와 개발자 모두의 도메인에 대한 이해가 깊어지면서 생겨난 결과입니다.

2.2.5 유비쿼터스 언어의 장점을 전파하기

재작업을 최소화한다

유비쿼터스 언어가 없는 경우, 의사소통의 불일치에 따른 재작업을 해야 하는 경우가 발생하기 쉽습니다.

설명 비용을 줄인다

네이밍에 소요되는 시간을 절약한다

유비쿼터스 언어는 언제 어디서나 사용하는 공통 언어이기 때문에 코드 내에서도 자연스럽게 사용할 수 있습니다.
유비쿼터스 언어를 그대로 사용하면 네이밍에 들였던 시간을 절약할 수 있습니다.

2.2.6 팀원들과 함께 유비쿼터스 언어를 결정해 보기

도메인 전문가를 참여시킨다

유비쿼터스 언어를 결정하는 자리에서 도메인 전문가의 업무 지식은 매우 유용하게 활용될 수 있습니다.
도메인 전문가의 지식은 오랜 시간 동안 실무에서 검증되었기 때문입니다.

유비쿼터스 언어를 흥얼거려 본다

유비쿼터스 언어는 의사소통에 쓰이기 때문에 문장뿐만 아니라 대화할 때도 어색함이 없어야 하기 때문입니다.

다른 단어와 겹치지 않는 용어를 선택한다

다른 기능이 추가되더라도 중복되지 않는 용어를 선택하는 것이 중요합니다.

너무 오래 고민하지 않는다

처음부터 완벽하게 유비쿼터스 언어를 정해야겠다는 마음보다는 사용해 보면서 개선한다는 마음으로 유연하게 접근하는 것이 좋습니다.

결정한 유비쿼터스 언어의 사용을 장려한다

유비쿼터스 언어를 수립하는 과정에서 용어가 한번 정해지면 기존에 사용하던 용어들은 사용하지 않도록 강제하는 것이 중요합니다.

한국어와 영어를 결정한다

유비쿼터스 언어를 한국어뿐만 아니라 영어도 같이 지정해 두면 대화뿐만 아니라 프로그램 코드를 작성할 때 휠씬 쉽습니다.

2.2.7 유비쿼터스 언어 수립을 유형화하기

유비쿼터스 언어를 정하면 얼마 지나지 않아 다음과 같은 문제에 부딪히게 됩니다.

  • 유비쿼터스 언어의 명칭이 조직에 따라 달라진다.
  • 어느 범위까지를 유비쿼터스 언어로 지정해야 할지 모른다.
  • 유비쿼터스 언어 목록이 복잡해져서 유지보수가 어려워진다.

이러한 문제를 해결하려면 다음과 같은 접근법이 효과적입니다.

  • 언어로서의 아름다움보다는 사용성을 중시한다.
  • 대화에 자주 사용되는 용어만 정의한다.
  • 유비쿼터스 언어를 시각적으로 알기 쉽게 관리한다.

언어로서의 아름다움보다는 사용성을 중시한다

유비쿼터스 언어는 다양한 요건에 얽매일 수 있으므로 일정한 기준을 마련하는 것이 개인이나 조직에 따라 달라지는 것을 방지할 수 있습니다.

언어로서 아름다움이 아니라 도메인에 대한 이해를 기반으로 팀 내에서 오해가 생기지 않도록 적절한 용어를 지정했는지입니다.
이것을 판단하는 데 도움이 되는 도구가 바로 유스케이스입니다.

유스케이스란?

사용자를 주체로 했을 때 시스템으로 어떤 액션을 취할 수 있는지를 표현한 것

유스케이스 기술서란?

유스케이스 기술서란 사용자와 시스템의 상호작용에 대한 세부 사항을 상세한 문장으로 정의한 것입니다.
필자의 경험상 유비쿼터스 언어를 추출할 때는 유스케이스를 분석하는 것이 가장 효율적이었습니다.

  1. 사용자는 교열 화면에서 열기 버튼을 클릭한다.
  2. 시스템은 교열 대상인 원문과 번역문을 가져와 표시한다.
  3. 사용자는 원문에서 번역이 누락된 부분을 지정한다.
  4. 시스템은 번역 누락 알림을 작성하는 모달을 연다.
  5. 사용자는 번역문의 제안을 입력한 후 등록 버튼을 클릭한다.
  6. 시스템은 번역 누락 알림을 저장한다.
유비쿼터스 언어 후보 찾기

유스케이스 기술서를 살펴보니 ‘번역문의 제안’과 관련된 용어가 있어 밑줄을 그었습니다.

  1. 시스템은 번역 누락 알림을 작성하는 모달을 연다.
  2. 사용자는 번역문의 제안을 입력한 후 등록 버튼을 클릭한다.
  3. 시스템은 번역 누락 알림을 저장한다.
적용하거나 소리 내 말해 본다

유비쿼터스 언어를 유스케이스 기술서에 적용해 보거나 실제로 소리 내 말해 보면서 어색하게 들리지 않는지 검증합니다.

  1. 시스템은 누락 알림(Lack Alert)을 작성하는 모달을 연다.
  2. 사용자는 누락 알림 코멘트(Lack Alert Comment)를 입력한 후 등록 버튼을 클릭한다.
  3. 시스템은 누락 알림(Lack Alert)을 저장한다.

대화에 자주 사용되는 용어만 정의한다

유비쿼터스 언어는 개발자와 같은 엔지니어와 도메인 전문가가 의견을 주고받기 위한 도구입니다.
따라서 자주 사용하지 않는 용어까지 유비쿼터스 언어로 정의하여 관리하는 것은 비효율적입니다.

유비쿼터스 언어를 시각적으로 알기 쉽게 관리한다

도메인 모델 다이어그램을 통한 관리입니다.
도메인 모델 다이어그램이란 쉽게 말해서 각각의 유비쿼터스 언어에 연관성을 부여한 다이어그램입니다.

이러한 다이어그램은 개발자 간의 설계 검토 자료로도 활용할 수 있기 때문에, 다이어그램을 먼저 업데이트한 이후에 구현으로 넘어가는 방식으로 운영한다면 유비쿼터스 언어가 업데이트되어 결과적으로는 효율적인 관리가 가능해집니다.

Metadata

Metadata

Assignees

Projects

Status

Done

Relationships

None yet

Development

No branches or pull requests

Issue actions