[F-Lab 모각코 챌린지] 62일차 - 소통과 확장성
F-Lab 모각코 챌린지 - 62일차 소통과 확장성. 실용주의 프로그래머 책 정리입니다. 소통하는 방법과 확장성을 고민하고 어떻게 풀어나가면 좋을지 설명합니다.
![[F-Lab 모각코 챌린지] 62일차 - 소통과 확장성](/content/images/size/w1200/2023/07/f_lab_mogacko-9-13.png)
소통하라
나는 무시당하느니 차라리 샅샅이 훑어보는 시선이 낫다고 봐요
- 메이 웨스트(Mae West, Belle of the Nineties, 1934)
아무리 뛰어난 지식, 철학, 실력이 있다고 해도 소통하지 않으면 의미가 없다
이에 몇가지 방안들을 소개한다
말 하고 싶은 게 무엇인지 알아라
무엇을 말할지 미리 계획하고, 자문하고, 다듬어라
제대로 전달하기 위해 필요한 전략 몇 개를 세워라
청중을 알아라
청중의 관심과 능력을 이해하여 그들의 니즈를 파악하라
WISDOM - 청중 이해하기
- W : 무엇을 배우길 원하는가?
- I : 말하려는 것에서 그들이 관심 있어 하는 건 무엇인가?
- S : 얼마나 소양이 있는가?
- D : 어느 정도의 구체적인 내용을 원하는가?
- O : 누가 정보를 소유하길 원하는가?
- M : 그들이 경청하도록 동기를 주려면 어떻게 해야 할까?
각 업무에 맞는 접근을 통해, 그들이 모두 여러분의 프로젝트에 대해 열광하도록 만들 수 있다
- 말할 때를 골라라
- 전달하는 스타일을 골라라
- 프로젝트가 멋져 보이게 하라
- 문서 제작 과정에 청중을 참여시켜라
- 누군가 나에게 경청해주길 바란다면 나 역시 다른이에게 경청하라
- 질문을 해서 사람들의 이야기를 북돋워라
- 여러분이 한 말을 그들이 요약하도록 하라
- 회의를 대화로 바꾸면 생각을 좀 더 효과적으로 전달할 수 있을 것이다 - 응답을 잘하라
중복의 해악
DRY - 반복하지 마라 (Don't Repeat Yourself) 모든 지식은 시스템 내에서 단일하고, 애매하지 않고, 정말로 믿을만한 표현 양식을 가져야 한다
중복에 관한 부분은 클린 코드 에서 얻은 정보 외에 정리 할 것이 없다
직교성
하나가 바뀌어도 나머지에 어떤 영향도 주지 않으면 서로 직교한다고 할 수 있다
비직교적인 시스템
시스템의 컴포넌트들이 고도로 상호 의존적인 경우
직교적인 시스템
독립적이고 단일하며 잘 정의된 목적을 가진 컴포넌트
관련 없는 것들 간에 서로 영향이 없도록 하라
직교적인 시스템의 장점
생산성 향상
- 변화가 국소화 돼서 개발 시간과 테스트 시간이 줄어든다
- 재사용을 촉진한다
- 직교적인 컴포넌트들을 결합하는 경우 꽤 미묘한 생산성 향상이 있다
리스크 감소
- 감염된 코드는 격리된다
- 시스템이 견고해진다
- 테스트를 세분화 할 수 있다
- 종속성이 낮아진다
설계
직교적인 설계를 테스트하는 손쉬운 방법이 있다
특정 기능에 대한 요구사항을 극적으로 변경했을 경우, 몇 개의 모듈이 영향을 받는가?
"직교적인 시스템에서는 답이 '하나'여야 한다. GUI 패널의 단추 하나를 옮기는 것 때문에 데이터베이스 스키마가 변경되어서는 안된다"
(이 말로 미루어 볼 때, 모듈의 단위는 클래스 레벨이 아닌듯 싶다.)
툴킷과 라이브러리
서드파티 툴킷이나 라이브러리를 도입할 때, 시스템의 직교성을 보존할 수 있는지 주의 깊게 살펴보기 바란다
기술을 현명하게 선택하라
- 책에서는 AOP 를 이용한 예제를 보여주고 있다
코딩
코드를 작성하고 있다면 언제나 애플리케이션의 직교성을 떨어뜨릴 수 있는 위험에 노출되어 있다
- 코드의 결합도를 줄여라
- 전역 데이터를 피하라
- 유사한 함수를 피하라
가역성
가역성: <물리> 물질이 어떤 상태로 변하였다가 다시 원래의 상태로 되돌아갈 수 있는 성질
당신이 가진 생각이 딱 하나밖에 없다면, 그것만큼 위험한 것은 없다
여러분이 설계한 데이터 구조, 아키텍처, 인프라 가 변경되지 않을 것이라고, 희망찬 생각은 하지마라
엔지니어 에게 1+1 은 2 이지만, 디자이너에겐 창문일 수 있다. 오늘 2 였던게 내일은 5가 될 수 있다는 말이다
- 결정을 계속해서 미뤄라 소프트웨어를 하드웨어로 만들지 마라
- 소프트웨어의 레이어간의 의존도를 낮춰, 보다 확장성 있게 설계하라
CORBA ( Common Object Request Broker Architecture)
- CORBA 는 네트워크에서 분산 프로그램 객체를 생성, 배포, 관리하기 위한 구조와 규격이며 네트워크 상의 서로 다른 장소에 있고 여러 벤더 들에 의해 개발된 프로그램들이 "인터페이스 브로커" 를 통해 통신하도록 해준다
- Application 들 끼리 어디에 위치하고 있든, 혹은 누가 만들었건 관계없이 상호간 통신을 보장함으로써 다양한 H/W, S/W 가 함께하는 오늘날의 네트워크 분산 환경을 지원하는 새로운 시스템 통합 기술이다