[Review] 소프트웨어 아키텍처 스터디 - 1주차 후기

안녕하세요! K-DEVCON 소프트웨어 아키텍처 스터디장 조영록입니다.

오늘은 1/8 (목)에 진행된 스터디에서 나눈 이야기에 대해 나눠보려고 합니다.

1회차 스터디에서는 소프트웨어 아키텍처 The Basics의 다음 범위에 대해 이야기를 나누었습니다.

   - Ch.1 서론
   - Ch.2 아키텍처적 사고
   - Ch.3 모듈성
   - Ch.4 아키텍처 특성의 정의
   - Ch.5 아키텍처 특성의 식별
   - Ch.6 아키텍처 특성의 측정과 거버넌스
   - Ch.7 아키텍처 특성의 범위
   
---

개발자로서 연차가 쌓일수록 단순히 기능을 구현하는 것을 넘어 '어떻게 하면 더 유연하고 견고한 시스템을 만들 것인가'에 대한 고민이 깊어집니다. 이번 스터디는 각기 다른 도메인과 배경을 가진 개발자들이 모여 소프트웨어 아키텍처의 본질을 탐구한 시간이었습니다.

참여해주신 이지훈님께서 아키텍처와 설계, 다양한 동변성, 그리고 전체적인 내용들에 대해 정리하여 소개해주셨습니다.

# 아키텍처와 설계, 그 모호한 경계에 대하여


가장 먼저 논의된 주제는 아키텍처(Architecture)설계(Design)의 차이였습니다.


아키텍처는 한 번 결정하면 변경하기 어렵고, 최소 3~5년 정도의 긴 호흡을 바라보고 결정하는 거시적인 구조를 의미합니다. (예: 모노레포 도입 여부, 배포 플로우 등 )


설계는 컴포넌트 명명이나 함수 분리처럼 상대적으로 변경이 용이한 세부적인 작업을 뜻합니다.


하지만 실제 현업에서는 이 둘이 스펙트럼처럼 연결되어 있어 명확히 나누기 어렵다는 점에 모두가 공감했습니다. 특히 '도메인'에 대한 이해가 이 둘 사이의 간극을 메워주는 핵심 요소로 꼽혔습니다.

[Review] 소프트웨어 아키텍처 스터디 - 1주차 후기
image.png 124.99 KB




# 아키텍처를 구성하는 4가지 차원


책에서 소개된 아키텍처의 4개 차원(특성, 스타일, 논리적 컴포넌트, 결정)을 각자의 언어로 해석해 보았습니다.


아키텍처 특성은 성능, 확장성, 가용성, 신뢰성 등 시스템이 성공하기 위해 지원해야 하는 역량들입니다.

아키텍처 스타일은 마이크로서비스나 모듈형 모놀리스처럼 전체 시스템의 골격을 이루는 베스트 프랙티스 예시들입니다.


논리적 컴포넌트는 역할과 책임을 기준으로 나눈 구성 요소입니다.


아키텍처 결정은 시스템이 지켜야 할 '법'이나 '제약 사항'과 같습니다. 예를 들어 "프레젠테이션 레이어는 DB에 직접 접근하면 안 된다"는 규칙이 이에 해당합니다.


# 동변성(Connascence): 변화의 전파를 관리하는 법


이번 스터디에서 가장 뜨거웠던 주제 중 하나는 동변성(Connascence)이었습니다. "시스템의 한 요소가 변경될 때, 정상 동작을 위해 다른 요소도 함께 변경되어야 하는 관계"를 뜻합니다. 아키텍트는 이 동변성의 강도(Strength)를 분석하여, 결합도가 높은 코드를 더 관리하기 쉬운 형태로 리팩터링해야 합니다.

정적 동변성 (코드 수준에서 파악 가능)

동적 동변성 (런타임에 실행해봐야 파악 가능)