Computer Science (37) 썸네일형 리스트형 Elasticsearch 한국어 형태소 분석기의 원리 - 2 elasticsearch에 관해 학습했던 내용을 정리한 내용입니다. 혹시 잘못된 내용이 있으면 편하게 지적부탁드립니다. https://porolog.tistory.com/68 Elasticsearch 한국어 형태소 분석기의 원리 - 1elasticsearch에 관해 학습했던 내용을 정리한 내용입니다. 혹시 잘못된 내용이 있으면 편하게 지적부탁드립니다. 서론검색은 어떻게 이루어질까요? RDB에서 데이터를 조회할 때, 빠르게 검색하기porolog.tistory.com 이전편에서 elasticsearch에서 사용되는 한국어 형태소 분석기와 관련된 개략적인 내용과 배경을 살펴보았습니다. 이번에는 좀 더 나아가, mecab 엔진의 형태소 분석 과정을 좀 자세히 파헤쳐보겠습니다. Mecab의 원리와 형태소 분석의 .. Elasticsearch 한국어 형태소 분석기의 원리 - 1 elasticsearch에 관해 학습했던 내용을 정리한 내용입니다. 혹시 잘못된 내용이 있으면 편하게 지적부탁드립니다. 서론검색은 어떻게 이루어질까요? RDB에서 데이터를 조회할 때, 빠르게 검색하기 위해 인덱스를 사용합니다. 한국어로 색인이라고도 부르는 이 개념은, 예를 들어 ‘햄버거’라는 데이터를 빠르게 찾으려면 해당 데이터가 포함된 위치를 가리키는 색인을 이용해 검색 속도를 높이는 방식으로 작동합니다. 반면, Elasticsearch는 역인덱스(inverted index)라는 방식을 사용하여 데이터를 저장합니다. 역인덱스는 특정 키워드와 관련된 문서의 위치 목록을 저장하는 구조로, 검색 시 특정 키워드와 연관된 문서들을 빠르게 찾을 수 있도록 설계되었습니다. 이 방식은 검색 엔진의 핵심적인 데이터 .. Real MySQL 8.0 읽기 - 아키텍처 본 포스팅은 Real MySQL 8.0 개정판을 읽고 정리한 내용입니다. 잘못된 내용이 있다면 편하게 댓글로 지적 부탁드립니다. 감사합니다. 아키텍처 MySQL 아키텍처 구조 MySQL 아키텍처 구조는 크게 MySQL 엔진과 스토리지 엔진으로 구분된다. MySQL 엔진 커넥션 핸들러, SQL 파서 및 전처리기, 옵티마이저 스토리지 엔진 실제 데이터를 스토리지에 저장, 스토리지로부터 데이터를 읽어온다. InnoDB와 MyISAM 스토리지 엔진이 존재하는데, 8.0 이후로부터 MyISAM 엔진은 거의 장점이 없어졌다. 따라서 앞으로는 InnoDB에 대해서만 언급한다. MySQL에서는 요청을 어떻게 처리할까? 가장 먼저 MySQL과 사용자가 커넥션을 맺는다. SQL문을 처리하고, SQL을 최적화한 후 스토리지.. 라우팅 알고리즘과 프로토콜 본 포스팅은 이석복 교수님의 네트워크 수업과 성공과 실패를 결정하는 상위 1%의 네트워크 원리를 참고하여 작성한 포스팅입니다. 라우팅 알고리즘이란? 라우팅 알고리즘이란 출발 라우터에서 도착 라우터로 패킷을 보낼 때 최적의 비용으로 보낼 수 있는 라우팅 경로를 결정하는 알고리즘입니다. 네트워크를 아래 그림의 그래프로 추상화한다고 생각해볼 수 있습니다. 위 그림의 예에서, u라는 라우터에서 z라는 라우터까지 가는 경로를 결정해야하는 문제가 발생합니다. 이를 결정하는 알고리즘을 구체화하기 전에, 알고리즘의 분류를 먼저 생각해보겠습니다. Q. Global(전역적인 공통의 정보를 이용) 알고리즘인가? 혹은 decentralized(각 지역의 정보를 종합) 알고리즘인가? Global 모든 라우터가 전체 라우터의 t.. 네트워크 계층 - IP, CIDR, NAT 본 포스팅은 이석복 교수님의 네트워크 수업과 성공과 실패를 결정하는 상위 1%의 네트워크 원리를 참고하여 작성한 포스팅입니다. 우리가 네트워크에서 요청을 보내면 HTTP 요청이 작성이 되어서 네트워크를 구성하는 계층들을 거쳐 Multiplexing, De-multiplexing이 일어나면서 데이터를 주고받게 됩니다. 이번 포스팅에서 어플리케이션 계층인 HTTP 프로토콜과 Transport 계층인 TCP 프로토콜에 대한 자세한 내용은 생략하겠습니다. 대략적으로 TCP 프로토콜의 도움으로 데이터의 신뢰성 있는 전송, 네트워크 혼잡 제어, 네트워크 흐름 제어 등이 가능해졌습니다. 사용자의 입장에서 네트워크 속으로 패킷을 보내면 신뢰성있게 잘 전달되고 응답이 잘 돌아온다는 것은 이해했는데, 상대의 호스트까지 어.. MySQL 쿼리 최적화 - Covering Index https://porolog.tistory.com/54 슬로우 쿼리 모니터링 - AWS CloudWatch https://porolog.tistory.com/53 DB Bulk Insert, Jmeter 부하테스트 안녕하세요, 오늘은 Issue Tracker 프로젝트를 진행하면서 10만건 이상의 데이터에서 비정상적으로 느린 API 응답을 어떻게 개선했는지 기록을 porolog.tistory.com 슬로우 쿼리 개선하기 이전 포스팅에서 슬로우 쿼리를 AWS CloudWatch를 통해서 로깅하도록 설정해보았습니다. 이번에는 로그된 슬로우 쿼리를 확인하고 개선해보겠습니다. 저번 포스팅의 로깅을 통해서 슬로우 쿼리를 찾았습니다. 놀랐던 점은 저는 당연히 아래 쿼리의 페이지네이션, 필터로 이슈 목록을 조회하는 쿼.. 슬로우 쿼리 모니터링 - AWS CloudWatch https://porolog.tistory.com/53 DB Bulk Insert, Jmeter 부하테스트 안녕하세요, 오늘은 Issue Tracker 프로젝트를 진행하면서 10만건 이상의 데이터에서 비정상적으로 느린 API 응답을 어떻게 개선했는지 기록을 공유하고자 포스팅을 작성합니다. Spring Data JDBC로 Bulk I porolog.tistory.com 저번 포스팅에서 메인 페이지의 GET 요청을 보냈을 때 200회의 요청을 보내면 평균적으로 36초의 시간이 걸리는 것을 확인했습니다. JDBC Connection Timeout이 발생하여, DB에서의 슬로우 쿼리 발생을 원인으로 추정하였는데요. 이번 포스팅에서는 AWS CloudWatch로 슬로우 쿼리를 찾아보고 개선하는 과정을 기록해보겠습.. DB Bulk Insert, Jmeter 부하테스트 안녕하세요, 오늘은 Issue Tracker 프로젝트를 진행하면서 10만건 이상의 데이터에서 비정상적으로 느린 API 응답을 어떻게 개선했는지 기록을 공유하고자 포스팅을 작성합니다. Spring Data JDBC로 Bulk Insert하기 우선 부하 상황을 만들기 위해서 Spring Data JDBC로 Dummy Data를 Insert했습니다. 이 때, Spring Data JDBC의 saveAll 메서드는 기본적으로 객체 하나마다 개별적인 INSERT 쿼리를 실행합니다. 이는 saveAll 메서드가 객체 컬렉션의 각 요소를 개별적으로 처리하고 영속화하기 때문입니다. 각 객체는 개별적으로 삽입되며, 객체의 상태에 따라 개별적인 INSERT 쿼리가 생성됩니다. 객체마다 I/O가 실행되면 속도가 굉장히 느려.. 이전 1 2 3 4 5 다음