책을 읽은 이유
문제점
- 상황: 회사의 개발 방향과 다른 설계와 코드가 작성 되었고, 한달 이상 방치되어있었다.
- 원인: 코드 작성 전, 좋은 의사소통을 하지 않았다.
해결법:
- 대상 : 개발자 및 회사의 구성원
- 목적: 코드 뿐만 아니라 좋은 의사소통의 중요성 공유
- 방안 :
- 적절한 의사소통 주기 설정
- 생각이 정리된 대화하기
- “잘” 정리된 자료 작성하기
서론
성공적인 커뮤니케이션
- 공통의 상징, 기호 또한 행동을 사용하여 아이디어나 정보를 공유하거나 교환함으로써 공동의 이해를 도모하는 것이다.
패턴
- 패턴의 분류
- 패턴
- 특정한 또는 일반적인 문제를 해결하는데 그 효과가 입증된 재사용 가능한 솔루션
- 안티패턴
- 문제를 해결하는 올바른 방법인 것처럼 보이지만, 실제로는 이점보다 더 중대한 부정적인 결과를 초래 할 수 있는 것이다.
- 패턴의 반대개념이 아니다
- 패턴
- 패턴 사용 방법
- 안티패턴은 피하면서, 패턴은 도입해본다.
시각적 커뮤니케이션
커뮤니케이션의 핵심
독자 이해하기
- 이유: 정보 전달에 대한 대상의 지식수준, 문화 등을 알아야 정확한 의사가 전달되기 때문이다.
추상화 레벨 혼합 (안티패턴)
설명: 추상화 레벨이 같지 않다면, 정보 전달이 명확해지지 않는다.
추상화 레벨이란?
- 하이레벨: 높은 추상화, 낮은 구체화 수준 - 시스템의 주요 구성 요소와 그 상호 관계 등
- 로우레벨: 낮은 추상화, 높은 구체화 수준 - 코드의 구조에 대한 세부사항 등
예시
- 추상화 레벨이 다른 경우 : Servcie, Application
1
2
3flowchart LR
A[유저 Service] ---> B[배송 Application] ---> C[배송 Service]추상화 레벨이 같은 경우 : Application
1
2
3
4flowchart LR
A[유저 Application] ---> C[배송 Application]
A ---> B[결제 Application]
- 표현의 일관성
- 설명: 문서 내에서 다이어그램 등을 제시하고, 인용해라.
- 이유: 독자의 인지 부하를 줄인다.
- 효과: 독자가 글을 이해할 때 비용이 줄어든다.
난잡함 정리하기
- 색의 과부과 (안티패턴)
- 의미: 색을 너무 여러 개 사용한다.
- 이유: [같은 색 = 같은 의미]로 오해 소지 존재
- 해결법: 선택한 색상을 통해 무엇을 전달하려는지 생각해야 한다.
- 상자 속 상자 속 상자 (안티패턴)
- 의미: 관계를 나타낼 때, 과도한 상자를 사용한다.
- 이유: 난잡하고 한눈에 들어오지 않는다.
- 해결법:
- 주요 방법
- 상자를 합침
- 상자를 텍스트로 대체함
- 예시
- A 망에 속한 B 망에 속한 C 망에 속한 D를 표현할 때 -> "A-B-C 망에 속한 D의 경우"로 표현
- 주요 방법
- 관계 거미줄 (안티패턴)
- 의미: 요소와 요소를 잇는 화살표가 2D그림으로 계속 겹침
- 이유: 한번에 이해하기 어렵고, 오해소지 존재
- 해결법: 직선이 아닌, 직각선 사용 및 넘어가는 선 사용
- 텍스트 균형 잡기
- 의미: 텍스트 길이와 위치가 적당히 있어야 한다.
- 이유: 텍스트가 너무 길거나 도형에서 너무 많이 있다면, 독자들의 집중력 감소
- 방법:
- 메모 사용
- 주석 사용
접근성
- 색상에 의존한 방치되어있었다 (안티패턴)
- 의미: 색상에 의미를 부여하여 사용한다.
- 이유: 색상을 구별할 수 없을 경우, 구별할수없고, 색맹들도 읽기 힘들다
- 해결책:
- 패턴 그림을 활용한다.
- 대비를 활용한다.
- 기호와 색상의 합을 활용한다.
- 예외: DDD 같은 경우, 색상의 의미를 명확하게 활용하고, 범례를 제공한다.
- 범례를 추가하자
- 의미: 표준 다이어그램 등을 활용할때는 범례를 제공하여, 정보가 훼손되지 않도록 해야 한다.
레이블 적절히 사용하기
의미: 화살표 위, 상자 위 등등 적절한 레이블 등을 달아서 이해하기 쉽도록 제공
예시:
sequenceDiagram Alice->>John: Hello John, how are you? John-->>Alice: Great! Alice-)John: See you later!
내러티브
- 큰 그림이 먼저다
- 의미: 반드시 가장 추상화된 그림을 먼저 제시하고, 구체적인 그림으로 소통해야한다.
- 이유: 독자들이 어느 부분을 설명하고 있는지 명확히 이해된다.
- 다이어그램 흐름을 기대에 맞추자
- 의미: 위에서 아래, 왼쪽에서 오른쪽으로 다이어그램을 배치한다.
- 이유: 사람이 이해도 향상
- 명확한 관계
- 의미: 단방향으로 관계를 나타내는 것이 좋고, 화살표 점선 등을 활용하는 것이 좋다. (범례 필수)
- 이유: 양방향을 사용할 경우, 요청-데이터를 분리하지 않고 하나로 작성 해야 함. 불명확해짐
표기법
- 아이콘으로 의미 전달하기 (안티패턴)
- 의미: 회사 로고, 회사 상품의 구체적 의미를 가진 아이콘을 의미 전달에 사용
- 이유: 독자가 모를 가능성 존재한다.
- 해결법: 보편적인 그림으로 전환하거나, 주석, 범례 등을 첨부한다
- 특별한 이유 없이 UML 사용하기 (안티패턴)
- 의미: 모든 자료 정리를 UML로 작성
- 이유: 모든 독자에게 UML 지식을 기대할 수 없으며, 범례 제공 또한 비용이다.
- 해결법:
- 독자와 목적에 맞게 다양한 다이어그램 사용
- 동작과 구조 뒤섞기 (안티패턴)
- 의미: 동작과 구조를 그림에 혼합해서 표기
- 이유: 구조와 동작은 다른 것이다. 이를 혼합할 경우 독자가 해석할 때 복잡도가 올라간다.
- 해결법:
- 동작과 구조의 그림을 분리하여 작성한다. SRP처럼 하나의 그림에는 하나만 표기한다.
- 예시
- 전반적인 시스템을 추상적으로 적어둔 구조 다이어그램
- 자세한 행동 데이터 흐름도(요청, 응답 명시)
- 예상에 어긋나기 (안티패턴)
- 의미: 보편적인 기호를 혼자 다르게 쓰지 마라.
- 이유: 오해하기 쉽다.
- 예시:
- 빨간색: 부정, 멈춤
- 초록색: 긍정, 진행
문장의 구성
- 가독성이 떨어지는 다이어그램 (안티패턴)
- 스타일 커뮤니케이션 (안티패턴)
- 불분명한 문장 구성 (안티패턴)
- 시각적 균형 만들기 (안티패턴)
멀티모달 커뮤니케이션
서면 커뮤니케이션
- 단순한 언어
- 의미: 단순하고 단결하고 보편적인 언어 사용
- 예시: 유비쿼터스 언어
- 방법: 어휘집 작성
- 축약어 지옥 (안티패턴)
- 의미: 자신들만의 축약서 작성
- 이유: 전문가와 비전문가 간의 오해 및 이해 불가, 유지보수 불가
- 해결책:
- 축약어 사용 금지
- 범례, 각주 제공
- 구조화
- 의미: 명시적으로 문제 작성 및 보충 논거 트리 구조 작성하기
- 이유: 글의 목적 및 논리를 쉽게 파악가능
- 방법: 논리 트리 작성 및 텍스트화
- 기술 문서 작성 구문
- 의미: 기술 문서 작성 시 주의할 점
- 주의할 부분
- 강동사
- 짧은 문자
- 명확한 문단
- 일관적인 어휘
언어적 및 비언어적 커뮤니케이션
- 메시지 인코딩
- 의미: 소통할 때 메시지를 보내는 입장에서 태도
- 방법:
- 수용 예언
- 온전히 상대방에게 집중
- 보디 랭귀지
- 메시지 디코딩
- 의미: 소통할 때 메시지를 받은 입장에서 태도
- 방법:
- 인지 편향하지 않기
- 확증 편향하지 않기
- 현재에 집중하기
- 문화차이 인식하기
- 영향력과 설득
- 의미: 설득할 때 필요한 방법들
- 방법:
- 첫 줄 문장을 가장 중요한 메시지를 먼저 제시한다.
- 지식수준
- 의도적 침묵
- 선택지 제공
- 반복
- 인지 재구성 : 불쾌하거나 불만족스러운 사건 상황을 다른 생각으로 유도하는 질문한다.
수사학 3요소
- 에토스
- 화자의 신뢰성과 신빙성
- 파토스
- 감정적 호소
- 로고스
- 논리적 이성적인 논거
지식 전달하기
지식 관리의 원칙
- 프로젝트보다 프로덕트
- 의미 : 프로덕트 기준으로 정보 관리해야함
- 이유 :
- 프로젝트 기준관리는 마감 시, 자료 관리 안 될 가능성 높음
- 프로덕트 기준으로 할 경우, 프로젝트와의 연관 정보만 챙기고, 프로덕트가 자신의 자료 관리함
- 텍스트보다 추상화
- 의미: 일부 정보는 텍스트보다 추상화하여, 시각적으로 제시하자
- 이유: 독자와 효과적인 커뮤니케이션 방법
- 관점 중심 문서화
- 의미: 소통 대상과 이유에 초점을 맞추는 것
- 방법:
- DRY: 반복하지 않기
- 다이어 그램 계층화: 여러 개의 레이어로 작성하여, 수정사항이 생겼을 경우 하나만 변경되도록 OCP 원칙 지킨다.
- 관점 저장 : 메타 데이터, 태그, 참조를 문서에 기록해놓는다.
지식과 사람
- 피드백은 일찍 자주 받자
- 의미: 전략 결정 시점 등등 체크 포인트를 만들어서 피드백을 받는다.
- 이유: 결정 이후 과정들로 넘어가면 비용이 증가함
- JIT 아키텍처
- 의미: 당장 필요한 기능만 개발하도록 하고, 미래에 무엇이 필요할지 예측하지 않는 코딩윈칙
- 이유: 예측이 실현되지 않을 수 있기 때문에 현재 노력 낭비 가능성 높음
모범 사례
- 아키텍처 결정 레코드 ADR
- 의미: 의사결정 프로세스에서 사용되는 아키텍처 의사결정 및 근거의 기록이다.
- 이유: 왜? 에 대한 질문에 답을 정해놓아서, 미래의 비용을 줄일 수 있다.
- 목차(ADR 템플릿):
- 제목
- 식별자
- 상태
- 맥락
- 평가 기준
- 선택지
- 결정
- 예상 결과
- 논의