들어가며
이미 만들어놓은 프로젝트의 아키텍처 속에 살다가 보면 연차가 쌓여가며 여러 프로젝트 진행하는 과정에서 아키텍처부터 설계를 경험하게 됩니다. 이 과정에서 많이 배우기도 하지만 기초부터 공부하지 않은 상태라면 먼 길을 돌아가는 경우가 생깁니다.
소프트웨어는 사용자가 원하는 어떤 문제를 해결하기 위해 만들어진다.
영화 예매 시스템의 목적은 영화를 좀 더 쉽게 빠르게 예매하려는 사용자의 문제를 해결하는 것이다.
이처럼 문제를 해결하기 위해 사용자가 프로그램을 사용하는 분야를 도메인이라고 부른다. - 조영호 '오브젝트' -
도메인에 대한 의미를 모른 채 개발자의 삶이 시작되기도 합니다. 하지만 경험이 깊어질수록 도메인의 중요성을 깨닫게 됩니다.
첫 회사는 비대하고 복잡한 서비스 로직과 DAO( Data Access Object, 데이터베이스의 값을 옮겨오는 객체 )만 있기 마련이다.
시한폭탄 같은 도메인 로직들...
객체는 무수히 많이 모여서 내가 담당하고 있는 도메인이 된다! 도메인을 먼저 생각하고 구현함으로써 이전 시한폭탄 같은 상황이 생기지 않았다. 도메인을 통해 우리 비즈니스 로직을 표현하려고 노력하자.
도메인?
문제 해결점, 나의 이력( 금융 도메인, 배송 도메인, 이커머스 도메인 등 이력 ), 플레이그라운드, 만남의 장소, 비즈니스의 중심
소프트웨어는 지구의 구조와 비슷하다, 그중 도메인은 내핵과 같기에 도메인을 중심으로 펼쳐지는 아키텍처 중 Explicit 아키텍처가 있다. ( 강의자료 참고 )
반 버논은 도메인을 이렇게 나눈다!
- 메인 도메인
- 서브 도메인
- 핵심 도메인
- 지원 서브 도메인
- 범용 서브 도메인
도메인은?
- 우리가 프로그래밍을 한다면 가장 신경 써줘야 할 곳
- 우리가 문제에 대해 맞닥뜨리는 곳
- 문제에 대해 풀어 나아가며 해결해 나아가야 할 곳
모놀리식 아키텍처
단일 시스템 - 소규모
장점
배포가 편하고 하나의 프로젝트로 전체 시스템을 볼 수 있다
단점
복잡함에 따라 유지보수가 어렵고 트래픽이 늘어남에 따라, 대규모 트래픽을 받기에 트래픽이 한정되어 있음, 하나를 반영하려고 전체를 배포, 하나의 시스템에서 오류로 전체 시스템이 오류
아키텍처가 중요하다고 생각하는 이유들
- 유지보수
- 코드 가시성
- 테스트의 편리성
- 시스템의 높은 안정성
- 확장성
- 의사소통
멘토님이 말하는 아키텍처의 중요성
구조가 잡히지 않은 애플리케이션?
- 하나의 요구 사항이라도 적용하는 시간이 오래 걸린다.
- 변경이 느리거나 못할 수도 있다.
- 버그에 대해서 대응이 느리다.
- 확장성이 좋지 않다.
좋은 아키텍처란?
경계가 뚜렷한 아키텍처!
특정책을 맹신하지 않고 그 책을 읽고 여러 가지 생각을 느끼고 자기 생각을 말할 수 있어야 한다!