전체 글 (227) 썸네일형 리스트형 [ElasticSearch] 3. 벌크 데이터와 매핑, 데이터 타입과 문자열 처리 [ES]벌크 데이터와 매핑, 데이터 타입과 문자열 처리 벌크 데이터와 매핑 과정 벌크 데이터 벌크 데이터는 여러 개의 데이터 레코드가 모여 있는 것이다. 일반적으로 단일 작업으로 한 번에 처리될 수 있도록 모여있는 데이터 묶음으로, Elasticsearch에서는 REST API 호출 회수를 줄이고, 한번에여러 개의 인덱싱, 수정, 삭제 작업을 요청하기 위해 사용한다. 단, bulk API는 읽기 작업을 지원하지 않는다. //해당 형태는 Json처럼 보이지만, NDJSON 형태이니 유의할 것. POST /_bulk { "index" : { "_index" : "index1", "_id" : "1" } } { "field1" : "value1" } { "delete" : { "_index" : "index1.. [ElasticSearch] 2. 다이나믹 매핑, 도큐먼트 CRUD [ES]인덱싱 : 다이나믹 매핑, 도큐먼트 CRUD 공식 Docs ref: https://www.elastic.co/guide/en/elasticsearch/reference/7.11/index.html 이전 포스팅에 이어 인덱싱을 마저 확인해보자. 다이나믹 매핑 만약 인덱싱된 값에 추가 도큐먼트를 넣을때, 필드 프로퍼티가 다를 경우 엘라스틱 서치는 어떻게 동작할까? 만약 다음과 같이 구문을 작성했다 가정해보자. //1. 다른 프로퍼티 'country'의 추가 PUT index2/_doc/2 { "name" : "jane", "country" : "france" } //이 경우 기존 필드를 사용하지 않고, 새로운 프로퍼티를 추가했지만 문제없이 인덱싱이 가능하다. //2. 도큐먼트 매핑 PUT index2.. [JWT]토큰별 Header와 Cookie를 동시에 사용한 이유 이번 프로젝트에서 Spring Security와 JWT를 사용한 토큰 방식 인가 처리를 구현하였다. JWT의 Access-Token은 HTTP Header에, Refresh-Token은 HttpOnly Cookie로 설정했었다. 저번 프로젝트 회고 당시 '왜 이렇게 썼나요?' 라는 질문이 들어와 구현했던 과정의 이유에 대해 정리하고자 한다. Access Token in Header HTTP 헤더를 통한 AT 전송은 API 호출의 표준 방식이다. 이 방식은 CSRF 공격에 자연스럽게 내성을 가지며, 다양한 클라이언트(웹, 모바일, 데스크톱 애플리케이션 등)에서 일관되게 사용할 수 있다. 구체적으로는 다음과 같은 장점을 가진다. 장점 1. 플랫폼 독립성 액세스 토큰을 Header에 담으면 다양한 클라이언트 .. WebFlux vs SSEemitter 분석 먼저 결론 둘 다 비동기, 그러나 IO 작업에서 효율의 차이 발생 (논블로킹과 블로킹) SSEEmitter: 비동기 서블릿을 사용하지만, 내부적으로는 Java의 전통적인 블로킹 I/O API를 사용할 수 있다. 따라서 I/O 작업이 길어지면 해당 작업을 수행하는 쓰레드는 블로킹될 수 있다. WebFlux: 이벤트 루프와 논블로킹 I/O를 사용합니다. 이로 인해 적은 수의 쓰레드로도 높은 동시성을 처리할 수 있고, 복잡한 로직이나 큰 규모의 애플리케이션에서는 특히 더 효율적이다. 따라서 복잡한 로직이나 높은 동시성이 필요한 경우, WebFlux가 더 효율적으로 동작할 수 있다. SeeEmitter는 비동기지만 Blocking IO이다. WebFlux와 SseEmitter 모두 비동기 처리를 지원하지만, 둘.. [개발]셀레니움을 사용한 스크래핑 구현 ref : https://mollangpiu.tistory.com/362 https://velog.io/@rednada1486/Java-Selenium-활용-동적웹크롤링#️-2-selenium과-chromedriver-다운로드 셀레니움 Selenium은 웹 브라우저를 자동화하는 도구다. 주로 웹 앱 테스팅에 사용되지만, 스크래핑에도 널리 쓰인다. Java, Python 등 여러 언어를 지원하며, 복잡한 웹 페이지에서도 데이터를 추출할 수 있다. 실행 방식 Selenium 코드는 서버 측에서 실행된다. 이 코드는 웹 드라이버 API를 통해 웹 브라우저를 제어한다. 사용자의 로컬 머신에서 크롬을 직접 실행하는 것은 아니다. 크롬 드라이버 필요성 Selenium은 웹 드라이버 인터페이스를 사용해 브라우저를 제.. [ElasticSearch] 1. 도큐먼트와 인덱스 엘라스틱 스택 도서 1회차 사전 지식 엘라스틱 서치 엘라스틱 서치 = 검색엔진 + 데이터베이스 엘라스틱서치는 NoSQL과 유사하다고 생각하면 이해가 편할 것이다. 엘라스틱 서치는 인덱싱 시점에서 분석을 거쳐 단어 단위로 분해된다. 스코어링 : 유사도 점수 기반 스코어링을 통해 유사 검색어를 분류 가능 분산 시스템과 클러스터링 : 여러 엔진을 클러스터링, 하나가 다운되어도 여분의 기능이 동작 가능 DSL 쿼리 채용 : JOIN 쿼리가 사실상 어려움, 반정규화를 기본으로 함 인덱스가 불변하기에, 삭제 등 비용이 비싸다. 하지만 이는 빠른 검색을 위한 것으로, 대용량 데이터에 대해 빠른 검색과 집계를 제공한다는 장점과 trade-off 된 것이다. 키바나(Kibana) 엘라스틱 서치의 시각화 도구. UI를 담.. [ElasticSearch, Kibana] 개발 환경 세팅 서버는 EC2(Ubuntu 20.04) 우분투 위에 올림을 가정한다. Elastic Search 버전 및 설치 https://www.elastic.co/kr/support/matrix 해당 사이트에서 현재 OS와 맞는 버전을 선택하자. 본인은 7.11.x를 사용할 것이다. JDK 설치(7.x 버전 이상은 설치하지 않아도 괜찮다.)버전 확인 sudo apt update sudo apt install openjdk-11-jdk java -version Elasticsearch 7.11.x 설치 HTTPS를 위한 패키지 설치: sqlCopy code sudo apt-get update sudo apt-get install apt-transport-https ca-certificates wget Elastics.. [Java] 인터페이스와 추상 메서드, 일반 메서드 추상클래스가 생긴 이유가 뭘까? 추상 클래스는 자체적으로 인스턴스로 구현할 수 없다. = 인스턴스로 구현하고 싶다면 하위 클래스가 상속(extend) 추상적인 부분을 Override로 구현해야 한다! 상속을 받는데, 내 하위 클래스가 이 기능(메서드)를 가지게 하고 싶다. 근데 무슨 기능인지는 잘 모르지만.. 어쨌든 구현해야 한다!! 아마도 일반 메서드와 가장 큰 차이라고 생각한다. 그럼 구현하지도 못할 메서드를 도대체 왜 사용하는 걸까? 추상 클래스가 있는 이유는 여러 가지다. 공통 로직 중복 제거 상속을 받는 하위 클래스들이 공통으로 사용하는 로직이나 속성을 한 곳에서 관리할 수 있다. = 추상 메서드를 상속받는 하위 클래스들은, 추상클래스의 메서드를 공통으로 가지게 된다. 템플릿 제공 추상 클래스에.. 이전 1 ··· 25 26 27 28 29 다음