Programming 89

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

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

JPA 사용법

Hexagonal Architecture, Clean Architecture가 뜨면서 JAVA와 Python에도 어플리케이션의 Repository, Entity 정의가 필요해지고 있다. Git 주소 : https://github.com/armyost/jpaJoinSample GitHub - armyost/jpaJoinSample Contribute to armyost/jpaJoinSample development by creating an account on GitHub. github.com JPA는 Entity, Repository가 필요하다. Repository는 일종의 Entity에 대한 연산을 위한 인터페이스 이다. JPA가 필요한 이유는.. 요즘에는 워낙 다양한 데이터저장소가 있다보니 다양한 타..

Programming/Java 2023.10.11

Refresh Token에 대한 고찰

What Is a Refresh Token? Refresh token은 새로운 Access Key을 받아오기 위한 별도의 key이다. What Is the Purpose of a Refresh Token? Refresh token이 존재하는 이유는 access token의 짧은 주기 때문이다. 짧은 주기로 User Experience가 나빠질 가능성이 있으므로, 상대적으로 수명이 긴 Refresh token을 제공 이 Refresh Token을 어느 Layer에서 관리해야할지에 대한 고민들을 하고 있다. Client가 관리해야 할지, 서버에 저장해야 할지 고민하고 있다. 관련해서 한 포스팅을 보고 정리하고자 한다. ※ 관련포스팅 : https://tecoble.techcourse.co.kr/post/20..

Programming/기타 2023.09.25