204. 아키텍처 스타일 및 패턴 개요 - Architectural Styles and Patterns 재사용 가능 뼈대 베스트 프랙티스 컴포넌트 상호작용 템플릿 설계의 청사진
핵심 인사이트: (200번 분할과 정복 연계) 100만 줄짜리 코드를 찢어서 뼈대(아키텍처)를 잡아야 한다. 초보 아키텍트가 백지상태에서 네모 박스와 화살표를 마구잡이로 그리며 뼈대를 창조한다. "야! 멈춰! 네가 백지에서 상상력으로 그린 그 기괴한 뼈대는 오픈하자마자 버그 터져서 무너진다! 수십 년 동안 전 세계 천재 선배 개발자들이 피눈물을 흘리며 서버 터지고 데드락 걸리면서 깎아내고 깎아내서 만들어둔 '절대 무너지지 않는 전설의 건축 도면(템플릿)'들이 이미 인터넷에 널려있어! 쇼핑몰 만들 거면 선배들이 쓰던 '계층형 템플릿'을 베껴 쓰고, 카톡 만들 거면 '클라이언트-서버 템플릿'을 그냥 그대로 복사해서 써라!" 바퀴를 다시 발명하지 않게 해주는 위대한 족보, 아키텍처 패턴이다.
Ⅰ. 뼈대의 밑그림: 아키텍처 스타일/패턴의 필요성
- 소프트웨어 뼈대를 처음부터 100% 창작(DIY)하는 것은 미친 짓입니다. 예기치 못한 병목과 유지보수 지옥이 100% 터집니다.
- 반복적으로 발생하는 시스템 설계 문제들에 대해, 선배들이 찾아낸 가장 우아하고 검증된(Best Practice) 구조적 해결책의 묶음이 바로 아키텍처 패턴입니다.
Ⅱ. 아키텍처 스타일(패턴)의 3대 필수 구성 요소 🌟
족보(패턴)를 까보면 단순히 그림만 있는 게 아닙니다. 3가지 철저한 규격이 명시되어 있습니다.
- 컴포넌트 (Component): 이 도면을 구성하는 주인공 네모 박스들입니다. (예: 클라이언트 앱, 데이터베이스 서버, 필터 모듈 등)
- 커넥터 (Connector): 이 네모 박스들이 서로 데이터를 어떻게 주고받을지 연결하는 화살표의 룰입니다. (예: HTTP 통신, 함수 호출, 파이프 스트림 전송 등)
- 제약 사항 (Constraints): 이 족보를 쓸 때 "절대 이렇게 선을 꼬아서 연결하면 안 돼!"라고 정해둔 엄격한 법률입니다. (예: 계층형 패턴에서는 3층이 1층을 다이렉트로 부르면 안 됨!)
Ⅲ. 전설의 족보들: 주요 아키텍처 패턴 대분류 🌟 핵심 기출 🌟
앞으로 205~212번에서 하나씩 뼈를 발라 먹을 주인공들의 스포일러(개요)입니다.
1. 데이터 중심형 (Data-Centered)
- 시스템 중앙에 '거대한 공용 칠판(데이터 저장소)'을 하나 딱 놔두고, 수십 개의 모듈들이 그 칠판에 글을 쓰고 지우며 소통하는 구조입니다.
- 209번 블랙보드 패턴 (Blackboard): 중앙 칠판(블랙보드)을 여러 지식 모듈이 빙 둘러싸고 문제를 푸는 음성 인식/AI 모델.
- 리포지토리 패턴 (Repository).
2. 데이터 흐름형 (Data-Flow)
- 데이터를 찰흙처럼 파이프에 밀어 넣으면, 여러 개의 가공 기계를 컨베이어 벨트처럼 슝슝 거치면서 깎이고 조립되어 최종 완성품이 나오는 공장 라인 구조입니다.
- 207번 파이프-필터 패턴 (Pipe-Filter): 유닉스/리눅스 쉘 명령어(
|)나 동영상 인코딩 변환기에 쓰는 찰떡 패턴.
3. 호출 및 반환형 (Call and Return) 🌟 가장 흔함 🌟
- 어떤 놈이 "이것 좀 해줘!"라고 부르면(Call), 다른 놈이 일해서 결과값을 던져주는(Return) 전형적인 왕과 신하 구조입니다.
- 206번 클라이언트-서버 패턴 (Client-Server): 폰(고객)과 네이버 서버(종업원)의 고전적 1:N 구조.
- 205번 계층형 패턴 (Layered Architecture): 1층, 2층, 3층으로 겹겹이 쌓아 올려, 무조건 내 바로 밑에 층한테만 심부름을 시킬 수 있는 수직적 계급 구조 (웹 프로그래밍의 영원한 스탠다드).
4. 독립 컴포넌트형 (Independent Components)
- 박스들끼리 서로 "네가 누군지 알 바 아님 ㅋ" 상태로 완벽히 찢어져 있다가, 중간에 거대한 우체국이나 이벤트 메시지를 통해 간접적으로만 핑퐁 치는 구조입니다.
- 208번 브로커 패턴 (Broker): 분산된 수만 대의 서버끼리 서로의 IP를 몰라도, 중간 브로커(우체국)를 통해 통신하게 해주는 패턴. (1038번 MQTT 아키텍처의 뼈대)
- 이벤트 주도 패턴 (Event-Driven).
Ⅳ. 디자인 패턴(Design Pattern)과의 차이점 (혼동 주의)
- 아키텍처 패턴 (숲): 서버와 DB, 모듈 덩어리들이 수백 km를 넘나들며 통신하는 **'초거대 시스템 전체의 뼈대'**입니다. (예: 클라이언트-서버, MVC, 계층형)
- 디자인 패턴 (나무): 코딩 창 안에서, 클래스 파일 2~3개끼리 서로 함수를 어떻게 예쁘게 엮어서 메모리 에러를 안 나게 할지 고민하는 **'코드 수준의 미시적인 설계 스킬'**입니다. (GoF의 싱글톤, 옵저버, 팩토리 패턴 등)
📢 섹션 요약 비유: 소프트웨어의 아키텍처 패턴은 도시를 건설할 때 시장님이 백지에서 맘대로 도로를 깔지 못하게 막는 **'수백 년 검증된 도시 공학 마스터 템플릿(족보)'**입니다. 만약 무기 공장을 짓는다면 템플릿 책을 넘겨서 **'컨베이어 벨트형 도면(파이프-필터 패턴)'**을 그대로 찢어다 베낍니다. 식당을 창업한다면 **'홀서빙과 주방 분리형 도면(클라이언트-서버 패턴)'**을 베껴서 짓습니다. 아파트 단지를 짓는다면 무조건 1층부터 차곡차곡 쌓는 **'수직 아파트 도면(계층형 패턴)'**을 베낍니다. 이 도면들 안에는 거실(컴포넌트)을 뚫고, 복도(커넥터)를 내며, "절대 안방에서 화장실로 벽을 허물고 다이렉트로 가지 마라(제약 사항)"라는 완벽한 규칙이 다 적혀 있습니다. 초보 건축가가 상상력으로 기괴한 집을 지어 화장실 똥물이 거실로 역류하는 참사를 막아주고, 수십 년 선배들의 피땀 눈물이 밴 가장 안정적이고 유지보수하기 편한 구조를 1초 만에 훔쳐다 쓸 수 있게 해주는 위대한 마법의 설계 도감입니다.