🧩 ORC vs Parquet: 개요항목ORC (Optimized Row Columnar)Parquet개발 배경Hadoop Hive 팀이 Row Columnar 개선판으로 개발 (2013)Twitter + Cloudera 주도, Dremel 기반 (2013)주요 사용처Hive, Spark, Presto, Iceberg, Flink 등Spark, Presto, Iceberg, Trino, BigQuery 등파일 구조Stripe 단위 (≈ 64MB)로 인덱스 + 데이터 저장Row Group 단위 (≈ 128MB)로 Page 구성메타데이터Footer에 통계 + Index 저장 (세분화된 통계)Footer에 통계 저장 (파일 단위)압축ZLIB, Snappy, LZ4, ZSTD 등GZIP, Snappy, LZ4..
1️⃣ Spark Streaming 이란?Spark Streaming은 대용량 데이터를 실시간(혹은 준실시간) 으로 처리하기 위한 마이크로배치 기반 스트리밍 프레임워크다.Kafka, Socket, Kinesis, File 등에서 데이터를 지속적으로 받아서 RDD 단위로 배치처럼 처리한다.즉, “배치의 안정성과 스트리밍의 실시간성”을 절묘하게 결합한 모델.2️⃣ 동작 원리Spark Streaming의 핵심 개념은 DStream(Discretized Stream) 이다.이는 내부적으로 RDD의 연속(Sequence) 으로 구성되어 있으며,각 배치 간격(batch interval)마다 데이터를 모아 하나의 RDD로 변환한다. Kafka → Receiver → InputDStream → RDD(batchInte..
Spring에서 AOP는 트랜잭션, 로깅, 보안, 성능 모니터링 등공통 로직을 한 곳에서 관리하기 위한 핵심 기술이다.@Transactional도, @Async, @Cacheable도 내부적으로는 AOP 위에서 돌아간다.1️⃣ AOP란?AOP(Aspect Oriented Programming, 관점 지향 프로그래밍) 은비즈니스 로직과 직접 관련은 없지만여러 모듈에서 공통적으로 필요한 기능(부가 기능) 을한 곳에서 관리할 수 있게 해주는 프로그래밍 방식이다.💡 예시로그 출력실행 시간 측정트랜잭션 관리예외 처리인증/인가 (Security)이런 기능을 흩어진 관심사(Cross-Cutting Concern) 라고 부른다.2️⃣ AOP가 필요한 이유기존에는 이런 공통 기능을 각 메서드마다 직접 작성해야 했다.p..
1️⃣ @Transactional의 역할@Transactional은 이름 그대로 트랜잭션 경계를 정의한다.메서드 실행 전후로 Spring이 자동으로 다음을 수행한다.트랜잭션 시작 (connection.setAutoCommit(false))비즈니스 로직 실행정상 종료 시 → Commit예외 발생 시 → Rollback즉, 개발자는 “트랜잭션 경계를 직접 관리하지 않고”,선언적 트랜잭션(declarative transaction) 방식으로 처리할 수 있다.2️⃣ 내부 동작 구조 — AOP Proxy 기반@Transactional은 단순한 어노테이션이 아니다.스프링은 이를 인식해 AOP Proxy 객체를 생성한다.동작 순서스프링이 Bean을 생성할 때, @Transactional이 붙은 클래스를 스캔한다.해당..
처음엔 잘 작동하던 코드가 데이터가 많아지면서 갑자기 느려지기 시작한다면,그 배경엔 종종 N+1 쿼리가 숨어 있다.1️⃣ N+1 문제란?간단히 말해,한 번의 조회로 충분한 데이터를 가져오지 못하고,연관된 데이터를 가져오느라 추가 쿼리가 N번 더 실행되는 문제다.예를 들어 이런 코드가 있다고 해보자. List members = em.createQuery("select m from Member m", Member.class).getResultList();for (Member member : members) { System.out.println(member.getTeam().getName());}이 코드는 언뜻 보면 문제가 없어 보이지만, 실제 실행되는 SQL을 보면 이렇다.select * from me..
🎯 콘텐츠 딜리버리의 데이터 특성콘텐츠 딜리버리 서비스는 단순한 캐시 서버가 아니다.사용자별 콘텐츠 노출 상태, 시청 이력, 추천 지표 등 상태성 메타데이터를 대규모로 영속 저장해야 한다.이 데이터들은 다음과 같은 특성을 가진다.하루에도 수억 건 이상 누적되는 로그성 데이터user_id + content_id 또는 category + time 기반의 Range Scan 요청 다수랜덤 읽기 + 순차 스캔이 섞인 패턴장애 시에도 데이터 복구가 가능한 영속성 필수즉, 단순히 빠르게 한두 개 키를 조회하는 캐시 시스템이 아니라대용량 상태 데이터를 안전하게 저장하고 조회해야 하는 분산 스토리지가 필요했다.⚙️ Redis vs HBase 비교구분RedisHBase데이터 구조단순 Key-ValueWide-Colum..
1️⃣ Spark Driver & Executor 구조 이해Spark 애플리케이션은 크게 Driver와 Executor로 구성된다.구성요소역할Driver전체 DAG를 구성하고, Task를 스케줄링하고, 결과를 수집함. (Application의 뇌)Executor실제 Task를 실행하는 워커 프로세스. 여러 개의 스레드(Core)로 병렬 수행함.CoreExecutor 내에서 동시에 실행 가능한 Task의 개수.MemoryExecutor가 데이터를 캐싱하거나, 셔플 버퍼를 유지하거나, 사용자 객체를 저장하는 공간.즉, Spark는 **“Driver가 계획을 세우고, Executor들이 나눠서 일하는 구조”**다.“Spark는 마스터-워커 구조로, Driver가 스케줄링을 담당하고 Executor가 병렬 Ta..
— 데이터가 절대 유실되지 않게 만드는 최소 복제 전략Kafka는 “분산 로그 시스템”이다.즉, 모든 데이터를 여러 브로커(broker)에 복제(replication) 해서 보관한다.이때 복제본이 몇 개나 유지될지를 정하는 설정이 바로 replication.factor 다.1️⃣ 기본 개념replication.factor = 각 파티션이 몇 개의 브로커에 복제되어 저장될지 결정하는 값.예를 들어, replication.factor=3 이면 각 파티션의 로그가3개의 서로 다른 브로커에 동시에 저장된다.1개는 리더(Leader)나머지 2개는 팔로워(Follower)이 세 개가 모두 같은 데이터를 유지하면서 동기화된다.2️⃣ 구조 예시예: 토픽 orders, 파티션 1개, replication.factor=3..
— 속도 vs 안정성 어디까지 가져갈 것인가Kafka 프로듀서 설정 중에 제일 많이 물어보는 게 이거다.“acks는 0으로 하면 빨라지고, all로 하면 안전하다면서요? 그럼 1은 뭐죠?”설명 자체는 쉽지만, 언제 어떤 걸 써야 하는지는 실제 워크로드를 알아야 결정할 수 있다.이 글에서는 acks가 의미하는 걸 브로커 관점에서 다시 정리하고,실무에서 많이 쓰는 패턴까지 정리해본다.1. acks가 하는 일acks 는 “프로듀서가 이 메시지가 진짜로 써졌다고 믿기 전에, 브로커에게서 어느 수준까지 확인을 받겠다” 는 약속이다.즉, 누가 “쓰기 성공”을 선언하느냐의 레벨을 고르는 거다.낮은 값 → 빠름, 대신 유실 가능높은 값 → 느려짐, 대신 안전2. acks=0 acks=0 동작프로듀서가 브로커 응답을 아..
— 데이터 저장 방식에 따라 쿼리 성능이 이렇게 달라진다데이터 포맷이나 스토리지를 이야기할 때 자주 나오는 말이 있다.“이건 row 기반이고, 저건 column 기반이에요.”딱 들으면 뭔가 어려워 보이지만, 핵심은 간단하다.데이터를 “어떻게 묶어서 디스크에 저장하느냐”의 차이다.이 글에서는 그 구조적 차이와,왜 분석용 데이터는 대부분 column 기반으로 가는지를 살펴본다.1️⃣ 개념: “데이터를 한 줄씩 저장할까, 한 컬럼씩 저장할까”Row-based (행 지향)데이터를 “한 행(row)” 단위로 저장한다.즉, 한 사람(레코드)의 모든 필드가 한 번에 붙어서 저장된다. Row1: [id=1, name='Kim', age=30, city='Seoul'] Row2: [id=2, name='Lee', age..
서비스가 잘 되면 트래픽이 늘고, 트래픽이 늘면 제일 먼저 비명을 지르는 애가 보통 Kafka 브로커입니다.그런데 막상 까보면 브로커가 “못 받는” 게 아니라, 프로듀서가 “너무 자주, 너무 잘게” 보내서 그런 경우가 많습니다.그래서 이 글의 포인트는 단순합니다.“메시지 양이 많아졌을 때는 한 번에 많이, 덜 자주 보내도록 프로듀서를 바꿔라.”그걸 가능하게 하는 게 프로듀서 옵션 튜닝입니다.1. 먼저 구조부터 이해하기Kafka 브로커가 힘들어지는 패턴은 보통 이렇습니다.프로듀서가 이벤트를 한 건씩 바로바로 보냄 →브로커는 메시지 내용보다 “요청 수” 때문에 바빠짐 →리더 파티션을 가진 브로커 몇 대에 부하 몰림 →레이턴시가 늘고, 프로듀서 쪽 retry가 늘면서 더 많은 요청이 들어옴 →악순환즉, “메시..
1️⃣ 스키마 진화(Avro Schema Evolution)란?데이터가 쌓이는 동안, 서비스는 끊임없이 변한다.새로운 필드가 생기고필드명이 바뀌고타입이 변하고더 이상 쓰지 않는 값이 생긴다문제는 이런 변화가 있을 때 기존 데이터가 깨지면 안 된다는 것이다.Avro는 바로 이 부분을 **스키마 호환성(Compatibility)**으로 해결한다.즉, 새로운 스키마로도 예전 데이터를 읽을 수 있게 하거나,예전 스키마로도 새 데이터를 읽을 수 있게 만든다.2️⃣ 호환성의 세 가지 개념구분설명비유Backward Compatibility새 스키마로 옛 데이터를 읽을 수 있음“새 버전의 코드가 옛날 JSON을 읽을 수 있다”Forward Compatibility옛 스키마로 새 데이터를 읽을 수 있음“옛날 코드가 새 ..
— 같은 “데이터 포맷”인데 왜 이렇게 다르게 쓰일까?서비스 개발을 하다 보면 기본값은 늘 JSON입니다.REST API도 JSON, 로그도 JSON, 메시지 브로커에 던지는 이벤트도 JSON.사람이 읽기 좋고, 언어에 상관없이 쓸 수 있어서죠.그런데 데이터 파이프라인이나 Kafka, Flink, Iceberg 같은 걸 붙이기 시작하면갑자기 Avro가 등장합니다.“왜 굳이 이 생소한 걸 쓰지?” 싶다가도, 실제로 수십~수백 테라바이트 단위로 데이터를 흘리다 보면JSON만으로는 관리가 안 되는 지점이 생깁니다.이 글은 그 지점을 딱 짚어서JSON이 좋은 이유, Avro가 필요한 이유, 그리고 둘을 어디에 써야 하는지 정리해보는 글입니다.1. 개념부터 다르다JSON텍스트 기반key-value 구조사람이 읽고..
— 세대 교체가 끝나가는 데이터레이크의 진짜 주인공은?데이터 엔지니어링을 하다 보면 “데이터를 어디에, 어떤 포맷으로 저장할까”가 늘 고민입니다.예전엔 그냥 S3 + Hive 메타스토어면 충분했지만,이제는 데이터레이크에도 트랜잭션, 스냅샷, 스키마 진화 같은 개념이 기본이 되었습니다.이 시장을 대표하는 오픈소스가 바로Apache Iceberg, Apache Hudi, Delta Lake — 세 가지입니다.1️⃣ 세 가지의 출발점과 철학 IcebergHudiDelta Lake개발사Netflix (→ Apache 재단 기여)Uber (→ Apache 재단 기여)Databricks출발 배경대규모 배치 중심 레이크를 ACID로 관리스트리밍 기반 Upsert/Incremental 처리Spark 중심의 데이터 파이..
— 그리고 “최근 2일치만 실시간 연동”이 현실적인 설계인 이유대부분의 데이터 플랫폼에서 로그를 쌓을 때 “Iceberg로 다 때려 넣자”는 생각을 한 번쯤은 합니다.테이블도 깔끔하고, 스냅샷도 있고, 시간 여행(Time Travel)도 되니까요.그런데 실제 운영해 보면 금방 느낍니다.“로그는 Iceberg로 무한히 쌓는 게 아니다.”Iceberg는 ‘정제된 데이터셋’을 위한 포맷이다Iceberg는 데이터 웨어하우스나 마트처럼“변경이 적고, 관리가 필요한 데이터셋”을 다루기 위한 테이블 포맷입니다.즉, UPDATE/DELETE, MERGE, SNAPSHOT 같은 기능을 안전하게 처리하기 위한 구조죠.반면 로그 테이블은 완전히 반대입니다.무한히 쌓임 (append-only)자주 들어옴 (초당 수천 건)삭제..
https://velog.io/@ddclub12/%EB%8F%99%EA%B8%B0%EB%B9%84%EB%8F%99%EA%B8%B0-VS-%EB%B8%94%EB%A1%9C%ED%82%B9%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9 동기/비동기 VS 블로킹/논블로킹프로그래밍을 수행하다보면 동기/비동기와 블로킹/논블로킹에 대해서 접하게 된다. 동기/비동기는 프로세스 수행방식과 관련해서 많이 접했던 것 같고 블로킹/논블로킹은 I/O와 DB 관련해서 배velog.io
https://java119.tistory.com/70 괄호,특수문자 문자열로 인식하기)" data-og-description="CDATA ( ) 개념 쿼리를 작성할 때, '', '&'를 사용해야하는 경우가 생기는데 xml에서 그냥 사용할 경우 태그로 인식하는 경우가 종종 있다.. 이럴 경우 에러를 뱉어내기 때문에 '태그가 아니라 실제 쿼" data-og-host="java119.tistory.com" data-og-source-url="https://java119.tistory.com/70" data-og-url="https://java119.tistory.com/70" data-og-image="https://scrap.kakaocdn.net/dn/wPY9V/hyXptp7GCp/eVLu2a71wLee..
https://aws.amazon.com/ko/blogs/aws/amazon-s3-performance-tips-tricks-seattle-hiring-event/ Amazon S3 Performance Tips & Tricks + Seattle S3 Hiring Event | Amazon Web ServicesToday’s guest post is brought to you by Doug Grismore, Director of Storage Operations for AWS. Doug has some useful performance tips and tricks that will help you to get the best possible performance from Amazon S3. There’s..
https://tomining.tistory.com/164 ConnectionTimeout과 SocketTimeout의 차이URL을 호출하는 코드를 작성할 때 Timeout 설정을 하게 됩니다. 아래 코드로 예를 들어보겠습니다. DefaultHttpClient httpClient = new DefaultHttpClient(); HttpParams params = httpClient.getParams(); HttpConnectionParams.setConnetomining.tistory.com
https://brownbears.tistory.com/511 [UML] 시퀀스 다이어그램 (Sequence Diagram)시퀀스 다이어그램은 특정 행동이 어떠한 순서로 어떤 객체와 어떻게 상호작용을 하는지 표현하는 행위 다이어그램입니다. 현재 존재하는 시스템이 어떠한 시나리오로 움직이고 있는지를 나타brownbears.tistory.comhttps://app.creately.com/d/ZRcDVqE9MtM/diagram-error Creately app.creately.com
function sortTable(table, index, asc) { var rows = table.find('tbody tr').get(); rows.sort(function (a, b) { var cellA = $(a).children('td').eq(index).text().trim(); var cellB = $(b).children('td').eq(index).text().trim(); if ($.isNumeric(cellA) && $.isNumeric(cellB)) { return asc ? cellB - cellA : cellA - cellB; } else { return asc ? cellB..
https://wiki.tistory.com/entry/%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC-%EB%B0%B1%EC%97%85-%EB%B3%B5%EC%82%AC%EC%97%90-rsync-%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EC%9E%90 디렉터리 백업 (복사)에 rsync 를 사용하자rsync란 무엇인가rsync는 컴퓨터 시스템 상에서 파일을 효율적으로 전송하고 동기화하기 위한 유틸리티의 하나로, 파일의 타임스탬프와 크기를 검사함으로써 이루어진다. wikipedia홈페이지 : https://wiki.tistory.com
@Enumerated(value = EnumType.STRING)https://pamyferret.tistory.com/6 [ Enum ] JPA로 enum name 그대로 DB에 저장하기(@Enumerated)최근에 Enum을 이렇게도 저렇게도 사용해보게 되었다. 그 동안 회사 프로젝트에서는 왜 사용을 안 했는지 정말 후회되는 Enum... 나 처럼 enum을 처음 사용해보는 사람은 JPA를 사용할 때 entity에 enum cpamyferret.tistory.comimport javax.persistence.EnumType;...public class Order { ... @Enumerated(value = EnumType.STRING) // 또는 @Enumerated(EnumType.STRI..
SELECT GROUP_CONCAT(DISTINCT categories ORDER BY categories ASC SEPARATOR ' ') FROM table https://stackoverflow.com/questions/3083499/mysql-distinct-on-a-group-concat MySQL DISTINCT on a GROUP_CONCAT()I am doing SELECT GROUP_CONCAT(categories SEPARATOR ' ') FROM table. Sample data below: categories ---------- test1 test2 test3 test4 test1 test3 test1 test3 However, I am getting test1 test2 test3..
https://stackoverflow.com/questions/70215736/kotlin-spring-boot-bean-validation-not-working Kotlin Spring Boot bean validation not workingI have quite a few projects that is slowly being migrated from Java to Kotlin, but I'm facing a problem when changing from Java POJO to Kotlin data classes. Bean validation stops working in RESTstackoverflow.com
@RestController@Validated // https://stackoverflow.com/questions/28150405/validation-of-a-list-of-objects-in-spring Validation of a list of objects in SpringI have the following controller method: @RequestMapping(value="/map/update", method=RequestMethod.POST, produces = "application/json; charset=utf-8") @ResponseBody public ResponseEntityWrapperstackoverflow.com
sudo nginx -s stophttps://serverfault.com/questions/141975/how-to-stop-nginx-on-mac-os-x How to stop nginx on Mac OS XI've installed and configured nginx server on my Mac from MacPorts sudo port install nginx Followed the recommendation from the port installation console and created the launchd startup item for n...serverfault.com
- Total
- Today
- Yesterday
- COUNT
- 어떻게 능력을 보여줄 것인가?
- 유투브
- 테슬라 레퍼럴 코드 확인
- 개리마커스
- 테슬라 리퍼럴 코드 생성
- 테슬라 추천
- 모델 Y 레퍼럴
- 테슬라
- 연애학개론
- 테슬라 크레딧 사용
- 팔로워 수 세기
- follower
- 모델y
- 할인
- 테슬라 레퍼럴
- 인스타그램
- 테슬라 레퍼럴 적용 확인
- 테슬라 리퍼럴 코드
- wlw
- 김달
- Kluge
- Bot
- 클루지
- 메디파크 내과 전문의 의학박사 김영수
- 책그림
- 레퍼럴
- 테슬라 리퍼럴 코드 혜택
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |