컬리

마켓컬리

개발팀 리뷰

위 내용은 컬리 전 • 현 재직자의 응답 결과입니다.

기술 스택

언어

typescript

javascript

프론트엔드

React

데브옵스

Github

재직자가 작성한 글

profile picture

공현주

Kurly Communications

?뉴스 주제보다 중요한 것은 콘텐츠의 품질

많은 기업들이 연성 뉴스 옆에 광고를 실으려고 하고, 부정적인 기사 옆에 배치되는 것을 극도로 피하려고 하는데요. 기사의 주제는 브랜드 호감도나 구매 의향에 크게 영향을 미치지 않는다는 리서치 결과가 나왔다고 하네요. 언론사 네트워크 광고 집행 시 그보다 중요한 것은, '고품질 콘텐츠'를 제공하는 미디어를 선정하는 일이라고 합니다. 후광 효과 같은 것일지도 모르겠어요. 더피알의 기사를 공유합니다.

profile picture

조서희

컬리 백엔드 개발자

?️ Kafka Streams: 실시간 데이터 처리를 위한 도구

Kafka Streams는 Apache Kafka에서 제공하는 분산 스트리밍 처리 애플리케이션 라이브러리입니다. 이 라이브러리는 대규모 데이터 스트림을 실시간으로 처리하며 데이터 분석, 변환, 집계 같은 작업을 손쉽게 구현할 수 있도록 설계되었습니다.   이번 글에서는 Kafka Streams의 핵심 개념과 작동 방식을 초보자도 이해할 수 있도록 간단히 설명하겠습니다.   Kafka Streams란 무엇인가? Kafka Streams는 실시간 스트리밍 데이터 처리를 위한 Apache Kafka의 클라이언트 라이브러리입니다. 복잡한 분산 시스템의 세부사항을 개발자가 직접 관리하지 않아도, 간단한 코드를 통해 실시간 데이터를 처리하고 분석할 수 있게 돕습니다. Kafka Streams는 데이터의 필터링, 변환, 집계 같은 작업을 쉽게 수행하도록 설계되었습니다.   [주요 특징] * 사용 편의성 Kafka Streams는 Java 및 Scala 애플리케이션에서 라이브러리로 사용되며, 별도의 클러스터 관리가 필요 없습니다. * 확장성 Kafka Streams는 자동으로 작업을 분산 처리하여 대량의 데이터도 안정적으로 처리할 수 있습니다. * 실시간 처리 데이터를 수집하자마자 필터링, 변환, 집계 같은 작업을 즉시 수행할 수 있습니다. * 내결함성 Kafka의 내장된 내결함성 메커니즘을 활용해 장애 발생 시에도 안정적으로 데이터를 처리할 수 있습니다.   기본 구성 요소 Kafka Streams 애플리케이션의 주요 개념은 다음과 같습니다.   [Stream] Stream은 Kafka 토픽의 데이터를 나타냅니다. Kafka Streams에서 Stream은 끝없이 변화하는 레코드의 흐름으로, 예를 들어 사용자 클릭 로그나 센서 데이터를 생각할 수 있습니다.   [Stream Processing Topology] Topology는 데이터 처리를 정의하는 연산의 구조입니다. 이는 데이터를 읽고, 변환하고, 결과를 저장하는 처리 흐름으로 구성됩니다. * Source Processor: Kafka 토픽에서 데이터를 읽습니다. * Stream Processor: 데이터를 변환하거나 처리합니다. * Sink Processor: 처리된 데이터를 다른 Kafka 토픽에 저장합니다. [KStream과 KTable] Kafka Streams에서 데이터를 표현하는 주요 데이터 구조입니다. * KStream: 레코드의 연속적인 스트림을 나타냅니다. 예: Order 이벤트 스트림 * KTable: 스트림에서 집계된 상태 데이터를 나타냅니다. 예: 현재 재고 상태, 사용자 프로필   작동 방식 Kafka Streams 애플리케이션은 다음과 같은 단계를 거쳐 작동합니다.   1. Kafka 토픽에서 데이터를 읽어들입니다. StreamsBuilder builder = new StreamsBuilder(); KStream<String, String> inputStream = builder.stream("input-topic"); * StreamsBuilder는 데이터 처리를 정의하는 시작점입니다. * 위 코드에서 input-topic은 데이터를 가져올 Kafka 토픽입니다.   2. 데이터를 변환하거나 필터링합니다. KStream<String, String> filteredStream = inputStream.filter( (key, value) -> value.contains("important") ); * filter 연산은 특정 조건에 맞는 데이터만 남깁니다. 예를 들어, 값에 "important"가 포함된 데이터만 필터링합니다. 3. 집계를 수행합니다. KTable<String, Long> wordCounts = inputStream .flatMapValues(value -> Arrays.asList(value.split(" "))) .groupBy((key, word) -> word) .count(); * 위 코드에서는 각 단어의 발생 횟수를 계산합니다. 이는 데이터를 분해(flatMap)하고, 그룹화한 후, 집계하는 과정을 포함합니다. 4. 처리된 데이터를 새로운 Kafka 토픽에 저장합니다. filteredStream.to("output-topic"); * to 연산을 사용하여 처리된 데이터를 output-topic으로 저장합니다. 5. Kafka Streams 애플리케이션을 시작합니다. KafkaStreams streams = new KafkaStreams(builder.build(), props); streams.start();   실제 활용 사례 Kafka Streams는 다양한 실시간 데이터 처리 작업에 사용됩니다. 1. 로그 분석 실시간으로 로그 데이터를 분석하여 오류를 감지하거나 성능을 모니터링합니다. 2. IoT 데이터 처리 센서 데이터를 수집하고, 이를 분석하여 실시간으로 알림을 생성합니다. 예: 온도 센서 데이터를 기반으로 경고 메시지 전송. 3. 실시간 추천 시스템 사용자 행동 데이터를 기반으로 즉각적인 추천을 제공합니다. 예: 특정 상품을 클릭하면 관련 상품 추천. 4. 금융 거래 모니터링 금융 거래 데이터를 실시간으로 처리하여 사기 행위를 탐지합니다. 예: 비정상적으로 큰 거래가 발생하면 경고를 생성.   장단점 [장점] * 간단한 API: 복잡한 코드를 작성하지 않고도 실시간 스트리밍 처리가 가능 * 확장성: 대규모 데이터 처리에도 적합 * Kafka와의 통합: Kafka와 긴밀히 통합되어 높은 성능을 보장 [단점] * 초기 학습 곡선: 스트리밍 처리 개념과 Kafka의 작동 방식을 이해해야 함 * Java 기반: 다른 언어로 개발을 원하는 경우 제약이 있을 수 있음   결론 Kafka Streams는 실시간 스트리밍 데이터 처리의 강력한 도구입니다. 간단한 코드로 대규모 데이터를 안정적이고 효율적으로 처리할 수 있어 로그 분석, IoT 데이터 처리, 실시간 추천 시스템 등 다양한 분야에서 활용됩니다.   다음 포스팅에서는 KStream과 KTable을 활용한 데이터 스트림 간의 조인(Join) 방식에 대해 다루겠습니다. Inner Join, Left Join, Outer Join 같은 다양한 방식이 어떤 문제를 해결할 수 있는지 구체적인 예제와 함께 살펴볼 예정입니다. 본문: [https://ducktopia.tistory.com/140]

재직자가 좋아한 글

?컬리뷰티페스타가 뻔하지 않았던 건  |  기획 배경부터 목적, 그리고 구체적인 진행까지 모두 다 달랐기 때문입니다 [아티클 3문장 요약?] 1️⃣ 컬리는 스스로를 '큐레이티드 마켓'이라고 정의할 정도로, 좋은 상품을 최적의 조건으로 제안하는 것을 사명으로 삼고 있었기에, 직접 사용해 봐야 그 가치를 온전히 알 수 있는 화장품의 특성상, 대규모 오프라인 행사인 컬리뷰티페스타를 열기로 한 건 어쩌면 당연한 일이었습니다. 2️⃣ 다만 이미 같은 이유로 경쟁사들도 많이 하고 있는 행사이기에 컬리 만의 차별화가 필요하였고, 이를 위해 컬리는 고객이 새로운 브랜드를 발견하는 것을 돕기 보다는 기존의 유명한 브랜드라 할지라도 늘 부족할 수밖에 없는 고객과의 교감을 할 수 있는 기회를 제공하고자 했습니다. 3️⃣ 그래서 다양한 현장 체험 프로그램을 마련하였고, 이를 온전히 누리게 하기 위해 참여 인원은 제한하였으며, 브랜드들 역시 컬리의 이와 같은 의도에 공감하며 보다 더 적극적인 태도로 고객들에게 나아가면서 첫 행사를 성공적으로 마무리 지을 수 있었습니다. ?기묘한 관점➕ 이번 컬리 행사를 다녀온 고객들의 후기를 보면, 샘플 증정을 노리고 참여한 경우는 다소 불만 섞인 피드백을 하는 경우도 많았습니다. 하지만 컬리가 의도했던 현장 체험을 경험한 이들은, 오히려 샘플보다 체험이 낫다고 평가하곤 했는데요. 모두를 만족시킬 순 없었지만, 오히려 이렇게 의도했던 바가 정확히 전달되었다는 측면에서 첫 행사였지만 잘 준비했다고 평가하고 싶습니다. 아마 매년 이를 진행할 계획이라 하던데, 이렇게 자신의 색을 꾸준히 지켜나간다면, 내년엔 더욱 좋은 경험, 더 큰 성장을 기대해볼 수 있지 않을까 싶네요. ?트렌드라이트 구독하기 https://bit.ly/3iSbx4e

좋아요 3 저장 8

thumbnail