전체카테고리 468

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

어댑터의 이해 핵사고날 아미텍처에서 어댑터의 역할을 이해하기 위한 실용적인 비유는 컴퓨터의 원격 연결에 대한 비유다. 컴퓨터에 대한 원격 연결을 위한 텔넷, 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 의 Tokenizer와 Text Analyze 에 대해서

데이터 색인 과정에서 검색 기능에 가장 큰 영향을 미치는 단계가 Tokenizer이다. 데이터 분석 과정에서 Tokenizer는 반드시 한 개만 사용이 가능하며 tokenizer 항목에 단일값으로 설정된다. Tokenizer란 Document중에서 분석코자 하는 문자열(Text) Field를 쪼개기 하는 것이다. 예를들어 Letter 토크나이저를 활용하면, "quick.brown_FOx" 같은 단어도 "quick", "brown", "FOx" 처럼 모두 분리된다. 이렇게 분리된 Document를 Term기준으로 역인덱싱을 하게 된다. Term ID the doc1, doc2, doc3 brown doc1, doc4 jump doc1, doc2, doc3, doc5, doc6 이렇게 Token화 된 Ter..

PaaS/Data 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

keyCloak 기능 설명 - 2. Clients

Clients 메뉴에 대해서 설명한다. 신뢰되는 Browser Application 서비스를 말한다. 이 Clients들은 로그인을 요청할 수 있다. 당신은 각 Client에 고유한 Role을 줄 수 있다. Client의 구성요소 ※ 너무 많아 주요한 것만 다루겠다. [Settings 탭] Login Theme : 해당 Client에 할당할 로그인 화면 Client Protocol : 인증 프로토콜을 설정. OpenId Connect는 인증서버의 정책에 따르겠다는 것이고, SAML은 Cross Domain SSO를 포함하여, Web 기반 인증을 제공 AccessType : 접근하는 방식. Contidential은 로그인을 시도할때 Secret을 필요로하는 경우, Public은 Client가 Secret을..

PaaS/기타 2023.10.18

keyCloak 기능 설명 - 1 Realm Setting

Realm Setting 메뉴에 대한 기능을 설명한다. [일반 탭] HTML Display Name : Display Name이 HTML로 Response된다. Rendering해서 사용할 일이 있을때 필요한것 같다. Frontend URL : keycloak 8버전부터 추가된 기능으로, keycloak에 요청하는 Frontend의 URL 이다. 보통 Request에서 가져오는 방식이었으나, 현재 keycloak은 운영환경에서는 Realm마다 고정적으로 세팅하기를 권장하고 있다. Enabled : Realm사용여부 User-Managed Access : 활성화 시 User는 자신의 권한과 Resource를 Account Management Console을 통해 조정할 수 있다. Endpoints : 인증..

PaaS/기타 2023.10.17

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