CS
-
전각문자와 반각문자CS 2024. 2. 25. 00:01
전각문자와 반각문자 전각문자와 반각문자는 주로 한국, 중국, 일본의 인쇄 문화에서 사용하는 용어입니다. 문자의 폭이 일반적인 영문자의 고정 폭의 두 배에 달하는 것을 전각문자라고 하며 전각문자의 절반을 폭으로 하는 문자를 반각문자라고 합니다. 위의 Halfull 프로그램에서 Fullwidth(전각문자) 부분을 보면 간격이 넓은 것을 확인할 수 있습니다. 그런데 Computer Science에서 인쇄 용어가 왜 등장하게 될까요? CS에서의 전각문자와 반각문자 표현 컴퓨터에서는 전통적으로 반각 문자를 1바이트로, 전각 문자를 2바이트로 인코딩하곤 했습니다. 숫자 "3"이나 영어 "a"를 표현할 때는 1바이트로 충분하지만 한글 "가"를 표현하기 위해서는 2바이트가 필요합니다. 알파벳과 한글이 같이 존재하게 되..
-
Base64 인코딩이란?CS 2024. 2. 23. 00:01
개요 프로그래밍을 하다 보면 인코딩, 디코딩을 수행하게 되는데 Base64 인코딩에 대해서 알아보고자 합니다. Base64 인코딩이란? 바이너리 데이터 0과 1을 64개의 문자로 매핑시키는 표가 존재하고, 해당 방식으로 문자를 변환시킵니다. 64개의 문자로는 A-Z, a-z, 0-9 부호 2개(+, /) 패딩(=)을 활용합니다. 패딩이란 부족한 bit수를 채우는 과정을 뜻합니다. 바이너리를 보면 000000 ~ 111111로 구성된 모습을 볼 수 있습니다. 이를 통해 하나의 문자(Char)는 6개의 비트로 구성되는 것을 이해할 수 있습니다. 즉, 6개의 비트인 바이너리 데이터를 ASCII 문자로 혹은 ASCII 문자를 바이너리로 데이터로 변환하는 방법입니다. 패딩이 필요한 이유와 어떻게 변환되는지는 예시..
-
전문통신이란?CS 2024. 2. 18. 00:01
개요 전문통신이라는 용어를 알게 되었고 전문통신은 어떤 것인지 알아보고자 합니다. 전문통신 전문은 한자로 (온전할 전 + 글월 문)이며 전체 문자를 뜻합니다. 영어로는 full-text 라 불리고 고정길이로 전송합니다. 서로 주고받을 데이터 포맷을 약속(프로토콜) 한 후 약속된 데이터 패킷을 전송하고 수신하는 것을 말합니다. 언어는 달라도 바이트 배열을 다 사용이 가능하기 때문에 예전에 바이트배열 형태로 통신을 수행하였습니다. C언어와 Java와의 통신도 바이트배열은 가능합니다. 이런 바이트 배열을 소켓 통신을 통해 주고받습니다. 예를 들어 120바이트로 구성된 배열을 전문 통신을 사용한다고 가정하면, 헤더 용도로 30바이트를 사용하고, 본문으로는 70바이트, 나머지 20바이트는 범용적으로 사용하기 위한..
-
Charset이란?CS 2024. 2. 17. 00:01
개요 프로그래밍을 하다 보면 Encoding, Decoding의 개념등을 활용해보곤 했는데 거기서 사용되는 Charset이라는 개념을 확실하게 잡고 가고자 합니다. Charset이란? 컴퓨터는 0과1로 모든 것이 표현됩니다. 컴퓨터에서 사람이 이해할 수 있는 문자를 표현하기 위해서는 어떻게 해야 할까요? 사람이 이해할 수 있는 문자가 컴퓨터에 0과 1로 표현되려면 어떻게 해야 할까요? 컴퓨터와 언어가 변환될 수 있도록 각 문자를 정수값에 대응시켜놓은 표가 존재해야 합니다. 즉, Charset은 인코딩, 디코딩의 방식을 정해주는 것입니다. 컴퓨터는 정의된 Charset을 통하여 Encoding, decoding을 수행합니다. 해당 표는 ASCII라는 Charset이며 문자 A는 01000001로 인식되고 ..
-
9장 - 옵티마이저와 힌트 - 3편CS/Real MySQL 8.0 요약 2024. 1. 9. 00:01
쿼리 힌트 쿼리 힌트는 옵티마이저에게 쿼리의 실행 계획을 어떻게 수립해야 할지 힌트를 제공하는 데 사용됩니다. 쿼리 힌트가 필요한 이유? 옵티마이저가 실행 계획을 수립해주는데 쿼리 힌트가 왜 필요할까요? 옵티마이저가 우리의 서비스를 100% 이해하지 못하기 때문에 때로는 DBA나 개발자가 부족한 실행 계획을 수립할 때가 있을 수 있습니다. 쿼리 힌트의 종류 인덱스 힌트 (STRAIGHT_JOIN) 옵티마이저 힌트 인덱스 힌트 인덱스 힌트는 SELECT 명령과 UPDATE 명령에서만 사용할 수 있습니다. STRAIGHT_JOIN은 여러 개의 테이블이 조인되는 경우 FROM 절에 명시된 순서대로 조인 순서를 고정하는 역할을 합니다. 일부 테이블의 순서에 대해서는 제안하는 힌트들도 있습니다. USE INDEX..
-
네트워크 Timeout에 대처하는 방법CS/네트워크 2024. 1. 7. 00:01
개요항상 조금 헷갈리던 개념이었던 네트워크 Timeout에 대해 정리해보고자 합니다. 이 글을 읽으면 다음과 같은 궁금증을 해결할 수 있습니다.1. 네트워크의 통신은 어떻게 일어날까?2.네트워크 Timeout은 왜 발생할까?3. 네트워크 Timeout이 발생하면 어떤 것들을 주의해야 할까?4. 네트워크 Timeout이 발생할 수 있으니 어떻게 대처해야 할까? 네트워크 통신이란? 컴퓨터, 스마트폰, 서버 등의 장치가 인터넷이나 네트워크를 통해 서로 데이터와 정보를 교환하는 프로세스입니다. 이때 통신을 위해서 가장 일반적으로 TCP/IP 프로토콜이 활용됩니다. TCP/IP는 3 way handshake를 통하여 패킷(데이터)의 안정적인 전송을 보장합니다. 네트워크에 있는 장치들이 데이터를 교환하기 위해서는 ..
-
CQRS를 곁들인 Materialized ViewCS/데이터베이스 2023. 12. 26. 17:07
개요 데이터베이스에서 원하는 데이터를 제공하기 위해 테이블들을 여러 번 join 했던 경험이 있습니다. 이때 paging 등이 함께 들어가면 쿼리를 작성하기도 복잡해지고, 여러 테이블 join에 대한 성능도 고려해야 합니다. 이때 사내에서 read table과 write table을 분리하는 방안이 적용된 케이스들을 알게 되었고 Materialized View 개념에 대하여 학습해보고자 합니다. Database의 View란? 데이터베이스를 공부하다보면 View라는 개념을 지원합니다. View란 실제로 데이터를 저장하고 있지 않지만 SELECT 쿼리 결과를 가상 테이블로 제공합니다. 테이블 join 결과를 View로 만들어보기 CREATE VIEW employee_department AS SELECT e...
-
9장 - 옵티마이저와 힌트 - 2편CS/Real MySQL 8.0 요약 2023. 12. 23. 00:01
고급 최적화 옵티마이저가 실행계획을 수립할 때 통계 정보와 옵티마이저 옵션을 결합하여 최적의 실행 계획을 수립합니다. 기본적으로 deafult 값이 제공되며 on, off를 통해 옵션을 활성화, 비활성화할 수 있습니다. 이 옵션은 MySQL 서버 전체(Global) 또는 현재 커넥션(Session)에만 적용할 수 있습니다. Multi-Range Read(MRR) 보통 조인을 수행하면 드라이빙 테이블(조인에서 먼저 읽는 테이블)의 레코드를 한 건 읽어서 드리븐 테이블(조인되는 테이블들에서 드라이빙 테이블이 아닌 테이블들)의 일치하는 레코드를 찾아서 조인을 수행합니다. 이런 방식은 Nested Loop Join이라고 합니다. 조인 처리는 MySQL 엔진이, 실제 레코드를 검색하고 읽는 부분은 스토리지 엔진이..