개요
원티드에서 진행하는 백엔드 프리온보딩에 참여하게 되었고 아키텍처 구성 강의를 듣기 시작한다.
첫날은 도메인에 대하여 강의를 진행한다 난 그 강의를 보며 배운 내용을 기록한다.
"소프트웨어는 사용자가 원하는 어떤 문제를 해결하기 위해 만들어진다.
영화 예매 시스템의 목적은 영화를 좀 더 쉽고 빠르게 예매하려는 사용자의 문제를 해결하는 것이다.
이처럼 문제를 해결하기 위해 사용자가 프로그램을 사용하는 분야를 도메인이라고 부른다."
- 조영호 '오브젝트'-
도메인이란 무엇일까?
비즈니스 중심, 문제 해결점, 만남의 장소, 나의 이력, 플레이그라운드..
여러가지 키워드가 언급이 되었다.
도메인이란
도메인은 우리가 프로그래밍을 한다면 가장 신경써줘야할 곳
우리가 문제에 대해 맞닥들이는 곳
문제에 대해 풀어나아가며 해결해 나아가야 할 곳
ex) 요리 서비스에서 나오는 도메인은..? -> 음식과 주문의 도메인 그리고 이 목적에 관한 문제와 문제해결
도메인은 지구의 내핵과 같다 내핵이 없다면 지구가 멸망하듯 도메인은 중요한 존재이다.
자주 사용되는 헥사고날 아키텍처와 클린아키텍처다 신기할정도로 내핵처럼 보이지않는가?
어니언 아키텍처에서도 도메인이 가장 중요한 영역에 배치되어있는 것을 확인할 수 있다.
도메인에 어떻게 집중할 수 있을까요?
도메인은 우리가 문제에대해 맞닥들이기도 하며 우리가 풀어나가기도 해야하며 뒤틀려서는 안되고 핵심이 되는 존재다.
그렇다면 이 중요한 도메인을 어떻게해야 보호하고 개선하고 해결할 수 있을까?
도메인을 보호한다? -> 외부로부터의 간섭이 없어야한다. 도메인 소스코드안에는 순수한 도메인의 내부 로직 코드만이 존재해야한다. (캡슐화가 잘 되어야한다(?) 비슷함)
도메인은 이렇게 나뉘어져요
반 보넌은 도메인을 이렇게 나눈다!
- 메인 도메인
- 서브 도메인
- 핵심 도메인
- 지원 서브 도메인
- 범용 서브 도메인
우리가 사용하는 아키텍처?
- MVC
- Layered Architecture
- MicroService Architecture
- MVVM
- MVT
- Monolithic
- Decentralized Architecture
아키텍처의 종류
아키텍처의 종류는 모놀리식 아키텍처, 분산형 아키텍처로 나누어진다.
모놀리식 아키텍처로는 Layerd Architecture, Clean Architecture, Hexagonal Architecture등이 있다.
분산형 아키텍처로는 Service Oriented Architecture, Event-based Architecture등이 있다.
아키텍처 선택은 시스템의 골격 역할, 품질 속성에 영향을 미치며 시스템을 제안한다. - 적정 소프트웨어 아키텍처 -
아키텍처 선택을 하려면?
- 아키텍처 무관 선택
- 아키텍처 집중 선택
- 아키텍처 상향 선택
리스크 주도 접근법
지금 설계하려는 시스템에 대해서 이 시스템이 정말 리스크가 작은지 큰지 생각을 해보고 리스크가 낮을 수록 적당하기 아키텍처를 선택하고 높을 수록 피하며 설계를 하고 만들때까지 리스크를 보며 잘 선택을 해야한다.
구조가 잡히지 않은 애플리케이션은 하나의 요구사항이라도 적용하는데 시간이 오래 걸리고 변경이 느리거나 못할 수도 있고 버그에 대해 대응이 느리며 확장성이 좋지 않다...
구조가 잘 잡힌 애플리케이션은 좋은 아키텍처 구조를 가지고있다 애플리케이션 요구사항을 적용하는데 빠르고 오류에 대해서 대응이 빠르며 변경에 빠르고 확장성이 좋다!
좋은 아키텍처는 경계가 뚜렷한 아키텍처?
가장 좋은 예시로 레이어드 아키텍처가있다. 패키지가 하는일이 매우 뚜렷하며 패키지가 하는 일에 대해 경계를 만들고 코드를 짠다면 유지보수하는것에 용이하며 새로운 요구사항을 추가하는데에 더욱 빠르게 적용이 가능하다.
좋은 아키텍처를 만드려면?
- 구조를 잘 잡아야 한다.
- 도메인에 매우 많은 시간을 써야한다.
- 팀원들과의 컨텍스트를 맞추어 공통의 룰을 만들어야한다.
한마디로 문서화를 잘 해야한다.
고객은 빠른 기능을 원한다 하지만 우리는 시간이 부족할 때가 많다.
성장, 도전, 기회를 잡기위한 행동 == 좋은 아키텍처를 만드는 행동
그래서 우리가 앞으로 해야할 행동은 좋은 아키텍처를 위해 끊임없이 노력을 해야한다.
'Server & Infra.' 카테고리의 다른 글
[Domain-Driven-Design] 바운디드 컨텍스트 (Bounded-Context) ✍️ (0) | 2023.03.25 |
---|---|
🔨 DDD(Domain Driven Design) 도메인 주도 설계와 도메인 모델 (0) | 2023.03.25 |
[Kotlin, Spring boot] 검색 api에서 find Query vs Internal Function 데이터 처리 효율? 🤔 (0) | 2023.03.22 |
[Kotlin, Spring boot] copy() 깊은복사, 얕은복사 성능상의 이점? 🤔 (0) | 2023.03.21 |
☁️ OAuth 2.0 개념과 권한 부여 방식 알아보기 (0) | 2023.03.08 |