Programming 94

Domain Driven Design/Eric Evance - 1. 개요 ~ Crunching Knowledge

개요 A domain model is not a particular diagram; it is the idea that the diagram is intended to convey. It is not just the knowledge in a domain expert’s head; it is a rigorously organized and selective abstraction of that knowledge. 도메인 모델이란 실질적인 다이어그램이 아니라 전달해야할 추상적인 다이어그램이다. 단지 도메인 전문가의 머릿속 지식에 그칠뿐만 아니라 엄격하게 "조직화"되고 "선별된" 지식이다. Knowledge Crunching 효과적인 domain 모델러는 지식을 잘 쪼개는 사람이다. Knowledge Crun..

Programming/MSA 2022.07.19

spring5의 Reactive 프로그래밍 모델

어느분께서 알려주셔서 찾아보았다. 리액티브 프로그래밍 모델 이란? Keyword : 반응형(이벤트Driven), 비동기(Non-Blocking), BackPressure(안전장치) 반응형 : 리액티브로 짜여진 어플리케이션은 탄력적으로 worker thread가 반응할 뿐만아니라 worker thread가 레거시 방식보다 더많이 늘어날 수 있다. 이는 각 worker thread가 상호의존성이 없어 tied up하지 않기 때문이다. 마치 Nginx와 Apache의 아키텍처 차이와 같은 느낌.. 비동기 : Thread A가 Thread B를 참조할 경우 Thread A는 Thread B의 Return을 대기하지 않는다. Thread는 각자 자기 할일을 하는것 BackPressure : Message(Comm..

Programming/Java 2022.07.14

CQRS 패턴이란

한마디로 "Read와 CUD 트랜젝션을 분리할 수 있도록 어플리케이션 Model을 나누는 것" 기존의 무슨 문제가 있었나? 작업의 일부로 필요하지 않더라도 올바르게 업데이트해야 하는 추가 열 또는 속성과 같이 데이터의 읽기 및 쓰기 표현이 일치하지 않는 경우가 많습니다. 동일한 데이터 집합에서 작업을 병렬로 수행할 때 데이터 경합이 발생할 수 있습니다. 기존의 접근 방식은 데이터 저장소 및 데이터 액세스 계층의 로드와 정보를 검색하는 데 필요한 쿼리의 복잡성으로 인해 성능에 부정적인 영향을 미칠 수 있습니다. 보안 및 사용 권한 관리는 복잡해질 수 있습니다. 각 엔터티는 읽기 및 쓰기 작업이 모두 적용되므로 잘못된 컨텍스트에서 데이터를 노출할 수 있습니다. 어떤 효과가 발생하는가? 독립적인 크기 조정 :..

Programming/MSA 2022.07.06

(JAVA) Multi-Thread를 활용하여 메인페이지를 빠르게 불러오기

Mobile APP에서는 메인화면에서 워낙 많은 모듈을 호출하다보니 multi thread를 사용하여 병렬로 데이터 처리를 하는 방식이 나름 보편화 되어 있는것 같다. https://www.youtube.com/watch?v=IVt7HjUM0LQ&t=388s 최근 어느 사이트에서 Web 메인페이지가 느리다는 보고가 있었고, 그 이유는 메인페이지에서 특정 기관의 API에서 데이터를 받아오는데 시간이 소요되어서 느리다는 이유였다. 나는 위 Youtube의 멀티스레드 방식이 해결책이 되지 않을까 하여 자체적으로 테스트를 해보았다. 아래는 Controller에서 View에 특정 데이터를 던지는 것인데 @RequestMapping("/") public String index(Model model) { int te..

Programming/Java 2022.06.30

Graph QL이란

이제 API서버가 단순히 데이터 호출이라면 GraphQL로 대체될거 같다.. 어째 점점 개발이라는게 컨피규레이션으로 다 만들수있게 변해가는거 같음.. GraphQL이란 API개발의 프레임워크인데, 서버/클라이언트의 Endpoint 언어와 무관하게 개발할 수 있다. 서술적이며 자체 문서화 방식의 프레임워크라고 보면된다. 그리고 Endpoint의 통신을 해소해줄 뿐만아니라 SQL에 대한 비종속적인 쿼리까지 가능하다...(JPA는 Java라도 Dependency가 있는데...) EndPoint Gateway를 언어로 개발하는게아니라 GraphQL 모듈설정만 하면 된다. 쿼리/뮤테이션(query/mutation) 이란 건 그냥 용어만 굳이 나눈것. 프로그래밍 상에서는 두드러진 차이가 없다. 쿼리는 R 뮤테이션은..

Programming/기타 2022.06.22

(기사스크랩) 개발자가 알아야 할 클라우드 프로그래밍 언어 11가지

출처 : https://www.kcloudnews.co.kr/news/articleView.html?idxno=11018 개발자가 알아야 할 클라우드 프로그래밍 언어 11가지 - 한국클라우드신문 [한국클라우드신문=이수현 기자] 클라우드 컴퓨팅 프로그래밍은 다양한 형태를 취한다. 백엔드 개발자에게 이는 클라우드 네이티브 앱의 개발 또는 상호 연결된 마이크로서비스 세트의 지속적 www.kcloudnews.co.kr [한국클라우드신문=이수현 기자] 클라우드 컴퓨팅 프로그래밍은 다양한 형태를 취한다. 백엔드 개발자에게 이는 클라우드 네이티브 앱의 개발 또는 상호 연결된 마이크로서비스 세트의 지속적 제공을 뜻할 수 있다. 관리자에게는 클라우드 기반 리소스를 자동으로 프로비저닝하는 스크립트 개발을 의미할 수 있다...

Programming/기타 2022.06.16

React+TypeScript 개발환경 세팅 및 Startup

패키지 매니저 NPM 사용 시 ※ 일반적인 React 프로젝트 시작 시 https://developer.mozilla.org/ko/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_getting_started React 시작하기 - Web 개발 학습하기 | MDN 이 문서에서는 React를 소개합니다. 우리는 React에 대한 약간의 배경지식과 사용 예시, 로컬 컴퓨터에 React 툴체인을 설정하는 방법을 배우고 프로세스에서의 React 동작 원리를 배우기 위해서 간단 developer.mozilla.org npx create-react-app demo-jpkim --template=typescript npm install -S s..

MSA에 대한 기본개념 - 5. 회복성

회복성을 결정하는데 있어서 다음의 요소가 있다. (회복성에 대한 이슈는 동기호출에서 많이 발생한다.) 그리고 구현기술/패턴은 다음과 같다. 1. 로드벨런싱(부하분산) → 일반적인 로드벨런서, Gateway, Ribbon 등 2. 회로차단기| 3. 폴백 4. 벌크헤드 → 서킷 브레이커 동기호출로 서비스를 구현하게 되었을 경우 특정 서비스의 트랜잭션이 지연되어 동기된 다른 서비스에도 지연현상이 전파될 수 있음. 이를 차단하기 위해 서킷브레이커 패턴을 적용 장애감지 시 차단기 작동 ▶ 일시적으로 Failback으로 서비스 대체 ▶ 일부 트래픽으로 서비스 정상여부 확인 ▶ 정상확인 시 차단기 해제

Programming/MSA 2022.06.12

MSA에 대한 기본개념 - 4. 서비스를 나눈뒤 상호참조, 통합

MSA 서비스를 분리한 후에는 어떻게 통합(상호연동, 객체참조)할 것인가? → API Gateway 역할 서비스 라우팅 CORS(교차출처) 허용 ACL 적용하여 잘못된 호출 필터링 기타 보안정책 적용(ex. Prevent DDOS) 로드벨런싱 관련도구 Proxy, Kube Gateway Service, [Zuul, Ribbon] → Service Registry+Service Discovery 역할 서비스 Discovery가 가능하도록 서비스 경로 저장 관련도구 Eureka, Kube DNS Service, 일반DNS서비스, Feign Client → URI Path-based Call (Req-Res) 역할 동기호출 관련도구 REST API → Message Queue Call (Pub-Sub) 역할 ..

Programming/MSA 2022.06.12

MSA에 대한 기본개념 - 3. Domain Driven Design 으로 가는 여정

어플리케이션 도메인의 변화 회사가 성장함에 따라 어플리케이션의 Core(중요한것)와 Supporting(덜 중요한것)으로 나누게 된다. 예시) Core - 사용자들은 주문하기 위해 많은 상품을 클릭하고 "구매" 버튼을 클릭 - 상품이 주문되면 배송팀은 상품의 배송을 준비 - 주문이 취소되거나 완료되면 상품재고 수치 감소 Supporting - 고객들은 매진된 상품을 구매할 수 있으며 이는 입고뒤 해소 - 배송 상태 변화시마다 Notification이 고객에게 전달 - 주문과 취소를 반복하는 고객은 블랙리스트로 관리 - 마케팅 팀은 매일 오전 9시에 추천상품을 메일링 회사가 더 규모가 성장하면 팀은 자치성과 동기부여를 위해 더 나뉘어 지게 된다. 예시) 배송관리팀 - 상품이 주문되면 배송팀은 상품의 배송을..

Programming/MSA 2022.06.10