본문 바로가기

전체 글55

JVM 스레드에 대한 고찰 및 스레드풀 튜닝 전략 애플리케이션의 응답성을 높이고 자원을 효율적으로 사용하기 위해 쓰레드풀에 대해 알아봤다. 웹서버 위에서 동작하는 웹애플리케이션은 리액티브 모델이 아닌 이상 리퀘스트 당 쓰레드를 할당하여 동작한다. 그렇다면 쓰레드를 어떻게 관리하는 것이 좋을까? 쓰레드는 일반적으로 동시에 여러개를 사용하므로 그때그때 생성하여 사용하기 보다는 쓰레드를 미리 생성하여 저장하고, 필요할 때 가져다 쓰고, 사용 후 반납하는 전략을 사용한다. 이러한 풀링 전략은 쓰레드 외에도 Integer의 -127~128 범위와 같은 자주 사용되는 객체를 효율적으로 사용하기 위해 사용되기도 한다. 그렇다면 쓰레드를 효율적으로 관리하기 위해선 "쓰레드풀에 쓰레드를 얼마나 생성하는 것이 좋을까?"에 대해 생각해보아야 한다. 이를 위해선 쓰레드 개수.. 2022. 9. 2.
CAP 이론 소개 - 데이터베이스 초보자용 밑에 세줄요약 있음 살펴보기 CAP 이론이란? MongoDB의 CP 시스템과 Cassandra의 AP 시스템 CAP란? 분산 데이터베이스는 방대한 데이터를 다루기에 유용한 시스템이다. 분산 데이터베이스는 수평 확장할 수 있기 때문에 트래픽이 증가하더라도 낮은 지연 시간을 유지할 수 있고, 일부 노드 장애에 적절히 대응할 수 있다. NoSQL 데이터베이스는 대표적인 분산 데이터베이스이며, 유연하게 데이터를 다룰 수 있다는 장점이 있다. NoSQL 데이터베이스는 서로 다른 특징을 가진 여러 제품이 있기 때문에 애플리케이션에 맞는 특성에 맞는 데이터베이스를 선택해야 한다. 이를 위해서는 각 제품의 특징뿐만 아니라 데이터베이스 이론 또한 이해해야 한다. CAP는 분산 데이베이스 속성에 관한 이론으로써, 분산 데.. 2022. 3. 26.
Shared Lock 과 Exclusive Lock 여러 트랜잭션을 동시에 실행하면 생기는 문제 트랜잭션이 동시에 여러개 실행된다면 여러 트랜잭션이 동시에 같은 데이터를 참조해 데이터의 일관성이 깨질 수 있다. 그러므로 트랜잭션이 하나씩 실행되는 것처럼 스케줄링할 필요가 있다. 여러 트랜잭션 스케줄링 방법이 있지만 보통 잠금을 사용한다. 잠금이란 자신이 데이터를 수정 중이라는 것을 알리는 방법이다. Shared Lock, 줄여서 LS Shared Lock, 공유할 수 있는 락이다. 즉 LS가 걸려있을 때 다른 LS를 걸 수 있다. 바꿔말하면 LS끼리는 Block 되지 않는다. 읽기에 사용된다. Exclusive Lock, 줄여서 LX Exclusive Lock, 공유할 수 없는 락이다. 무조건 하나만 걸 수 있다. LX는 LS, LX 어떠한 락이라도 허용.. 2021. 12. 5.
BufferedWriter를 Integer와 쓸 때 유의점 알고리즘을 풀다가 자꾸 틀렸다. 분명 쉬운 문제인데? 찬찬히 읽어보니 로직은 문제가 없었다. 콘솔에서 돌려보니 범인은 BufferedWriter 정수가 나와야하는데 공백이 나온다. BufferedWriter 는 OutputStreamWriter를 데코레이터 패턴으로 조합해 사용한다. java.io에서 Reader/Writer는 문자열을 받아서 character 배열로 쪼갠 다음 byte로 인코딩해서 Stream으로 전달하는 책임을 가지는 객체이다. 따라서 숫자 역시 문자열로 취급되어 각 문자로 쪼개져 인코딩이 되는 줄 알았다. OutputStreamWriter를 보면 입력으로 들어온 문자열을 문자(CharBuffer)로 쪼개서 바이트로 인코딩하는 부분이 있다. 하지만 웬걸, Integer 들어오면 그대로.. 2021. 9. 29.
엘라스틱서치와 추천 - More Like This 쿼리 원문(7.14): https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-mlt-query.html#_how_it_works More like this 쿼리 The More Like This Query finds documents that are "like" a given set of documents. In order to do so, MLT selects a set of representative terms of these input documents, forms a query using these terms, executes the query and returns the results. The user controls th.. 2021. 9. 20.
레퍼런스] 엘라스틱서치란 무엇인가? 엘라스틱서치란 무엇인가? 엘라스틱 서치란 무엇인가? 엘라스틱서치는 분산 시스템으로 구현된 검색 및 분석 엔진이며, 엘라스틱 스택에서의 가장 중요한 부분이다. 로그스태시 및 비츠는 데이터를 수집하고, 집계하며 데이터를 가공하고 저장하는데 도움을 준다. 키바나를 사용하여 데이터를 탐색하고 시각화하고 관리 및 모니터할 수 있다. 이처럼 엘라스틱서치는 데이터를 저장하고 검색하고 분석할 수 있는 정말 좋은 툴이다. 엘라스틱서치를 사용하여 모든 종류의 데이터를 실시간에 근접하게 검색하고 분석할 수 있다. 엘라스틱 서치는 구조화된 데이터든, 그냥 평문이든, 혹은 숫자나 지리 데이터라도 효율적으로 빠른 저장과 검색 기능을 지원한다. 데이터의 트렌드와 패턴을 알기 위해 단순한 검색과 집계 보다 훨씬 많은 것을 할 수 있.. 2021. 9. 15.
Part 5 - 람다로 프로그래밍 5. 람다로 프로그래밍 람다는 코드 조각이다. 코틀린 표준 라이브러리는 람다를 많이 사용한다. Lambda with Receiver: 람다 선언을 둘러싸고 있는 환경과는 다른 환경에서 람다 본문을 실행할 수 있다. 5.1 람다 식과 멤버 참조 5.1.1 람다 소개: 코드 블록을 함수 인자로 넘기기 객체 간 데이터뿐만 아니라 "무엇을 할 지"를 전달하기 위해 람다가 필요하다. 람다는 Functional Interface 구현의 다른 형태이다. button.setOnclickListner{/* 클릭 시 수행할 동작*/} 5.1.2 람다와 컬렉션 람다를 이용해서 외부 반복을 내부 반복으로 바꿀 수 있다. people.maxBy{it.age} // 컬렉션에 무엇을 기준으로 찾을지를 제공하는 프로듀서를 넘긴다. .. 2021. 9. 9.
7. 인덱스 설정과 매핑 7. 인덱스 설정과 매핑 데이터의 저장 및 검색 방법에 대한 설정이나 사용자 정의 애널라이저는 인덱스 단위로 저장된다. 7.1 설정 - Settings 인덱스는 두 개의 정보 단위, settings 와 mappings로 이루어진다. settings 또는 mappings 를 보는 보는 방법은 각각 _settings API 나 _mappings API를 사용한다. 대부분의 설정은 한 번 지정하면 변경할 수 없다. 샤드와 복제본 수 설정 number_of_shards와 number_of_replicas 라는 이름으로 "settings" - "index" 아래에 설정한다. PUT my_index { "settings": { "index": { "number_of_shards": 3, "number_of_repl.. 2021. 9. 6.
6. 데이터 색인과 텍스트 분석 6. 데이터 색인과 텍스트 분석 풀텍스트 검색을 위해서는 원본 데이터를 검색에 맞게 가공해야 한다. 엘라스틱서치는 데이터를 저장하면서 데이터를 가공한다. 6.1 역인덱스 Full text 검색을 할 때는 역인덱스 구조가 유리하다. key는 term으로, value는 해당 term을 저장하고 있는 문서 번호를 저장한다. 역인덱스는 데이터가 저장될 때 만들어진다. 따라서 엘라스틱서치에서 데이터를 저장하는 과정을 인덱싱(색인)이라고 한다. 6.2 텍스트 분석 텍스트 분석: 원본 데이터로부터 검색어 토큰을 만들어서 저장하는 과정이다. 텍스트 분석 결과는 검색에만 사용되지, 원본 데이터는 변경되지 않는다. 애널라이저: 텍스트 분석을 담당하는 모듈이다. 캐릭터 필터: 전체 문장에서 특정 문자를 제거한다. 애널라이저.. 2021. 9. 6.