본문 바로가기

ApplicationArchitecture (AA)

(7)
모듈간 상호작용 # 모듈간 상호작용이란?모듈간 상호작용 정리모듈간 상호작용은 Controller에서 Service를 호출하고 Service에서 Mapper를 호출하는 과정또한 모듈간의 상호작용 이라고 볼 수 있다.controller에서 service를 호출하고, service에서 mapper를 호출하는 과정은 모듈 간의 상호작용의 좋은 예이다. 이러한 상호작용을 통해 각 모듈은 독립적으로 동작하면서도 협력하여 전체 시스템의 기능을 수행한다. 그리고, 모듈 간의 상호작용은 보통 소프트웨어 시스템의 내부 아키텍처(Inner Architecture)로 볼 수 있다. 내부 아키텍처는 시스템 내의 다양한 모듈들이 어떻게 상호작용하고 협력하는지를 정의한다. 이를 통해 시스템의 구조와 동작 방식을 이해하고 설계할 수 있다. # MV..
SpringBoot를 기반으로 Application Architect 설계하기 Spring Boot를 백엔드로 사용하는 애플리케이션 아키텍트 역할은 다음과 같은 역할과 책임을 수행해야 한다.아키텍처 설계시스템의 전체 아키텍처를 설계하고, 모듈 간의 상호작용을 정의한다.마이크로서비스 아키텍처, 레이어드 아키텍처 등 적절한 아키텍처 패턴을 선택한다.기술 스택 선택프로젝트에 적합한 기술 스택을 선택한다. 예를 들어, 데이터베이스, 메시징 시스템, 캐시 시스템 등을 결정한다.보안애플리케이션의 보안 요구사항을 정의하고, 인증 및 인가 메커니즘을 설계한다.데이터 보호, 암호화, 보안 감사 등을 고려한다.성능 최적화애플리케이션의 성능을 최적화하기 위한 전략을 수립한다.캐싱, 데이터베이스 최적화, 비동기 처리 등을 고려한다.스케일링애플리케이션이 증가하는 트래픽을 처리할 수 있도록 스케일링 전략을..
Hexagonal Architecture와 Domain Driven Development 개념 및 구현 방법 정리 일단 정리하기에 앞서, SpringBoot, Java 17, Mybatis, Postgresql 정도로 프레임워크를 만들었다. 프런트는 화면에서 뿌려주는 데이터만 표시하고 링크 정도로만 구현할 거라 html로 정했다. 파일 구조는 아래와 같다.src ├── main │ ├── java │ │ └── com │ │ └── example │ │ ├── api # API Layer (REST Controllers) │ │ │ └── EntityController.java │ │ ├── application # Application Layer (Service Interfaces and Implementations) │ │ │ ├── EntityService.java │ │ │ └── EntityServiceIm..
Event-Driven-Architecture # Event-Driven-Architecture, 이벤트 기반 아키텍처- 이벤트 기반 아키텍처를 만들어봤다.음... 옵저버도 이벤트 기반이고, 이벤트 소싱 패턴도 이벤트 기반, 테스트 구현을 해보니 실제로 이벤트 기반 패턴과 EDA와는 큰 차이가 없는거 같다. 규모의 차이라면 아키텍처가 더 큰 의미를 가지니까? 음 어쨌든 동기, 비동식으로 이벤트를 실행 및 전달하는 관점에서는 비슷한것 같은 느낌? 코린이 입장에선 옵저버로 카프카 서비스로 payload를 넘기든지 아니면 EDA로 payload를 넘기든지 뭐 어디로 가든 서울로만 도착하면 된다는 느낌?- 진짜 구현하기 나름인것 같다. mvc 패턴으로도 동기, 비동기로 Kafka로 payload를 넘길수는 있으니까...!1. 아래는 EDA를 샘플코드로 구현..
ApplicationArchitecture 그려보기 # ApplicationArchitecture 그려보기 1. 지금까지...? - 헥사고날 아키텍처라고 인터넷 보고 구성한게 있는데 이게 산으로 가는건지 맞게 구성한건지 모르겠지만 일단 헥사고날이라고 이름을 붙였다. (디자인 패턴에 대해서 공부를 많이 해야겠다...!) 특이점은, 아파치 카프카를 붙여서, 퍼블리싱과 컨슈밍 하도록 구성을 하였고, 컨슈밍 할때 h2 db에 자동으로 message 컬럼에 insert되도록 구성을 했다. 그리고 ... 모든 컨슈밍 데이터들은 kafka_message.txt라는 파일에 저장되도록 구성을 하였다. 그리고 잡다한 기능이 몇개 더 있는데 설명은 나중에 하겠다. - 거의 매일 1주일간 새벽 2시까지 밤잠 안자며 만든 결과물 이긴 한데, 얼마나 더 확장될지 모르겠다. 일단 ..
(2) Hexagonal Architecture - 구현 # Hexagonal Architecture을 구현해보자. 나는 개발자가 아니다. 흔히 이야기하는 TA (Technical Achitect) 업무를 하고 있다. 근데 클라우드 환경으로 전환이 되면서, 개발 코드와 애플리케이션 아키텍처를 모르고 인프라 아키텍처를 온전히 구현 할 수가 없다. 물론 개발자 처럼 알아야 하는건 아니지만, 코드를 가지고 개발자와 이야기를 할 정도가 되어야 한다. 그래서 Application단의 아키텍처 또한 알아 두어야 한다. MVC패턴부터 시작해서 LayerdArchitecture, HexagonalArchitecture등 애플리케이션을 구현하기 위한 애플리케이션 단의 아키텍처도 하나하니씩 정리해보자. Hexagonal 아키텍처를 내 마음대로 인터넷을 보고 구현을 해보았다. 정..
(1) Hexagonal Architecture - 설계 # Hexagonal Architecture (또는 Ports and Adapters Architecture) 패턴 Hexagonal architecture 패키지의 샘플 코드에 대해서 알아보자. 예전부터 정리를 하자하자하자 했었는데 시간이 없어서 못했었다. 오늘 시간이 조금 생긴 관계로 샘플 코드를 만들고 정리를 해보면 아래와 같다. 일단 빈이란? 아래글을 참고. 빈(Bean)은 스프링 컨테이너에 의해 관리되는 재사용 가능한 소프트웨어 컴포넌트이다. 즉, 스프링 컨테이너가 관리하는 자바 객체를 뜻하며, 하나 이상의 빈(Bean)을 관리한다. 빈은 인스턴스화된 객체를 의미하며, 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 한다. 그리고 인스턴스 란? 인스턴스는 주로 아래처럼 된것을 인스턴스 라고 한다..