바보야, 문제는 경계야
7 hours ago
4
- 소프트웨어 개발의 핵심 난제들은 대부분 코드 내부가 아니라 코드와 코드, 시스템과 시스템이 만나는 경계(Boundary) 에서 발생한다는 주장
- 경계 = 서로 다른 관심사·책임·맥락이 만나는 지점
- 함수 분리, 모듈화, 마이크로서비스 등 개발의 거의 모든 행위가 경계를 만드는 행위
- 아이러니: 복잡성을 다루기 위해 경계를 만들지만, 경계 자체가 새로운 복잡성의 원천이 됨
코드에서 발생하는 경계
-
호출자-피호출자 경계: null 반환 vs 예외 던지기 등 계약의 모호함
-
인터페이스 경계: 추상화 누수의 법칙 - 감춰진 복잡성은 언젠가 경계를 뚫고 올라옴
-
의존성 경계: 외부 API·라이브러리는 예고 없이 변할 수 있음
-
변환 경계: 객체-관계 임피던스 불일치처럼, 경계를 넘을 때마다 정보 왜곡·손실
-
신뢰 경계: 검증된 데이터 vs 미검증 데이터의 경계 → 서명 없는 웹훅 수신 등 보안 취약점
-
설계-구현 경계: 요구사항 → 설계 → 구현 → 운영 각 단계마다 정보 손실 누적
물리적인 경계
-
순서 경계: 비동기 지점 사이에 상태가 변할 수 있음, 분산 시스템에서는 더욱 심각
-
규모 경계: 임계점을 넘으면 양적 변화가 아닌 질적 변화 발생
-
환경 경계: 제 컴퓨터에서는 잘 되는데요와 같은 일 발생
-
인프라 경계: 서비스 분리 시 원자성 보장 불가
사람 사이에서 발생하는 경계
-
조직의 경계: 콘웨이의 법칙 - 조직 구조가 시스템 구조를 결정. 팀 재편 시 코드와 조직 경계가 어긋남
-
소통의 경계: 전언 게임처럼 요구사항이 전달될 때마다 의도가 변형됨, 암묵지는 아예 전달 안 됨
-
사용자-개발자 경계: 개발자가 안전을 위해 만든 경계가 사용자에게는 귀찮은 장벽
경계를 다스리는 법
-
숨겨진 경계를 인식하라: 두 서비스가 같은 DB 테이블을 공유하는 것처럼 코드상 보이지 않는 결합에 주목
-
패턴은 답이 아니다: 패턴은 "특정 조건에서 효과적인 해법"일 뿐, 맹목적 적용 금지
-
경계 앞에서 던질 세 가지 질문:
- 이 경계를 넘는 것은 무엇인가?
- 이 경계가 깨지면 무슨 일이 일어나는가?
- 이 경계는 누가 관리하는가?
-
경계를 긋지 않는 것도 선택: 모놀리스 유지, 섣부른 분리 자제 등
-
경계는 진화한다: 분리했다가 합치고, 합쳤다가 다시 나누는 것을 반복 → 의식적이고 정기적인 재검토 필요
-
Homepage
-
개발자
- 바보야, 문제는 경계야