Programming 91

AWS SaaS Boost 아키텍처에 대해서 알아보자

SaaS Boost 배포 과정 설명 1,2,3) SaaSBoost 환경을 프로비저닝 한다. https://github.com/awslabs/aws-saas-boost 4) 프로비저닝된 SaaSBoost 환경에 로그인 한다. 5) 앞으로 배포하게될 어플리케이션을 등록한다. 6) ECR레지스트리에 Image Build된 해당 어플리케이션을 Push 한다 7) 테넌트에 배포한다. SaaSBoost 콘솔 SaaSBoost 콘솔 아키텍처 Git소스코드를 보면 SaaSBoost의 모든 어플리케이션은 Lambda에서 돌아간다... 콘솔뿐만 아니라 다양한 도메인을 Lambda로 구성해서 운영하고 있다. 도메인은 Onboarding, Metrics, User, Settings, Tenant, Quata가 있다. Bill..

Programming/MSA 2023.10.30

핵사고날 아키텍처의 설계와 구현 - 서비스

서비스 토폴로지 및 인벤토리 시스템은 네트워크 자산의 가상화와 관리에 대한 것이므로 사용자가 이러한 네트 워크 자산의 컬렉션을 처리할 수 있게 해야 한다. 이를 수행하는 방법 중 하나는 서비스를 이용하는 것이 다. 서비스를 통해 시스템 엔티티와 값 객체를 처리하기 위한 동작을 정의할 수 있다. 라우터 서비스 앞에서 Router , CoreRouter , EdgeRouter 엔티티를 구현할 때 라우터 컬렉션을 필터링하는 프레디케이 트를 반환하는 메서드도 작성했다. 도메인 서비스를 사용하면 다음과 같이 그러한 컬렉션을 필터링하는 다음과 같은 프레디케이트를 사용할 수 있다. package dev.davivieira.topologyinventory.domain.service; import dev.daviviei..

Programming/기타 2023.10.26

핵사고날 아키텍처의 설계와 구현 - 어댑터의 이해

어댑터의 이해 핵사고날 아미텍처에서 어댑터의 역할을 이해하기 위한 실용적인 비유는 컴퓨터의 원격 연결에 대한 비유다. 컴퓨터에 대한 원격 연결을 위한 텔넷, SSH, RDP 같은 다양한 프로토콜이 있다. 이러한 것들이 어댑터라고 할 수 있다. 핵사고날 시스템이 제공하는 기능에 엑세스 수단으로 지원되는 기술을 정의하는 포로토콜처럼 동작한다. 앞의 비유를 사용하면 운영체제를 자바나 다른 프로그래밍 언어를 사용해 개발된 애플리케이션으로 대체할 수 있다. 우리의 자바 어플리케이션이 핵사고날 애플리케이션이라고 가정하면 해당 애플리케이션에서 제공되는 기능은 애플리케이션 핵사곤과 도메인 핵사곤에서 제공되는 유스케이스 → 포트→ 그리고 비즈니스 규칙으로 구성된다. REST와 RPC 클라이언트에서 이러한 기능을 사용하고..

Programming/기타 2023.10.25

핵사고날 아키텍처의 설계와 구현 - 유스케이스 작성 방법

드라이버 액터는 SuD 행위 중 하나를 트리거하는 사람이나 시스템이고, 드리븐 엑터는 SuD가 소비하는 외부 시스템이다. 우선 액션을 정의한다. 예를들어 1. 라우터 ID를 찾는다. 2. 네트워크 주소가 이미 존재하는지 확인한다. 3. CIDR이 최솟값 아래인지 확인한다. 4. 이전 검사에서 문제가 없다면 통보된 라우터에 네트워크를 추가한다. 형식을 갖춘 작성 기법과 간단한 작성 기법 외에, 자동화된 테스트로 직접 사용자의 의도를 코드로 표현하는 것이 가능하다. 이 방법은 발견, 형식화, 자동화와 관련된 행위 주도 설계(BDD) 원칙에 의존한다. 이 방법에서는 비즈니스 관련자의 요구를 발견하기 위해 그들과 이야기 하는 것으로 시작한다. 이러한 발견 과정의 결과는 비즈니스 요구를 기술하는 상황과 행동에 대..

Programming/기타 2023.10.25

핵사고날 아키텍처의 설계와 구현 - 왜 핵사고날 아키텍처인가?

핵사고날 아키텍처의 이해 헥사고날 아키텍처의 주된 목적은 비즈니스 코드를 기술 코드로부터 분리하는 것이다. 그러면 애플리케이션에 대해 자동화된 회귀 테스트를 만들수 있고, 다양한 데이터베이스를 손쉽게 적용할 수 있다. 비즈니스 코드가 어디에 존재해야 하는지, 기술 문제로부터 격리되고 보호돼야 하는 위치를 결정해야 한다. 이것은 우리의 첫번째 핵사곤, 즉 도메인 헥사곤을 생성하게 될 것이다. - 도메인 핵사곤 : 소프트웨어가 해결하기를 원하는 핵심 문제를 설명하는 요소들을 결합한다. 도메인 핵사곤에서 활용되는 주된 요소는 엔티티와 값 객체다. 엔티티는 식별자를 할당할 수 있는 것을 의미하며, 값 객체는 엔티티들을 합성하기 위해 사용하는 불변 컴포넌트다. 도메인 핵사곤은 실 세계 문제를 이해하고 모델링하는 ..

Programming/기타 2023.10.24

Nori Tokenizer를 활용한 검색서버 개발

아래는 Nori Tokenizer를 활용한 검색서버개발 Git이다. https://github.com/armyost/elasticSearchEngine/tree/main GitHub - armyost/elasticSearchEngine Contribute to armyost/elasticSearchEngine development by creating an account on GitHub. github.com Tokenizer에 대한 자세한 설명은 다음을 참고한다. https://armyost.tistory.com/399 ElasticSearch 의 Tokenizer와 Text Analyze 에 대해서 데이터 색인 과정에서 검색 기능에 가장 큰 영향을 미치는 단계가 Tokenizer이다. 데이터 분석 과..

Programming/Python 2023.10.23

ElasticSearch 406에러

Elasticsearch index() ERROR: ApiError(406, 'Content-Type header [application/vnd.elasticsearch+x-ndjson; compatible-with=8] is not supported', 'Content-Type header [application/vnd.elasticsearch+x-ndjson; compatible-with=8] is not supported') 라는 오류가 발생하였다. 알고보니 내가 올린 ElasticSearch 버전은 7이고, pip install 한 python module은 8버전 Client였다. 그래서 pip uninstall 후 pip install elasticsearch7 로 재설치 하였다.

Programming/Python 2023.10.19

SQLAlchemy Metadata로 테이블, 쿼리 개발. JOIN 샘플

SQLAlchemy에서 Table Join을 복잡하게 하는 경우가 많아, 가급적 쉬운 방법을 찾아보았다. 전체소스 코드 : https://github.com/armyost/hexagonalSample/tree/main GitHub - armyost/hexagonalSample: This is python Sample with Hexagonal Architecture This is python Sample with Hexagonal Architecture. Contribute to armyost/hexagonalSample development by creating an account on GitHub. github.com 1-1) src/app/domain/models/user.py 에 Class 모델 ..

Programming/Python 2023.10.17

Google의 검색 자동완성에 대해..

Google 검색창의 특징은 다음과 같다. 1) 작성중인 초성은 검색포함. (초성만 나열했을때는 영문으로 인식) 2) 자동완성(=자동추천) 제공 3) 고유명사, 인물의 경우 이미지도 같이 노출 4) 검색 History도 제공하며, 검색일치하는 내용 또한 제공 각 구현 현황에 대해 다음과 같이 확인되었다. 1), 2) 아래 autoComplete API로 검색한 결과 JSON 타입으로 다음과 같은 Suggestion이 발생했다. suggestqueries.google.com/complete/search?output=toolbar&hl=ko&q=김ㄱ 2) 초성 자동완성 시 무언가의 알고리즘을 추천이 뜨는것으로 보아, 애초에 검색된 Word List에 Weight(가중치)가 있을 것이다. 예를들어 "김ㄱ"은 ..

Programming/기타 2023.10.14

SQL Injection 에 대한 대응

공통 API 서버를 개발할때 Request로 넘어오는 Parameter의 자료형, 데이터크기, 데이터 형식을 사전에 Exception처리를 할 수 있도록 해야 좋다. 데이터형식은 정규화 할수 있다면 표현식을 사용하면 좋다. 예) if (stringValue != null && stringValue.matches("^[a-zA-Z]{2}[0-9]{3}$")) { System.out.println(stringValue + " is a ProductCode."); return "MessageCode"; } else if (stringValue != null && stringValue.matches("^[a-zA-Z]{2}-[a-zA-Z0-9]*-[a-zA-Z0-9]*$")) { System.out.printl..

Programming/기타 2023.10.13