> ## Content Index
> Fetch the complete content index at: https://www.popit.kr/llms.txt
> Use this file to discover other available public pages before exploring further.

# 함께 그리고 가볍게 하는 소프트웨어 설계의 즐거움
- URL: https://www.popit.kr/joy-of-lightweight-collaborative-software-design/
- Published: 2017-02-06T00:09:53.000Z
- Updated: 2017-11-20T01:01:55.000Z
- Author: 안영회
- Tags: #소프트웨어, 설계, UML, #아키텍처 및 설계

어느날 2층 사무실로 들어오는데 친한 두 개발자가 열띤 이야기를 하고 있었다. 흥미 있어 보여 안그래도 끼여들려는 찰나에 그들도 마침 내 의견을 물었다. 벽에 붙은 화이트보드에 아래 그림과 같은 것을 이제 막 쓰면서 새로 개발에 참여한 개발자 [김형준](https://www.popit.kr/author/babokim/)님이 기존 개발자 [장재휴](https://www.popit.kr/author/jaehue/)님에게 JSON 형식 데이터 필드의 현재 뜻을 묻다가 '모호한 용어'에 함께 개선하고 있는 상황이었다. J는 현재 상황과 함께 본인이 신뢰하는 다른 곳에서 쓰는 표현을 두 개 컬럼으로 구분하여 파란색으로 썼다.

![popit_design_board](https://www.popit.kr/content/images/wp/2017/02/popit_design_board-600x397.jpg)

열띤 분위기가 나를 쉽게 몰입하게 했고, 유심히 듣다가 평소 관심있던 부분만 의견을 내놓았다. 배운게 도둑질(?)이라고 UML 표기를 썼다. 위 그림 우측 상단 클래스도를 그리면 설명했는데 글로 쓰면 다음과 같다.

- Price라는 객채(혹은 개념)를 두자. 추상적인 개념이고 실체(구체적인 객체 혹은 JSON 필드명)는 ListPrice와 SalePrice로 '정가'와 '판매가'로 구분해서 사용하자.(UML 상속 활용)
- SalePrice는 discount(할인액)을 포함하며, SalePrice 없는 discount는 존재할 수 없다. (UML의 composition 관계에 해당)
- 상품의 SalePrice를 만드는 행위인 Offer를 통해 SalePrice와 discount는 만들어지고 수정된다.

두 개발자가 UML에 능통한지 어떤지는 모르지만, 그리면서 위와 같이 설명했기에 쉽게 이해했다. 그리고, 자신들의 의견을 말했다. 우리 셋은 모두 공감하고 상쾌한 기분으로 마무리를 했다. 내 입장에서는 고작 5\~10분을 투자하고, 개발에 작은 기여나마 할 수 있었고 공감 과정에서 얻은 기쁨은 놀라울 정도였다. 놀라운 상쾌함의 가장 큰 이유는 아마도 **열렬히 일하는 이들과 함께 하는 과정**에서 비롯된 것이라 믿는다. 그리고 두번째는 **자연스러운 흐름(flow)속에서 적기에 딱 필요한 만큼만 하는 가벼운(lean) 설계 행위**였기 때문이다. (개발도 하기 전에 억지로 짜내기 하는 식의 설계와 대비하면 쉽게 이해할 수 있다.)

이 경험으로는 즐거움이 부족했는지, [김형준](https://www.popit.kr/author/babokim/)님과 나는 메신저로 또 다른 업무 용어 개선에 대해 협업을 시도했다. 아래 채팅 전에 적립금에 대한 용어로 points를 쓰기로 정했는데, 추가하고 사용하는 함수(메소드) 명으로 어떤 것이 적합한지 논의가 약간 미흡했었다.

![포인트 추가와 쓰기에 적합한 용어](https://www.popit.kr/content/images/wp/2017/02/popit_design_chat01-538x600.png)

포인트 추가와 쓰기에 적합한 용어

대화의 배경은 K가 '네이티브가 옆에 있으면 바로 물어서 해결할텐데...'라며 관성적 영어 작명을 피하려는 노력을 하기에 내가 꿩 대신 닭(?)으로 나선 상황이었다. 네이티브 대신 믿을만한 사전(위키피디아)을 찾아본 것인데 추가 하나 더 얻었다. points를 현금 대신 쓰게 하는 경우도 있지만, 일반적인 상품이 아닌 증정품으로 바꿔주는 경우에는 다른 단어가 적합할 수도 있다는 포착이다. 아직 그 단계로 코드가 발전하지 않아 확언할 수는 없지만, 만일 의미를 정확히 하려는 노력(일종의 integrity 확보)없이 그냥 포인트 차감 정도로 SQL Update 성격만 표현하려고 했다면 if/else 스파게티 도입을 위한 진입점을 '보다 쉽게' 주었을지도 모른다. (포인트 사용에 대한 아래 채팅의 구체적인 업무 로직 설명은 생략합니다.)

![popit_design_chat02](https://www.popit.kr/content/images/wp/2017/02/popit_design_chat02-600x600.png)