분류 전체보기 269

[C++] libcurl (1) 다운로드 및 설치

libcurl 라이브러리 https://curl.se/libcurl/ libcurl - the multiprotocol file transfer library libcurl - the multiprotocol file transfer library libcurl is a free and easy-to-use client-side URL transfer library, supporting DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, curl.se 다양한 프로토콜을 지원하는 파일(메시지) 전송 라이브러리이다. C 언어로 작성되..

Advanced C++ 2022.04.17

[C#] BitConverter 클래스

System.BitConverter 클래스를 통해서 리터럴 타입의 변수 (int, long 등)의 값을 byte[] 바이트로 변환한 값을 얻을 수 있다. 리틀 엔디안 시스템 MSB(Most Significant Bit)가 낮은 주소에 할당 된다. LSB(Least Significant Bit)가 높은 주소로 온다. 정확히는 바이트 단위로 할당된다. ex) 0x09ABCDEF -> (낮은 주소) | EF | CD | AB | 09 | (높은 주소)식으로 만들어진다. Console.WriteLine(BitConverter.IsLittleEndian); // 리틀 엔디안 시스템 바이트 데이터 출력 바이트 배열을 출력하는 헬퍼 함수 public static void PrintBytes(byte[] bytes) ..

C#/Advanced C# 2022.04.14

C# 인터페이스 vs 추상 클래스

인터페이스 interface OOP에서 객체들의 공통적인 행동에 대한 명세를 규정하고 이를 상속(구현)하는 클래스는 인터페이스를 구현하도록 한다. public interface INetwork { public void Send(); } INetwork라는 인터페이스는 Send()라는 함수적 기능만 있을 뿐이다. INetwork를 구현하는 구현체는 이제 Send() 함수 기능을 가지는 클래스라고 할 수 있다. public partial class IPv4Network : INetwork { public void Send() { Console.WriteLine($"{nameof(IPv4Network)}"); } } public partial class IPv6Network : INetwork { public..

Base64 변환 인코딩

Base64 인코딩 임의의 데이터를 문자열 종류에 영향을 받지않는 가장 기본적인 ASCII 코드 형식으로 인코딩 하는 방법이다. Base64 문자열 테이블 A-Z, a-z, 0-9 그리고 규격에 따라 정해진 나머지 두 개의 문자열을 합하여 총 64개의 문자열으로 인코딩한다. MIME 규격으로는 '+'(63) 와 '/'(64)를 사용한다. 인코딩 방식 64개의 문자열에 맵핑하기 위해서 2의 6제곱, 6비트 정보가 필요하다. 편의를 위해 4개씩 문자열을 만드는데 필요한 24비트, 총 3바이트씩 끊어서 인코딩한다. 위키 피디아의 예시처럼 "Man"을 인코딩하면 "TWFu"가 된다. Text content M a n ASCII 77 97 110 Bit pattern 0 1 0 0 1 1 0 1 0 1 1 0 0..

[C++] 멀티 스레드 응용 프로그램 : 은행 창구 시스템 구현하기

은행 창구에서 고객들을 맞이하는 시스템을 구현하고 시뮬레이션 해본다. 다음 요구사항을 만족하는 프로그램을 작성한다. 1. 은행 손님들은 임의의 시간에 은행에 들어와 대기표를 발급 받는다. 2. 대기표를 받은 순서대로 빈 창구 있는 경우 바로 서비스를 받을 수 있게 한다. 3. 각 창구에서 일하고 있는 은행원은 은행 업무 서비스를 제공하고 대기 번호가 하나라도 있는 경우 업무를 맡을 수 있게 한다. 4. 각 창구는 한 명의 은행원이 맡으며 총 은행원의 수는 정해져 있다. 5. 이제 대기표 발급과 창구로의 은행 업무 할당과 관련된 로직을 설계하고 다중 스레드로 시뮬레이션 해본다. 배경 동기화 Synchronization - 대기표 은행에 방문한 손님은 다중 스레드로 표현되는 임의의 시점에서 동시에 대기표를 ..

Advanced C++ 2022.03.27

[C++] C++20 동시성 컨테이너를 사용하여 ThreadPool 설계하기

concurrency 네임스페이스에 포함되어 C++20에 도입된 동시성 컨테이너들이 있다. concurrent_queue concurrent_unordered_map concurrent_unordered_set concurrent_vector 등등... C#의 경우 System.Collections.Concurrent에 이미 제공되던 기능들이다. 그 밖에도 공유 자원 수만 큼 동시성을 제한하는 Semaphore(counting_semaphore, binary_semaphore)와 함수 내에서 같이 실행하는 쓰레드 수(동시성 정도)를 제한하는 배리어 계열(latch, barrier)를 제공하게 되었다. ThreadPool 스레드 풀의 경우 미리 스레드를 큐 형태로 만들어 놓고 작업이 할당될 때 하나씩 꺼내..

Advanced C++ 2022.03.26

[C++] 정규식 표현 std::regex으로 문자열 찾기

C++11에 포함된 라이브러리에 정규식 표현과 관련된 기능이 있다. std::regex 정규식 문자열을 받아 정규식을 표현하는 개체 std::regex rx("[\\w]+"); // 단어 단위로 하나이상 매칭시키는 정규식 C++/C# 정규식 표현 치팅 시트 https://download.microsoft.com/download/D/2/4/D240EBF6-A9BA-4E4F-A63F-AEB6DA0B921C/Regular%20expressions%20quick%20reference.pdf https://docs.microsoft.com/ko-kr/dotnet/standard/base-types/regular-expression-language-quick-reference 자주 사용되는 정규식 표현 - [A-Z..

Advanced C++ 2022.02.07

C++ UnitTest 프로젝트 만들기

C++ UnitTest 프로젝트를 만드는 방법을 알아본다. 단위 테스트는 테스트 주도 개발(TDD)에서 가장 기본이 되는 테스트 방법으로 자신이 만든 함수나 클래스를 테스트하고 올바르게 동작하는 지 확인함에 있다. 몇 가지 테스트 케이스를 두고 입력에 따른 올바른 결과가 나오는 지 확인하는 것을 보통 사용한다. 테스트 케이스가 모든 가능한 경우를 테스트한 다고 볼 수는 없지만 기본적으로 자신이 만든 함수에 대해 기본 기능은 보장한다고 할 수 있다. 또한 다른 작업자가 해당 코드를 나중에 수정할 경우에도 동일한 단위 테스트가 성공할 것을 보장하여 개발 신뢰성을 높일 수 있다. 참고 https://docs.microsoft.com/ko-kr/visualstudio/test/writing-unit-tests-..

MySQL 인덱스

Real MySQL의 인덱스 내용을 개인 공부를 위해 정리한 글입니다. 모든 저작권은 Real MySQL 8.0 (위키북스 / 백은빈, 이성욱 저)에 있음을 밝힙니다. 인덱스란 DBMS에서 인덱스는 데이터의 저장(insert, update, delete) 성능을 희생하고 데이터의 읽기 성능을 높이는 기능이다. 인덱스의 종류 프라이머리 키 (Primary Key): 레코드를 대표하는 컬럼의 값으로 만들어진 인덱스를 말한다. 식별자라고도 하며 NULL값을 허용하지 않고 중복을 허용하지 않는 것이 특징이다. 보조 키 혹은 세컨더리 인덱스 (Secondary Index) : 유니크 인덱스는 프라이머리 키와 성격이 비슷하고 프라이머리 키를 대체해여 사용할 수 도 있어 대체 키라고도 한다. 데이터 저장 방식에는 B..

DB/MySQL 2022.01.09

MySQL 트랜잭션과 잠금

잠금 Lock 동시성을 제어하기 위한 기능 트랜잭션 Transaction 데이터의 정합성 Consistency을 보장하기 위한 기능 MySQL 트랜잭션 트랜잭션이란 논리적인 작업 셋 자체가 100% 적용되거나(Commit) 아무것도 적용되지 않아야(Rollback)함을 보장해 주는 것 데이터의 부분 업데이트 문제 CREATE TABLE tab_myisam ( fdpk INT NOT NULL, PRIMARY KEY (fdpk) ) ENGINE=MyISAM; INSERT INTO tabl_myisam ( fdpk ) VALUES (3); CREATE TABLE tabl_innodb ( fdpk INT NOT NULL, PRIMARY KEY (fdpk) ) ENGINE=INNODB; INSERT INTO ta..

DB/MySQL 2022.01.02