본문 바로가기

분류 전체보기

(43)
[DDD] 1. 도메인 모델 시작하기 1.1 도메인이란? 도메인은 소프트웨어로 해결하고자 하는 문제 영역에 해당한다. 한 도메인은 다시 하위 도메인으로 나눌 수 있다. 한 하위 도메인은 다른 하위 도메인과 연동하여 완전한 기능을 제공한다 예를들어 고객이 물건을 구매하면 주문, 결제 배송, 혜택 하위 도메인의 기능이 엮이게 된다. 도메인마다 고정 된 하위 도메인이 존재하는 것은 아니다. 하위 도메인을 어떻게 구성할지 여부는 상황에 따라 달라진다. 1.2 도메인 전문가와 개발자 간 지식 공유 개발자는 요구사항을 분석하고 설계하고 코드를 작성하며 테스트하고 배포한다. 요구사항을 올바르게 이해하려면 개발자와 전문가가 직접 대화해야 한다. 개발자와 전문가 사이에 내용을 전파하는 전달자가 많으면 많을수록 정보가 왜곡되고 손실이 발생하게 되며, 개발자는..
[Spring] 비동기 프로그래밍 & ThreadPoolExecutor 생성자 - 개념 안녕하세요! 키크니 개발자 입니다. 🦒 비동기 프로그래밍에 대해서 강의를 보고 정리하고자 작성하였습니다. 😁 동기 / 비동기 개념 더보기 동기란? 동기는 요청을 보낸 후 응답 (결과물)을 받아야지만 다음 동장이 이루어지는 방식을 말한다. 모든 일은 순차적으로 실행되며 어떤 작업이 수행중이라면 다음 작업은 대기하게 된다. 장점: 설계가 간단하고 직관적 단점: 결과를 볼대 까지 아무것도 못하고 대기해야한다 비동기란? 비동기는 동시에 일어나지 않는다 의미한다. 요청과 결과가 동시에 일어나지 않는 거라는 약속. 요청한 그 자리에서 결과가 주어지지 않음 노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 된다. 장점: 결과가 주어지는 데 시간이 걸리더라도 그동안 다른 작업이 가능해 자원의 효율적인 사용이 가능 단..
[ElasticSearch] 클러스터 구축하기 안녕하세요! 키크니 개발자 입니다. 🦒 elasticsearch.yml 파일을 통해 설정할 수 있는 항목들 elasticsearch.yml: 엘라스틱서치를 구성하기 위해 기본이 되는 환경 설정 파일이다. Cluster 영역 cluster.name: my-application 클러스터 영역은 클러스터 전체에 적용 되는 설정이다. 클러스터의 이름을 설정하는 항목이다. 클러스터를 구성할 때는 클러스터를 구성할 노드들이 모두 동일한 클러스터 이름을 사용해야 한다. 이름을 변경하려면 클러스터 내의 모든 노드를 재시작해야 하기 때문에 처음부터 신중하게 설정해야 한다. Node 영역 node.name: node-1 노드 영역은 해당 노드에만 적용 되는 설정이다. 노드의 이름은 클러스터 내에서 유일해야 한다. 노드 이..
[GitHub] Github repository의 폴더에 흰색 화살표가 생기며 클릭이 안 되는 현상 멀티모듈로 구성하는 것을 연습하면서 깃허브에 업로드 하는데 업로드는 되었지만 흰색 화살표가 들어간(?) 폴더가 생기면서 하위폴더에 있는 것들을 확인할 수 없는 상황이었다. 이를 찾아보니 하위 폴더에도 .git 폴더가 존재하기 때문에 발생하는 문제라고 해서 직접 확인해보니 .git 이 들어있었다. 하위 폴더에 있는 .git 폴더들을 삭제한 후 git rm --cached . -rf 위와 같은 명령어를 사용하여 원격 저장소에 있는 파일들을 모두 삭제하여 상위폴더로 들어가 add, commit, push 를 진행하라하였지만 첫 commit이라서 그런지 잘 되지 않았따. 그래서 아래와 같이 Revert를 하여 원격 저장소에 있는 데이터를 되돌린 후 .git 폴더들을 삭제하고나서 git push -f 해주었더니 ..
[ElasticSearch] multi fields란? 현재는 다니고 있는 회사에서는 태그를 기준으로 매칭하여 상품 검색을 진행하고 있다. (개편 진행 중) 지금 구현해 놓은 검색이 마음대로 되지 않는(?) 현상이 발생하였다. 여러 필드를 기준으로 검색을 하였지만, 그 중 한가지 필드에 대한 검색이 문제가 있어 원하는 데이터가 검색되지 않았던 것이다. 해당 필드는 text 타입으로 설정되어있었다. 현재는 다니고 있는 회사에서는 태그를 기준으로 매칭하여 상품 검색을 진행하고 있다. 지금 구현해 놓은 검색이 마음대로 되지 않는(?) 현상이 발생하였다. 여러 필드를 기준으로 검색을 하였을 때 그 중 한 가지 필드에 대한 검색이 문제가 있어 원하는 데이터가 검색되지 않았던 것이다. 예를 들어 "vehicle"라는 filed에 "electric bus"를 검색하였는데..
[ElasticSearch] _doc error (The mapping definition cannot be nested under a type [_doc] unless include_type_name is set to true.) 책의 예제를 따라하다가 error 를 발견하였다. 아래와 같이 요청하였다. curl -X PUT "localhost:9200/copyto_index?pretty" -H 'Content-Type: application/json' -d' { "mappings": { "_doc": { "properties": { "first_name": { "type": "text" }, "last_name": { "type": "text" } } } } }' 결과값으로 에러가 발생하였는데 _doc 타입으로 매핑 정의를 할 수 없다는 뜻이었다. { "error" : { "root_cause" : [ { "type" : "illegal_argument_exception", "reason" : "The mapping defini..
[ElasticSearch] ElasticSearch 기본 개념 (클러스터, 노드, 인덱스, 샤드, 세그먼트, 매핑) 안녕하세요! 키크니 개발자 입니다. 🦒 오늘은 간단하게 클러스터, 노드, 인덱스, 샤드, 세그먼트, 매핑에 대해서 알아보았습니다. 클러스터란? 여러 대의 컴퓨터 혹은 구성 요소들을 논리적으로 결합하여 전체를 하나의 컴퓨터 혹은 하나의 구성 요소처럼 사용할 수 있게 해주는 기술이다. 클러스터 특징 여러 개의 엘라스티서치 프로세스들은 논리적으로 결합하여 하나의 엘라스틱서치 프로세스처럼 사용할 수 있게 해준다. 이 때 클러스터를 구성하는 하나 하나의 엘라스틱서치 프로세스를 노드라고 부른다. 여러 개의 노드로 클러스터를 구성하고 이 노드들이 하나의 엘라스틱서치처럼 동작하기 때문에 어느 노드에 API를 요청해도 동일한 응답과 동작을 보장 받을 수 있다. 단일 노드로 클러스터를 구성하게 되면 노드에 장애가 발생하면..
[ElasticSearch] ElasticSearch 개념 및 특징 안녕하세요! 키크니 개발자 입니다. 🦒 기존에 사용하던 엘라스틱 버전 5를 7로 올려야하는 상황이어서 엘라스틱서치관련 책을 읽고 정리해보았습니다. 😁 ElasticSearch 이란? 루씬 기반의 오픈소스 검색 엔진이며 JSON 기반의 문서를 저장하고 검색할 수 있으며 문서들의 데이터를 기반으로 분석 작업도 할 수 있다. ElasticSearch 특징 준실시간 검색 엔진 : 실시간이라고 생각할 만큼 색인된 데이터가 매우 빠르게 검색됨 준실시간성 : 문서를 입력하자마자 검색하는 것은 불가능하더라도 1초의 시간이 흐른 후에는 검색할 수 있다. JSON 문서 를 입력하면 해당 문서는 우선 메모리에 저장된다. 그리고 1초 후에 샤드(Shard)라는 엘라스틱서치 데이터 저장 공간에 저장되고 이 이후에는 쿼리를 통해..