Spring 03-14

DevOps?
노란색 옷을입은 개발자가 되자
DDD (Domain,Driven ,Development)
우리가 서비스를 개발한다면, 그 서비스가 그 상태 그대로 변경되지 않는 경우는 엄청 드물게 발생한다.
대부분의 서비스는 고객의 요구사항이나 비즈니스 환경의 변화에 따라 지속적으로 업데이트되고 변화한다.
그러나 이런 변화를 수용하면서 시스템의 복잡성을 관리하는 것은 쉽지 않은 방법일 것이다.
이런 문제를 해결하기 위해 제안된 개발 방법론이 바로 “도메인 주도 설계(DDD, Domain-Driven Design)이다.
(도메인 관점으로 개발/문제 해결)
객체 지향 solid 원칙이랑 비슷한 느낌 -> 이상의 영역이라... // 구현 하기가 진짜 어렵다.
일부 좀 지켜가면서 하고 자 한다.
방법론이기 때문에 정답은 아니다...
DDD 를 하기 위한 2번째 DDD?
D D D 2 ?
Development
Deploy
Direction
정말 만읂것들을
유비커터스 언어
Ubiquitous

모두가 통용할수 있는 언어
도메인을 뭘로잡고 뭐로 설정 하는지 저하는것이 좋다.
그리고 그것은 개발자가 정하는것이 아니다.

이벤트 스토밍(Event Storming)은 서비스와 관계 있는 모든 이해관계자들이 서로가 가지고 있는 생각을 공유하며 서비스에서 발생하는 이벤트를 중심(Event-First)으로 분석하는 기법이다.
- 서비스에서 어떤 “주체”가 어떤 “행동”을 취하는가?
- 그 “행동”의 결과로 어떤 “이벤트”가 발생하는가?
- “이벤트”가 발생하면 시스템에서는 어떤 “변화”가 일어나는가?
- 이 “이벤트”가 다른 “이벤트”에 어떤 영향을 미치는가?
pros :
대화 도 많아지고
의견 도 많아지고
프로젝트에 적용 해보자.
MSA
micro serice architecture


모노리틱 같은 겨우는
장점
- 단순한 구조
- 개발환경과 방법의 통일성
- 배포가 간편
- End to End 테스트가 쉬움
한 프로젝트 안에 있기 때문에 한눈에 볼수 있다. -> 그 프로젝트만 싹다보면 된다 (intellij 로 검색 가능)
Transection 관점이 제일 중요 하다. -> 한번에 트랜젝션 관리 가 편하다.
단점
- 프로젝트의 규모가 커질수록 복잡도가 심각하게 증가
- 코드 전체를 이해하기 힘듬
- 빌드시간의 증가 (CI/CD 불가능)
- 새로운 기술을 적용하려면 프로젝트를 다 뜯어고쳐야할수있음
MSA
장점
- 전체프로그램을 다시 배포하지 않고도 업데이트가 가능
- 독립적으로 개발가능
- 서비스 하나가 다운되더라도 전체 서비스에 영향을 끼치지 않음
- 서비스를 독립적으로 확장가능, 리소스의 유연한 운용 가능
단점
- 서비스간 통신방법이 필요하고 복잡함
- 서비스끼리의 테스트가 어려움
- 복잡하고 독립된 구조로 인해 통합적인 유지관리가 어려워질 수 있음
Saga (말로 전하다 feat.아이스랜드언어로)

사가 패턴 1 choreography(kafca 같은거로) /// 가벼운 관점으로는 추천
이벤트 한두개 티키타카 하는 정도면 좋은 방법
A- > B -> C -> D - > E
사가 패턴 2 orchestrator /// 중앙 관리 시스템이 필요한 경우
오케스트레이션(orchestration)은 오케스트레이터(orchestrator) 라는 중앙 컨트롤러가 보상 작업을 트리거하는 방식
중앙 집합화가 되어 있다.
단점
서버가 많아 질수록 orchestration 서버 부담 API 몇백개.....
orchestration 서버에 문제가 생기면 심각해짐
크린 아키텍처 (포트 인아웃 아키텍쳐)
Dependency rule (종속성 규칙)
종속성의 흐름을 제어하는 것이 주목적입니다. 캡슐화를 통해 내부 계층을 외부 계층과 분리시키고 내부는 외부를 모르게 하며 영향을 받지 않도록 종속성의 흐름을 제어할 수 있습니다.
Abstraction principle (추상화 원리)
가장 안쪽에 있는 계층이 제일 추상화된 영역으로 바깥 영역으로 향할수록 내부 계층을 활용하여 세부 사항을 구현합니다.
SOLID (객체 지향 설계 원칙)
확장가능하며 유지보수 가능한 유연한 소프트웨어 아키텍처를 만들기 위한 5가지의 필수 원칙입니다.


멀티 모듈
포트만 여러게 해서 돌려돌수 있다 msa 연습.
(아니면 여러컴 / virtual machine 같은거로 도 연습 가능)

ERD

ERD 다이어 그램을 보면
메인 도메인으로 모이게 된다.
메인 도메인 중심적으로 설계를 하면 이렇게 모인다,
CICD

코딩 ->
배포 + 통합 운영 까지도 잘 가게 설계 되었다면 CICD 가 잘 되었다고 말할수 있다.

build pipe line 보면 아시겠지만.
jacoco 관련되서 정적 빌드 툴 이다 ( 퀠리티 분석 툴 ) 플러그인 내부데이터 로 있는거고
한번 SonarQube 로 해보자.