이미지를 시각적으로 분리(조각)하는 용도는 아니며, 이해를 돕기 위해서 첨부합니다.
데이터 유형
Amazon Redshift가 저장하거나 가져오는 값은 각각 고정적으로 연결된 속성 집합이 포함된 데이터 형식을 가지고 있습니다. 데이터 형식은 테이블을 생성할 때 선언됩니다. 열이나 인수에 포함될 수 있는 값도 이 데이터 형식에 따라 결정됩니다.
다음 표는 Amazon Redshift 테이블에서 사용할 수 있는 데이터 형식을 나열한 것입니다.
데이터 형식 | 별칭 | 설명 |
---|---|---|
SMALLINT | INT2 | 2바이트 부호화 정수 |
INTEGER | INT, INT4 | 4바이트 부호화 정수 |
BIGINT | INT8 | 8바이트 부호화 정수 |
DECIMAL | NUMERIC | 정밀도를 선택할 수 있는 정확한 숫자 |
REAL | FLOAT4 | 단정밀도 부동 소수점 수 |
DOUBLE PRECISION | FLOAT8, FLOAT | 배정밀도 부동 소수점 수 |
BOOLEAN | BOOL | 논리적 부울(true/false) |
CHAR | CHARACTER, NCHAR, BPCHAR | 고정 길이 문자열 |
VARCHAR | CHARACTER VARYING, NVARCHAR, TEXT | 사용자 정의 제한이 포함된 가변 길이 문자열 |
DATE | 날짜(년, 월, 일) | |
TIMESTAMP | TIMESTAMP WITHOUT TIME ZONE | 날짜/시간(시간대 제외) |
TIMESTAMPTZ | TIMESTAMP(시간대 사용) | 날짜/시간(시간대 포함) |
GEOMETRY | 공간 데이터 | |
GEOGRAPHY | 공간 데이터 | |
HLLSKETCH | HyperLogLog 스케치와 함께 사용되는 형식입니다. | |
SUPER | ARRAY 및 STRUCTS와 같은 복합 유형을 포함하여 Amazon Redshift의 모든 스칼라 유형을 포괄하는 상위 집합 데이터 유형입니다. | |
TIME | TIME WITHOUT TIME ZONE | Time of day |
TIMETZ | TIME WITH TIME ZONE | Time of day with time zone |
VARBYTE | VARBINARY, BINARY VARYING | 가변 길이 이진 값 |
“char”(char는 인용 부호로 묶임) 등 지원되지 않는 데이터 형식에 대한 자세한 내용은 지원되지 않는 PostgreSQL 데이터 유형 섹션을 참조하세요.
멀티바이트 문자
VARCHAR 데이터 형식은 최대 4바이트의 UTF-8 범위 바이너리 옵션 타입 멀티바이트 문자를 지원합니다. 5바이트 이상의 문자는 지원되지 않습니다. 멀티바이트 문자가 포함된 VARCHAR 열의 크기를 계산하려면 문자 수를 문자당 바이트 수와 곱셈합니다. 예를 들어 문자열에 한자가 4개 포함되어 있고, 각 문자의 길이가 3바이트라면 문자열을 저장하는 데 VARCHAR(12) 열이 필요합니다.
VARCHAR 데이터 유형은 다음과 같이 잘못된 UTF-8 코드포인트를 지원하지 않습니다.
0xD800 – 0xDFFF (바이트 시퀀스: ED A0 80 ~ ED BF BF )
CHAR 데이터 유형은 멀티바이트 문자를 지원하지 않습니다.
형식 호환성 및 변환
이번 섹션에서는 Amazon Redshift의 형식 변환 규칙과 데이터 형식 호환성의 적용 방식에 대한 설명을 살펴볼 수 있습니다.
Compatibility
데이터 형식 일치, 즉 리터럴 값 및 상수를 데이터 범위 바이너리 옵션 타입 형식과 일치시키는 것은 아래 작업을 포함해 다양한 데이터베이스 작업에서 발생합니다.
테이블에 대한 데이터 조작 언어(DML) 작업
UNION, INTERSECT 및 EXCEPT 쿼리
LIKE, IN 등 조건자 평가
데이터를 비교하거나 추출하는 SQL 함수에 대한 평가
위의 작업 결과는 형식 변환 규칙과 데이터 형식 호환성에 따라 달라집니다. 호환성에는 특정 값과 특정 데이터 형식의 1대 1 일치가 항상 필요한 것은 아니라는 의미가 내포되어 있습니다. 일부 데이터 형식은 호환이 가능하기 때문에 묵시적 변환, 즉 강제 변환이 가능합니다(자세한 내용은 묵시적인 변환 형식 단원 참조). 데이터 형식이 호환되지 않을 때는 명시적인 변환 함수를 사용하여 다른 데이터 형식으로 값을 변환할 수 있는 경우도 있습니다.
일번적인 호환성 및 변환 규칙
호환성 및 변환 규칙은 다음과 같습니다.
일반적으로 동일한 형식 카테고리에 해당하는 데이터 형식(여러 가지 숫자 데이터 형식 등)은 서로 호환이 가능하기 때문에 묵시적으로 변환할 수 있습니다.
예를 들어 묵시적인 변환을 통해 소수 값을 정수 열에 삽입할 수 있습니다. 이때 소수는 정수로 반올림됩니다. 또는 날짜에서 2008 같은 숫자 값을 추출하여 정수 열에 삽입하는 것도 가능합니다.
숫자 데이터 형식은 범위 외 값을 삽입하려고 할 때 오버플로우 조건이 발생할 가능성이 높습니다. 예를 들어 정밀도가 5인 소수 값은 정밀도가 4로 정의된 DECIMAL 열에 맞지 않습니다. 소수에서 정수부는 절대로 잘리지 않지만 소수부는 상황에 따라 반올림 또는 내림 처리할 수 있습니다. 하지만 테이블에서 선택한 값의 명시적인 변환 결과는 반올림되지 않습니다.
다른 형식의 문자열도 호환이 가능합니다. 예를 들어 단일 바이트 데이터가 포함된 VARCHAR 열과 CHAR 열 문자열은 서로 호환이 되어 묵시적으로 변환할 수 있습니다. 멀티바이트 데이터가 포함되는 VARCHAR 문자열은 호환되지 않습니다. 그 밖에 문자열이 적합한 리터럴 값인 경우에는 문자열을 날짜, 시간, 타임스탬프 또는 숫자 값으로 변환할 수도 있습니다. 이때 선행 또는 후행 공백은 무시됩니다. 반대로 날짜, 시간, 타임스탬프 및 숫자 값을 고정 길이 또는 가변 길이 문자열로 변환하는 것도 가능합니다.
문자열을 숫자 형식으로 변환하려면 문자열에 숫자를 표현한 문자가 있어야 합니다. 예를 들어 '1.0' 이나 '5.범위 바이너리 옵션 타입 9' 같은 문자열은 소수 값으로 변환할 수 있지만 문자열 'ABC' 는 어떤 숫자 형식으로도 변환할 수 없습니다.
숫자 값과 문자열을 서로 비교하는 경우 숫자 값이 문자열로 변환됩니다. 반대 방향으로, 즉 문자열을 숫자 범위 바이너리 옵션 타입 값으로 변환하려면 CAST 및 CONVERT 같은 명시적인 함수를 사용하십시오.
64비트 DECIMAL 또는 NUMERIC 값의 정밀도를 높여서 변환하려면 CAST 또는 CONVERT 같은 명시적인 변환 함수를 사용해야 합니다.
DATE 또는 TIMESTAMP를 TIMESTAMPTZ로 변환하거나 TIME을 TIMETZ로 변환할 때 시간대는 현재 세션 시간대로 설정됩니다. 세션 시간대는 기본적으로 UTC입니다. 세션 시간대 설정에 대한 자세한 내용은 시간대 섹션을 참조하세요.
마찬가지로 TIMESTAMPTZ 역시 현재 세션 시간대에 따라 DATE, TIME 또는 TIMESTAMP로 변환됩니다. 세션 시간대는 기본적으로 UTC입니다. 변환 후에는 시간대 정보가 삭제됩니다.
시간대를 지정하여 타임스탬프를 표현한 문자열은 현재 세션 시간대(기본적으로 UTC)에 따라 TIMESTAMPTZ로 변환됩니다. 마찬가지로 시간대가 지정된 시간을 표현하는 문자열은 현재 세션 시간대(기본값 UTC)를 사용하여 TIMETZ로 변환됩니다.
묵시적인 변환 형식
묵시적인 변환 유형은 다음과 같이 두 가지입니다.
인수의 묵시적 변환(INSERT 또는 UPDATE 명령의 값 설정 등)
표현식의 묵시적 변환(WHERE 절의 비교 등)
다음 표는 인수 또는 표현식에서 묵시적으로 변환할 수 있는 데이터 형식을 나열한 것입니다. 그 밖에 명시적인 변환 함수를 통한 변환도 가능합니다.
입력 형식 | 출력 형식 |
---|---|
BIGINT (INT8) | BOOLEAN |
CHAR | |
DECIMAL (NUMERIC) | |
DOUBLE PRECISION (FLOAT8) | |
INTEGER (INT, INT4) | |
REAL (FLOAT4) | |
SMALLINT (INT2) | |
VARCHAR | |
CHAR | VARCHAR |
DATE | CHAR |
VARCHAR | |
TIMESTAMP | |
TIMESTAMPTZ | |
DECIMAL (NUMERIC) | BIGINT (INT8) |
CHAR | |
DOUBLE PRECISION (FLOAT8) | |
INTEGER (INT, INT4) | |
REAL (FLOAT4) | |
SMALLINT (INT2) | |
VARCHAR | |
DOUBLE PRECISION (FLOAT8) | BIGINT (INT8) |
CHAR | |
DECIMAL (NUMERIC) | |
INTEGER (INT, INT4) | |
REAL (FLOAT4) | |
SMALLINT (INT2) | |
VARCHAR | |
INTEGER (INT, INT4) | BIGINT (INT8) |
BOOLEAN | |
CHAR | |
DECIMAL (NUMERIC) | |
DOUBLE PRECISION (FLOAT8) | |
REAL (FLOAT4) | |
SMALLINT (INT2) | |
VARCHAR | |
REAL (FLOAT4) | BIGINT (INT8) |
CHAR | |
DECIMAL (NUMERIC) | |
INTEGER (INT, INT4) | |
SMALLINT (INT2) | |
VARCHAR | |
SMALLINT (INT2) | BIGINT (INT8) |
BOOLEAN | |
CHAR | |
DECIMAL (NUMERIC) | |
DOUBLE PRECISION (FLOAT8) | |
INTEGER (INT, INT4) | |
REAL (FLOAT4) | |
VARCHAR | |
TIMESTAMP | CHAR |
DATE | |
VARCHAR | |
TIMESTAMPTZ | |
TIME | |
TIMESTAMPTZ | CHAR |
DATE | |
VARCHAR | |
TIMESTAMP | |
TIMETZ | |
TIME | VARCHAR |
TIMETZ | |
TIMETZ | VARCHAR |
TIME | |
GEOMETRY | GEOGRAPHY |
GEOGRAPHY | GEOMETRY |
TIMESTAMPTZ, TIMESTAMP, DATE, TIME, TIMETZ 또는 문자열 사이의 묵시적인 변환은 현재 세션 시간대를 사용합니다. 현재 시간대 설정에 대한 자세한 내용은 시간대 섹션을 참조하세요.
GEOMETRY 및 GEOGRAPHY 데이터 유형은 서로를 제외하고 다른 데이터 유형으로 암시적으로 변환될 범위 바이너리 옵션 타입 수 없습니다. 자세한 내용은 섹션을 참조하세요CAST 및 CONVERT 함수
VARBYTE 데이터 유형은 암시적으로 다른 데이터 유형으로 변환될 수 없습니다. 자세한 내용은 섹션을 참조하세요CAST 및 CONVERT 함수
SUPER 데이터 형식에 동적 형식 지정 사용
Amazon Redshift는 동적 형식 지정을 사용하여 쿼리에 사용하기 전에 데이터 형식을 선언할 필요 없이 스키마 없는 SUPER 데이터를 처리합니다. 동적 형식 지정은 Amazon Redshift 형식으로 명시적으로 캐스팅하지 않고도 SUPER 데이터 열로 이동한 결과를 사용합니다. SUPER 데이터 형식에 동적 입력 사용에 대한 자세한 내용은 동적 형식 지정 섹션을 참조하세요.
범위 바이너리 옵션 타입
이 문서의 허가되지 않은 무단 복제나 배포 및 출판을 금지합니다. 본 문서의 내용 및 도표 등을 인용하고자 하는 경우 출처를 명시하고 김종민([email protected])에게 사용 내용을 알려주시기 바랍니다.
지금까지 문자열, 숫자, 날짜, 불리언, 객체, 위치정보 들을 저장하는 필드 타입들을 살펴보았습니다. 이 외에도 Elasticsearch에는 다음과 같은 추상화 된 데이터 타입들이 있습니다.
IP 주소 형식을 저장합니다. 매핑은 "type": "ip" 으로 선언합니다. 값은 "192.168.1.1" 같은 IPv4 형식과 "0:0:0:0:0:ffff:c0a8:105" 같은 IPv6 형식을 문자열 처럼 입력합니다.
숫자나 날짜, IP 등을 시작과 끝이 있는 2차원의 범위 형태로 저장합니다. 매팽의 "type" 에 선언 가능한 값은 integer_range , float_range , long_range , double_range , date_range , ip_range 들이 있습니다. 데이터의 범위는 다음과 범위 바이너리 옵션 타입 같이 gt , gte , lt , lte 를 사용해서 지정합니다.
Range 필드의 쿼리는 일반적인 숫자나 날짜 처럼 range 쿼리를 사용합니다. 다만 범위 데이터를 range 쿼리로 검색 할 때는 추가로 relation 옵션의 값을 입력해야 하며 입력하지 않으면 오류가 납니다. relation 옵션에 지정 가능한 값은 within , contains , intersects 3가지가 있습니다.
여행이나 출장 정보를 담은 도큐먼트가 있다면 시작일, 종료일 두 필드를 지정하는 대신 출장기간 이라는 date_range 타입의 단일 필드로 값을 저장해서 더욱 편하고 유용하게 사용할 수 있습니다.
바이너리 옵션(Binary Options) - NordFX의 신규 서비스
NordFX의 바이너리 옵션 거래자산은 US 달러, 유로, 영국 파운드, 일본 엔 등 주요 통화뿐만 아니라, 캐나다, 뉴질랜드, 싱가포르 달러, 러시아 루블, 남아프리카 랜드, 터키 리라 등의 통화도 포함한다. 지수 등락은 물론 금이나 은, 백금, 석유, 커피, 밀, 설탕 등의 시세, 혹은 애플, 나이키, 기타 선도적인 기업들의 주가 변동에 대해서도 수익을 얻을 수 있다.
바이너리 옵션 거래를 위해서는 막대한 투자금이 필요하지 않다. NordFX 최소 거래 금액은 단돈 $5다. 빠르고 편리한 자금 예치와 출금을 위해 NordFX는 오버 20 지불 시스템(은행 이체, VISA, MasterCard, WebMoney, Skrill, NETELLER, PayWeb, Payza, OKPAY, FasaPay 등)을 지원한다.
바이너리 옵션의 역사는 2008년 시카고 주식 거래소 명단에 포함되면서 시작됐다. 이와 같은 유형의 온라인 소득이 투자자의 원금을 보호할 뿐 아니라 상당한 자금 증식을 위한 훌륭한 기회를 제공하면서, 바이너리 옵션은 최근에 크게 성장했다.
NordFX[http://nordfx.com/?id=967689 ]는 2008년 설립돼 개인과 기업에게 다양한 범위의 서비스와 Forex 거래를 위한 유리한 조건을 제공하는 선도적인 국제 중개 업체로 성장했다.
Binary Options - New Service from NordFX
LARNACA, Cyprus, February 22, 2015/PRNewswire/ -- In January 2015 the international broker NordFX expanded its services by introducing a web-platform for binary options trading (binary.nordfx.com). Binary options are among the most affordable and high-yielding tools to date.
Worldwide, binary options are known as a quick and easy way of online earning. Options trading is very simple and intuitive - select an asset and predict if its price will go up or down by a certain time (expiry).
In a minute you can make a profit over 70% (60 Seconds options) while Ladder options can deliver up to 1500% in profits! Investors can also trade classic Binary Options, One Touch, Pairs and Long Term options.
This type of online earning is absolutely transparent as your payout for a correct prediction or loss for a wrong guess are clear when you open a trade. These amounts don't change with price fluctuations, thus, investors can calculate profits and losses in advance.
Experienced Forex traders get an additional advantage - deals with options can be used to hedge open positions, with zero spreads to boot.
Assets for trading binary options with NordFX include not only such major currencies as the US Dollar, the Euro, the British Pound and the Japanese Yen but also Canadian, New Zealand and Singapore Dollars, the Russian Rouble, the South African Rand and the Turkish Lira. You can make money on fluctuations in the price of gold, silver, platinum, oil, coffee, wheat and sugar, or on predictions about the price of stocks of Apple, Nike and other leading companies as well as on the rise or fall of indices.
You don't need huge investments to trade binary options. The minimum deal in NordFX is just $5. For quick and handy funds deposits and withdrawals, NordFX supports over 20 payment systems - bank transfers, VISA and MasterCard, WebMoney, Skrill, NETELLER, PayWeb, Payza, OKPAY, FasaPay and more.
The history of binary options began in 2008 with their incorporation into the Chicago Stock Exchange roster. Recently binary options have been on a major rise as this kind of online earning presents a fantastic opportunity to not only keep one's capital intact but actually give it a considerable boost.
셰이더 데이터 타입 및 정밀도
Unity의 스탠다드 셰이더 언어는 HLSL이고, 일반 HLSL 데이터 타입이 지원됩니다. 하지만 Unity에는 특히 모바일 플랫폼에서 지원을 개선하기 위한 추가 HLSL 타입이 있습니다.
기본 데이터 타입
셰이더의 연산은 대부분 플로팅 포인트 숫자(C# 같은 일반 프로그래밍 언어에서는 float )에 대해 수행됩니다. 플로팅 포인트 타입의 몇 가지 배리언트인 float , half 및 fixed 등이 있고, half3 및 float4x4 등 이런 배리언트의 벡터/매트릭스 배리언트도 있습니다. 타입마다 정밀도가 다르기 때문에, 성능과 전력 사용량도 다릅니다.
고정밀도: float
최고 정밀도 플로팅 포인트 값으로, 일반 프로그래밍 언어의 float 처럼 일반적으로 32비트입니다.
전체 float 정밀도는 일반적으로 월드 공간 포지션, 텍스처 좌표 또는 삼각법이나 제곱/지수연산 같은 복합 함수를 수반하는 스칼라 계산에 사용됩니다.
중정밀도: half
중정밀도 플로팅 포인트 값으로, 일반적으로 16비트입니다(–60,000 - +60,000 범위, 십진 숫자 약 3개의 정밀도).
반정밀도는 짧은 벡터, 방향, 오브젝트 공간 포지션, 고다이나믹 레인지 컬러에 유용합니다.
저정밀도: fixed
정밀도가 가장 낮은 고정 포인트 값입니다. 일반적으로 11비트고, 범위는 –2.0 - +2.0, 정밀도는 1/256입니다.
고정 정밀도는(일반 텍스처에 일반적으로 저장된) 일반 컬러와 간단한 컬러 작업 수행에 유용합니다.
정수 데이터 타입
정수( int 데이터 타입)는 종종 루프 카운터나 배열 인덱스로 사용됩니다. 이 용도로 사용할 경우 일반적으로 다양한 플랫폼에서 문제 없이 사용 가능합니다.
플랫폼에 따라 GPU에서 정수 타입을 지원하지 않을 수 있습니다. 예를 들어, Direct3D 9 및 OpenGL ES 2.0 GPU는 플로팅 포인트 데이터에만 동작하고(비트 또는 논리 연산을 수반하는) 간단해 보이는 정수식을 꽤 복잡한 플로팅 포인트 수학 명령을 사용하여 에뮬레이트할 수 있습니다.
Direct3D 11, OpenGL ES 3, Metal 및 기타 최신 플랫폼은 정수 데이터 타입을 제대로 지원하므로 비트 시프트와 비트 마스킹을 사용하면 올바르게 작동합니다.
복합 벡터/매트릭스 타입
HLSL에는 기본 타입을 토대로 만든 빌트인 벡터 및 매트릭스 타입이 있습니다. 예를 들어, float3 은 .x, .y, .z 컴포넌트가 있는 3D 벡터고 half4 는 .x, .y, .z, .w 컴포넌트가 있는 중정밀도 4D 벡터입니다. 또는 컬러 관련 작업을 수행할 때 유용한 .r, .g, .b, .a 컴포넌트를 사용하여 벡터를 인덱스할 수 있습니다.
매트릭스 타입도 유사한 방법으로 빌드됩니다. 예를 들어 float4x4 는 4x4 변환 매트릭스입니다. OpenGL ES 2.0 같은 일부 플랫폼에서는 정사각형 매트릭스만 지원합니다.
텍스처/샘플러 타입
일반적으로 텍스처를 HLSL 코드에서 다음과 같이 선언합니다.
모바일 플랫폼의 경우 “저정밀도 샘플러”로 변환됩니다. 즉, 텍스처에는 저정밀도 데이터가 있어야 합니다. Shader precision model 드롭다운을 사용하여 Player Settings에서 Unity 프로젝트 전체의 기본 샘플러 정밀도를 변경할 수 있습니다. 텍스처에 HDR 컬러가 포함되어 있음을 알고 있는 경우 반정밀도 샘플러를 사용할 수 있습니다.
또는 텍스처에 전체 플로트 정밀도 데이터가 포함된 경우(예: 뎁스 텍스처), 전체 정밀도 샘플러를 사용합니다.
정밀도, 하드웨어 지원 및 성능
float / half / fixed 데이터 타입을 사용하는 경우에 발생하는 복잡한 문제 중 하나는 PC GPU가 항상 고정밀도라는 점입니다. 즉, 모든 PC(Windows/Mac/Linu) GPU는 셰이더에서 float , half 또는 fixed 데이터 타입 중 무엇을 작성하든 상관없이 항상 모든 것을 전체 32비트 플로팅 포인트 정밀도로 연산합니다.
half 및 fixed 타입은 모바일 GPU가 타겟인 경우에만 중요합니다. 이 경우 두 타입은 주로 전력(및 때로는 성능) 제약을 위해 존재합니다. 셰이더를 테스트하여 정밀도/숫자 문제가 발생하지 않는지 확인해야 함을 기억해야 합니다.
모바일 GPU의 경우에도 여러 정밀도 지원이 GPU 제품군에 따라 다릅니다. 다음은 각 모바일 GPU 제품군이 각 플로팅 포인트 타입(각 타입에 사용된 비트 수로 나타냄)을 처리하는 방법의 개요입니다.
GPU 제품 | float | half | fixed |
---|---|---|---|
PowerVR Series 6/7 | 32 | 16 | |
PowerVR SGX 5xx | 32 | 16 | 11 |
Qualcomm Adreno 4xx/3xx | 32 | 16 | |
Qualcomm Adreno 2xx | 32버텍스 24프래그먼트 | ||
ARM Mali T6xx/7xx | 32 | 16 | |
ARM Mali 400/450 | 32버텍스 16프래그먼트 | ||
NVIDIA X1 | 32 | 16 | |
NVIDIA K1 | 32 | ||
NVIDIA Tegra 3/4 | 32 | 16 |
대부분의 최신 모바일 GPU는 실제로 32비트 숫자( float 타입에 사용됨) 또는 16비트 숫자( half 및 fixed 타입에 모두 사용됨) 중 하나만 지원합니다. 일부 구형 GPU의 버텍스 셰이더 및 프래그먼트 셰이더 연산 정밀도는 다릅니다.
더 낮은 정밀도를 사용하면 GPU 레지스터 할당 개선으로 인해 또는 특정 저정밀도 수학 연산을 위한 특수 “빠른 경로” 실행 유닛으로 인해 종종 빨라질 수 범위 바이너리 옵션 타입 있습니다. 순수한 성능상의 이점이 없는 경우에도 더 낮은 정밀도를 사용하면 종종 GPU에 전원이 덜 사용되어 배터리 수명이 연장됩니다.
일반적인 경험 법칙에 따르면, 포지션 및 텍스처 좌표를 제외한 모든 것에 대해 반정밀도로 시작해야 합니다. 계산의 일부분에 반정밀도가 충분하지 않은 경우에만 정밀도를 높여야 합니다.
무한, NaN 및 기타 특수 플로팅 포인트 값에 대한 지원
특수 플로팅 포인트 값에 대한 지원은 사용하는 GPU 제품군(대부분 모바일)에 따라 다를 수 있습니다.
Direct3D 10을 지원하는 모든 PC GPU는 매우 정확하게 규정된 IEEE 754 플로팅 포인트 스탠다드를 지원합니다. 즉, 플로트 숫자가 CPU에 일반적인 프로그래밍 언어에서 동작하는 것과 똑같이 동작합니다.
모바일 GPU의 지원 수준은 약간 다를 수 있습니다. 일부 GPU로 0을 0으로 나눈 결과는 NaN(“숫자 아님”)이 될 수 있고, 그 외의 GPU에서는 무한, 0, 또는 기타 지정되지 않은 값이 될 수 있습니다. 타겟 디바이스에서 셰이더를 테스트하여 지원되는지 확인해야 합니다.
Blob 생성
Blob 생성자는 새로운 Blob 객체를 반환합니다.
생성 시 인수로 array 와 options 을 받습니다.
array
Blob 생성자의 첫번째 인수로 ArrayBuffer, ArrayBufferView, Blob(File), DOMString 객체 또는 이러한 범위 바이너리 옵션 타입 객체가 혼합된 Array를 사용할 수 있습니다.
options
옵션으로는 type 과 endings 를 설정할 수 있습니다.
type 은 데이터의 MIME 타입을 설정하며, 기본값은 "" 입니다.
endings 는 \n 을 포함하는 문자열 처리를 "transparent" 와 "native" 로 지정할 수 있으며, 기본값은 "transparent" 입니다.
Blob 객체
Properties
다음은 약 43KB의 PNG 이미지로 생성한 Blob 객체 입니다.
생성자를 통해 만들어진 Blob 객체는 size , type 의 속성을 가집니다.
size 는 Blob 객체의 바이트(Byte) 단위 크기를 의미하며, type 은 객체의 MIME 타입을 의미합니다.
MIME 타입을 알 수 없는 경우 빈 문자열( "" )이 할당됩니다.
Methods
Blob 객체에서 사용할 수 있는 slice 메소드는 지정된 바이트 범위의 데이터를 포함하는 새로운 Blob 객체를 만드는 데 사용됩니다.
10MB 이상 사이즈가 큰 Blob 객체를 작게 조각내어 사용할 때 유용합니다.
start 는 시작 범위(Byte, Number), end 는 종료 범위(Byte, Number), type 은 새로운 Blob 객체의 MIME 타입(String)을 지정합니다.
다음 예제는 위에서 살펴본 Blob 객체(약 43KB의 PNG 이미지로 생성한)를 10개의 Chunk로 조각냅니다.
그리고 각 Chunk를 chunks 배열에 순서대로 저장합니다.
이렇게 조각낸 Blob 객체들(Chunks)은 필요에 의해 간단하게 다시 합칠 수 있습니다.
아래 이미지는 위 코드의 결과로 왼쪽 이미지는 #merged-image 요소, 오른쪽 이미지는 #chunk-image 요소입니다.
오른쪽 이미지가 약 1/10로 잘려서 출력되는 것을 볼 수 있습니다.
이미지를 시각적으로 분리(조각)하는 용도는 아니며, 이해를 돕기 위해서 첨부합니다.
위 코드의 마지막을 보면 URL.createObjectURL() 을 사용하였으며, 이는 Blob 객체를 가리키는 URL을 생성하여 DOM에서 참조할 수 있게 합니다.
Blob URL에 대해서 간단하게 알아봅시다.
Blob URL
Blob 객체를 가리키는 URL을 생성을 위해 URL 객체의 정적 메소드(Static Method)로 createObjectURL과 revokeObjectURL를 사용할 수 있습니다.
createObjectURL
URL.createObjectURL() 은 Blob 객체를 나타내는 URL를 포함한 다음과 같은 범위 바이너리 옵션 타입 DOMString를 생성합니다.( blob:URL )
이 Blob URL은 생성된 window의 document에서만(브라우저) 유효합니다.
다른 window에서 재활용할 수 없으며, URL의 수명이 한정되어 있기 때문에 file:URL 과 다르게 보안 이슈에서 벗어날 수 있습니다.
다음과 같이 활용할 수 있습니다.
revokeObjectURL
URL.revokeObjectURL() 은 URL.createObjectURL() 을 통해 생성한 기존 URL을 해제(폐기)합니다.
revokeObjectURL 을 통해 해제하지 않으면 기존 URL를 유효하다고 판단하고 자바스크립트 엔진에서 GC 되지 않습니다.
메모리 누수를 방지하기 위해 생성된 URL을 DOM과 바인딩한 후에는 해제하는 것이 좋습니다.
브라우저 지원 확인
Blob 객체가 브라우저에서 지원 가능한지 확인하려면 다음과 같이 작성할 수 있습니다.
AJAX를 이용한 Blob 수신 예제
Promise를 반환하는 loadXHR 함수를 범위 바이너리 옵션 타입 추가하고,
요청한 Blob 객체를 수신해,
이미지 태그 src 에 URL로 삽입하는 예제입니다.
참고 자료(References)
HEROPY의 다른 글
Snowpack은 번들러가 아닙니다! 더 빠른 웹 개발을 위한 최신의 프론트엔드 빌드 도구로, JavaScript의 ESM(ES Modules)을 활용해 기존의 Webpack, Rollup 그리고 Parcel 같은 무겁고 복잡한 번들러의 번들 소요 시간을 절약할 수 있습니다.
PixiJS는 WebGL을 사용하는 고속 HTML5 2D 렌더링 라이브러리입니다. Canvas Fallback을 지원합니다. PixiJS와 Depth map을 사용해 이미지에 생명력을 불어 넣을 수 있습니다.
Postman에서 API 요청과 응답에 대한 테스트를 자동화할 수 있습니다.Reqres.in에서 제공하는 로그인 API를 사용합니다.RequestCollection참고 자료(References)RequestPostman에 로그인하고 새로운 Request 탭을 엽 .
Vue Test Utils(VTU)는 Vue.js 환경에서 단위 테스트를 하기 위한 공식(Official) 라이브러리입니다. Jest는 페이스북에서 만든 테스트 프레임워크로 Vue Test Utils에서 권장하는 테스트 러너입니다. 두 가지 오픈 소스를 이용해 Vue 애플리케이션의 테스트를 진행합니다.
개요HTML, CSS 그리고 JavaScript웹 표준크로스 브라우징웹 접근성정보 통신 보조기기웹 접근성 품질인증 마크웹 개발을 위한 에디터Sublime TextAtomBracketsVS CodeWebStormVS Code 설치 및 설정설치인터페이스확장 기능(E .
개발을 위해 npm install xxx로 설치하는 모듈이 많아지면서 자주 사용하는 나의 코드들도 같은 방법으로 제공하고 싶었죠.하지만 ‘코드 복붙’이 더 쉬우니 차일피일 미루던 일을 최근 기회가 생겨 시작했습니다.동시에 NPM 배포에 필요한 과정을 정리했습니다 .
0 개 댓글