본문 바로가기

아키텍쳐를 고민하기10

도메인 이벤트 기반 아키텍처의 이벤트란? 매주 일요일 밤 10시마다 지인과 함께 도메인 이벤트 기반 아키텍처를 이해하는 연습을 하고 있습니다. 도메인 이벤트 기반 아키텍처을 이야기하면 대부분 Event Souring 과 CQRS 가 가장 먼저 언급되곤 합니다. 이 모든 단어의 한 가운데에 있는 것은 바로 이벤트입니다. 아래는 과거에 작성했던 이벤트 관련 블로그 글입니다. 앞으로 이야기 할 부분에 대해서 관련있는 내용이라 읽기를 추천드립니다. 메세지와 이벤트의 차이점은 무엇인가? 들어가기 트레바리에서는 도메인주도설계를 실천하고 있습니다. 도메인주도설계라는 것은 말 그대로 도메인을 중심으로 복수의 도메인이 책임,역할, 협력을 할 수 있도록 개발하는 것을 말합 happy-coding-day.tistory.com 이벤트 스토어(?) 이벤트 소싱(?) .. 2023. 8. 28.
헥사고날 아키텍처(Hexagonal Architecture) 코드로 이해 해보기 EventsJdbcEntityRecordPublishedEventService 이 부분은 '만들면서 배우는 클린 아키텍쳐' 의 책을 보고 배운점과 느낌점을 설명합니다. 헥사고날 아키텍쳐란 무엇인까요? 헥사고날 아키텍쳐는 레이어드 아키텍처(Layered Architecture)의 단점을 해결하기 위해 나왔습니다. 어떻게 해결했는가? 바로 의존성의 역전법칙입니다. 우리가 흔히 아는 레이어드 아키텍쳐는 위에서 아래로 의존성을 가진 형태를 의미합니다. 여기서 만약 의존성 역전 법칙을 활용하면 아래와 같은 아키텍쳐로 변경되어집니다. 이런 형태를 각 계층마다 적용하다 보니, 핵사고날 아키텍쳐의 형태를 띄게 됩니다. 육각형 안에는 도메인 엔티티와 상호작용하는 유즈케이스가 있고, 모든 의존성을 엔티티를 향해 있습니다... 2022. 4. 29.
Java Garbage Collection 다시 살펴보기 출처: d2.naver.com/helloworld/1329 docs.google.com/presentation/d/1wkTP8YaSsxK-Zjd_cv9ofBEgihz1-ZiZfXNWYo3oRPM/edit#slide=id.g8c711dc557_1_92 과정 GC에 대해서 알아보기 전에 알아야 할 용어가 있다. 바로 'stop-the-world'이다. stop-the-world란, GC을 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것이다. stop-the-world가 발생하면 GC를 실행하는 쓰레드를 제외한 나머지 쓰레드는 모두 작업을 멈춘다. GC 작업을 완료한 이후에야 중단했던 작업을 다시 시작한다. 어떤 GC 알고리즘을 사용하더라도 stop-the-world는 발생한다. 대개의 경우 GC 튜닝이.. 2020. 11. 25.
JVM 이해하기 - 3 (JVM 구조 - 클래스로더, 런타임 데이터 영역, 실행 엔진) 참고자료 - d2.naver.com/helloworld/1230 위 페이지에서 가져온 내용입니다. 클래스 로더(Class Loader)가 컴파일된 자바 바이트코드를 런타임 데이터 영역(Runtime Data Areas)에 로드하고, 실행 엔진(Execution Engine)이 자바 바이트코드를 실행. 클래스 로더 자바는 동적 로드, 즉 컴파일 타임이 아니라 런타임에 클래스를 처음으로 해당 클래스를 로드하고 링크하는 특징이 있다. 이 동적 로드를 담당하는 부분이 JVM의 클래스 로더이다. 자바 클래스 로더의 특징은 다음과 같다. 계층 구조: 클래스 로더끼리 부모-자식 관계를 이루어 계층 구조로 생성된다. 최상위 클래스 로더는 부트스트랩 클래스 로더(Bootstrap Class Loader)이다. 위임 모델.. 2020. 11. 25.
JVM 이해하기 - 2 (자바의 바이트 코드) Write Once, Run anywhere(WORA) 자바의 바이트 코드 WORA를 구현하기 위해 JVM은 사용자 언어인 자바와 기계어 사이의 중간 언어인 자바 바이트코드를 사용합니다. 이 자바 바이트코드가 자바 코드를 배포하는 가장 작은 단위입니다. JVM을 이야기 할 때에는 자바 바이트코드를 빼놓을 수 없다. JVM은 자바 바이트코드를 실행하는 실행기이다. 자바 컴파일러는 C/C++등의 컴파일러처럼 고수준 언어를 기계어, 즉 직접적인 CPU명령으로 변환하는 것이 아니라, 개발자가 이해하는 자바 언어를 JVM이 이해하는 자바 바이트코드로 번역한다. 따라서 자바 바이트코드는 플랫폼 의존적인 코드가 없기 때문에 JVM이 설치된 장비라면 CPU나 운영체제가 다르더라도 실행할 수 있고, 컴파일 결과물의 크기.. 2020. 11. 24.
JVM 이해하기 - 1 (JVM 특징 이해하기) 자바를 이용하는 개발자라면 자바 바이트 코드가 JRE위에서 동작됨을 이해한다. 그러나, JRE에서 가장 중요한 요소는 자바 바이트 코드를 해석하고 실행하는 JVM(Java Virtual Machine) JVM은 하나의 개념이고, 스펙이다. 이를 구현한 객체가 Java VM, Delvik VM 등이 있다. JRE는 자바 API와 JVM, Native Method으로 구성되며, JVM의 역할은 자바 애플리케이션을 클래스 로더(Class Loader)를 통해 읽어 들여서 자바 API와 함께 실행하는 것 JVM의 특징 스택 기반의 가상 머신 : 대표적인 컴퓨터 아키텍처인 인텔 x86아키텍처, ARM 아키텍처와 같은 하드웨어가 레지스터 기반으로 동작하는 데 비해 JVM은 스택 기반으로 동작한다. 심볼릭 레퍼런스 .. 2020. 11. 24.
안정성:패키지 결합도의 원칙 Photo by Scott Webb on Unsplash 패키지 설계의 아키텍쳐에 작용하는 힘은 기술적이기도 하고, 정치적이기도 하며, 쉽게 변화하는 힘이기도 하다. 어쩌면, 로버트.C 마틴은 위 문구를 절실하게 이야기 하고 싶었던 것일수도 있다는 생각을 했다. 책을 읽으면 읽을수록, 기술적인 관점에서의 아키텍쳐와, 정치적으로, 그리거 빠르게 변화되는 요구사항은 언제나 우리의 아키텍쳐의 변경을 강요하게 만든다고 생각합니다. 로버트 마틴의 클린 소프트웨어의 책 내용을 발췌하여, 정리 후 저의 내용과 함께 적어내렸습니다. 들어가기 이번에는 패키지의 결합도와 관련된 법칙 3가지에 대해서 알아볼 예정입니다. 이 부분을 읽으면서, 느꼈던 것은 내가 유지보수 하고 있는 서비스의 경우에 충분히 적용해볼수 있고, 아래.. 2020. 9. 5.
단위 크기:패키지 응집도의 원칙 Photo by Scarbor Siu on Unsplash 로버트 마틴의 클린 소프트웨어의 책 내용을 발췌하여, 정리 후 저의 내용과 함께 적어내렸습니다. 들어가기 여기서 우리는 앞서 언급한 6가지 원칙 중, 패키지 응집도와 관련된 원칙 3가지를 살펴볼 예정입니다. 패키지 응집도 원칙 세 가지는 개발자가 어떻게 클래스를 패키지에 분류해 넣을지 결정할 때 도움이 됩니다.이 원칙을 적용하기 전 클래스와 클래스 상호 관계가 일부분이라도 밝혀져 있어야 한다. 즉, 이 원칙들은 클래스를 분류할 때 '상향식'접근 방법을 따릅니다. 1. 재사용/릴리즈 등가 원칙(Release-Reuse Equivalency Principle) -REP 재사용의 단위가 릴리즈의 단위다. 이 부분을 읽으면서 가장 먼저 드는 생각은, ".. 2020. 9. 5.
패키지 설계의 원칙 이란 무엇일까? Photo by Scott Webb on Unsplash 클린 아키텍쳐의 Ch20 - 패키지 설계의 원칙을 내용을 읽고, 저의 주관과 합쳐 아래 내용을 적었습니다. 혹시라도 잘못된 부분, 잘못 이해된 부분에 대해서는 댓글 남겨주시면 반영하도록 하겠습니다. 들어가기 우리가 객체지향 프로그래밍을 할 때 흔히 SOLID 원칙이라 불리는 내용이 있습니다. SOLID 원칙을 잘 지켜내면서, 코딩을 한다라면- 그 코드는 흔히 질좋은 코드다. 라고 이야기할 수 있습니다. 마찬가지로, 패키지를 구성하는 방법에서도 SOLID 와 같은 원칙이 존재한다고 생각했습니다. 그런 부분이 궁금해고, 그 부분을 해결할 수 있는 요소로서 로버트 마틴의 클린 아키텍처 책을 살펴보게 되었습니다. 저와 같은 고민을 가진 사람들에게 조금이나.. 2020. 9. 5.
서비스 지향 아키텍쳐?? Service-Oriented Architecture 서비스 지향 아키텍쳐는 무엇일까? 토마스 얼에 의해 정의된 SOA의 몇 가지 원리를 이해하고 간략하게 서비스 지향 아키텍쳐에 대해서 이해하자. 서비스는 언제나 상호 운용성(interoperable)이 있다. 그 외 서비스의 설계 원리를 살펴보면 서비스 설계 원리 내용 1. 서비스 계약 서비스는 그 목적과 기능을 하나 이상의 설명 문서에 계약으로써 표현한다. 2. 서비스의 느슨한 결합(Serivce Loose Coupling) 서비스는 의존성을 최소화하고 오직 서로에 대해서만 알고 있다. 3. 서비스 추상화(Serivce Abstraction) 서비스는 그들의 계약만을 게시하고, 클라이언트로부터 내부 로직을 숨긴다. 4. 서비스 재사용성(Service Reusability) 서비스는 좀 더 대단위(coar.. 2020. 9. 4.