1. 목표
개요의 목표는 다음 4가지를 이해하는 것
- 소프트웨어 아키텍처란 무엇인가
- 왜 중요한가
- 소프트웨어 아키텍처의 일반적인 정의
- 소프트웨어 개발 전체 과정에서 어디에 위치하는가
2. 소프트웨어 아키텍처를 이해하는 직관적 비유
모든 것은 구조(Structure)를 가진다
우리가 만드는 모든 것에는 구조가 존재한다.
- 미리 설계된 구조일 수도 있음
- 즉흥적으로 만들어진 구조일 수도 있음
- 하지만 구조는 항상 존재함
구조는 시간이 지나면 바꾸기 어려워진다
어떤 시스템이든:
- 만들기 위해 많은 노력을 들일수록
- 나중에 구조를 변경하는 비용이 커짐
즉:
- 초기 구조 설계가 매우 중요함
3. 구조가 중요한 이유
구조는 제작 의도(Intent)를 반영한다
구조는 단순한 형태가 아니라:
- "무엇을 위해 만들어졌는가"
- "어떤 품질을 갖는가"
를 결정한다.
건축물 비유
극장(Theater)
목적:
- 공연 관람
특징:
- 공연 관람에는 최적
- 거주나 업무에는 부적합
집(House)
목적:
- 생활 공간
특징:
- 거주에는 적합
- 공연 개최에는 부적합
소프트웨어에도 동일한 원리 적용
같은 기능이라도:
- 코드를 작성하는 방식은 무한함
- 설계 구조에 따라 결과가 달라짐
4. 소프트웨어 아키텍처가 결정하는 것
소프트웨어 아키텍처는 시스템의 핵심 특성을 결정한다.
영향을 주는 요소:
- 성능
- 확장성(Scalability)
- 규모 처리 능력
- 유지보수성
- 기능 추가 용이성
- 오류 대응 능력
- 보안 대응 능력
잘못 설계된 구조의 문제
초기 구조가 잘못되면:
- 재설계 비용 증가
- 시간 낭비
- 큰 시스템일수록 비용 폭증
5. 소프트웨어 아키텍처의 정의
정의
소프트웨어 아키텍처란
높은 수준의 시스템 구조 개념이며
구성 요소 간 관계를 표현하고
시스템 요구사항과 제약사항을 만족시키는 것
6. 정의를 구성 요소별로 해석
1) 높은 수준의 시스템 구조 (High-Level Structure)
의미:
- 추상화(Abstraction)
- 중요한 구조만 표현
- 세부 구현은 제외
포함되는 것
- 시스템의 큰 구조
- 주요 컴포넌트
- 관계 흐름
포함되지 않는 것 (오해를 많이 하니 주의)
- 프로그래밍 언어
- 프레임워크
- 특정 기술 스택
- 코드 구현 방식
매우 중요한 오해
많은 엔지니어가:
"기술 선택 = 아키텍처"
라고 생각함
하지만 이는 잘못된 생각.
아키텍처 ≠ 기술 선택
기술은:
- 구현 단계에서 선택 가능
- 아키텍처 이후 결정될 수 있음
아키텍처는:
- 설계 마무리 단계에서 선
2) 구성 요소(Component)와 관계(Relationship)
구성 요소란:
- 블랙박스(Black Box)
- 특정 행동(API)을 가진 단위
구성 요소 예시
- 사용자 인증 서비스
- 결제 서비스
- 데이터 저장 서비스
- 메시징 시스템
핵심
중요한 것은:
- 구성 요소 자체보다
- 서로 어떻게 연결되는가
재귀적 구조 가능
구성 요소 하나가:
- 내부적으로 또 다른 아키텍처를 가질 수 있음
즉:
- 시스템 안에 작은 시스템 존재 가능
3) 요구사항(Requirements)과 제약조건(Constraints)
아키텍처는 반드시 다음을 만족해야 함.
요구사항
시스템이 해야 하는 것
예:
- 로그인 기능
- 결제 기능
- 대용량 처리
제약조건
시스템이 하면 안 되는 것
예:
- 개인정보 외부 노출 금지
- 특정 응답시간 제한
- 특정 보안 정책 준수
7. 소프트웨어 아키텍처의 추상화 레벨
아키텍처는 여러 단계로 존재함.
낮은 수준 추상화
예
- 클래스(Class)
- 구조체(Struct)
- 객체(Object)
중간 수준 추상화
예
- 모듈(Module)
- 패키지(Package)
- 라이브러리(Library)
높은 수준 추상화 (강의 중심)
특징
- 서비스 단위 (개별의 구성요소들은 별도의 서비스로 존재)
- 분산 시스템
- 여러 컴퓨터에서 개별 혹은 그룹으로 분산 실행
8. 대규모 시스템 아키텍처
강의에서 다루는 대상:
- 대규모 시스템
- 분산 구조
- 멀티 서비스 시스템
장점
처리량 증가
- 더 많은 요청 처리
데이터 확장
- 대량 데이터 처리 가능
사용자 확장
- 수천~수만 사용자 대응
대표 사례
- 차량 공유 서비스
- VOD 플랫폼
- SNS
- 온라인 게임
- 금융 서비스
9. 설계 실패의 위험성
좋은 설계:
- 스타트업 → 대기업 성장 가능
- 글로벌 서비스 가능
나쁜 설계:
- 몇 달 개발 후 실패
- 사용자 요구 미충족
- 재개발 필요
핵심 메시지
잘못된 시스템을 다시 만드는 것은:
- 매우 어렵고
- 매우 비싸다
이렇게 위험 부담이 크다는 것은 이 강의 과정에서 배울 내용이 매우 중요하다는
10. 소프트웨어 개발 생명주기(SDLC)
소프트웨어 개발은 크게 4단계

1) 설계 (Design)
- 구조 정의
- 아키텍처 설계
2) 구현 (Implementation)
- 코드 작성
3) 시험 (Testing)
- 검증
- 오류 발견
4) 배포 (Deployment)
- 실제 운영
반복 구조
소프트웨어는 지속적으로 개선됨.
따라서:
- 위 과정이 반복됨
- 이 반복의 첫 번째 주기가 차후 반복에 크게 영향을 미침
- 기존의 시스템에서 점진적으로 변화를 만듬
11. 소프트웨어 아키텍처의 위치
아키텍처는:
설계 단계의 결과물
그리고 동시에
구현 단계의 입력값
즉:
설계 → 아키텍처 생성 → 구현 시작
12. 설계 단계가 중요한 이유
설계 단계는:
- 가장 중요함
- 구현보다 먼저 결정됨
- 팀 전체 방향을 결정함
특징
- 수주 ~ 수개월 소요 가능
- 여러 엔지니어 협업 필요
13. 소프트웨어 아키텍처가 어려운 이유
알고리즘은:
- 정답 판단 가능
아키텍처는:
- 정답이 없음
- 좋고 나쁨 판단이 어려움
14. 좋은 아키텍처를 만드는 방법
좋은 설계를 위해서는:
- 체계적 설계 프로세스를 따름 (Methodical Design Process)
- 산업 검증 패턴 사용 (Architectural Patterns)
- 좋은 사례 학습하여 적용 (Best Practices)
- 경험 축적
15. 강의 핵심 요약
핵심 1
모든 시스템은 구조를 가진다.
핵심 2
구조는 시스템 성공을 결정한다.
핵심 3
소프트웨어 아키텍처는:
- 높은 수준의 시스템 구조를 표현하는 것
- 요구사항 + 제약조건 만족하도록
- 각기 다른 구성 요소의 관계를 표현한 것
핵심 4
아키텍처는:
- 설계 결과물
- 구현 입력값
핵심 5
좋은 구조는 미래 비용을 줄인다.
한 줄 핵심 정리
소프트웨어 아키텍처는
"어떤 기술을 쓰는가"가 아니라
"시스템을 어떤 구조로 만들 것인가"를 정의하는 설계 철학이다.
