[Stream 함수] Stream 함수 Reduce
·
면접 준비/Java
reduce 함수는 이름 그대로 '줄여나가다'라는 뜻을 가지고 있습니다. 여러 개의 값이 담긴 컬렉션을 하나의 값으로 응축(Reduction)하는 것이 핵심입니다.1. reduce의 3가지 인자Java의 Stream.reduce는 용도에 따라 세 가지 형태로 제공됩니다.① reduce(BinaryOperator accumulator)특징: 초기값이 없습니다.반환 타입: Optional (스트림이 비어있을 수 있기 때문)동작: 스트림의 첫 번째 요소를 초기값으로 사용합니다.② reduce(T identity, BinaryOperator accumulator)특징: 초기값(identity)을 지정합니다.반환 타입: T (비어있어도 초기값이 있으므로 항상 값이 존재)동작: 제공된 초기값과 스트림의 첫 번째 요..
[Claude] 토큰 최적화 + 구매할 옷 미리 입어보기 서비스(feat.개발자 관점)
·
AI/Claude
최근 AI를 활용한 부업, 창업, 서비스 개발이 폭발적으로 늘어나면서 개발자들 사이에서 클로드(Claude)의 점유율이 눈에 띄게 높아지고 있다.하지만 클로드를 무분별하게 사용하다 보면 소모되는 '토큰' 비용과 컨텍스트 제한에 부딪히기 마련입니다. 오늘은 외부 API인 구글 바나나(Google Banana)를 연동한 가상 피팅(Virtual Try-On) 서비스를 예시로, 클로드를 효율적으로 사용하기 위한 토큰 최적화 전략과 개발 자동화 구조를 공유해보고자 한다.1. 프로젝트 개요: AI 가상 피팅 서비스우리가 만들 서비스의 핵심은 간단하다. 사용자가 고른 옷 아이템을 자신의 사진에 합성하여, 실제로 입었을 때 어떤 느낌인지 미리 확인하는 서비스다.프롬프트는 간단히 작성해도 결과적으로 좋은 퀄리티를 보여..
[Kafka] 안정적인 이벤트 스트리밍 방식 설계하기
·
Kafka
면접에 앞서 카프카를 다시 한번 정리하면서 내가 카프카를 요구사항에 알맞게 설계하면서도 낮은 지연속도, 높은 대역폭등 효율적인 설계를 했는지 확인하기 위해 다시 한번 정리해보려고 한다.동기/비동기 차이점왜 비동기 처리가 필요할까? 동기처리에는 대표적인 단점이 2개 존재한다.첫 번째, 느린 응답 시간이다. 동기 방식에서는 유저 정보 저장, 이메일 발송, 환영 쿠폰 지급 등의 작업이 모두 완료되어야 사용자에게 "완료" 응답을 제공할 수 있따. 만약 서버에 어떠한 문제가 발생하여 지연이 발생한다면 사용자는 한참을 기다려야 하고 사용자의 경험에 부정적인 영향을 미칠 수 있다.두 번째, 각각의 서비스 서버에 영향을 미칠 수 있는 강한 결합상태가 된다. 회원 관련 도메인을 담당하는 사용자 서버와 이메일을 발송하는 ..
[ELK / term] 특정 값과 정확하게 일치하는 데이터를 조회하고 싶을 때
·
ElasticSearch
이번에는 지난번에 사용했던 match 키워드가 있던 자리에 term을 사용해보려고 한다. 이전 블로그에서 사용했던 쿼리를 다시 사용하기 위해 일단 스니펫을 적어두겠다.이전 코드와 다른게 있다면 이번에는 하나가 아닌 두개의 데이터를 타입을 정의하고 넣을것이다. 왜냐하면 term과 terms를 통해 하나 이상의 값이 일치하는 데이터를 조회하는 과정이기 때문이다. boards_id 와 categories 이렇게 두 개를 생성하고자 한다.DELETE /boardsPUT /boards{ "mappings": { "properties": { "boards_id" : { "type": "long" }, "categ..
[ELK / match] 검색 키워드가 포함된 데이터를 조회하고 싶을 때
·
ElasticSearch
검색을 할때 사용할 수 있는 속성은 match가 있습니다. match는 must와 함께 사용하고, text타입의 데이터를 조회text는 유연한 검색에 쓰이는데 must는 score에 영향을 주기 때문 must - score에 영향을 주므로 match 사용 - text 타입 조회filter - score에 영향을 주지 않으므로 term 또는 terms 사용 - text를 제외한 타입 조회 그럼 예시를 통해 확인해보자./boards라는 인덱스를 생성하기 전에 이전에 존재하는 boards를 삭제하고 새로 정의그리고 매핑을 정의한다. 매핑에는 title이라는 데이터를 생성하고 type은 text로 설정DELETE /boardsPUT /boards{ "mappings": { "properties..
데이터 분석을 위한 ElastiSearch의 Query
·
ElasticSearch
ElasticSearch에서 데이터를 추가하거나 삭제, 수정하는 과정에서는 다양한 과정이 거쳐진다. 여기서 다룰 것은 기본적인 CRUD 명령어와 내부 옵션에 대한 설명이다. 1. 인덱스 생성 / 삭제 인덱스 생성PUT /productsPUT /boardsPUT /products_reviews→ 새로운 인덱스를 생성 (테이블 생성과 유사).→ settings 와 mappings 지정 가능. 인덱스 삭제DELETE /productsDELETE /boards→ 인덱스를 완전히 삭제 (문서 + 매핑 모두 제거). 2. 매핑(Mapping) 정의 매핑 추가/수정PUT /products/_mappingPOST /products/_mapping→ 기존 인덱스에 필드 타입 정의 (단, 기존 필드 타입 변경은 불가) ..