BLEX Logo

개발자를 위한 블로그 플랫폼

개발자들이 모여 지식과 경험을 공유하는 공간입니다

Diving Into Delta Lake - Unpacking The Transaction Log

13분

이 블로그 포스트에서는 Delta Lake의 핵심 개념인 트랜잭션 로그에 대해 설명하고, 파일 수준에서의 동작 방식과 동시 읽기 및 쓰기 문제에 대한 해결책을 제공합니다. Delta Lake 트랜잭션 로그는 Delta Lake 테이블이 생성된 이후에 수행된 모든 트랜잭션을 기록하는 중앙 레포지토리 역할을 합니다. 이를 통해 사용자는 항상 최신 데이터 뷰를 볼 수 있으며, ACID 트랜잭션과 확장 가능한 메타데이터 처리, 타임 트래블 기능 등을 지원합니다. 또한 트랜잭션 로그는 Delta Lake의 원자성을 보장하는 메커니즘으로 작용하며, 파일 추가, 제거, 메타데이터 업데이트 등의 단계로 트랜잭션을 세분화하여 로그에 기록합니다. 이를 통해 Delta Lake는 테이블의 상태를 정확하게 추적하고, 시간 여행 기능을 지원하며, 데이터 파일을 제거해도 테이블의 상태를 유지할 수 있습니다. 또한 Delta Lake는 효율적인 읽기를 위해 체크포인트 파일을 사용하여 테이블의 상태를 빠르게 재현할 수 있습니다.

BLEX 2023 11월 개발노트

BLEX 2023 11월 개발노트

1분

⭐ 추가된 항목 💬 알림 설정 추가 원하는 알림만 수신할 수 있도록 알림 설정을 추가하였습니다. 기존 사용자를 비롯하여 서비스에 가입시 기본적으로 모두 비활성화 된 상태이므로 알림 수신을 원할 경우 활성화가 필요합니다. 💬 포스트 설정 페이지 필터 추가 [설정 > 포스트 관리 > 포스트]에서 정렬 외 포스트에 설정된 태그, 시리즈 및 …

Angular :: Pipe

Angular :: Pipe

8분

이 글은 Angular에서 템플릿에 데이터를 변환하는 파이프에 대한 설명이며, 내장 파이프와 커스텀 파이프의 생성 방법과 옵션에 대해 다룹니다. 내장 파이프로는 AsyncPipe, DatePipe, CurrencyPipe 등이 있으며, 커스텀 파이프는 @Pipe 데코레이터를 사용하여 생성하며, 옵션으로는 name, pure, standalone 등이 있습니다. 코드 예시와 함께 파이프의 활용 방법을 자세히 설명하고 있습니다.

Angular :: Standalone Component

Angular :: Standalone Component

11분

앵귤러에서의 모듈은 어플리케이션 구조를 정의하고 코드 재사용성을 높이는데 도움이 되지만, 종종 복잡성과 오버헤드를 증가시키는 문제가 발생한다. 이에 대한 해결책으로 나온 것이 SCAM 패턴이며, 그에 연장선으로 독립형 컴포넌트가 앵귤러 14부터 실험적으로 도입되었고, 모듈에 대한 이해 없이도 개발이 가능하여 진입 장벽을 낮추었다. 독립형 컴포넌트는 모듈과 공존하며, 레이지 로딩 및 부트스트랩 등 다양한 기능을 활용해 쉽게 앱을 만들 수 있다.

Spark 맛보기 - 4. RDD, DataFrame, DataSet API

26분

RDD(Resilient Distributed Dataset)는 Apache Spark의 핵심 개념으로, 분산 환경에서 병렬로 처리될 수 있는 불변의 데이터 컬렉션이다. RDD는 불변성, 탄력성, 분산 처리의 특징을 가지며, transformation과 action을 통해 작업을 수행한다. RDD는 Spark의 초기 데이터 추상화 모델이며, DataFrame과 Dataset과 같은 고수준의 추상화가 도입되었다. RDD의 주요 문제로는 사용자가 연산 함수 안에서 무엇을 하는지 스파크가 알 수 없었고, 데이터 압축 기술을 적용하기 어려웠다. Spark의 구조 확립을 위해 일상적인 패턴을 사용하여 연산을 표현하고, 지원 언어에서의 API 사용이 가능해졌다. 스파크의 핵심 장점과 이득구조를 갖추면 더 나은 성능과 공간 효율성을 얻을 수 있다. Spark DataFrame은 이름 있는 컬럼과 스키마를 가진 분산 인메모리 테이블의 역할을 하며, 스파크의 기본 데이터 타입과 정형화 타입을 지원한다. 스키마와 데이터 프레임을 미리 정의하는 것은 스파크의 성능과 비용을 개선하는데 도움이 된다.

소소한 타입스크립트 팁

소소한 타입스크립트 팁

13분

타입스크립트 코드 작성 시, 불필요한 선언 최소화, for in 활용하여 객체 순회, 동일 배열 다른 타입에는 구분값 활용, any 사용 최소화 및 안전한 타입 단언을 통해 코드 안정성 강화. 이러한 방법을 통해 코드의 가독성과 유지보수성을 향상시킬 수 있습니다.

Spark 맛보기 - 3. transformation, action, lazy evaluation

5분

Spark의 RDD는 불변성을 가지고 있으며, 변경이 필요할 때는 새로운 RDD를 생성하는 transformation 과정을 거칩니다. transformation은 lazy evaluation으로 실행 계획을 최적화하고, narrow transformation은 하나의 입력 파티션을 연산하여 하나의 결과 파티션을 내놓으며, wide transformation은 다른 파티션의 데이터를 읽어 들여서 합치고 디스크에 쓰는 등의 작업을 합니다. action은 모든 transformation의 평가를 발동시키며, show(), take(), count(), collect(), save()와 같은 연산을 수행합니다. Lazy Evaluation은 쿼리 최적화와 데이터 내구성을 제공하며, 효율성, 최적화, 고비용 연산의 최소화를 특징으로 합니다.

이번 SPA 개발은 앵귤러 어떠세요?

이번 SPA 개발은 앵귤러 어떠세요?

12분

SPA(Single Page Application)는 하나의 HTML 파일에서 사용자가 웹 사이트의 모든 기능을 사용할 수 있는 웹 애플리케이션 형태를 나타냅니다. SPA는 웹 페이지를 새로고침하지 않고 필요한 영역만 업데이트하여 사용자에게 빠른 상호작용을 제공하며, 웹 사이트를 컴퓨터 프로그램이나 모바일 앱과 유사한 경험으로 만들어줍니다. 여기서는 앵귤러를 활용한 SPA 개발에 대한 내용을 다루고 있습니다.

[requests 라이브러리] 내가 아는 timeout은 너무 추상적이였어..

31분

requests 라이브러리를 사용하여 python에서 HTTP 통신을 할 때 timeout 파라미터를 사용하여 응답을 기다리는 시간을 제한할 수 있다. 그러나 timeout 값이 정확히 어떤 순간을 의미하는지에 대해 혼동이 있을 수 있다. 이 글에서는 timeout 값이 client에서 server의 응답을 받는 시간을 의미한다고 가정하고, 실제 코드를 통해 그 동작을 확인해보았다. 또한, ConnectionTimeoutError와 ReadTimeoutError가 어디서 발생하는지와 timeout을 초과하는 경우에 왜 에러가 발생하지 않는지에 대해서도 알아보았다.

프로그래밍 명명법

0분

파스칼 명명법(NameIs)을 쓸것//파일이름 #include "Name" using namespace Name Using Name //타입이름(클래스, 구조체, 컴포넌트) class Cls{} struct Str{} function Compon{ return {} } //속성 class Cls{ int num; int Num{ get{ return num; } set; } } //함수이름 public void Method{ return; } 카멜 명명법(nameIs)을 쓸것//변수이름 int num; str let arr=[] …

Spark 맛보기 - 2. 스파크 애플리케이션 개념

2분

스파크 애플리케이션은 스파크 드라이버 프로그램과 클러스터의 실행기로 구성되며, SparkSession 객체를 통해 스파크 연산을 수행하는 API를 사용하여 프로그래밍할 수 있습니다. 스파크 애플리케이션은 여러 개의 job으로 변환되고, 각 job은 DAG로 변환되어 실행 계획이 됩니다. 연산은 여러 스테이지로 나뉘며, 각각의 스테이지는 최소 실행 단위인 스파크 task로 구성됩니다. SparkContext는 Spark 애플리케이션의 진입점이며, SparkSession은 SparkContext, SQLContext, HiveContext 등을 통합한 단일 진입점입니다.

Spark 맛보기 - 1. Spark란?

6분

Apache Spark는 대규모 분산 데이터 처리를 위해 설계된 통합형 엔진으로, 속도, 사용 편의성, 모듈성, 확장성이라는 핵심 특성을 가지고 있다. Spark는 메모리 저장소를 지원하여 MapReduce보다 훨씬 빠르게 동작하며, MLlib, Spark SQL, Spark Streaming, GraphX 등의 라이브러리를 포함하고 있다. Spark는 스파크 코어를 중심으로 다양한 컴포넌트들이 함께 동작하며, 분산 아키텍처를 통해 데이터를 처리하고 분석하는 통합 엔진으로 사용된다.

파이썬 디렉토리 다루기

0분

디렉토리 다루기#디렉토리 경로 import os os.getcwd() #현재 디렉토리 경로가 반환 os.chdir(path) #작업 디렉토리 경로가 변경 os.listdir() #현재 디렉토리의 리스트를 보여줌 os.listdir(path) #디렉토리의 리스트를 보여줌 os.path.exists(path) #파일,디렉토리가 있는지 확인 os.path.isdir(path) #디렉토리가 있는지 확인 os.path.isfile(path) #파일 존재 확인 os.path.getsize(path) #파일 사이즈 확인 os.makedirs(path) #디렉토리 생성 makedirs는 마지막 디렉토리가 존재하면 오류발생

Angular :: Component - 2

10분

앵귤러 컴포넌트에서 자식 엘리먼트 참조 및 컨텐츠 프로젝션에 대해 알아봅니다. @ViewChild를 사용하여 자식 컴포넌트를 참조하고 <ng-content> 태그를 활용하여 컨텐츠를 전달하는 방법을 다룹니다. 단일 및 다중 슬롯 컨텐츠 프로젝션에 대해 살펴보며 조건부 렌더링 방법도 소개합니다.

Angular :: Component - 1

11분

Angular 컴포넌트는 화면을 구성하는 기본 단위로 HTML 템플릿과 동작을 포함합니다. 컴포넌트의 라이프사이클 메서드는 초기화 및 상태 변화를 관리합니다. 스타일 캡슐화는 Shadow DOM, Emulated, 또는 캡슐화하지 않는 None 옵션 중에서 선택할 수 있습니다. 데이터 바인딩은 Input을 통해 부모 컴포넌트로 데이터 전송을 하고, Output과 EventEmitter를 통해 이벤트 바인딩을 처리할 수 있습니다.

Angular :: HttpClient

14분

Angular의 HttpClient 모듈은 서버 통신을 간편하게 처리하는 도구로, Observable을 통해 비동기적으로 데이터를 요청 및 응답 처리합니다. Interceptor를 사용하여 요청 및 응답을 가공하여 데이터 캐싱과 같은 기능도 만들 수 있습니다. 모듈을 임포트하고 서비스에서 HttpClient를 주입하여 사용하며, 다양한 옵션과 Pipe 함수를 통해 요청 및 응답을 다룰 수 있습니다.

Angular :: Dependency Injection

5분

Angular에서 의존성 주입은 놀랍게도 자동화되어 있습니다. 컴포넌트 생성자에 매개변수로 서비스를 선언하면 Angular 인젝터가 필요한 서비스를 주입해줍니다. 서비스의 재사용과 관심사 분리를 촉진하며, @Injectable로 등록된 서비스는 providedIn 설정을 통해 최적화된 싱글톤으로 관리됩니다. 또한, @Optional, @Self, @SkipSelf, @Host와 같은 데코레이터를 사용하여 의존성 주입 토큰을 제어할 수 있습니다.

Angular :: Directive

Angular :: Directive

7분

Angular 디렉티브는 HTML 요소 동작 및 모양을 제어하는데 사용됩니다. 기본 어트리뷰트, 구조 디렉티브, 커스텀 디렉티브, 커스텀 구조 디렉티브로 나뉘며, 사용자 정의 디렉티브를 생성하여 HTML 요소에 동작 및 스타일을 추가할 수 있습니다.

c++ 요약

12분

C++ 요약C++ 기초 임포트. 입출력 #include &lt;iostream&gt; //iostream 헤더를 임포트 #include &lt;stdio.h&gt; using namespace std; //네임스페이스 선언 int main() { //방법 1 string s; scanf_s(&quot;%s&quot;, &amp;s); printf(&quot;지역변수 : %s&quot;, s); //방법 2 string a; // cin &gt;&gt; a; //입력 getline(cin,a)가 띄어쓰기도 포함해줌 std::cout &lt;&lt; a; //출력. 네임스페이스를 명시적 선언 return …

자바스크립트 요약

14분

자바스크립트 요약자바스크립트 기초 자바스크립트 입출력 import * as readline from &quot;readline&quot; const rl=readline.createInterface({ input: process.stdin, output: process.stdout, }); rl.on(&quot;line&quot;, (line)=&gt; { console.log(&quot;input: &quot;, line); rl.close(); }); rl.on(&quot;close&quot;, ()=&gt; { process.exit(); }); 자바스크립트 자료형과 선언 //선언후에도 파이썬 처럼 자료형 변경이 자유로움 let id=10 //변수 const name=&quot;이름&quot; //상수 …