본문 바로가기

분류 전체보기70

[Spring] OpenSearch를 이용한 검색어 자동완성 기능 제작 검색어 자동완성을 구현하는 가장 쉬운 방법은 RDB에서 매번 특정 칼럼에 Like문을 때리는 것이다. 그런데 이렇게 하면 문제가 있다. 첫번째, 검색어 자동완성 자체가 이벤트가 일어날 때 마다 지속적으로 api 요청을 보내는데, 거기에 Full Scan으로 검색하는 RDB Like 문으로 검색하면 DB 부하가 장난 아닐 것이다. 두번째, 모든 데이터가 영어로 보장되있다면 그나마 괜찮은데 (인덱스를 활용하면 되기 때문), 한글 데이터가 들어가는 순간, Like 문 검색은 반드시 피해야된다. 왜냐하면, 한글 특성상 DB 인덱스를 사용하기 매우 어렵기 때문이다. 한글은 자모음 분리가 가능하고, 초성 검색 등의 특수한 경우를 고려해야 하기에, 기본적인 Like 문으로는 성능이 급격히 떨어진다.  따라서, Ela.. 2024. 11. 10.
[AWS] AWS Lambda의 활용 Serverless란 무엇인가?많이들 오해 하는데, 서버리스라는게 백엔드 서버가 없다는 뜻이 아니다. 우리가 직접 서버를 관리하지 않아 신경 쓸 필요가 없다는 의미로 서버리스라고 부르는 것이다.  필요한 컴퓨팅 리소스와 스토리지만 동적으로 할당한 다음, 그 부분에 대해서만 비용을 청구하는 모델이다. 사용한만큼 비용이 청구되기 때문에 매우 경제적이며 자원을 효율적으로 사용이 가능. 비용도 굉장히 저렴하다.  300원에 200만뷰 소화하기 - 서버리스 아키텍처 AWS 람다(Lambda) 활용 사례 - 로켓펀치 공식 블로그  로켓펀치에서는 기본적인 웹 서비스 외에 제휴를 통해 로켓펀치의 채용 공고를 위젯 형식으로 노출하는 경우가 있습니다. (예 : 플래텀 오른쪽 사이드바 위젯) 이런 위젯들을 운영하다 보니bl.. 2024. 11. 9.
[DB] ElasticSearch Index 설정과 텍스트 분석 Index API의 개요ElasticSearch를 할 때 가장 기초가 되는 부분이다. 물론 데이터를 삽입할 때, Index가 없으면 자동으로 생성하지만... 사실 세부적으로 검색을 튜닝하려면 Index에 대한 세부적인 설정은 필수이다. Index API는 Index를 생성하고 설정을 하는 역할을 한다. 이 때, 데이터 모델링을 진행한다. 이때, 한번 생성한 맵핑 타입은 변경할 수 없으니 주의할 것! Index 설정 요청은 아래처럼 생겼다. 크게 setting 부분과 mapping 부분 이렇게 두개로 나뉜다고 보면 된다.PUT /complex_index{ "settings": { "analysis": { "analyzer": { "korean_analyzer": { .. 2024. 11. 8.
[DB] Elastic Search의 기초 Elastic Search란?방대한 양의 데이터를, 거의 실시간에 가깝게 저장, 검색, 분석 할 수 있도록 하는 오픈소스 분산 검색 엔진이다. ELK Stack이란?Elastic Search, Logstash, Kibana 3개를 합쳐 ELK라고 부른다. 보통 로그 분석으로 사용되며, 여기서 특히 Elastic Search가 범용성이 높아 단독으로 사용되는 경우가 많다.FileBeat : 로그 파일 Logstash에게 전달하기 위한 놈Logstash : 다양한 소스의 로그 또는 데이터를 수집, 집계, 파싱하여 ElasticSearch에게 전달하는 놈ElasticSearch : Logstash로 부터 받은 데이터를 검색 및 집계하는 역할Kibana : ElasticSearch로 검색한 데이터를 GUI로 시.. 2024. 11. 7.
[백엔드 기술 면접] #2 Reactive Programming #2 Reactive ProgrammingQ. Flux와 Mono의 차이에 대해서 설명해보아라.A. Mono는 오직 ‘0개 또는 하나의 데이터항목 생성하고 이 결과가 생성되고 나면 스트림이 종료되면 결과 생성을 종료합니다. Mono를 사용하여 비동기적으로 결과를 반환하면 해당 결과를 구독하는 클라이언트는 결과가 생성될 때까지 블로킹하지 않고 다른 작업을 수행할 수 있습니다. Mono의 연산자들은 버퍼 중복, 값비싼 동기화 작업 등이 생략되어 Flux보다 가볍습니다. 반면에 Flux는 여러 개의 데이터 항목를 생성하고 스트림이 종료되면 결과 생성을 종료합니다. Q. 블로킹 vs 논블로킹과 동기 vs 비동기의 차이에 대해서 설명해보아라.비동기 프로그래밍에서 발생할 수 있는 문제점은 무엇이 있을까?A. 블로킹.. 2024. 11. 6.
[개발] Docker Compose로 검색용 OpenSearch 띄우기 기본적으로 Docker가 설치되있는 환경이란 가정이다. OpenSearch는 AWS와 Elastic은 라이선스 문제로 인해 싸웠고 (내용은 AWS가 오픈 소스 코드 기여를 별로 안하면서 ELK를 가져다가 금전적인 이득을 많이 취하고 있다는 내용), 그 결과 AWS는 ElasticSearch 7.10.2 버전을 끝으로 독립적인 프로젝트인 OpenSearch를 시작했다. 이후 Elastic은 Elasticsearch를 8.x 버전으로 발전시키며 자체적으로 개발을 이어가고 있고, AWS는 OpenSearch를 별도로 유지 및 발전시켜왔다. 따라서, AWS OpenSearch(ElasticSearch)같은 AWS 자체 관리 서비스로 Elastic Search를 운용할 경우, 7.10.2까지만 쓸 수 있다. 그런.. 2024. 11. 6.
[백엔드 기술 면접] #1 DB와 Docker #1 DB와 DockerQ. NoSQL DB와 SQL DB의 차이점은? 각각 어느 상황에서 사용할 수 있을까? 그래프 종류별(그래프, key-value, 관계형 등)로 예시를 들어 설명해보아라.A. SQL DB는 스키마 기반의 테이블 구조를 가지고 있으며 ACID 특성을 보장하며, 금융 시스템과 같이 데이터 무결성과 트랜잭션 관리가 중요한 경우 사용됩니다. 예로는 MySQL, PostgreSQL, Oracle이 있습니다. NoSQL DB는 스키마가 유연하고 대규모 데이터 분산 저장 및 처리에 최적화되어 있으며, BASE 특성을 가집니다. 키-값 저장소는 Redis, DynamoDB가 있으며, 캐싱과 세션 관리에 사용됩니다. 도큐먼트 저장소는 MongoDB, CouchDB가 있으며, 유연한 스키마가 필요한.. 2024. 11. 6.