.NET (295)
. NET Core 2.1의 개선 및 신 기능 February 20, 2018
툴 도입이나 확장 기능으로 기존 .NET CLI 툴 대신 “.NET Core 글로벌 툴(Global Tools)”라고 칭하는 새로운 기능이 도입된다. Node의 글로벌 툴과 같은 것으로 구문도 이쪽을 따르고 있다. .NET의 툴에 관한 새로운 에코 시스템이 확립되는 것을 Mi...
.NET - Buffer.MemoryCopy 함수 December 21, 2017
메모리 복사 속도를 올리기 위해서는 Array.Copy 보다는 Buffer.BlockCopy를 사용하는 것이 좋다. 단 Buffer.BlockCopy는 작은 크기(10~30 바이트 이하)의 복사에서는 Array.Copy 보다 뛰어나다고 할 수 없다. 원래 Buffer.Block...
.NET - Enums.NET May 30, 2018
Enums.NET C#의 enum을 직접 사용하는 것에 비해 Enums.NET을 사용하는 것이 더 빠름. 아래는 비교 코드. 출처 using EnumsNET; using System; using System.Diagnostics; using System.Text; public...
.NET - WCF October 9, 2018
기초 WCF 기초(한글) http://akj61300.blog.me/80182137426 WCF Step by Step http://blog.naver.com/saeparam/90024967440 WAS에서 호스팅하기 http://blog.ruaa.me/23 W...
.NET Core - .NET Core 2.1에 의한 Microsoft Bing의 고속화 October 13, 2018
출처
.NET Core - Improving .NET Core Kestrel performance using a Linux-specific transport February 14, 2019
이 글을 구글 번역을 통해 일부 정리했다
.NET Core - RID 카탈로그 October 3, 2018
RID는 Runtime IDentifier(런타임 식별자)의 약어이다. RID 값은 응용 프로그램을 실행하는 대상 플랫폼을 식별하는데 사용된다. Docs의 설명
.NET Core 2.0 Ubuntu에 설치하기 September 27, 2017
공식 설치 문서 우분투에 아래와 같은 명령어를 터미널에 순서대로 입력하면 간단하게 설치가 끝난다. curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg sudo mv ...
.NET Core 2.0 봄에 출시 예정 January 18, 2017
원문 2017년 봄에 출시 예정. .NET Core 플랫폼에 있어서 큰 변화가 있는 버전이다. 버전 2이 되는 것으로 .NET Core 능력을 크게 확대하기 때문이다. .NET Standard의 버전이 2.0 이된다. .NET Standard 2.0 에서는 2배 가까운 AP...
.NET Core 2.0의 Random과 이전 버전(닷넷프레임워크 포함)과의 차이 June 20, 2018
.NET Core 2.0 이전 버전 및 닷넷프레임워크의 Random 클래스는 생성 시 직접 seed 값을 주지 않으면 Environment.TickCount 를 사용한다. 그래서 동시에 복수의 Random 클래스를 생성하면 seed 값이 같아서 복수의 Random 인스턴스에서 ...
.NET Core 2.1 preview2에서 네트워킹 개선 May 8, 2018
원문
.NET Core 설치 및 프로젝트 생성하기 November 29, 2017
원문 설치 Windwos - 다운로드 후 설치 - https://www.microsoft.com/net/core#windowscmd Ubuntu - 패키지 추가 - curl https://packages.microsoft.com/keys/microsoft.as...
.NET Core용 이미지 라이브러리 June 2, 2017
.NET Core를 사용하여 애플리케이션을 개발할 때 개발자가 알아야 할 결점 하나는 영상 기반 API가 없는 것이다. 보급된 API 중의 하나로 훌륭한 System.Drawing 이 있지만 이것은 Windows 기반의 GDI+ 인터페이스에 의존하고 있다. .NET Core에서는 ...
.NET 오프 소스 - Colorful.Console 라이브러리 December 19, 2019
콘솔 출력 문자에 컬러를 지정할 수 있다. 다양한 방식으로 컬러 출력. 닷넷 코어도 지원. 공식
.NET 오프 소스 - stateless 라이브러리 December 20, 2019
유한 상태 머신을 쉽게 구현해 주는 라이브러리. 닷넷 코어 지원. Export to DOT graph 지원으로 상태 머신 구조를 이미지로 출력한다. async/await 지원. 공식 var phoneCall = new StateMachine<State,...
.NET의 모든 병렬 컨테이너는 lock-free 인가? January 8, 2018
FAQ :: Are all of the new concurrent collections lock-free? 의 글을 일부 번역/정리. (이 대답은 .NET Framework 4를 기반으로 한다. 아래의 세부 정보는 문서화 되지 않은 구현 세부 사항이므로 향후 릴리스에서 변경 될 ...
ASP.NET Core 서버 시작까지 흐름 추적 August 27, 2019
출처 프로그램 엔터리 Program#Main Program 클래스의 Main 메소드 안은 아래처럼 되어 있다. 이것을 1행씩 따라가 본다. Program.cs WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>...
ASP.NET Core 애플리케이션 최소 구현 치트 시트 August 24, 2019
원본 아래의 설정만 하면 OK. csproj App.csproj <Project Sdk = "Microsoft.NET.Sdk.Web" > <PropertyGroup> <TargetFramework> netcoreapp2...
ASP.NET Core 하나의 호스트에서 http와 socket 통신 같이 하기 January 28, 2019
Github ASP.NET Core의 Kestrel을 사용하여 TCP Socket 프로그래밍을 할 수 있다. MultiProtocolAspNetCore 프로젝트의 Program.cs 파일의 내용은 아래와 같다. public static IWebHostBuilder CreateWe...
ASP.NET MVC - 컨트룰러의 다른 뷰 사용하기, View 컨트롤 October 7, 2018
컨트룰러의 다른 뷰 사용하기 // 기본 뷰 public ActionResult Index() { var model = new MailModels(); .... return View(model); } // 핸들러 public ActionResult SendMail(MailM...
C# - AlterNats 이라는 고성능 .NET PubSub 클라이언트와 그 구현에서 본 .NET 6 시대의 Socket 프로그래밍 최적화의 Tips March 4, 2023
C# - C++구조체 멤버에 대해 C# 클래스의 프로퍼티로 마셜링 May 14, 2021
C# - .NET 5를 사용하고 싶은 이유 6가지 May 23, 2021
C# - .NET 6 소개 August 27, 2023
회사에서 공유했던 오래전 문서지만 닷넷 학습에 참고하면 좋습니다.
C# - .NET 7 Blazor Server를 .NET 8로 마이그레이션하는 방법 January 19, 2024
C# - .NET 7 NativeAOT에서 CPU 베이스의 성능 벤치 마크 February 16, 2023
C# - .NET 7.0에서 다양한 컬렉션의 읽기 성능을 측정했다 February 20, 2023
C# - .NET 8 & C# 12 정리 December 26, 2023
C# - .NET 8 에서 WinForm 프로그램 빌드 시 경고 발생하는 것 수정하기 December 3, 2023
.NET 7 에서는 WinForm 프로그램을 빌드할 때 나오지 않던 경고는 .NET 8에서는 발생했다. 경고는 아래와 같다. 1>C:\SuperSocketLite\Tutorials\PvPGameServer_Client\PacketProcessForm.cs(119,17,119...
C# - .NET 8에서 ASP.NET Core Hosted Blazor WebAssembly 프로젝트 새로 만들기 January 16, 2024
C# - .NET Conf 2024 x Seoul - 닷넷에서의 스레드간 메시지 전송 February 21, 2024
예제 코드
C# - .NET Core 3.0 단일 실행 파일 생성 December 30, 2020
C# - .NET Core 3.0 시대의 메모리 관리 December 12, 2021
C# - .NET Core 3.0에서 Blazor가 정식 버전으로 October 28, 2019
출처 마이크로 소프트의 Web 응용 프로그램 프레임워크 “Blazor”가 .NET Core 3.0의 출시와 동시에 정식으로 출시 되었다. Blazor는 JavaScript와 React나 Angular 등의 프레임워크 대신 C# 및 .NET Core 프레임워크 등을 이용하여 We...
C# - .NET Core 범용 호스트 (GenericHost) 설정 로드 June 3, 2021
C# - .NET Core 범용 호스트(GenericHost)의 로그 출력 구성 June 2, 2021
C# - .NET Core3.1에서 CORS 설정하기 March 30, 2020
출처 서버 사이드와 프론트 사이드가 다른 서버로 구현된 경우, Host된 포트 번호가 다르기 때문에 CORS 설정을 할 필요가 있다. 환경 Angular 8.2.14 .NET Core 3.1 서버 사이드: https://localhost:44342 프론트 사이드...
C# - .NET Core범용 호스트(GenericHost) ILogger의 로그 출력 메소드 May 31, 2021
C# - .NET Core에서 Generic Host 사용하기 May 26, 2021
C# - .NET Core에서 비밀 문자를 안전하게 운용 (개발 환경 편) May 13, 2021
C# - .NET Core와 Unity를 위한 zero 할당 구조 Logger 라이브러리 ZLogger February 17, 2021
C# - .NET Core의 Diagnostics CLI Tool 사용 June 7, 2021
C# - .NET Core의 Generic Host(범용 호스트)의 Start/Run/RunConsoleAsync 차이 May 28, 2021
C# - .NET Core의 WinForms/WPF로 만든 프로그램의 실행 파일 패스 February 12, 2020
닷넷프레임워크의 WinForm/WPF는 그 자체로 바로 실행되지만 .NET Core로 만든 것은 dotnet 명령어를 사용하여 프로그램을 실행하기 때문에 프로그램의 실행 파일 패스를 얻을 때 이전(닷넷프레임워크)과 다르다. Process.GetCurrentProcess를 사용해야 ...
C# - .NET 고속화 Tips June 24, 2021
C# - .NET 로컬 툴 사용법 March 25, 2020
출처 .NET Core도구? .NET core 글로벌 툴 .NET Core 2.1에서 NuGet에 게재된 콘솔 응용 프로그램을 CLI 상에서 인스톨/실행/업데이트/언인스톨 하는 구조가 생겼다. 이들의 애플리케이션을 총칭해서 “.NET Core 툴” 이라고 부른다. npm에서 말...
C# - .NET 메모리 사용 – 성능 향상을 위한 7가지 팁 June 21, 2023
<a href="https://jacking75.github.io/NET-0608/" title="C# - .NET 성능 측정 도구 "dotnet-trace" 사용법">C# - .NET 성능 측정 도구 "dotnet-trace" 사용법
June 8, 2023
</a>
C# - .NET 업그레이드 어시스턴트를 이용하여 .NET Framework에서 .NET 5을 쉽게 업그레이드 하기 [WinForm] June 15, 2021
C# - .NET 코드 최적화 기술 - Memory July 22, 2023
C# - .NET5 to .NET6 때의 Program.cs, Startup.cs August 24, 2022
C# - .NET5의 HttpClient의 JSON 확장 기능 December 25, 2021
C# - .NET6 - 메모리 확보 벤치마크 August 1, 2022
C# - .NET6 - 성능 향상 August 18, 2022
C# - .NET7 파일 출력 성능 테스트 May 26, 2023
C# - .NET8의 Quick JIT에 따른 최적화 불이행 문제 May 20, 2024
C# - .NET용 템플릿을 직접 만들기 January 24, 2024
C# - .NET의 HttpClient의 Timeout이 가리키는 시간 초과가 의미하는 것은 무엇일까? January 3, 2024
C# - .Net의 새로운 IO API Pipelines February 27, 2023
C# - 2차원 배열을 런타임 시에 한번에 지정된 값으로 채우기 September 1, 2024
C# - ASP.NET Core 3.1의 컨트롤러를 다른 프로젝트의. NET Core 클래스 라이브러리에서 정의하기 March 23, 2021
C# - ASP.NET Core SignalR 설명과 예제 코드 GitHub 저장소 August 1, 2020
ASP.NET Core SignalR 에 대한 설명과 예제 코드를 정리한 저장소이다. study_signalR 저장소가 도움이 되었다면 스타 부탁한다~
C# - ASP.NET Core Web API 의 버전 관리 April 27, 2023
C# - ASP.NET Core Web API 프레임워크 학습 자료 May 20, 2023
컴투스에서 이번에 서버캠퍼스 라는 이름으로 5주 동안 ASP.NET Core Web API 프레임워크를 사용하여 웹서버 방식의 게임 서버 개발 교육을 하고 있습니다. 아래는 교육생들이 학습을 위해 정리한 글들입니다. 학습에 참고하시면 좋겠습니다. https://sueshi...
C# - ASP.NET Core Web API 프로그래밍 September 1, 2023
회사에서 공유했던 오래전 문서지만 학습에 도움이 될 것 같아서 공유합니다.
C# - ASP.NET Core WebAPI에서 Custom Formatter를 이용하여 CSV 및 JSON 출력을 전환하는 샘플 July 22, 2022
C# - ASP.NET Core gRPC 앱에서 gRPC JSON 코드 변환 프로젝트 만들기 April 28, 2023
C# - ASP.NET Core 프레임워크 내부의 로그 수준 설정하기 March 3, 2023
C# - ASP.NET Core(.NET Core)에서 백그라운드 작업 실행 May 30, 2021
C# - ASP.NET Core에 NLog 사용하기 April 14, 2021
C# - ASP.NET Core에서 액션 마다 버전 관리하기 April 26, 2022
C# - ASP.Net Core DI에서 Dbcontext 사용하기, 컨트룰러에서 DI 객체 불러오기 October 31, 2022
DI에서 Dbcontext 사용하기 컨트룰러에서 DI 객체 불러오기
C# - AWS S3 April 12, 2019
개요 AWS 공식 문서 S3 객체 만들기 var config = new AmazonS3Config(); config.RegionEndpoint = RegionEndpoint.APNortheast1; var s3Client = AWSClientFactory.CreateAm...
C# - AWS SNS April 11, 2019
AWS SNS 프로그래밍 디바이스 토큰: 애플리케이션의 식별자. 각 플래폼이 발행. Endpoint Arn: 디바이스 토큰으로 생성하는 모바일 엔드포인터. SNS에서는 이 모바일 포인트를 사용하여 push를 보낸다. 가격: 월 100만 요청은 무료. 100만을 초과하면...
C# - AllocHGlobal 보다는 AllocCoTaskMem 을 사용하자 May 25, 2021
C# - ArrayPool.Shared 해체 신서 January 19, 2022
</a></h3>
C# - ArraySegment 배열을 새로 할당하지 않고 특정 위치의 내용을 참고 하고 싶을 때 March 2, 2019
배열(예를들면 네트워크에서 받은 데이터를 저장한 버퍼 byte[] buffer)의 특정 위치에서 특정 크기만큼 참고하고 싶을 때 보통 새로 배열을 만든 후 복사해야 원하는 데이터만을 참조할 수 있다.
그러나 ArraySegment를 사용하면 새로 배열을 만들지 않으면서 버...
C# - Async/Await April 4, 2019
http://csharpstudy.com/CSharp/CSharp-async-await.aspx
C# 5.0 이 나온 이후 각 써드파티 라이브러리에서 비동기 메소드 지원
간편한 비동기 프로그래밍:async/await
http://www.simpleisbest.ne...
C# - AutoMapper March 1, 2019
기본
객체간의 복사를 자동으로 한다. 복사되는 객체에 복사한다.
Nuget으로 설치 가능.
예
public class SourceType
{
public int SourceId { get; set; }
public string Value { get; ...
C# - AvaloniaUI로 크로스플랫폼용 GUI 프로그램 만들기 April 5, 2021
C# - BenchmarkDotNet 글 링크 February 24, 2020
BenchmarkDotNet 라이브러리 소개
.NET Core + BenchmarkDotNet 실행 시 프레임워크를 찾지 못하는 문제
BenchmarkDotNet 사용 시 주의 사항
BenchmarkDotNet에서 생성한 BuildPlots.R 파일을 실행하는 방법...
C# - Blazor 치트 시트 January 16, 2023
C# - C# 11에서 Generic 산술 연산 예제 코드 May 2, 2023
<a href="https://jacking75.github.io/NET_csharp_9/" title="C# - C# 9.0 "공변 반환 형식"">C# - C# 9.0 "공변 반환 형식"
June 4, 2021
</a>
January 19, 2022
</a></h3>
C# - ArraySegment 배열을 새로 할당하지 않고 특정 위치의 내용을 참고 하고 싶을 때 March 2, 2019
배열(예를들면 네트워크에서 받은 데이터를 저장한 버퍼 byte[] buffer)의 특정 위치에서 특정 크기만큼 참고하고 싶을 때 보통 새로 배열을 만든 후 복사해야 원하는 데이터만을 참조할 수 있다. 그러나 ArraySegment를 사용하면 새로 배열을 만들지 않으면서 버...
C# - Async/Await April 4, 2019
http://csharpstudy.com/CSharp/CSharp-async-await.aspx C# 5.0 이 나온 이후 각 써드파티 라이브러리에서 비동기 메소드 지원 간편한 비동기 프로그래밍:async/await http://www.simpleisbest.ne...
C# - AutoMapper March 1, 2019
기본 객체간의 복사를 자동으로 한다. 복사되는 객체에 복사한다. Nuget으로 설치 가능. 예 public class SourceType { public int SourceId { get; set; } public string Value { get; ...
C# - AvaloniaUI로 크로스플랫폼용 GUI 프로그램 만들기 April 5, 2021
C# - BenchmarkDotNet 글 링크 February 24, 2020
BenchmarkDotNet 라이브러리 소개 .NET Core + BenchmarkDotNet 실행 시 프레임워크를 찾지 못하는 문제 BenchmarkDotNet 사용 시 주의 사항 BenchmarkDotNet에서 생성한 BuildPlots.R 파일을 실행하는 방법...
C# - Blazor 치트 시트 January 16, 2023
C# - C# 11에서 Generic 산술 연산 예제 코드 May 2, 2023
<a href="https://jacking75.github.io/NET_csharp_9/" title="C# - C# 9.0 "공변 반환 형식"">C# - C# 9.0 "공변 반환 형식"
June 4, 2021
</a>
C# - C# TimeProvider 사용 정보(.NET8) January 2, 2024
C# - C# internal 타입 및 멤버를 지정된 Assembly에서 접근 가능하게 만들기 October 17, 2023
C# - C# 메타 프로그래밍 개요 in 2021 March 27, 2023
C# - C# 스크립트 실행(CSharpScript) January 30, 2023
C# - C# 코드에서 자동으로 UML 생성 November 18, 2023
C# - C#에서 SQLite를 멀티 스레드로 사용하기 May 18, 2023
C# - C#에서 알 수 없는 형식의 Json을 다루기(.NET Core / System.Text.Json) December 23, 2021
C# - C#에서 힙 할당을 줄이기 위한 언어 기능 April 2, 2023
C# - C#으로 웹UI 프로그래밍 하기 September 27, 2023
C# - C#을 google/zx 처럼 쉘 스크립트로 쓰기 May 9, 2022
C# - C++과 연동 May 19, 2019
꼭 봐야 될 것 http://sj21.wo.to/tt/483 http://sj21.wo.to/tt/484 http://blogs.msdn.com/junfeng/archive/2006/05/20/599434.aspx How to: Marshal Structures U...
C# - ClosedXML로 엑셀 파일 만들기 April 12, 2021
C# - CloudStructures - Redis 라이브러리 February 14, 2021
C# - CollectionsMarshal 해설 February 11, 2023
C# - ConcurrentQueue, ConcurrentDictionary March 14, 2019
ConcurrentQueue 자료구조 Queue의 멀티 스레드용 컨테이너 MSDN http://msdn.microsoft.com/ko-kr/library/dd267265.aspx 정의 var queue = new System.Collections.Concurrent....
C# - Console Application으로 범용 호스트 이용하기 May 27, 2021
C# - Console 출력을 빠르게 하는 방법 April 8, 2021
C# - ConsoleAppFramework + ZLogger 구현 사례 April 30, 2021
C# - ConsoleAppFramework - .NET Core 콘솔 응용 프로그램 작성을 위한 마이크로 프레임워크 April 28, 2021
C# - ConsoleAppFramework 입력 문자열에서 parse 해주는 타입에 대해서 확인 April 29, 2021
C# - DBSimple 라이브러리 소개 April 4, 2021
C# - DI로 등록한 객체의 멤버 함수 호출하기 April 14, 2023
C# - Dataflow March 11, 2019
닷넷프레임워크 4.5에 추가 NuGet으로 입수 가능 https://www.nuget.org/packages/Microsoft.Tpl.Dataflow MSDN에 문서는 있지만 정식 닷넷프레임워크에는 추가 되지 않은 상태 MSDN: ht...
C# - DateTime의 ParseExact, TryParseExact 메소를 이용하여 문자열 변환 August 15, 2019
ParseExact 메서드의 문자열 변환 DateTime 구조체에는 문자열을 변환하는 방법으로 Parse 메서드와 ParseExact 메서드가 준비 되어 있지만, 전자의 Parse 메서드는 문화권 정보를 사용하여 출력된 문자열을 같은 문화권 정보를 사용하여 DateTime 개체로 ...
C# - Debug 클래스 February 27, 2019
Debug 클래스 Debug 클래스는 그 이름대로 디버그 정보를 출력하는 클래스이다. Debug 클래스는 System.Diagnostics 이름 공간에 있다. 사용 예 using System.Diagnostics; Debug.WriteLine("Start Met...
C# - DotNetBarcode 라이브러리를 이용하여 QR 코드를 만드는 CSharp 앱 만들기 April 24, 2021
C# - Enum March 16, 2019
Enum의 요소를 foreach로 열거하기 void Main() { foreach (TEST val in Enum.GetValues(typeof(TEST))) { Console.WriteLine("{0} - {1}", val, (int)val); ...
C# - EventCounter에 대해서 February 25, 2023
C# - FastEnum 소개 March 24, 2021
C# - File March 28, 2019
클래스 단위로 파일에 쓰기 이 직렬화 방식은 꼭 .NET 플랫폼에서 서로 파일을 읽고 쓸 때만 사용 가능하다.만약 .NET으로 만든 프로그램에서 아래와 같이 파일을 만들고 이것을 네이티브에서 읽으면 앞에 다른 값이 들어가 있다( 정확하게는 직렬화 되는 클래스의 메타 정보가 들어가 ...
C# - Fluent Assertions를 사용하여, 깨끗하고 읽기 쉬운 테스트 코드 쓰기 March 11, 2022
C# - Fluent Scheduler April 7, 2019
기본 주 기능: 지정된 시간에 실행해야 할 Job을 등록해 놓으면 해당 시간이 되면 Job을 실행한다. 오픈 소스: https://github.com/jgeurts/FluentScheduler 설치: Nuget으로 쉽게 설치할 수 있다. 예제 코드 1) 현재 등록된...
C# - FluentValidation으로 사용자 지정 유효성 검사기 만들기 June 20, 2022
C# - Generic Host(일반 호스트) 소개 및 사용 September 18, 2021
C# - Http Request March 13, 2019
닷넷프레임워크에서는 서버로의 동시 접속수가 기본으로 최대 2로 제한되어 있다. 이 때문에 웹서비스 클라이언트에서 웹 서비스등을 호출할 때 처리량을 올리가 위해서는 멀티스레드에서 웹서비스를 호출하여도 액티브한 최대 동시 접속 수는 2로 된다. 싱글 스레드로 통신 할 때와 비...
C# - HttpClient 보다 HttpClientFactory를 사용하는 것이 좋다 May 3, 2021
C# - IDisposable March 21, 2019
개요 Disposable.Create() 로 IDisposable을 모을 수 있다. 컨테이너(IDisposableContainer)를 만들고 IDisposable한 인터페이스를 .AddTo(container)로 등록한다. public sealed class Resour...
C# - IPC March 20, 2019
참조에 System.Runtime.Remoting을 추가한다. IPC로 통신할 데이터 객체 public class RemoteObject : MarshalByRefObject { static Queue<string> ClientMessage = new Queu...
C# - Ix.NET 소개 March 31, 2021
C# - LINQPad Premium으로 시작하는 AWS SDK for .NET April 26, 2021
C# - LINQPad에서 그래프 표시 March 29, 2021
C# - Linq March 19, 2019
기본 Linq는 아래의 2개의 데이터 소스를 대상으로 한다. IEnumerable 주로 온 메모리 데이터 소스를 나타내는 Interface LINQ to Object, LINQ to XML IQueryable 주로 외부 데이터 소스를 ...
C# - LinqPad 무료 버전에서 nuget을 사용하고 싶을 때 September 9, 2022
C# - LinqPad 사용 정리 September 22, 2020
5년 전쯤에 만든 자료이다. 오래된 자료이지만 지금과 크게 바뀐 부분은 없다. 웹에 공개된 자료를 정리한 것이다. ```
C# - LinqPad를 이용한 C# 학습 및 툴 만들기 April 7, 2022
C# - List 컬렉션의 데이터를 랜덤하게 섞기 March 13, 2019
public static void Shuffle<T>(this IList<T> list) { Random rng = new Random(); int n = list.Count; while (n > 1) { n--; ...
C# - List, Tuple, Queue, SortedList, SortedDictionary, SortedSet February 26, 2019
List 정렬 https://msdn.microsoft.com/ja-jp/library/w56d4y5z(v=vs.110).aspx https://msdn.microsoft.com/ja-jp/library/b0zbh7b6(v=vs.110).aspx https://msdn...
C# - LogicLooper 프레임 단위로 게임 업데이트 하기 February 8, 2023
C# - MemoryPack 소개 March 9, 2023
C# - MemoryPack을 Unity에서 사용하기 March 11, 2023
C# - MicroBatchFramework - 클라우드 네이티브 시대의 C March 30, 2021
C# - Microsoft.Extensions.Configuration.Json에서 읽은 설정 값에 Prefix 부여 January 4, 2024
C# - ModuleInitializer에서만 호출할 수 있는 메서드 만들기 February 3, 2023
C# - NLog April 1, 2019
특징 오픈소스 닷넷 플랫폼 로그 라이브러리 .NET Compact, mono도 지원 사용이 쉽고, 설정은 설정 파일과 소스 코드를 통한 2가지 방법 제공. 옵션 지정으로 버퍼링, 비동기, 로드 밸런싱, 장애대처 등을 할 수 있다. 출력 옵션 ...
C# - NLog.Config 패키지가 더 이상 사용되지 않는다! ? February 12, 2023
C# - NLog로 로그를 Slack에 통보하기 January 24, 2023
C# - Naming Style 설정 December 12, 2022
C# - NativeLibrary로 라이브러리 동적 로드하기 May 4, 2021
C# - Polly를 사용하여 탄력적인 응용 프로그램 만들기 May 18, 2021
C# - Process April 6, 2019
실행중인 프로세스트의 디렉토리 위치 string 현재위치 = Environment.CurrentDirectory; 다른 프로세스 실행 System.Diagnostics.Process.Start("실행파일경로\실행파일명.exe",파라메터) System.Diagnostics.P...
C# - Proto.Actor 정리 December 23, 2023
C# - Random 유틸리티 August 22, 2019
.NET 라이브러리의 기본 Random에 기능을 추가한 것이다. 아래 코드는 Unity용인데 조금 고치면 .NET에서도 사용할 수 있다. 출처 using System; using System.Collections.Generic; using System.Linq; using Un...
C# - Release와 Debug 각각의 버전의 성능 차이는 있을까? December 27, 2021
C++의 경우 Release와 Debug 버전으로 각각 빌드를 했을 때 성능 차이도 동작이 서로 다른 부분이 있다. C#은 어떨까? 아래는 닷넷포럼에 내가 올린 질문과 관련 글을 번역한 것이다. 닷넷포럼 [번역] Performance differences between deb...
C# - RestSharp을 사용하여 C#에서 쉽게 REST API를 조작하기 March 19, 2023
C# - ScriptCs April 13, 2019
개요 텍스트 파일에 적은 C# 코드를 컴파일러를 사용하지 않고 명령어로 실행할 수 있는 툴이다. Roslyn을 힘을 이용한 것이다. .NET Framework 4.5 이상이 필요하다. 공식 사이트 http://scriptcs.net/ 샘플 사이트 http...
C# - ScriptCs.Request April 14, 2019
개요 http 요청 모듈 https://github.com/martinobrink/ScriptCs.Request 설치 scriptcs -install ScriptCs.Request 사용법 public class Notification { public st...
C# - ScriptCs.WebApi April 16, 2019
개요 2015.09.14 현재 WebAPI 2는 ScriptCs 1.5에서 에러 발생 ScriptCs.WebApi2 WebApi를 사용할 수 있게 해준다. 설치 및 간단 사용 Web API script pack을 설치한다. scriptcs...
C# - SharpSVN March 23, 2019
설명 닷넷에서 SVN을 조작하기 위한 라이브러리 SVN 서버의 버전과 맞추어야 한다. 공식 홈페이지는 http://sharpsvn.open.collab.net/ 1.7, 1.8 용은 NuGet으로 받을 수 있다. SharpSVN 라이브러리는 32비트,64비트로 ...
C# - SharpZipLib을 사용한 복수 개의 파일 압축 및 해제 May 31, 2019
SharpZipLib : http://icsharpcode.net/OpenSource/SharpZipLib/Default.aspx // 압축 void Compression() { try { string zipPath = "test.zip"; ...
C# - Simple Winform Logger March 24, 2019
로그 클래스. DevLog // public enum LOG_LEVEL { TRACE, DEBUG, INFO, WARN, ERROR } public class DevLog { static System.Collections.Concurr...
C# - SmtpClient로 메일 보내기 May 30, 2019
닷넷의 SmtpClient 클래스를 사용하여 메일을 보내는 방법이다. MSDN의 예제는 빠진 부분이 많아서 그걸 사용하면 제대로 되지 않았다. 삽질하다가 구글링으로 알아냈다. 아래 예제는 구글의 Gmail을 사용하는 것으로 했다. Gmail의 주소는 smtp.gmail.com ...
C# - Sokcet의 InputPipe, OutPutPipe 만들기 January 5, 2022
C# - SqlKata 소개 April 22, 2023
C# - StyleCop.Analyzers를 도입하여 코드 정리하기 June 6, 2021
C# - SuperSocketLite으로 게임 서버 만들기 - 01 June 15, 2019
C#에서 가장 유명한 네트워크 라이브러리로 SuperSocket 이라는 것이 있다. 앞으로 여러 번을 나누어서 SuperSocket을 사용하여 게임 서버를 만드는 방법을 설명하려고 한다. SuperSocket 이란? SuperSocket의 코드는 Github에 있다. https:...
C# - SuperSocketLite으로 게임 서버 만들기 - 02) 에코 서버 June 16, 2019
가장 간단한 서버이다. 클라이언트가 보낸 것을 그대로 클라이언트에게 보낸다. 간단하게 SuperSocketLite를 애플리케이션에서 어떻게 사용하는지 배울 수 있다. 코드는 Tutorials/EchoServer 디렉토리에 있다. 빌드를 하면 Tutorials/00_server...
C# - SuperSocketLite으로 게임 서버 만들기 - 03) 에코 서버 2 June 22, 2019
EchoServer를 좀 더 고도화 한 것이다. SuperSocketLite 프로젝트를 추가해서 참조하지 않고, SuperSocketLite를 빌드한 dll 파일을 참조한다. 00_superSocketLite_libs 디렉토리에 있는 dll을 추가한다. 또 Nuget으로 Sy...
C# - SuperSocketLite으로 게임 서버 만들기 - 04 MultiPortServer June 25, 2019
서버가 복수의 port 번호를 사용하는 경우에 대한 예제이다. 서버는 클라이언트 이외에 서버간 통신을 위해 연결 하기도 한다(보통 분산 서버를 만드는 경우이다). 이 프로젝트는 서버 객체를 2개 생성해서 하나는 클라이언트와 연결, 또 하나는 서버와 연결한다. 서버와 클라이언트 ...
C# - SuperSocketLite으로 게임 서버 만들기 - 05 채팅 서버 June 27, 2019
방 구조의 채팅 서버이다. 패킷 처리는 1개의 스레드만으로 처리한다. (네트워크 IO는 멀티 스레드) 프로젝트 구조는 아래와 같다. 파일 이름을 보면 대충 어떤 일을 맡고 있는지 알 수 있을 것이다 네트워크 관련 처리를 1개의 스레드에서 하기 위해 MainServer에서 바...
C# - System.Lazy March 27, 2019
System.Lazy ? System.Lazy 는 지연 초기화를 지원하는 클래스이다. .NET Framework 4.0 에서 추가 사용하는 경우 멀티 스레드 환경에서 공유 리소스의 초기화를 스레드 세이프하게 하고 싶을 때 초기화에 시간이 걸리...
C# - System.Net.Sockets의 xxxAsync를 사용하여 TCP 클라이언트 만들기(Unity 클라이언트에서) February 6, 2023
C# - System.Text.Json의 읽기 전용 속성을 가진 객체의 직렬화 June 8, 2021
C# - System.Threading.RateLimiting로 유량 제한 May 12, 2023
C# - TPL March 10, 2019
닷넷 프레임워크 4.0에서 추가된 병렬 프로그래밍 라이브러리 여기의 글을 정리 Parallel.ForEach/For Parallel.ForEach using System; using System.Diagnostics; using System.Threading; using...
C# - Thread March 8, 2019
현재 스레드의 ID 얻기 System.Threading.Thread.CurrentThread.ManagedThreadId 스레풀의 최소, 최대 스레드 개수 알기 int workThreads = 0; int iocpThreads = 0; // 최소 스레드 개수 System....
C# - Thread Local March 29, 2019
닷넷 프레임워크 4.0 에서 추가 이전에는 비슷한 것으로 ThreadStatic 속성이 있었음 그러나 static 멤버에만 사용 가능. 멤버의 값은 보통 그 타입의 기본 값으로 초기화된다. 초기 값을 설정...
C# - Timer May 30, 2019
DispatcherTimer 일반 타이머는 메인 스레드가 아닌 다른 스레드를 만들어서 처리 되지만 이것은 실행은 메인 스레드에서 처리 되어 메인 스레드와 동기화가 보장 된다. MSDN의 설명 각 Dispatcher 루프의 맨 위에서 DispatcherT...
C# - Top 5 .NET 메모리 관리 기본 사항 July 10, 2023
C# - Top 5 .NET 메모리 관리에 대한 오해 November 14, 2023
C# - Trace March 7, 2019
Trace 클래스 코드 실행을 추적하는 데 필요한 메서드 및 속성 집합을 제공 네임스페이스: System.Diagnostics 어셈블리: System(system.dll) Trace 클래스의 속성 및 메서드를 사용하여 릴리스 빌드를 측정 할 수 있다. 이렇게 하면 ...
C# - Ubuntu에서 snap으로 dotnet-sdk 설치하기 April 27, 2019
아래 명령어를 실행한다. sudo apt search dotnet-sdk dotnet-sdk 명령어 dotnet-sdk.dotnet 만약 「dotnet-sdk」 명령어로 「dotnet-sdk.dotnet」을 실행하고 싶다면 아래 명령어를 실행한다. sudo snap alia...
C# - Unit Test March 4, 2019
준비 보통 프로그램이나 라이브러리 프로젝트에 추가 프로젝트로 유닛테스트 프레임워크를 사용하는 프로젝트를 만든다. 이렇게 하면 유닛테스트에 영향을 받지 않으면서 기존처럼 개발을 할 수 있다. 유닛테스트 프로젝트에 테스트 메소드를 만들면 테스트 탐색기에 리...
C# - Unit Test Mock March 6, 2019
왜 사용하는가? Mock 라이브러리는 단위 테스트를 쉽게 하기 위해 존재합니다. 예를 들어서, 한 클래스 테스트에 데이터베이스를 활용해야 하는 경우가 있다고 가정을 합시다. 이 경우 직접 데이터베이스에 정보를 넣었다 뺐다 하면 상당히 큰 부담이 됩니다. 이런 부담을 주...
C# - Unity / .NET Core에서 Zero 할당 C# 문자열 생성 라이브러리 ZString February 15, 2021
C# - Unity 게임 엔진을 위한 오픈 소스 hot-reload 솔루션 HybridCLR September 15, 2024
C# - Unity와 .NET October 19, 2019
출처 2016년 여름 Unity가 .NET Foundation에 참가 2017년 여름 Unity 2017.1 출시 .NET 3.5 Equivalent에 더하여 .NET 4.6 Equivalent가 Experimental로 선택할 수 있게 됨 2018년 초 여름 ...
C# - VSCode C# Dev kit 사용 October 30, 2023
C# - Visual Studio Code에서 Web API(C#) 만들기 July 8, 2022
C# - Visual Studio에서 외부 소스를 포함한 디버깅 December 24, 2022
C# - WCF 글 link 모음 October 31, 2019
일어로 된 문서는 번역기로 돌려서 보는 것을 추천한다. 기초 WCF 기초(한글) WCF Step by Step WAS에서 호스팅하기 WCF 입문기 WCF 서비스 작성과 이용 WCF로 만든 라이브러리를 다른 프로젝트에서 사용하기 Windows Commun...
C# - WM_COPY_DATA April 2, 2019
참고 글 http://www.codeproject.com/KB/cs/ipc_wmcopy.aspx http://www.codeproject.com/KB/threads/InterprocessCommunicator.aspx http://www.codeproject.com/K...
C# - WPF - 멀티 스레드에서 컨트롤 조작 May 29, 2019
from : MSDN // 아래의 예는 리스트박스에 새로운 데이터를 추가하는 것이다. private delegate void ListBoxDelegate(string arg); void SetStateText(string state) { this.listBox1.Dis...
C# - WebAssembly/WASI 바이너리 생성 가능하게 .NET 8 SDK에서 실험적 구현 December 29, 2023
C# - Windows Event Log April 3, 2019
개발 시에 Windows가 제공하는 이벤트 로그를 사용하면 로그 보기/관리가 쉬워진다. C# 을 이용해 Windows Event Log 쓰기 [http://mainia.tistory.com/412] static void Main(string[] args) { W...
C# - XmlTextReader February 25, 2019
XmlTextReader 로 XML 읽기 예제 1 <?xml version="1.0" encoding="utf-8" ?> <Config> <log4net> <root> <!--로그 레벨 지정. 아래에서는 INFO...
C# - Z.ExtensionMethods 소개 September 17, 2023
C# - ZLogger 깃허브 문서 번역(2023-12-06) January 9, 2024
C# - ZLogger 예제 코드 May 7, 2023
C# - ZLogger이 버전 2가 되면서 변경된 부분 January 10, 2024
C# - aspnetcore-developer-roadmap 2022년 July 5, 2022
C# - async-await에서 lock 사용하기 March 31, 2020
출처 C#에서 비동기 메소드에서는 lock을 쓸 수 없다. 이 글은 그래도 lock을 사용 하고 싶을 때를 위한 것이다. lock이 필요한 경우를 예를 들면 아래처럼 더블 체크 락킹을 하고 싶을 때이다. // /이것이 여러 스레드에서 비동기에게 불리는 private stati...
C# - binary 데이터 읽고, 쓰기 September 14, 2019
읽기 BitConverter BitConverter 클래스의 타입 별 함수를 사용한다 var data = new byte[2048]; var pos = 0; Int16 PacketID = BitConverter.ToInt16(data, pos); pos += 2; UnSaf...
C# - byte array 내용 출력하기 April 23, 2020
네트워크 프로그래밍을 할 때 소켓을 통해서 받은 데이터의 바이너리 값을 보고 싶을 경우가 있다. 바로 출력은 안되고 아래의 스택오버플로우의 글을 사용하면 좋다. static public string ToReadableByteArray(byte[] bytes) { retur...
C# - config-r April 5, 2019
개요 scripts와 Roslyn을 사용하여 스크립트 방식의 설정 파일을 사용할 수 있다. 저장소 https://github.com/config-r/config-r NuGet으로 설치 Quickstart NuGet으로 설치 실행 파일과 같은 이름의 .csx...
C# - dotnet 명령으로 사용하고 싶은 dotnet 버전을 지정 March 6, 2022
C# - dotnet-5.0의 단일 파일 애플리케이션에 대해서 January 1, 2021
C# - dotnet-script 사용하기 April 23, 2021
C# - dotnet/runtime 디렉토리 트리 구조 April 18, 2021
C# - enum을 편리하게 사용하게 해주는 메서드 May 23, 2022
C# - etc April 10, 2019
const 배열을 정의 할 수 없을 때 static readonly int[] LEVEL_TABLE = { 1, 2, 3, 4, 5 }; static readonly string[] STR_TABLE = { "NONE", "1", "2", "3" }; 다른 클래스에 있는 co...
C# - for, foreach 속도 비교 April 16, 2021
C# - foreach로 순회 중 List의 요소 삭제하기 September 1, 2020
List에 있는 요소를 foreach로 순회하는 중에 요소를 삭제하는 방법 삭제할 항목을 다른 컨테이너에 담아 놓고, 뒤에 일괄적으로 삭제한다. List<GameObject> RemoveList; foreach(GameObject obj in colliderLi...
C# - http 요청 시 동시 접속 수 제한 March 12, 2019
닷넷프레임워크는 서버로의 동시 접속 수가 기본으로 최대 2로 제한 되어 있다 즉 클라이언트는 한 서버로 머신당 최대 동시 접속 수가 2개로 제한 그래서 웹 서비스 클라이언에서 웹 서비스 등을 호출할 때 출력결과를 올리기 위해서는 멀티스레드...
C# - if 조건 부분에서 변수 정의하는 Tip December 10, 2023
C# - json 데이터 암호화, 복호화 하기 May 26, 2019
AESEncrypt로 암호화/복호화 하기 public static async Task<RESULT_T> RequestHttpAESEncry<REQUEST_T, RESULT_T>( ...
C# - scriptcs-nancy April 15, 2019
개요 scriptcs-nancy NancyFX 라이브러리를 사용할 수 있게 해준다. 중요. 2015-09-15 ConcurrentDictionary<string, AgentData> AgentStatus 와 같이 클래스(혹은 구조체)를 컨...
C# - serilog April 8, 2019
.NET의 많은 다른 라이브러리와 마찬가지로 Serilog는 파일, 콘솔 등의 다양한 저장소로의 로깅을 제공한다. 또한 설정하기 쉬운 깨끗한 API를 가지고 있으며, 다양한.NET 플랫폼으로 이식성을 가지고 있다. 또 다른 로깅 라이브러리와는 달리 Serilog는 강력한 구조...
C# - static 생성자를 직접 호출하는 방법 April 22, 2021
C# - string March 25, 2019
문자열의 마지막에 있는 \r\n 제거 하기 Text2.TrimEnd(Environment.NewLine.ToCharArray()); 지정 단어로 문자열 분해 string readLine = "A=B"; string[] word = readLine.Split(new Char[...
C# - string에서 발생하는 GC를 억제하는 String Interning December 31, 2021
C# - tip 모음 June 1, 2019
System.BitConverter byte에서 short로 변환하기 http://msdn.microsoft.com/ko-kr/library/system.bitconverter.toint16.aspx BitConverter.ToInt16 스트링을 바인트로 변환 //the be...
C# - using의 다양한 활용 December 18, 2021
C# - 게임 개발에 유용한 Lucid Random 라이브러리 소개 June 2, 2023
C# - 게임 서버에서 프레임 단위로 클라이언트 요청을 처리한다. async-await 사용 June 2, 2019
출처 /* var thread = GameLoopThreadPool.GetThread(); while (true) { // frameAction 안에서 AI의 행동 선택 처리나 쌓인 커맨드를 기초로 데미지를 주거나 회복 시키는 코드가 동작 var shouldCont...
C# - 고성능 데이터 직렬화 라이브러리 MemoryPack 소개 October 19, 2023
오늘 .NET L!VE 2023 Fall 에서 아래 주제로 강연을 했습니다~
C# - 공유 폴더를 이용하여 nuget 패키지를 관리하는 방법 May 5, 2021
C# - 꼬리 재귀 최적화 April 19, 2017
// 꼬리 재귀가 아니다 long SumNormal(long n) { if (n <= 0) return 0; return SumNormal(n - 1) + n; } // 꼬리 재귀 long SumTailCall(long n) { return SumTai...
C# - 날짜와 시간 March 21, 2019
MSDN의 날짜 포맷 https://msdn.microsoft.com/en-us/library/az4se3k1.aspx 현재 시간 중에서 시간:분(09:01)으로 얻고 싶을 때 DateTime.Now.ToString("hh:mm") // for non military t...
C# - 네트워크 프로그래밍 참고 글 링크 모음 February 28, 2020
C# - 다중 스레드에서 컨트롤을 변경 할 때 May 29, 2019
출처: MSDN // 델리게이트를 선언한다. delegate void SetTextCallback(string text); // 컨트롤의 접근은 따로 함수를 만들어서 접근하도록 한다. private void SetText(string text) { // InvokeR...
C# - 단일 실행 파일로 Ubuntu 18.04 에서 실행하기 April 3, 2020
출처 콘솔 앱을 만든다 Program.cs using System; using System.Threading; namespace SingleFileConsole { class Program { static void Main(string[] args...
C# - 닷넷 7 소개 January 1, 2023
C# - 닷넷프레임워크의 타이머 관련 클래스 February 24, 2019
인터넷에 있는 글에서 가져온 것입니다. DispatcherTimer 일반 타이머는 메인 스레드가 아닌 다른 스레드를 만들어서 처리 되지만 이것은 실행은 메인 스레드에서 처리 되어 메인 스레드와 동기화가 보장 된다. MSDN의 설명 각 Dispatcher 루프의 맨 위에서 ...
C# - 동적으로 열(列)이 바뀌는 CSV 파일을 생성 March 25, 2022
C# - 디버그 라이브러리 DebugTrace April 11, 2021
C# - 런타임에서 OS 플랫폼 등의 실행 환경에 따라서 조건 분기 하기 April 16, 2022
C# - 로그인 패스워드를 해시화 하는 방법(예:C#,.NET,PostgreSQL) November 6, 2023
C# - 리플렉션으로 C# 클래스 구조를 분석하여 C의 구조체 생성하기 May 22, 2021
C# - 메모리 March 18, 2019
스택할당 stackalloc 키워드를 사용하면 지역 변수에 한해서 스택 할당을 할 수 있음 해당 함수를 벗어나면 메모리는 삭제된다. unsafe 기능으로 사용할 수 있다. MSDN 문서 http://msdn.microsoft.com/ko-kr/l...
C# - 메모리 확보 벤치 마크 6 종 모음 May 24, 2021
C# - 모던 하이퍼포먼스 C# 2023 Edition August 30, 2024
C# - 모아 놓은 dll 파일을 NuGet Package로 만들기 April 2, 2022
C# - 문자열 May 28, 2019
지정 단어로 문자열 분해 string readLine = "A=B"; string[] word = readLine.Split(new Char[] { '=' }); 문자열 포맷 string CheatString = string.Format("@timeevent1:{0}", t...
C# - 문자열 연결 방법 벤치마킹 May 9, 2021
C# - 배열(10000요소)의 순차 접근 속도 비교 (.NET Core) April 27, 2021
C# - 복수 설치된 .NET Core SDK 삭제 April 1, 2021
dotnet-core-uninstall 툴을 설치한다 https://docs.microsoft.com/ko-kr/dotnet/core/additional-tools/uninstall-tool?tabs=windows 아래 명령어로 삭제할 수 있는 SDK 버전을 본다 dotnet-c...
C# - 빌드 설정에 따른 플랫폼 설정과 코드 최적화 March 31, 2019
프로그램 플랫폼 설정 코드 최적화
<a href="https://jacking75.github.io/NET_debug/" title="C# - 소스 코드가 없어도 ".exe를 디버그 하는 Visual Studio 이용법을 Microsoft에서 소개">C# - 소스 코드가 없어도 ".exe를 디버그 하는 Visual Studio 이용법을 Microsoft에서 소개
April 20, 2021
</a>
C# - 소켓 옵션 August 31, 2019
아래 코드는 C#에서 소켓 옵션을 설정하는 예제 코드이다. 출처: https://docs.microsoft.com/ko-kr/dotnet/api/system.net.sockets.socket.lingerstate static void ConfigureTcpSocket(Socket...
C# - 속성을 사용하여 항목 체크 February 23, 2018
DisplayName과 StringLength, Required 라는 기존 속성을 사용한다. Attribute.GetCustomAttribut 메소드로 대상( 이 코드에서는 프로퍼티)에서 속성을 얻을 수 있다. using System; using System.Reflection;...
C# - 쉘스크립트 언어처럼 사용할 수 있게 해주는 Chell 라이브러리 June 5, 2022
C# - 시스템 프로그래밍 June 1, 2019
다른 프로세스 실행 System.Diagnostics.Process.Start("실행파일경로\실행파일명.exe",파라메터) System.Diagnostics.Process.Start("cmd.exe 명령어"); 프로세스 종료 System.Diagnostics.Close(); ...
<a href="https://jacking75.github.io/NET_lib_LiteDB/" title="C# - 앱 데이터 저장에 적합한 Lite Local DB "LiteDB" 소개">C# - 앱 데이터 저장에 적합한 Lite Local DB "LiteDB" 소개
May 10, 2021
</a>
C# - 예외 출력 helper 클래스 May 21, 2019
출처: https://teratail.com/questions/24669 public static class ExceptionHelper { public static string ExtractException(this Exception ex, int indent = 2) ...
C# - 이미 빌드 된 API 서버의 엔드 포인트 url을 변경하는 방법 May 3, 2023
C# - 자동 가비지 수집을 피하는 방법 June 13, 2023
C# - 자신의 ip 주소 얻기 March 15, 2019
string myIPAddress = ""; var ipentry = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()); foreach (var ip in ipentry.AddressList) { if (ip.Addre...
C# - 잡지 못한 예외 처리 October 18, 2019
Application.ThreadException 이벤트 사용 Windows Form 애플리케이션에서는 잡지 못한 예외가 throw 되면 Application.ThreadException 이벤트가 발생한다. 단 ThreadException 이벤트가 발행할 수 있는 부분은 Windo...
C# - 정규 표현식 April 9, 2019
문자 집합 [] 안에 일치시키려는 문자를 일일이 나열해주거나 범위 지정이 가능할 경우 그 범위만큼만 지정해 주면 된다. [a-z] : 영어 소문자 [A-Z] : 영어 대문자 [0-9] : 숫자 [k-p] : 알파벳에서 k 부터 p 까지만. [4...
C# - 정규 표현식 라이브러리 VerbalExpressions March 30, 2019
소개 기존의 복잡한 방식의 정규식을 이해하기 쉽도로 해주는 라이브러리. 처음에는 JavaScript용으로 나왔지만 이후 대부분의 언어를 지원하고 있다. 소스 코드는 GitHub에 공개 되어 있다. https://github.com/VerbalExpressions/C...
C# - 지금 바로 할 수 있는 C# 성능 개선을 위한 작은 테크닉 11개 October 2, 2022
C# - 참고 글 모음 February 27, 2020
C# - 콘솔 키보드 입력, 프로그램 종료 키 조사 March 3, 2019
키보드 입력 class Program { static void Main(string[] args) { System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(키보드...
C# - 파일 조작 May 27, 2019
클래스 단위로 파일에 쓰기 이 직렬화 방식은 꼭 .NET 플랫폼에서 서로 파일을 읽고 쓸 때만 사용 가능하다. 만약 .NET으로 만든 프로그램에서 아래와 같이 파일을 만들고 이것을 네이티브에서 읽으면 앞에 다른 값이 들어가 있다( 정확하게는 직렬화 되는 클래스의 메타 정보가 들어가...
C# - 프로젝트에 C# 8과 null 허용 참조 타입 대응시키기 March 22, 2020
출처 C# 7의 클래스 라이브러리를 null 허용 참조 타입을 사용하는 C# 8로 업그레이드 하는 사례에 관한 글이다. 여기에 사용된 Tortuga Anchor 프로젝트는 MVVM 형식의 기본 클래스와 리플렉션 코드, 다양한 유틸리티 함수를 모아 놓은 것이다. 적당히 작고, 관용...
C# 7.2의 구조체의 성능 August 7, 2019
출처 C# 컴파일러는 readonly를 따르는 일부 조건에서 구조체의 방어적 복사(defensive copy)를 생성한다. 이 문제는 잘 알려져 있고 문서화 되어 있지만 C# 7.2의 일부 기능과 관련이 있기 때문에 검토 가치가 있다. in및 ref readonly 키워드는 문제...
C# 7.3의 새로운 기능 February 11, 2019
출처 Overload 해결 버전 1.0의 C#에서 overload의 해결 규칙은 의문이 남는 디자인이었다. 어떤 상황에서 두 개 이상의 메소드가 후보가 되는데, 하나 밖에 사용할 수 없다. 우선 순위에 따라 잘못된 방법을 선택하거나 컴파일러가 일치하는 메소드를 찾지 못하거나 일치...
C#에서 LZ4로 압축한 데이터를 다른 언어와 주고 받을 때 August 9, 2018
C#에서 LZ4 압축 라이브러리로 유명한 것으로 lz4net 이라는 것이 있음. 이 라이브러리를 사용하여 압축을 한 데이터를 python에서 압축을 풀 때 압축이 제대로 풀리지 않음. (파이썬에서는 python-lz4 사용. ) 이유는 lz4 라이브러리를 사용할 때 Frame ...
C#에서 async-await를 사용하여 TCP Server 만들기 April 30, 2019
이 글은 여기 글을 번역,정리 한 것이다. 예제 코드는 여기 C# 네트워크 프로그래밍에서 비동기 IO를 사용할 때는 3가지 방법이 있다. 각 방법 별 성능은 아래와 같다. 구현 방법 행수 난이도 초당 요청 수 ...
C#에서의 멀티스레드 프로그래밍의 베스트 프랙티스는 무엇인가? December 31, 2019
C#의 클래스를 byte[]로 변환하는 방법 May 17, 2019
패킷 헤더 클래스 [StructLayout(LayoutKind.Sequential)]//[StructLayout(LayoutKind.Sequential, Pack=1)] public class HEADER { public ushort a1; public ushort ...
CPU 사용률이 오르지 않을 때 July 25, 2019
처리하는 것에 비해 CPU 사용률이 오르지 않는 경우 .NET 런타임의 GC 설정을 변경해서 해결 할 수도 있다. .NET의 GC 모드를 서버GC로 변경한다. .NET Core 프로젝트 파일에 ServerGarbageCollection을 추가하고 값을 true로 한다. <P...
GPU를 타깃으로 한 C# 이용 August 25, 2018
원문 NVIDIA GPU를 이용하는 범용 프로그램을 만드는 것은 오랫동안 NVIDIA의 CUDA 플랫폼을 사용하는 것을 의미하고 있었다. CUDA는 몇몇 다른 프로그래밍 언어를 지원하고 있지만 고성능 코드를 기술하려면 보통 C 또는 C++ 이 필요했다. 최근까지 이 상황에 의해서...
Http 호출을 배타적으로 하기 February 18, 2020
특정 http 호출을 동시에 호출하지 않도록 하는 방법 출처 public static void ExecuteSync(Action SynchronousAction, Action OnBlocked) { string appKey = "MyState"; var app = Syste...
NLog - Fluentd 노드로 로그를 보내는 방법 May 3, 2017
NuGet에서 아래 2개를 설치한다 NLog NLog.Targets.Fluentd Fluentd 노드로 로그를 보내기 위한 설정은 NLog.config에서 지정할 수 없으므로 코드 상에서 설정해야 한다. public class Configurator { // ...
NLog - 기존의 설정을 사용하면서 파일 패스만 동적으로 변경하기 April 28, 2017
NLog.config 설정을 사용하지만 파일 패스만 바꾸고 싶다. 파일 경로는 프로세스나 인스턴스 마다 변경하기를 바란다. 프로세스나 인스턴스가 항상 일정하다면 NLog.config에 필요한 수만큼의 설정을 추가하면 되지만, 파일 패스만 다르므로 비슷한 설정 코드를 늘리는 것은...
NLog - 동적으로 로그 파일 이름 설정하기 April 26, 2017
NLog는 동적으로 파일 이름을 설정할 수 있는 기능이 있다. 아래의 방법은 커스텀 플레이스 홀더를 설정하고, 그 플레이스 홀더에 임의의 텍스트를 설정하는 방법으로 파일 이름을 변경한다. NLog.config <?xml version="1.0" encoding="utf-8...
SignalR .NET Core - Realtime cross-platform open web communication July 3, 2017
MS Build2017에서 발표된 SignalR .NET Core: Realtime cross-platform open web communication 의 간단 요약 ASP.NET Core에 맞추어서 재 작성하고, 재 설계 HTTP 이외에서도 이용(AMQP,MQTT,TC...
SignalR 정리 October 7, 2018
SignalR 정리 http://jacking.tistory.com/1139 self 호스팅 (영어) http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/tutorial-signalr-...
Span 를 사용해야 할 5가지 이유 January 19, 2019
</a></h3>
출처
소개: Hello World
런타임이 .Net Core 2.1 이후라면 표준으로 사용할 수 있다.
그렇지 않으면 Nuget에서 System.Memory 라는 패키지를 넣자.
그리고, 언어는 C# 7.2 이상이 필요하다.
Span라는게 뭐야?
A. 우선, 배열 같은 것이라...
Span 이용에 따른 최적화 January 16, 2019
</a></h3>
출처
힙 사용량 절감
Span 를 사용하면 빠르게 되는 이유는 간단하게 힙 사용량을 줄아가 때문이다.
string.Substring 등으로 새로운 문자열을 만들어 않아도 된다.
stackallock욿 임시 버퍼에 힙을 사용하지 않는다
네이티브 메모리를 직접 읽을 수 ...
StackExchange.Redis - Json.Net과 같이 사용할 때 예외가 발생하는 경우 March 2, 2020
StackExchange.Redis 사용 방법 정리.
접속 실패
출처
try
{
cache = Connection.GetDatabase();
}
catch (RedisConnectionException e)
{
WriteException("접속 실패", e);
...
StackExchange.Redis - link 모음 March 2, 2020
(한글)StackExchange.Redis Introduction
(한글)StackExchange.Redis Cluster
(한글)C# Redis hset, hget, hgetall
(한글)stackExchange.Redis lua script load
StackExchange.Redis - list March 2, 2020
StackExchange.Redis 사용 방법 정리.
리스트 선두에 추가
출처
var redis = ConnectionMultiplexer.Connect("127.0.0.1:6379");
var db = redis.GetDatabase();
db.ListLeftPush("myk...
StackExchange.Redis - score 사용하기 March 2, 2020
StackExchange.Redis 사용 방법 정리.
접속 실패
출처
//Redis의 DB를 선택
IDatabase db = RedisRepository.SelectCache(0);
//key 생성
var key = "hoge";
// score 계산을 위해 Unixtime ...
StackExchange.Redis - 간단 사용 March 2, 2020
StackExchange.Redis 사용 방법 정리.
문자열 저장 및 읽기
출처
using System;
using StackExchange.Redis;
using System.Threading;
namespace RedisSample
{
class Program
...
WCF - AsyncAwait January 12, 2019
예제 코드
[ServiceContract]
public interface IServerService
{
[OperationContract]
Task<RES_LOGIN> RequestUserLogin(REQ_LOGIN reqData);
}
// http://loc...
WCF - RESTful API January 10, 2019
RESTful 서비스
URI나 표준 동사(POST, GET, PUT, DELETE) 등 HTTP 사양을 강하게 의식한 리소스 베이스의 접근을 제공.
최신의 프레임워크는 대 부분 RESTful 서비스를 만들 수 있는 기능 지원.
WCF의 REST 서비스에서는 POX (P...
WCF - TCP Sample January 13, 2019
서버
WCF LIB
namespace WCFServerLib
{
public interface IClientCallback
{
[OperationContract(IsOneWay = true)]
void SendMessageToClient(string message);
...
WCF - Tips January 14, 2019
클라이언트가 요청 데이터를 null로 보내는 경우 대처
클라이언트에서 public RES_LOGIN_DATA RequestLogin(REQ_LOGIN_DATA reqData)을 요청한 경우 reqData을 null로 보낼 수 있음(악의적인 이유로).
그래서 아래처럼 요청 데이터를 ...
YOUTUBE - C# 네트워크 프로그래밍 공부 November 20, 2020
introselect 알고리즘 January 28, 2020
.NET 4.5 이상에서 컬렉션의 정렬 알고리즘에서 사용
https://github.com/Microsoft/referencesource/blob/master/mscorlib/system/collections/generic/arraysorthelper.cs
rasberry pi zero + C#으로 카메라 조작 June 14, 2017
nuget의 아래 모듈을 받는다.
https://www.nuget.org/packages/Unosquare.Raspberry.IO/
GPIO 에 더해서 카메라 모듈도 조작할 수 있다.
이것을 사용하여
public static async Task SendImage()
{
v...
닷넷 코어 2.1은 어디로 향하고 있는가? April 4, 2018
원문
Microsoft의 Scott Hunter씨는 .NET Core 2.1에서의 동사의 계획을 발표했다.
CLI 툴이 개발자의 편리한 사용을 대폭 향상시키는 것으로 보인다.
Microsoft는 매일 50만명에 가까운 개발자의 적극적인 이용을 감시할 수 있다고 Hunter씨는 말...
번역 - .NET Hangfire January 15, 2020
번역 - Microsoft.IO.RecycableMemoryStream January 20, 2020
번역 - Rider 기능 소개 January 12, 2020
번역 - 폭권에 있어서 게임 에디터 설계와 구현 January 8, 2020
오래된 버전의 .NET Core 삭제 시 .NET Standard 2.0을 인식하지 못하는 문제 February 12, 2019
컴퓨터 정리를 하다가 여러 버전의 닷넷코어가 설치 되어 있어서 최신 버전(2.2.103)을 제외하고 이전 버전의 닷넷코어를 삭제하였다.
그런데 Visual Studio에서 ‘.NET Standard 2.0’을 찾지 못하는 문제가 발생하였다.
다행히 구글링 해보니 이 문제에 대한 답...
최소한으로 ASP.NET Web API 사이트 만들기 October 6, 2018
Visual Studio의 프로젝트 템플릿으로 만들면 불필요한 코드가 너무 많이 붙어 있음.
특히 Razor은 사용하지 않고 클라이언트 부분은 JavaScript를 사용하고 싶은 경우에 좋지 않음.
Building Out a Clean, ...
프로그램을 관리자 권한으로 실행하는 코드 April 21, 2019
출처
권한을 확인하고 관리자 권한이 아니면 다른 프로세스로 관리 권한을 부여하고 다시 시작한다
Thread.GetDomain().SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
var pri = (WindowsPrincipal)Th...
AWS (1)
AWS - 1대의 EC2에서도 ELB을 사용하면 좋은 점 October 11, 2018
인스턴스 교체가 편리하다
운용을 시작한 후 EC2에 대해서 수정을 해야하는 경우 인스턴스 교체가 쉬워진다.
DNS 변경을 할 필요 없이 백엔드 교체가 가능하다.
ELB의 헬스 체크로 감시
ELB의 헬스 체크를 이용하여 WEB 서버가 죽었는지 감시를 할 수 있다.
CloudWa...
Book (3)
책 - Unity 네트워크 게임 개발 실전 입문 UNET/니프티 클라우드 mobile backend(일서) February 18, 2018
Unityネットワークゲーム開発 実践入門 UNET/ニフティクラウド mobile backend版
책 내용은 크게 두개로 나누어진다.
전반부는 일본의 모바일 백엔드 서비스를 사용하는 방법(즉 한국 독자는 별로 도움 되지 않는다), 후반부는 UNET을 사용하는 방법을 설명한다.
아직...
책 - 러스트 핵심 노트(e-book) February 6, 2018
출판사: 한빛미디어
한빛미디어
2018년 2월에 읽은 책.
이전부터 미루다가 3~4일 동안에 다 보았다.
Go 언어와 비슷한 부분이 있어서 Go 언어를 알면 공부하기 좋을 듯(물론 그 반대도)
원서가 Packt 출판사인데 책 내용이 좀 정리가 안 된 것 같고, 구성이 머...
책 - 모던 C 언어 프로그래밍 IDE, 디자인 패턴, XP, TDD, 리팩터링, 지속적인 통합 February 5, 2018
출판사: 위키북스
yes24
2016년에 읽었던 책이다.
C 언어를 기초부터 가르쳐주는 책이 아니다.
C 언어를 알고 있는 사람을 대상으로 하고 있다.
오래된(?) 언어인 C 언어를 현대에 맞게 사용할 수 있는 툴과 기법을 알려준다.
특히 C 언어에 디자인패턴을 사용하는...
C (1)
C99의 sizeof와 가변길이 배열 April 12, 2017
C99 에서는 배열의 사이즈 지정에 변수를 사용할 수 있다.
void test1( int n )
{
int fixed_array[10];
int varlen_array[n];
printf( "sizeof(fixed_array)==%ld\n", sizeof(fixed_...
C++ (382)
AWS Lambda에서 C++ 프로그램 실행하기 December 24, 2018
이 글을 번역한 것이다.
re:Invent 2018에서 AWS Lambda의 새로운 기능, Custom Runtime이 발표 되었다.
이 기능은 Custom Runtime을 준비하는 것으로서 임의의 언어로 Lambda를 사용할 수 있다.
Custom Runtime은 직접 구현해...
Boost 라이브러리 설치하기 July 1, 2019
설치
Linux
Boost 라이브러리 공식 사이트에서 다운로드 후 압축 풀기
압축을 푼 디렉토리로 이동 후 아래처럼 입력
$ ./bootstrap.sh
생성된 b2를 사용하여 Boost 라이브러리 빌드하기
$ ./b2 toolset=gcc link=static ...
Boost.Asio 공부하기 March 17, 2017
나는 2007년부터 Boost.Asio를 온라인 게임 서버 개발에 처음 사용하였다(업무에 사용하는 것을 말한다.그전에 공부는 했었다)
당시 주위의 게임 개발자를 통해서 생각외로 사용하는 곳이 꽤 있었다.
이 후 한국 및 해외의 유명 회사들도 C++ 네트워크 프로그래밍에 사용하고 ...
C++ - 4개의 auto, 4개의 C++ 규격 December 12, 2019
원문
2020년에 출시될 예정인 「C++20」에서는 아래와 같은 함수 템플릿을 쓸 수 있다.
cpp20.cpp
template <auto N>
auto func(auto x)
{
auto r = N + x;
return r;
}
// 호출 예
assert( ...
C++ - 5가지 알고 싶은 람다 예제. 재귀, constexpr, 컨테이너 등 June 30, 2022
C++ - 6-tips-to-supercharge-c11-vector-performance May 19, 2017
NHN Next의 학생이 C++ Advance 수업의 과제로 번역 정리한 것이다.
원문
슬라이드 쉐어
C++ - A simple C++11 Thread Pool implementation May 25, 2017
NHN Next의 학생이 C++ Advance 수업의 과제로 번역 정리한 것이다.
Github의 코드
위 코드를 설명한 문서
C++ - AWS SDK for C++을 이용해서 Amazon DynamoDB 사용하기 September 16, 2020
C++ - Aggregates(집성체) September 11, 2020
출처
Aggregates(이하, 집성체)는 배열과 아래의 조건을 충족한 클래스이다.
사용자 정의 생성자(복사, 무브 포함)이 없음.
생성자는 전혀 기술되지 않거나 default 지정된 상태다.
모든 데이터 멤버가 public 이다. st...
C++ - Argument Dependent Lookup August 5, 2020
출처
C++ 언어가 가진 화려한 기구의 하나로 ADL(Argument Dependent Lookup)라는 것이 있다.
번역하면 “실 매개 변수 의존 이름 검색”으로 읽고, 글씨처럼 “실 매개 변수”에 의존하는 “이름 검색”이 된다.
ADL의 동작
코드를 보면서 차례로 이해해 보...
C++ - Boehm 알고리즘 GC라이브러리 사용하기 March 12, 2020
출처
C++에서 GC(가베지컬렉션)를 사용할 수 있게 해주는 라이브러리 이다.
1. 소스 코드 다운로드
다운로드 페이지에서 다운로드.
특별한 이유가 없으면 ‘recent stable release” 버전을 다운로드.
압축을 푼다.
2. 솔루션 파일 만들기
솔루션을 만들기 위해...
C++ - Boost 라이브러리 빌드 링크 모음 November 6, 2017
Windows
Boost 라이브러리 빌드 및 설치 - VC++ (VS2012, Boost 1.53)
boost 간단 설치기 (Windows환경) - VS 2010 중심
Boost 64비트로 빌드하기
VS2008에서 Boost 빌드하기
버전 별로 이미 빌드된 라이브러리 배포하는 사...
C++ - Boost 라이브러리의 간단하면서 유용한 것들 August 19, 2020
몇 년전에 강의에 사용했던 글이다.
C++ - Boost 라이브러리의 모든 것 (1.60 버전까지) December 23, 2019
5년 전에 번역 정리했던 글입니다
C++ - Boost 타이머 취소하기 March 9, 2020
출처
타이머를 다시 이용하지 않는 경우
상태 변수를 추가하지 않고 취소를 알 수 있다.
#include <iostream>
#include <boost/asio.hpp>
#include <boost/asio/steady_timer.hpp>
int...
C++ - Boost.Asio에서 Boost.Chrono 베이스의 타이머 사용 December 11, 2019
Boost 1.49.0 버전에서 Boost.Chrono 베이스의 타이머가 도입 되었다.
basic_waitable_timer : 클락 전환용
system_timer : system_clock용 타이머
steady_timer : steady_clock용 타이머
hig...
C++ - Boost의 object_pool 사용은 비 추천 September 15, 2017
boost 라이브러리에는 메모리 풀 라이브러리로 object_pool 이라는 것이 있다.
사용법은 아래와 같다.
boost::object_pool<int> pool;
int* p = pool.construct(10);
pool.destroy(p);
사용하면 안 되는...
C++ - C 언어 보다 왜 컴파일이 느릴까? June 17, 2020
일반적으로 C++로 작성된 코드가 C 보다 컴파일 시간이 느린 이유
그 이유는 주로 아래의 5개이다.
C++ 문법의 복잡성, 소스 코드의 parse(어휘 분석, 구문 분석, 의미 분석)에 시간을 요하고 있다
템플릿의 실체화에 시간이 걸린다
복잡한 최적화를 실시 할 필요...
C++ - C#의 region 사용하기 September 20, 2019
VC 에서는 개요 확장/축소 기능이 있다.
클래스, 함수, if 문 등을 개요 축소로 화면에 시작 줄만 표시할 수 있다.
긴 코드를 핵심만 보고 싶을 때 사용하면 유용하다.
그런데 아래와 같은 변수들의 나열은 개요 축소를 할 수 없다.
const int TEXT_1 = 1;
co...
C++ - C++ attributes를 좋아하는 이유 July 29, 2022
C++ - C++ callback 디자인패턴 March 23, 2022
C++ - C++ 메모리 모델 May 20, 2022
C++ - C++ 반복자(이터레이터) 만들기 March 31, 2022
C++ - C++ 언어의 명명 규칙들 일부 조사 January 15, 2023
C++ - C++ 표준 위원회 문서 P0563R0:Vector Front Operations (pdf) September 7, 2020
흥미로운 글이 있어서 일부 번역했습니다.(오랜전에)
(원본 https://cpplover.blogspot.kr/2017/02/c-p0550r0-p0601r0.html )
PDF P0563R0:Vector Front Operations
vector에 push_front와 po...
C++ - C++ 표준으로 와일드 문자열과 멀티바이트 문자열을 상호 변환하기 March 29, 2023
C++ - C++ 프로그래밍의 생산성을 약간 향상시키는 Visual Studio 기능(2023년) January 15, 2024
C++ - C++/CLI February 1, 2019
클래스(class), 핸들(^)
C++/CLI에서 관리 클래스는 ‘ref’라는 키워드를 사용하여 만든다.
비 관리 클래스
class Test
{
};
관리 클래스
ref class Test
{
};
관리 클래스는 ‘ref’를 제외하고는 외관상으로는 비 ...
C++ - C++03과 C++11 싱글톤 구현 차이 February 1, 2018
C++11에는 ‘C++11 - 블럭 범위를 가진 static 변수 초기화는 스레드 세이프 하다’ 라는 기능이 생겼다.
그래서 아래와 같이 쉽게 싱글톤 인스턴스 생성 가능하다.
template <typename T>
inline T& Singleton<T&g...
C++ - C++11 메모리 모델 April 24, 2022
C++ - C++11 스마터 포인터에서 피해야할 실수 Top 10 July 4, 2020
몇 년전에 웹에 공개된 글을 보고 번역했던 글이다.
C++ - C++11 이후에서 JSON 문자열에서 정적 클래스(or struct)에 값을 복원하기(StaticJSON, jsoncons, spotify-json, nlohmann json) January 1, 2022
C++ - C++11 조건 변수와 spurious wakeup May 29, 2022
C++ - C++11에서 std::vector 타입의 변수에서 타입 T를 알아내기 February 5, 2022
</a></h3>
C++ - C++11에서 추가된 사이즈 엄밀한 정수 타입 July 15, 2020
출처
C++11에서 새로 추가됨
int8_t, int16_t, int32_t, int64_t, uint8_t, uint16_t, uint32_t, uint64_t, int_fast8_t, int_fast16_t, int_fast32_t, int_fast64_t, uint_fast...
C++ - C++11의 Universal Initialization은 언제라도 사용하는 것이 좋을까? June 15, 2020
3,4년 전쯤에 번역했던 것을 공유한다
C++ - C++11의 memory_order 구분 December 13, 2021
C++ - C++17시대 Herb Sutter씨에게 듣는다 December 19, 2017
원문
Herb Suttrer씨는 소프트웨어 개발의 제일인자로 “Exceptional C++” 이나 “C++Coding Standars”라는 책을 집필했다.
ISO C++ 표준 위원회 위원장을 15년간 맡음과 더불어 Microsoft에서는 소프트웨어 아키텍트로서 C++/CLI, C...
C++ - C++20 Designated initializers January 20, 2021
출처
Designated initializers(지시 붙은 초기화) C++20 에서 집성체 초기화 때에 데이터 멤버를 지정하는 구문이다.
struct(class)
struct A
{
int x = 0;
int y = 0;
int z = 0;
};
A a{...
C++ - C++20 Synchronized Buffered Ostream August 21, 2022
C++ - C++20 std::ranges::views <-> vector 사용 예 March 14, 2023
C++ - C++20 모듈에 대해서 April 7, 2023
C++ - C++23 P2740R0 Simpler implicit dangling resolution January 18, 2024
C++ - C++23 std::print 소개 April 13, 2024
C++ - C++를 공부할 때 도움이 되는 C++ MS Docs 사이트 October 1, 2019
마이크로 소프트사의 개발자 지원 중에서 예전부터 칭찬을 받는 것 하나가 풍부한 문서를 제공하는 것이다.
예전에는 MSDN 이라는 사이트에 가서 MS가 만든 다양한 기술 문서를 보았다.
몇 년전부터는 MS는 Docs 라는 사이트를 만든 후 여기에 문서를 업데이트 하고, 이전 문서는...
C++ - C++에서 ULID 생성 November 30, 2023
C++ - C++에서 http 요청하기(cpp-httplib + nlohmann.json) November 21, 2023
C++ - C++의 dangling 검출, 제안 문서 버전 1.0 공개 October 21, 2018
출처
C++의 저명한 개발자, ISO C++ 표준위원회의 위원장 Herb Sutter씨가 dangling(잘못된 영역에 대한 잘못된 참조)의 검출 방법을 제안하는 문서 “Lifetime Safety: Preventing Common Danglng”의 버전 1.0을 공개 했다.
C...
C++ - C++의 가장 일반적이면서 가장 중요한 Rule November 5, 2022
출처: The Design and Evolution of C++ (by Bjarne Stroustrup)
C++의 진화는 현실의 문제를 그 동인(動因)으로 한다
완전주의에 연연하지 않는다
C++은 지금 유용한 언어이어야 한다
어떤 기능도 알기 쉬운 구현을 가져야 ...
C++ - C4100 경고를 없애주는 UNREFERENCED_PARAMETER 매크로 September 7, 2019
VC에서 경고 레벨 4로 컴파일 하면 자주 볼 수 있는 경고주 하나가 아래와 같은 경고이다.
warning C4100: 'argc' : unreferenced formal parameter
warning C4100: 'argc' : 참조되지 않은 형식 매개 변수입니다.
&l...
C++ - CAtlMap에서 KEY 값을 두 개 사용하고 싶을 때 May 18, 2019
예제 코드
#include <atlcoll.h>
#include <boost/functional/hash.hpp> // hash를 만들기 위해 사용
// KEY가 될 유저 정의형
struct FRIENDKEY
{
union
{
...
C++ - CEDEC 2020 - 게임 개발자를 위한 C++11에서 C++20 장래의 Cpp 전망.pdf December 28, 2023
pdf 다운로드
C++ - CMake 사용법 및 예제 코드 January 2, 2019
GitHub 저장소에 공개하였다.
CMake 기초 설명과 예제 코드가 있다
C++ - Core Guidelines Checker와 GSL 도입 February 25, 2020
출처
시작하기
C++ Core Guidelines Checker는?
주로 Bjarne Stroustrup과 Herb Sutter에 의한 C++ Core Guidelines는 더 나은 C++ 코드를 작성하는데 필요한 지침이 정비 되어 있다. 이 지침의 많은 항목은 분석 도구를 통해...
C++ - DO-WHILE에 의한 매크로 트랩핑 July 2, 2020
출처
#ifdef _DEBUG
#define DEBUG_LOG(exp, ...) do {if (!(exp)){std::printf(__VA_ARGS__);}} while(0)
#else
#define DEBUG_LOG(exp, ...) do {(void)(exp);} ...
C++ - Delay Queue December 13, 2023
C++ - Delegate 라이브러리 May 20, 2019
상호 참조를 할 경우, 상호 참조 되는 클래스 중 둘 중 하나가 변경될 경우 상호 컴파일이 일어난다
-> 작은 프로젝트라면 모르겠지만 대규모 프로젝트에서는 작은 소스 수정 하나가 큰 짐이 될 수 있다
그리고 설계 상 상호 참조를 하고 있다는 것은 좋지 않다.
상호 참조를 하...
C++ - EASTL January 24, 2018
GitHub EASTL
게임 회사 EA에서 오픈 소스로 공개한 것으로 C++ STL을 게임 개발에 맞게 고친 STL 이다.
크로스플랫폼을 지원하고 Visual Studio 2017을 지원한다.
빌드는 Cmake를 사용한다.
관련 글
일어로 된 글은 네이버 번역기로 보면 된...
C++ - Ecosystem International Standard February 19, 2023
C++ - Google Test/Mock 기능 정리 April 30, 2020
원문
매크로
TEST(), TEST_F(),TEST_P()
https://github.com/google/googletest/blob/master/googletest/docs/primer.md#simple-tests
TEST(TestSuiteName, TestName) {
...
C++ - INI 파일 읽기/쓰기를 일괄적으로 할 수 있는 라이브러리 inifile-cpp November 5, 2023
C++ - Iterator 만들기 May 18, 2020
3,4년 전쯤에 번역했던 것을 공유한다
C++ - JSON for Modern C++ 이 버전 3.1로 August 30, 2018
원문
JSON for Modern C ++ 3.1 에서는 Universal Binary JSON(UBJSON) 기능 지원 및 JSON Merge Patch가 새롭게 추가 되었다.
UBJSON는 JSON for Modern C++에서 지원하는 여러 가지 형식의 하나로, 인코딩 크...
C++ - LLVM Sanitizer December 23, 2020
C++ - Linux C/C++ 자작 라이브러리 제작 환경 구축 February 20, 2022
C++ - Linux 커널에서 배우는 C 언어 매크로 July 19, 2022
C++ - Linux, UDP - 100만 pps를 수신하는 프로그램을 만드는 것의 어려움 July 29, 2021
C++ - Linux에서 Poco 라이브러리 사용하기 November 29, 2021
C++ - Makefile 만들기(초보자용) October 14, 2020
C++ - Modern C++에서 컴파일 시간 줄이는 방법 November 10, 2020
C++ - NEW 구현 August 7, 2020
출처
new는 인수로 사이즈를 받지만 표준 new는 size가 0에서도 올바르게 동작하는 것을 규격으로 정하고 있다.
직접 구현 할 때에 의식하면 약간으로 규격에 준한 코드가 되어서 좋다.
void* operator new(std::size_t size) {
if (siz...
C++ - OpenSiv3D 번역/정리 December 17, 2019
C++ - PLAIN OLD DATA July 26, 2020
출처
C++의 POD(Plain Old Data)는 C언어의 데이터와 호환을 가진 데이터 구조이다.
memcpy로 데이터를 복사하거나 하지만 그것은 본질적인 것이 아니지만 어쨌든 POD의 가장 큰 의미는 C 언어의 데이터와 bit 수준으로 완전히 호환을 갖는다는 것이다.
C+...
C++ - POD 타입의 기본 초기화 September 26, 2019
출처
C++ 에서는 변수의 선언이나 new 식에서 생성자에 넘기는 인수가 빈 경우는 인수 리스트를 생략할 수 있다.
class foo {
// 생략
};
int
main(void) {
// ↓ 어느쪽을 사용해도 같다
foo a;
foo b{};
...
C++ - PPL 병렬 컨테이너와 Asynchronous Agents May 23, 2017
NHN Next의 학생이 C++ Advance 수업의 과제로 번역 정리한 것이다.
PPL 병렬 컨테이너 슬라이드 쉐어
Asynchronous Agents 슬라이드 쉐어
C++ - PRIVATE 멤버에 합법적으로 접근하기 July 19, 2020
출처
class Employer{
float time_for_game_;//게임 시간
float time_for_anime_;//애니메이션의 시간
float time_for_family_;//가족과의 시간
public:
float time_for_work_;//일의 시간
//...
C++ - PVS-Studio 설치 및 사용 September 6, 2020
C++ - Poco 라이브러리 네트워크 프로그래밍 예제 코드 GitHub 저장소 December 24, 2019
GitHub에 C++ 오픈 소스 Poco를 사용한 네트워크 라이브러리 예제 코드를 정리한 저장소이다.
Poco_network_sample
Poco_network_sample 저장소가 도움이 되었다면 스타 부탁한다~
C++ - Python의 print()와 비슷한 cpp-dump December 6, 2023
C++ - RAII idiom에 대한 글 번역 March 17, 2020
몇 년전에 번역했던 글로 RAII idiom에 대한 글이다.
번역이 좀 거친편이다^^;
C++ - Range based for 정리 January 21, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
<a href="https://jacking75.github.io/Cpp-0321/" title="C++ - RapidJSON 또는 simdjson 보다 빠르고, C 언어에서 사용할 수 있는 JSON 라이브러리 "yyjson"">C++ - RapidJSON 또는 simdjson 보다 빠르고, C 언어에서 사용할 수 있는 JSON 라이브러리 "yyjson"
March 21, 2023
</a>
C++ - Recommendations to speed C++ builds in Visual Studio May 22, 2017
NHN Next의 학생이 C++ Advance 수업의 과제로 번역 정리한 것이다.
원문
슬라이드 쉐어
C++ - Redis 사용 방법 정리 GitHub 저장소 December 15, 2019
GitHub에 C++에서 Redis 클라이언트 라이브러리에 대해서 간단하게 정리하였다.
jacking75/examples_cpp_redis
만약 Redis를 key-value 정도로 간단하게 사용한다면 RedisCpp-hiredis 와 redis_client 를 추천한다.
hir...
C++ - Return Value Optimization과 move semantics February 4, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
C++ - SFINAE 정리 January 20, 2024
C++ - SSO(Small-string optimization) January 2, 2018
보통 std::string는 문자열을 확보할 때 동적으로 메모리를 확보하지만 작은 크기의 문자열의 경우는 동적 할당은 성능적으로 낭비이므로 동적 할당을 하지 않는 최적화가 구현 되어 있고 이것을 SSO 라고 한다.
아래처럼 std::string 안에 문자열을 저장할 수 있는 버퍼...
C++ - STL function, lambda, bind 사용 예 June 5, 2019
/*
* std_function1.cpp
* Copyright (C) 2014 kaoru <kaoru@bsd>
*/
#include <iostream>
#include <functional>
using namespace std;
struct...
C++ - STL map에 함수 포인터 사용 June 5, 2019
#include <iostream>
#include <map>
#include <string>
double Add(double a, double b){ return a + b; }
double Sub(double a, double b){ retur...
C++ - STL map에서 선형 탐색을 하면 안되는 이유 April 12, 2020
몇 년전에 번역했던 글이다.
번역이 좀 거친편이다^^;
C++ - STL 컨테이너의 인스턴스에서 요소의 Type 얻기 June 12, 2020
template<class T>
struct foo{
T operator()( ... ){ ... };
};
std::array< double, ... > a = ;
bar( foo< >() ); // < > 안에 a의 요소 타입 ...
C++ - STL의 sort와 search May 1, 2020
C++ - State 패턴으로 CSV 파일을 읽자 June 9, 2017
NHN Next의 학생이 C++ Advance 수업의 과제로 번역 정리한 것이다.
[원문]
State 패턴으로 CSV 파일을 읽자
슬라이드쉐어
C++ - StdAfx.h에 관한 고찰 March 28, 2020
C++ - The Observable C++ library June 8, 2017
NHN Next의 학생이 C++ Advance 수업의 과제로 번역 정리한 것이다.
[원문]
The Observable C++ library – implementing the observer pattern
Observable C++ expressions – using the Obs...
C++ - TimingWheel 알고리즘을 사용한 타이머 February 27, 2020
자세한 설명은 http://d2.naver.com/helloworld/267396.
타임아웃 작업의 만료 여부에 대한 검사가 필요 없는 등록과 실행 두 작업만을 모두 O(1)의 시간 복잡도로 처리할 수 있는 타이머를 구현할 수 있다.
출처: https://github....
C++ - UNIX 소켓 (AF_UNIX)를 이용하여 Win32 프로세스간에 프로세스 간 통신 January 31, 2021
C++ - Ubuntu 18 에서 g++(gcc) 설치 September 16, 2018
출처: https://linuxconfig.org/how-to-install-g-the-c-compiler-on-ubuntu-18-04-bionic-beaver-linux
우분투 18 에서 apt-get으로 설치하는 g++ 버전은 7.3 이다.
7.3 버전은 C++17 표준을 지...
C++ - Ubuntu에 clang, libc++-, lldb 설치하기 October 8, 2018
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -
echo deb http://apt.llvm.org/stretch/ llvm-toolchain-stretch-6.0 main>> /etc/ap...
C++ - VC++ 디버깅 기능 소개 September 21, 2020
C++ - VC++ 에서 링크 에러가 발생하는 경우 August 12, 2020
VC++을 사용할 때 링크 오류가 발생하여 시간을 허비하는 경우가 있다.
보통 아래의 이유로 링크 오류가 발생하는 경우가 많다.
문자 코드의 취급이 같지 않다.
Use Unicode Character Set, Use Multi-Byte Character Set
[C/C++][C...
C++ - VC용으로 빌드된 Boost 라이브러리 얻기 October 27, 2017
VC용으로 빌드된 Boost 라이브러리 Lib 파일을 제공하고 있다.
다운로드 페이지이다.
Boost 라이브러리의 다양한 버전 및 VC의 버전 별로 준비 되어 있다.
C++ - VSCode에서 경쟁적 프로그래밍 환경(C++)을 구축하기 November 11, 2023
C++ - Virtual 전파 July 27, 2020
이 Box 클래스를 public 계승해도 안전할까?
class Box : public Object {
public:
Box();
~Box();
};
정답은…이 정보만으로는 뭐라고 말할 수 없다 이다.
얼핏 보면 안 되다고 느끼는 사람도 많을 걸로 생각한다.특히 c...
C++ - Visual C++ 에서의 std::chrono의 고해상도 시계 January 16, 2018
Visual Studio 2015 이전에는 std::chrono(high_resolution_clock을 사용해도)로 시간 측정을 하면 nano 단위로는 측정할 수 없었다.
그래서 VC에서 nano 단위로 측정하려면 이전처럼 Win32 API인 PerformanceCounter...
C++ - Visual C++에서 Intellisense의 경고를 억제하는 방법의 경고를 억제하는 방법 February 24, 2023
C++ - Visual C++에서 UTF-8 소스 코드를 사용하는 방법 October 21, 2019
출처
전제
최신 msbuild가 필요하다. VisualStudio 2017 Community Edition을 설치하면 자동으로 설치 될 것이다.
경로가 통하지 않는 경우 다음 명령을 실행 msbuild을 사용할 수 있게하자.
set PATH=%PATH%;%PROGRAMFILES(...
C++ - Visual C++의 코드 분석을 지지하는 SAL August 6, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
C++ - Visual Studio 2017 15.7이 C++17 완전 준수 July 5, 2018
원문
Microsoft는 Visual Studio 2017 15.7 일반용 제공을 발표했다.
InfoQ는 VS2017의 7번째 메이저 업데이트 개발을 쫓아왔다. 이것에 의해 IDE 전체의 많은 영역이 개선되었다.
이 업데이트는 현재 복사본을 덮어 설치할 수 있지만, 반면에 새로...
C++ - Visual Studio 2017 에서 최신 C++ 기능 사용하기 November 22, 2017
Visual Studio 2017에서는 C++17 및 C++20에 들어갈 기능이 일부 구현 되어 있다.
그러나 이 기능들은 그냥은 사용할 수 없고 컴파일러 옵션에서 사용함을 선언해야 한다.
(C++17 기능 중 VS 업데이트를 통해서 구현된 기능은 보통 바로 사용할 수 없다.)
...
C++ - Visual Studio 2019에서 구문 검사에서 정형까지 자동화하는 방법 September 18, 2022
C++ - Visual Studio 2019의 C++ 프로젝트에서 새로 만드는 파일의 인코딩을 UTF-8로 하는 방법 February 14, 2020
C++ - Visual Studio 2022에서 배열 범위를 벗어난 접근을 쉽게 알 수 있는 방법 December 14, 2022
C++ - Visual Studio Code에서 C/C++ 프로그래밍 November 26, 2021
C++ - Visual Studio에서 C++ Core Guidelines 사용하기 October 1, 2023
C++ - Visual Studio에서 라이브러리 같은 외부 코드의 경고가 나오지 않도록 하는 방법 January 1, 2023
C++ - Win32 시스템 정보 얻기(Code) June 3, 2019
출처
win32_systemInfo.h
#pragma once
#include <cstdint>
#include <vector>
#include <string>
#include <memory>
#include <rapid/uti...
C++ - Win32API 스레드 풀을 사용하는 타이머 February 26, 2020
Windows Vista부터 사용 가능.
CreateThreadpoolTimer, SetThreadpoolTimer API 사용.
‘윈도우 시스템 프로그램을 구현하는 기술(한빛미디어)’에 설명이 잘 나와 있음
예제 코드 출처: https://github.com/...
C++ - Win32API 실행 파일의 full path 얻기 January 28, 2020
Win32 API의 ‘GetModuleFileName’ 함수 사용.
std::wstring getApplicationFilePath()
{
wchar_t fileName[MAX_PATH] = { 0 };
::GetModuleFileNameW(nullptr, fil...
C++ - Windows Implementation Libraries (WIL) September 20, 2023
C++ - Windows Performance Analayzer로 C++ 빌드 시간을 프로파일링 해 보자 September 29, 2020
C++ - Windows 에서 hiredis 사용하기 March 2, 2018
MS에서 Windows용으로 redis를 포팅한 것이 있어서 여기서 hiredis 윈도우 버전을 구할 수 있다.
아래 글은 MS가 윈도우로 포팅한 redis 프로젝트를 기준으로 한 것인데 얼마전에 hiredis 부분만 따로 떨어져 나온 프로젝트가 공개 되었다(이 글은 2017년 ...
C++ - Windows 텍스트 인코딩 변환 June 12, 2019
Ansi <-> UTF-8
std::string CGlobal::ToUFT8( const char* pszIn )
{
std::string resultString;
int nLenOfUni = 0, nLenOfUTF = 0;
wchar_t* us...
C++ - Windows에서 hiredis 빌드하기 August 29, 2020
C++ - Windows의 LFH April 14, 2020
C++ - Writing modern C++ code. how C++ has evolved over the years August 10, 2020
몇 년전에 번역 했던 글이다.
Herb Sutter씨의 2011년 “Writing modern C++ code: how C++ has evolved over the years” 강연 문서이다.
문서 하단의 설명 부분에 Herb Sutter씨의 말을 일본어로 번역된 것이 있어서 이...
C++ - [번역] C++ 포인터 부트 캠프 November 23, 2019
3,4년 전에 번역했던 문서
C++ - [번역] nested class와 로컬 클래스 January 4, 2020
C++ - [번역]shared_ptr & weak_ptr December 9, 2019
C++ - [번역]shared_ptr과 게임 프로그래밍에서의 메모리 관리 December 3, 2019
C++ - [펌] Linux에서 동적 라이브러리 만들기 April 20, 2019
출처: [리눅스 공유라이브러리(동적 라이브러리) 만들어 쓰기
작성자 라온이아부지 선성태](http://blog.naver.com/r2adne/120127832516)
순서
라이브러리로 쓸 함수가 포함된 소스 두 개 작성
...
C++ - [펌] Linux에서 라이브러리 로딩 April 20, 2019
출처: 라이브러리 로딩 - ld.so.conf
라이브러리 로딩 - ld.so.conf
동적 라이브러리를 호출하기 위해서는 path 지정이 필수이다.
해당 라이브러리가 어디에 위치해 있는지 모든 디렉토리를 탐색하기에는 비효율적이기 때문이다.
우리가 흔히 설정하는 LD_...
C++ - [펌] Linux에서 정적 라이브러리 만들기 April 20, 2019
출처: [리눅스 정적 라이브러리 만들어 쓰기
작성자 라온이아부지 선성태] (http://blog.naver.com/r2adne/120127876141)
순서
라이브러리로 쓸 함수가 포함된 파일 두개 만들기
컴파일 해서...
C++ - __if_exists July 14, 2020
출처
Visual C++ 전용 키워드 이다.
__if_exists ( identifier ) {
statements
};
identifier에 전달한 식별자가 존재한다면 statements가 실행된다.
부정형으로 __if_not_exists가 있다.
컴파일...
C++ - _pFirstBlock == pHead 에러 August 21, 2020
실행 프로그램에서 공용 dll을 사용하는 경우 아래와 같은 에러가 발생할 때가 있다.
File: f:\dd\vctools\crt_bld\self_64_amd64\crt\src\dbgheap.c
Line: 1424
Expression: _pFirstBlock == pHead
...
C++ - `void*`를 사용한 구조체, 클래스 판별 방법 March 13, 2022
C++ - atomic compare_exchange_weak/strong 함수 January 23, 2020
출처
C++11 표준 라이브러리의 atomic 조작 함수 compare_exchange_weak와 compare_exchange_strong에 대한 메모.
두 함수 모두 변수의 atomic한 CAS(compare-and-swap) 작업을 제공한다. weak 버전과 strong ...
C++ - boost::irange March 4, 2020
출처
정수의 범위를 사용하려면 boost::irange 함수를 사용한다.
범위로서 [0, n) 을 지정하고, 제 3인수로 단계 폭을 2로 지정하고 있다. (제 3 인수를 생략하면 단계 폭은 1이 된다)
이것에 대해 range-based for 문을 작성할 수 있으며, Pytho...
C++ - boost::multiprecision::cpp_int March 5, 2020
출처
다배수 길이 정수를 다룰 때는 boost::multiprecision::cpp_int를 사용한다.
#include <bits/stdc++.h>
#include <boost/multiprecision/cpp_int.hpp>
using namespace...
C++ - boost::stacktrace July 19, 2021
C++ - cache 잘 사용하기 August 24, 2020
몇 년 전에 정리, 번역했던 글이다.
C++ - callback_manager 라이브러리 January 31, 2022
C++ - capnproto(Cap'n Proto), C++11 으로 serialization February 10, 2021
C++ - clang-tidy으로 안심, 안전한 C/C++ 코딩 극대화! November 23, 2021
C++ - condition_variable December 5, 2023
C++ - const와 포인터의 관계 September 4, 2023
C++ - define and expansion of cpp macro(C 프리프로세서 매크로 정의와 전개) August 9, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
C++ - delete 호출과 구현 September 10, 2020
출처
#define SAFE_DELETE(p)if(p){delete p;}
옛날, 마이크로 소프트가 DirectX의 샘플에서 이런 매크로를 정의한 바 있다.
아마도 많은 사람이 그 샘플의 대로 익힌 결과, 특히 생각 없이 구현하는 경우도 적지 않을것이다.
포인터가 null이...
C++ - f()와 f(void)의 차이 September 3, 2020
VC++을 통해서 멤버 함수를 정의할 때 파리미터가 없는 함수의 경우 파라미터 리스트가 들어가는 자리에 void가 들어가는 것을 볼 수 있다.
기본적으로 void f()와 void f(void)의 함수 시그네쳐는 같은 것이다.
다만 파라미터 리스트에 void를 사용하는 것은 ‘빈...
C++ - final 지정자와 최적화 December 26, 2021
C++ - flags. 프로그램 실행 시의 인자를 파싱하는 라이브러리 January 22, 2020
C++17로 표준으로 구현.
헤더 파일 1개로 구성.
저장소: https://github.com/sailormoon/flags
라이센스: 퍼블릭도메인(완전 마음대로 사용 가능)
예제
#include "flags.h"
void ParseConfig(int a...
C++ - functional 활용하기 October 27, 2023
C++ - gcc의 전 처리기에 정의된 매크로(Predefined Macros) 확인 방법 June 8, 2022
C++ - gdb + core 분석하기 January 25, 2022
C++ - httpClient, json, redis 예제 코드 June 24, 2018
C++로 http client 요청, Json 데이터 조작, redis와 통신하는 짧은 예제 코드 들이다.
아래 링크에 가면 코드를 볼 수 있다.
curl 라이브러리를 사용하여 http 클라이언트 Post, Get 요청
http 클라이언트 사용 방법 (Post)
http 클라이언...
C++ - idiom - Construct on First Use June 2, 2020
원문
정적 오브젝트는 주의하지 않으면 초기화 되기 전에 사용하는 실수를 할 수 있다. 아래는 그 예이다.
#include <iostream>
class StaticObject
{
public:
StaticObject()
{
std::cou...
C++ - idiom - Construction Tracker June 3, 2020
원문
생성자에서 멤버 초기화 때 예외가 발생하는 경우가 있더. try와 catch로 예외를 잡을 수는 있지만 때로는 아래와 같이 어디에서 예외가 발생했는지 알 수 없을 때가 있다.
class A
{
public:
A(int n)
{
/* 초기화에...
C++ - idiom - Erase-Remove June 4, 2020
원문
아래는 STL의 컨테이너에서 특정 요소를 삭제하는 코드.
std::vector<int> a;
/*a에 요소를 추가하는 코드는 생략*/
std::remove(a.begin(), a.end(), 100);
이것으로 사라진 것이 아니다. 실은 remove 함수는...
C++ - idiom - Execute-Around Pointer June 5, 2020
원문
스마트 포인터는 객체의 라이프 타임이 다한 때에 자동적으로 확보된 리소스를 삭제한다.
생성자와 소멸자, 연산자 오버 라이드를 잘 구현하였다.
이것을 응용하면 클래스의 멤버 함수가 실행될 때 특정 처리를 실행하는 스마트 포인터를 구현할 수 있다.
class ExecuteP...
C++ - inline 지정자 February 28, 2022
C++ - libcurl 공식 Tutorial 번역 February 19, 2021
C++ - libuv - Visual Stuido 솔루션 파일 만들기 October 14, 2019
GitHub
에서 소스 코드를 받는다.
소스 코드의 root 디렉토리에 vcbuild.bat 파일이 있다.
콘솔 창을 열어서 vcbuild.bat을 실행한다.
사전에 Visual Stuido가 먼저 설치 되어 있어야 한다.
vcbuild.bat 이 있는 root 디렉토리에 uv...
C++ - libxlsxwriter를 사용하여 C++로 xlsx 파일 쓰기 April 29, 2020
libxlsxwriter
C용의 간단한 xlsx 쓰기 라이브러리.
Github 저장소에서 공개하고 있다.
풍부한 예제가 들어가 있다.
설치
설치 하지 않아도 이용 가능.
이 경우는 패스 설정이 필요.
$ git clone https://github.com/jmcnamara/l...
C++ - localtime_s 사용 예 February 7, 2020
최신 VC 에서는 localtime을 사용하면 경고(컴파일 실패 되는)가 나온다.
localtime_s를 사용해야 한다.
```
include
include
C++ - localtime에서 초 단위의 시간으로 변환 (Code) June 3, 2019
struct tm timeinfo;
memset( &timeinfo, 0, sizeof(timeinfo) );
timeinfo.tm_year = atoi( szYear ) - 1900;
timeinfo.tm_mon = atoi( szMonth ) - 1;
timeinfo....
C++ - malloc으로 확보한 메모리를 unique_ptr로 관리하기 July 22, 2020
원문
호출 예
hoge.h
#pragma once
struct Hoge
{
int _data1;
unsigned char _data2[1];
};
main.cc
#include "uniqueptr1.h"
#include "uniqueptr2.h"
#includ...
C++ - memcpy 최적화 December 16, 2023
C++ - new로 메모리 할당 실패 시 예외 발생하지 않게 하기 September 15, 2020
아래 코드를 실행하면 아마 메모리를 할당할 수 없어서 예외가 발생할 것 이다.
long long n = 1LL << 63LL;
int *p = new int[n];
그러나 예외가 아닌 null pointer을 발생하고 싶다면 아래와 같이 한다.
long long n ...
C++ - noexcept를 사용하여 이동 생성자 생략 방지하기 January 5, 2024
C++ - null 객체의 멤버 함수 호출 January 11, 2018
클래스를 메모리 할당(new 생성)하지 않고 생성한 후 멤버 함수를 호출하면 어떻게 될까?
호출된 멤버 함수가 자신의 멤버 변수를 호출하지 않는다면 무사히 호출된다.
당근 멤버 변수를 호출하면 세그먼트폴이 생긴다.
아래 코드는 gcc 8.0 에서 테스트 되었다. VC에서도 문제 ...
C++ - printf 방식의 디버깅을 극적으로 효율적으로 할 수 있게 해주는 라이브러리 icecream-cpp September 4, 2022
C++ - redis 사용하기 July 1, 2018
게임 서버를 개발할 때 사용하는 기술이 모바일 시대 이전에 비해서 많이 다양해졌는데 거의 대부분 꼭 사용하고 있는 것이 redis 이다.
다른 언어들은 redis 사용이 간단한데 C++은 간단하지는 않아서 정리를 해 봤다.
boost를 사용하면 아주 쉽게 사용할 수 있고, boos...
C++ - ref-qualifier 유무로 오버로드 할 수는 없다 July 29, 2020
출처
C++11에는 implicit object parameter(*this를 참조하는 객체)를 lvalue 참조로 받거나 rvalue 참조로 받는지를 지정하는 기능이 있다. 이를 참고 참고 수식자(ref-qualifier)라고 한다.
struct S
{
// void S...
C++ - segmentation fault를 보완해주는 로그를 출력하자 December 5, 2018
출처
C++ 서버(Linux)가 크래쉬 되는 버그로 고생해서 segmentation fault를 보완해주는 로그를 출력하는 기능을 만들어 보았다.
코드
CrashReporter.hpp
#pragma once
class ICrashReporter
{
public:
vir...
C++ - shared_from_this가 가리키는 곳을 변경하지 못하도록 규정 June 25, 2020
출처
this 포인터를 std::shared_ptr로 얻을 수 있는 기능으로 std::enable_shared_from_this 기본 클래스와 멤버 함수 shared_from_this()가 있다.
std::enable_shared_from_this에서 파생된 클래스의 개체를 n...
C++ - single-file C, C++ libraries 소개 November 4, 2023
C++ - sizeof()로 알아보는 C++의 메모리 April 22, 2020
몇 년전에 번역했던 글이다.
C++ - split, join, replace_all, brent_find_minima March 6, 2020
출처
split
지정한 구분 문자로 문자열을 분할 할 때는 boost::algorithm::split 함수를 사용한다.
얻어진 결과는 지정한 컨테이너에서 받는다.
구분 문자인지 판정하는 것은 boost::is_any_of를 사용한다.
아래 예는 문자열을 + 로 구분하고 있다.
s...
C++ - stack_alloc 라이브러리 June 7, 2020
3,4년 전쯤에 번역했던 것을 공유한다
C++ - std::any가 동적 메모리 할당을 할 때와 하지 않을 때(msvc) January 26, 2023
C++ - std::bind 사용 June 8, 2020
지정한 함수를 wrap해서 std::function을 만든다.
#include <iostream>
void test_function(int a, int b) {
printf("a=%d, b=%d\n", a, b);
}
int main(int argc, con...
C++ - std::bitset 정리 March 8, 2020
C++ - std::data January 25, 2024
C++ - std::exchange May 7, 2020
C++14부터 사용 가능.
아래의 파일을 포함해야 한다
#include <utility>
함수 원형
template< class T, class U = T >
T exchange( T& obj, U&& new_value );
...
C++ - std::function June 10, 2020
C++에 존재하는 여러 종류의 함수를 wrap 하여 똑같이 다룬다
C++에 있는 함수의 종류
함수
람다식
함수 객체
클래스의 멤버 함수
람다식 사용법
[캡처](인수)->반환 값 타입 { 함수의 내용 }(실행 시 인수);
캡처에는 기본적으로[=] ...
C++ - std::function 및 함수 포인터의 성능 평가 October 28, 2023
C++ - std::invoke July 1, 2021
C++ - std::map과 함수 포인터 June 11, 2020
예제 코드
#include <iostream>
#include <map>
#include <string>
double Add(double a, double b){ return a + b; }
double Sub(double a, double b)...
C++ - std::sort과 std::unique로 std::vector의 중복 요소를 삭제 June 9, 2020
#include <iostream> // std::cout, std::endl;
#include <algorithm> // std::unique
#include <vector> // std::vector
void printVec(std...
C++ - std::span February 7, 2024
C++ - std::string_view에 대해서 July 25, 2021
C++ - std::string에서 메모리 할당이 발생하지 않는 최대 바이트 수 December 8, 2023
C++ - std::thread 사용법 December 9, 2023
C++ - std::variant June 27, 2021
C++ - std::variant로 상속을 대체 June 29, 2021
C++ - stdafx.h 파일을 찾지 못한다는 에러가 나올 때 August 11, 2020
VC++에서 프로그래밍을 할 때 컴파일 속도를 올리기 위해 대부분 ‘프리 헤더’ 파일을 사용한다.
보통 자신이 만든 소스파일을 사용할 때 문제가 없다가 외부 파일을 가져와서 사용하는 경우 또는 비슷한 행동을 하는 소스 파일 마다 별도의 디렉토리에 들어가 있는 경우 (예 DB 관련 ...
C++ - strict aliasing rules, type punning 해설 May 6, 2022
C++ - string local buffer July 30, 2020
C++ - template와 define, constexpr 구분 August 9, 2022
C++ - threads affinity and hyperthreading June 26, 2020
3,4년 전쯤에 번역했던 것을 공유한다
C++ - unique_ptr에 포인터 이외의 것을 가지도록 할 때 July 10, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
C++ - unorderd_set, unorderd_map의 key를 임의의 클래스로 하기 February 3, 2020
출처
클래스의 같은 값 비교, 해시 함수가 필요
#include <unordered_map>
class Point{
public:
int x, y;
Point(){}
Point(int x, int y):x(x),y(y){}
bool ope...
C++ - unordered_map 와 map 속도 비교(emplace 편) July 22, 2021
C++ - unordered_map의 key로 std::pair 사용하기 November 25, 2023
C++ - volatile 에 대해서 November 28, 2023
C++ - volatile의 효과 February 10, 2022
C++ - wildcard를 이용한 간단한 범용 Makefile October 26, 2020
C++ - winget으로 Visual C++ 재배포 가능 패키지를 설치하는 방법 December 20, 2022
C++ - 가변 길이 템플릿에서 std::source_location 사용하기 December 4, 2023
C++ - 가상함수는 느릴까? May 4, 2022
C++ - 가상함수의 inline화에 대해서 September 9, 2020
출처: Web의 어딘가…
혹시 가상함수는 inline 되지 않는다고 생각하는 사람이 있을 것이다.
경우에 따라서 되기도 하고 안 되기도 한다.
되는 경우는 컴파일 시점에서 어떤 클래스의 가상함수를 사용하는지 알 수 있느냐 이다.
아래 코드의 경우 컴파일 시점에서 Delive...
C++ - 각종 STL 컨테이너에서 루프 중 요소 삭제하기 September 30, 2019
원문
vector
vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
vector<int>::iterator it = v.begin();
while (it != v.end()) {
...
C++ - 간단한 Object 메모리 풀링 June 28, 2020
의사 코드
class Player
{
Player(const int index) {}
};
class UserManager
{
public:
void NewUser();
void DeleteUser(const int playerIndex);
private:
...
C++ - 공변형 반환 값과 오버라이드 룰 완화 September 23, 2020
출처
C++에서는 일반적으로 반환 값만 다른 메소드를 오버라이드 할 수 없다.
struct Base{
virtual int func()=0;
};
struct Derived:public Base{
float func()override; //에러! 반환 값 타입이 다르다...
C++ - 구조체 alignment April 27, 2020
C++ - 구조체 멤버 접근을 배열처럼 접근하고 싶은 경우 September 4, 2020
일반적으로 구조체 멤버에 접근하는 예
struct Point {
int x;
int y;
int z;
}
int main(void){
Point p;
p.x = 100;
p.y = 200;
p.z = 300;
cout <...
C++ - 구조화 속박(structured bindings)에 대응하는 클래스 만들기 April 16, 2023
C++ - 다른 클래스의 특정 멤버 함수만을 friend로 선언 July 6, 2020
보통 다른 클래스를 friend로 선언할 때 그 클래스 전체를 선언하는 경우가 많은데 클래스 전체가 아닌 일부 멤버 함수만을 friend로 선언할 수 있다.
struct TEST2;
struct TEST1
{
void T1();
void T2();
};
stru...
C++ - 다차원 배열 초기화 방법. std::fill()의 편리한 사용법 May 6, 2020
std::fill
// n 차원 배열의 초기화. 제 2인수의 형의 사이즈마다 초기화 해 둔다
template<typename A, size_t N, typename T>
void Fill(A (&array)[N], const T &val){
std:...
C++ - 대단한 const를 재미있게 사용하자 July 17, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
C++ - 대체 토큰 사용하기 April 9, 2020
C++ - 라이브러리 링크 모음 November 5, 2019
일어로 된 문서는 번역기로 돌려서 보는 것을 추천한다.
signal-slot-benchmarks
WMI Explorer
Handy wmi query tool
압축
고속 압축 알고리즘 비교 테스트
mini-LZ library
lz4
Zstandard...
C++ - 라이브러리 출력 이름 변경하기 July 20, 2020
출처
라이브러리 출력 이름을
MyLibrary_x86_Debug.lib
라고 하고 싶다.
또 아래처럼 디렉토리 구성으로 하고 싶다.
MyLibrary
MyLibrary.sln
MyLibrary
MyLibrary.vcxproj
lib
MyLi...
C++ - 라이브러리를 사용한 프로그램 고속화 September 6, 2018
tcmalloc, jemalloc, nedmalloc
malloc 대체에 의한 고속화.
아래와 같이 실행함으로써 malloc이 대체되어 실행된다.
LD_PRELOAD=/usr/lib/libtcmalloc.so ./exefile
상황에 따라 다르겠지만 tcmalloc...
C++ - 람다 식의 5개의 장점과 코드를 더 좋게 하는 방법 April 9, 2022
C++ - 람다식 오버로드 February 15, 2022
C++ - 리눅스에서 공유라이브러리 추가하는 방법 November 23, 2023
C++ - 리눅스의 /usr/bin/c++의 실체 December 19, 2020
C++ - 맴버 함수 포인터와 배열을 사용하여 멤버 함수를 번호로 지정하여 호출 하는 방법 July 16, 2020
출처
#include <iostream>
#include <memory>
using ub4 = unsigned int;
// 외부에 공개해서 이용하는 클래스
class A {
public: // 클래스 밖에서 using을 사용하고 싶으므로 public 로...
C++ - 메모리 영역 May 29, 2017
메모리 영역에 대해서
5 종류의 메모리 영역
C++ 에서는 다른 특성을 갖는 5 종류의 메모리 영역이 존재한다.
(※ 단 c++ 규격에는 스택이나 힙은 명시 하지 않고 Free-Store는 명시 하고 있다)
Const Data
컴파일 시 값을 알 수 있는 데이터(예를 들면 sta...
C++ - 메소드 내의 this 최적화 February 24, 2022
C++ - 멤버 함수를 함수 객체로 전달하는 방법 - std::bind 와 람다식 December 25, 2023
C++ - 문자열을 수치로 변환하는 방법 July 1, 2020
atoi
#include <cstdlib>
#include <iostream>
#include <string>
#include <typeinfo>
int main()
{
const std::string str("123");
...
C++ - 배열 참조 August 3, 2020
출처
배열 참조는 배열보다 안전한 속도 면에서 유리하다 !!!
int *a[1]; // (1)
int (*a)[1]; // (2)
int &a[1]; // (3)
int (&a)[1]; // (4)
이 4개의 차이점은 ?
(1)은 모두 알다시피 int의 ...
C++ - 배치파일을 사용하여 원격 디버깅 할 때 IP 주소 변경 및 설치, 설정 등등 한방에 하기 December 4, 2019
출처
방법
아래와 같은 배치 파일을 만든다. 하고있는 것은 아래와 같다.
IP 주소를 고정으로 세팅(여기에서는 192.168.1.111 로 하고 있다)
폴더 공유를 활성화 한다
“응용 프로그램 및 안전하지 않은 파일의 시작” 설정을 변경 (경고 창을 내지 않는다)
...
C++ - 번역) VcPkg로 라이브러리 환경 정의 September 28, 2020
C++ - 복잡한 초기화를 할 때에도 변수에 const 를 부여하기 December 22, 2023
C++ - 분산환경에서의 uniqueId 생성 오픈 소스 snowflake-ModernCpp October 18, 2017
snowflake ?
Twitter에서 만든 오픈 소스 라이브러리로 주 목적은 분산 서버에서 일련 번호를 생성하는 것이다.
자세한 설명은 본인의 문서(https://www.slideshare.net/jacking/twitter-snowflake)를 보기 바란다.
snowflake...
C++ - 비 public 계승을 사용하는 곳 September 8, 2020
출처: 웹 어딘가에서…
계승에는 3가지 단계가 있다.
public
protected
private
객체 지향적 사고로는 public 계승은 자주 is-a 관계를 나타낸다 라고 한다.
한편 private 계승, protected 계승은 is-a 관계가 아니다.
is...
C++ - 생성자에 용도 별로 이름 붙이기 July 21, 2020
최근 C++ 표준 라이브러리와 Boost의 작은 유행으로 태그 디스패치의 태그를 사용자에게 명시적으로 지정하게 함으로써 함수 오버로드를 손쉽게 하는 방법이 몇몇 곳에서 나타나고 있다.
// Boost.Container의 vector의 예
// 태그 정의
struct default...
C++ - 세 가지 정적 변수의 차이 December 21, 2023
C++ - 스레드 내에서 발생한 예외 처리 November 28, 2019
참고
아래의 코드는 sigma_reference 함수에서 예외가 발생하는 경우 main에서 catch하고 있지만 예외가 잡히지 않는다.
이유는 sigma_reference 함수의 스레드와 main 함수의 스레드가 서로 다르기 때문이다.
#include <thread>
#...
C++ - 실수 부에서 짜르기, 가장 간단한 반올림 처리 January 31, 2019
실수 부에서 짜르기
(float)floor( (WeaponShot.nDamage * pow(10.0f,4)) + 0.5 ) / pow(10.0f,4);
가장 간단한 반올림 처리
int nScore = (int)( nCalcuteScore + 0.5 );
C++ - 실전 Modern C++ - module June 19, 2023
YouTube 실전 Modern C++ - module 1
YouTube 실전 Modern C++ - module 2
YouTube 실전 Modern C++ - module 3
C++ - 싱글 헤더 라이브러리 모음 mmx December 11, 2021
C++ - 안전한 문자열 조작 함수 February 3, 2019
문자열 복사
strcpy_s, strcpy, _tcscpy_s, wcscpy, wcscpy_s
대체 추천 함수
strncpy_s(char), _tcsncpy_s(TCHAR) , wcsncpy_s(wchar_t)
errno_t wcsncpy_s( wchar_t *st...
C++ - 약어와 의미 November 27, 2019
약어
의미
ADL
Argument Dependent name Lookup
COW
Copy On Write
CRTP
...
C++ - 언제 shared_ptr, unique_ptr을 사용할까? July 10, 2020
C++ - 오픈 소스 라이브러리 A better date and time C++ library May 18, 2017
NHN Next의 학생이 C++ Advance 수업의 과제로 정리한 것이다.
슬라이드 쉐어
예제 코드
C++ - 오픈 소스 라이브러리 POCO 설명 및 예제 코드 November 29, 2019
GitHub examples C++ Poco
몇 년전에 만든 코드와 작년에 사내 발표에 사용한 문서가 있다.
이 저장소가 도움이 되었다면 스타 부탁한다~
C++ - 오픈소스 folly 라이브러리 Visual Studio 2022 빌드하기 November 24, 2023
C++ - 오픈소스 라이브러리 Meta Enum December 24, 2020
C++ - 온갖 플래그를 저장할 수 있는 최강 클래스를 만들어 보자 December 18, 2023
C++ - 온라인 C++ 컴파일러 리스트 December 15, 2017
C++ 공부를 할 때 기능이 어떻게 동작하는지 알고 싶을 때 웹브라우져만 있으면 바로 테스트 해볼 수 있다.
List of Online C++ Compilers
생각 외로 온라인 C++ 컴파일러는 많다. VC도 있다.
이런 온라인 컴파일러를 사용하면 지금처럼 막 C++ 새 표준...
C++ - 왜 move를 해야할까? January 3, 2022
C++ - 우측 값 참조 value category June 18, 2020
value category
C++의 식은 타입과는 별도로 value category라는 것을 갖는다.
value category는 prvalue, xvalue, lvalue 중 하나이고, prvalue와 xvalue를 모아서 우측 값 이라고 부른다.
주의해야 할 것으로
같...
C++ - 유저 정의 클래스에서 간단하게 확장 for 문을 사용할 수 있도록 하는 방법 March 27, 2020
출처
STL 컨테이너를 public 상속한 경우
유의해야 할 것은 STL 컨테이너의 소멸자는 virtual 이 아니다
예를 들면 부모 클래스의 포인터로 업 캐스트하고 delete 하면 자식 클래스의 소멸자가 호출되지 않는다.
코드 예
#include <iostream>...
C++ - 자세히 알아보는 include May 11, 2020
3,4년 전쯤에 번역했던 것을 공유한다
C++ - 자식 클래스에서 부모 클래스를 가리키는 키워드 __super July 8, 2020
C++ 표준은 아니고 VC++ 7.0에서 생긴 키워드로 자식 클래스에서 부모 클래스의 멤버를 호출할 때 사용하면 편리하다.
이 키워드를 사용하면 부모 클래스의 이름이 바뀌어도 변경 없이 부모 클래스의 멤버를 호출할 수 있다.
struct B1 {
void mf(int) {}...
C++ - 자식 클래스에서 오버라이드한 멤버함수의 접근 지정이 부모 클래스의 멤버함수와 다른 경우 July 9, 2020
class Base
{
public :
virtual void f() { }
} ;
class Derived : public Base
{
private :
void f() { }
} ;
int main()
{
Derived d ;
d.f(); ...
C++ - 자주 사용하는 C++ 이디엄(idiom) CRTP May 27, 2020
CRTP는 Curiously Recurring Template Pattern의 약어로 자주 직역되고 있지만 기묘하게 재기한 템플릿 패턴이라고 부른다.
template<class Inher>
struct X{};
struct Derived:X<Derived>...
C++ - 자주 사용하는 C++ 이디엄(idiom) Coercion by Member Template June 1, 2020
클래스 B가 A에서 파생되어 B 타입 객체에 대한 포인터는 A 타입의 포인터에 대입할 수 있지만 이들 타입의 복합 타입은 바탕이 된 타입의 관계를 공유하지 않는다.
예를 들면 template_class는 template_class에 대입할 수는 없다.
class A{};
str...
C++ - 자주 사용하는 C++ 이디엄(idiom) Detection May 26, 2020
C++17에서 type_traits 헤더에 추가된 std::void_t를 이용한 idiom 이다.
std::void_t의 구현은 아래처럼 되어 있다.
template<class...>
using void_t=void;
뭘 넣어도 void를 반환하므로 넢고 싶은 것을...
C++ - 자주 사용하는 C++ 이디엄(idiom) Extension Member Function June 6, 2020
C#의 확장 메소드와 같이 기존 클래스에 대해서 멤버 함수의 확장을 operator 오버로드를 구사하여 시뮬레이트 하는 idiom 이다.
예컨대 std::vector에 print 라는 모든 요소를 출력하는 확장 구성원을 만들려고 한다면
const struct Listed_prin...
C++ - 자주 사용하는 C++ 이디엄(idiom) NVI와RAII May 22, 2020
3,4년 전쯤에 번역했던 것을 공유한다
C++ - 자주 사용하는 C++ 이디엄(idiom) No Copyable mix-in May 29, 2020
계승된 클래스는 복사 금지라고 명쾌하게 표현할 수 있는 idiom 이다.
class noCopyable{
noCopyable(const noCopyable&)=delete;
noCopyable& operator=(const noCopyable&...
C++ - 자주 사용하는 C++ 이디엄(idiom) cheked delete May 28, 2020
규격에 의해 delete식에 의해 불완전 타입을 delete에 넘기는 것이 허가되고 있다.
그러나 trival 생성자가 아닌지, 독자적인 delete 연산자를 정의하고 있는 경우 미 정의 동작이 된다.
미정의 동작은 좋지 않으므로 delete 대상 형식이 불완전 타입인 경우 컴파...
C++ - 자주 사용하는 C++ 이디엄(idiom) pimpl May 25, 2020
Pimpl(Pointer to IMPLementation)은 구현을 숨기거나, 헤더를 바꾸지 않는 것으로 컴파일을 속도를 고속화 할 때 사용한다.
C++20의 module에서는 필요 없어지겠지만 아직은 필요하다
hoge.h
class Hoge {
int foo_;
...
C++ - 전방 선언 February 20, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
C++ - 전치 증가와 후치 증가 February 26, 2021
C++ - 조건 변수와 춤을(Two-Step Dance) December 2, 2023
C++ - 주석을 지원하는 Json 파서 jsoncpp October 15, 2022
C++ - 차세대 파이썬 바인딩 라이브러리 nanobind August 31, 2022
C++ - 채팅 서버 개발로 알아보는 C++의 기술들 October 17, 2020
강연문서
유튜브
C++ - 최신 C++에서 이제 비추천 혹은 삭제된 것들 November 6, 2022
C++ - 추상 기저 클래스 July 12, 2020
아래 코드처럼 virtual 이 붙은 가상 기반 클래스는 “모호성” 을 피하기 위함이다.
class B : virtual public A{}
class C : virtual public A{}
class D : public B, public C{}
가상 기반 클래스가 아니라...
C++ - 커스텀 Allocator를 사용하는 basic_string을 unordered_map의 key로 사용하는 방법 January 29, 2020
아래의 코드는 컴파일 에러가 된다.
using MyString = std::basic_string<
char,
std::char_traits<char>,
...
C++ - 컴파일과 링크가 느린 경우 개선 방법 August 20, 2020
헤더 의존을 줄인다. 자주 변할 수 있는 코드는 헤더에 쓰지 않는다.
모듈화 하여 의존을 줄이거나 모듈을 dll화 하여 링크 시간을 단축하다(단 너무 나누는 것은 주의).
모듈별로 프로젝트를 분할하면 자연스럽게 의존이 없어지고 그 결과 프로그램 변경 시 빌드 시간 단축도 생긴...
C++ - 컴파일러 최적화 copy elision December 31, 2018
c++ 생성자와 move constructor 관련해서 궁금한 점이 있습니다.
라는 질문을 보고 알게된 것이다.
처음 질문을 봤을 때는 별거 아니라고 생각했는데 좀 더 보니 예전에 내가 C++11 표준 관련 강연을 했을 사용한 코드와 비슷한데 그때와 다른 결과가 나와서 구글링을 ...
C++ - 컴퓨터의 실제 IP 얻기 (code) June 4, 2019
#include <ws2tcpip.h>
bool ServerInfoMgr::GetLocalIP( string& strIP )
{
char host_name[256];
if (gethostname(host_name, 256) == SOCKET_ERR...
C++ - 콜백(Callback) 디자인 패턴 February 3, 2024
C++ - 클로져 디자인패턴 December 27, 2019
C++ - 템플릿 입문 June 20, 2020
4,5년 전쯤에 번역했던 것을 공유한다
C++ - 템플릿 프로그래밍 SFINAE을 이해하기 January 22, 2024
C++ - 특수한 반복자 May 9, 2020
C++ - 패키지 매니저 Conan July 21, 2021
C++ - 패키지 시스템 vcpkg May 1, 2023
작년에 정리한 것으로 최신 버전과 일부 다른 부분이 있을 수 있음.
C++ 패키지 시스템 vcpkg
크로스 플랫폼 지원 C++ 패키지 툴
버전 관리, 바이너리 캐싱, 매니페스트 및 레지스트리를 지원
공식 사이트
Browse packages
문서
한국어로 쓴...
C++ - 편리한 C++17 기능 소개 September 24, 2020
C++ - 포인터 변수에서 const 위치에 따른 차이 December 26, 2017
변수에 const를 사용하는 이유와 사용 방법은 아주 쉽다.
그런데 포인터 타입 변수에 const를 붙였을 때 포인터의 앞이나 뒤 어디에 붙여야 할지 헷갈릴 때가 있다.
포인터에 const를 붙이는 경우 아래에 따라서 차이가 발생한다.
*앞에 const를 붙인 경우는 포인터를 ...
C++ - 표준 attribute 정리 June 30, 2020
원문
attribute(속성) 라는 것은
attribute(속성)는 컴파일러에 추가 정보를 전달하는 구문으로 [[attributes]] 이라고 쓴다.
최적화나 경고 추가나 제어 등을 할 수 있다.
C++11
noreturn 속성
함수
함수가 결코 반환 하지 않는 것을 표시하...
C++ - 함수 반환 값의 생성자 호출과 RVO(Visual Studio 2019 Community 16.7.0 Preview 2.0) January 3, 2021
C++ - 함수 반환값 파기를 명시하는 방법 October 28, 2024
C++ - 함수 템플릿 포인터를 함수에서 파라미터로 받기 June 16, 2020
출처
함수 템플릿의 포인터를 함수에 넘기는 경우
template<typename T, typename Func>
T
calc(T a, T b, Func func){
return func(a, b);
}
template<typename T>
T
plu...
C++ - 함수 템플릿의 포인터를 함수로 받기 July 23, 2020
출처
C++11 이상 가능.
// 템플릿의 default 값에 함수 포인터 타입을 정의
template<typename T, typename Func = T(*)(T, T)>
constexpr T
calc(T a, T b, Func func){
return fu...
C++ - 함수 핸들러(Funtion Dispatcher) (Code) June 4, 2019
온라인 서버 제작자 모임의 핵랑님이 만든 것
비공개 카페라서 링크를 눌러도 멤버가 아니라면 접속할 수 없습니다.
#pragma warning(disable:4819)
#include <boost/bind.hpp>
#include <boost/function...
C++ - 함수의 디폴트 인자 값을 동적으로 바꾸기 July 7, 2020
일반적인 함수의 기본 인자 값
void TEST_1(int nValue = 5 )
{
std::cout << __FUNCTION__ << ". " << nValue << std::endl;
}
위의 디폴트 값은 고정인데 아래처럼...
C++ - 헤더 파일로 만드는 actor 모델 라이브러리 May 7, 2019
원문
C++의 표준 라이브러리로만 구현(thread, chrono, mutex, atomic, queue)
성능보다 구성 요소의 작음을 우선
소스
actor 모델?
actor 모델은 병렬 계산의 수학적 모델의 일종이다.
병렬 처리 지향이라는 Erlang과 함수형...
C++ 컴파일 시 조건에 의해 변수 선언 타입을 변경하기 January 30, 2020
컴파일 시에 정해진 조건 C의 bool 값에 의해 타입 A 혹은 B를 선택하고 이 타입의 변수를 선언하고 싶은 경우 의사 코드는 아래와 같다.
if (C)
{
A x;
}
else
{
B x;
}
이것을 구현하기 위해 std::conditional을 사용하여
type...
C++- Poco 1.8 Net 라이브러리 빌드 하기 November 15, 2017
본인이 집필한 poco 네트워크 프로그래밍 책의 예제가 poco 1.8 에서는 빌드 에러가 난다.
이유는 스태틱 라이브러리 사용, win32 lib 미 추가 문제이다.
아래 그림처러 하면 문제 없이 빌드가 된다.
C++- Poco 라이브러리 Visual Studio 2017 에서 빌드 하기 November 15, 2017
poco 라이브러리를 Visual Studio 2017 에서 빌드하려면 아직 쉽게 되지 않는다.
아래처럼 Visual Studio 2017 설치 메뉴에 있는 콘솔 프로그램을 실행해서 빌드 파일을 실행해야 한다.
buildwin.cmd 150 rebuild static_md...
C++- Poco 라이브러리를 VC++에서 static 라이브러리로 사용할 때 September 6, 2017
Poco 라이브러리를 VC++ 에서 static 라이브러리로 사용할 때 lib 파일을 찾을 수 없다는 링크 에러를 만나는 경우는 아래의 선언을 추가하면 된다.
#define POCO_STATIC
Poco 라이브러리는 default로는 동적라이브러리를 사용하는 것으로 설정 ...
C++11 - C++11용 gcc 옵션 October 2, 2020
C++11 - C11 / C++11 / POSIX 스레드 API 비교 September 14, 2020
C++11 - _Pragma 전처리 연산자 December 22, 2016
개요
C99 에서 도입된 전처리 연산자 이다.
_Pragma 연산자는 매크로에서 처리 계 정의 기능을 사용하기위한 기능이다.
처리 계 정의 기능을 사용하기 위해 기존에는 #pragma 지시자를 사용하여 왔지만 이 기능은 매크로 내에서는 사용할 수 없다.
#pragma 지시자를 매...
C++11 - alignas April 1, 2017
개요
alignas()은 컴파일러에 대한 변수를 메모리 상의 특정 위치에 배치(배열) 하도록 요구하는 키워드이다.
예를 들면 4바이트 경계 위치에 배치할 경우 변수는 4의 배수 주소로 배치되고, 8바이트 경계 위치에 배치할 경우 변수는 8의 배수 주소로 배치된다.
문법
alig...
C++11 - alignof April 1, 2017
개요
alignof()는 지정한 타입이 메모리의 어느 위치에 배치될지를(배치) 얻는 연산자이다.
sizeof()와는 다르고 alignof()는 변수에는 사용할 수 없다.
예를 들면 타입 int가 4바이트 경계 위치로 배치되는 시스템이라면 alignof(int)은 4를 반환한다.
...
C++11 - boost::shared_ptr 에서 std::shared_ptr로 변환 하는 가장 간단한 방법 March 8, 2017
#include <iostream>
// std::shared_ptr
#include <memory>
// boost::shared_ptr
#include <boost/shared_ptr.hpp>
auto main() -> int
{
...
C++11 - long long 타입 December 26, 2016
개요
C99 호환을 위해 long long 정수 타입이 추가 되었다.
long long 과 unsigned long long 타입은 64비트 이상의 값을 표현할 수 있는 것을 보증한다.
long long 타입의 최대 값 매크로는 LLONG_MAX 이다.
long long을 뜻하는...
C++11 - map에 삽입 insert, emplace May 19, 2020
아래 방식은 unordered_map에도 적용된다.
map::insert
insert를 사용하면 key와 value의 pair를 삽입할 수 있다.
map<int,int> dic{};
dic.insert(std::make_pair(1,3));
map::emplace...
C++11 - noexcept February 27, 2017
noexcept 키워드 목적.
1) throw 키워드에 의한 예외 사양 대체. 함수가 어떤 예외를 던질 가능성이 있는지를 열거하는 것이 아니라 예외를 던질 가능성이 있는지 없는지만 지정한다. 예외를 던질 가능성이 있는 함수에는 noexcept(false)을 지정하고, 예외를 던질...
C++11 - std::atomic::compare_exchange_strong March 11, 2020
출처
bool compare_exchange_strong(T& expected,
T desired,
memory_order success,
...
C++11 - std::error_code, std::error_category, std::error_condition의 차이 December 28, 2020
C++11 - std::exception_ptr 사용하기 October 22, 2019
출처
Windows의 윈도우 관련 프로그래밍을 할 때 반드시 나오는 윈도우 프로시저이지만, 윈도우 프로시저 외부에 그대로 예외를 던지려하면 무시되거나 프로세스를 강제 종료하는 것이 MSDN의 WindowProc callback function의 Remarks에 적혀 있다.
Win...
C++11 - std::get_time February 6, 2017
개요
» get_time(tmb, fmt) 식을 사용하여 현재 입력 스트림에서 전달 받은 로컬 시간 값을 변환 형식 문자열에 맞추어 tm 오브젝트로 변환한다.
문법
template< class CharT >
/*unspecified*/ get_time( s...
C++11 - std::put_time February 3, 2017
개요
날짜 서식을 출력한다.
문법
template <class CharT>
unspecified put_time(const struct tm* tmb, const CharT* fmt);
tmb 은 유효한 tm 타입 오브젝트를 가리키는 포인터
fm...
C++11 - type_info와 type_index March 23, 2017
C++에서는 RTTI(Run Time Type Infomation/Identification)라고 불리는 기능이 있다.
( 타 언어의 리플렉션과 좀 비슷한데 기능은 훨씬 떨어짐 ^^;)
std::type_info는 타입 정보를 표현하는 클래스이다. type_info 객체는 type...
C++11 - 고정형 정수 타입 March 17, 2019
C++11에서 고정형 길이의 정수 타입이 새로 생겼음.
고정형 길이라는 것은 int8_t, int16_t 등 타입에 숫자가 붙는 것을 말함.
플랫폼에 상관 없이 크기가 고정 되어 있어서 크로스 플랫폼 개발에 사용하면 좋음.
헤더 파일
#include <cstdint>...
C++11 - 문자열 리터럴과 wide 문자열 리터럴 결합 January 23, 2017
C99 호환을 위해서 만들어진 기능으로 문자열 리터럴과 wide 문자열 리터럴을 결합하면 wide 문자열로 결합한다.
문자열 리터럴인란 멀티바이트 문자열을 뜻하고, wide 문자열 리터럴은 유니코드 문자열을 뜻한다.
C++11 이전에는 문자열 리터럴과 wide 문자열 리터럴 결합에...
C++11 - 블럭 범위를 가진 static 변수 초기화는 스레드 세이프 하다 February 14, 2017
개요
static 변수의 초기화가 완료할 때까지 다른 스레드는 초기화 처리 앞에서 대기한다.
class singleton {
public:
static singleton& get_instance()
{
static singleton instance; // ...
C++11 - 생성자 상속(inheriting constructors) January 9, 2017
개요
부모 클래스에서 정의한 생성자들을 자식 클래스에서 그대로 사용할 수 있는 편의 기능이다.
문법
자식 클래스에서 using 키워드를 사용하여 부모 클래스 이름과 부모 클래스의 생성자 이름을 :: 구분으로 호출한다.
자식 클래스는 복수의 부모 클래스를 상속한 경우에도...
C++11 - 예외 지정 March 2, 2017
C ++에서는 함수에 예외 지정이라는 것을 작성할 수 있다.
이것은 C++98에서 부터 있는 기능으로 throw (T1, T2, …)라는 문법으로 함수가 밖으로 던지는 예외를 지정하는 기능이다.
// C++98/03
void f() throw( int, double );
만...
C++11 - 우측값 참조. 함수의 가인수는 좌측값 참조이다 July 7, 2017
#include<iostream>
using namespace std;
void foo2( string& s) {
cout << "lvalue" << endl;
};
void foo2( string&& s) {
co...
C++11 - 인라인 이름 공간(inline namespace) January 2, 2017
개요
이름 공간 내에 있는 기능을 투과해서 접근할 수 있는 기능이다.
즉 이름 공간(my_namespace) 안에 또 다른 이름 공간(features)을 inline로 선언하고 있으면 features에 정의된 기능을 my_namespace를 통해서 접근 할 수 있다.
#incl...
C++11 - 최근접 짝수 반올림 std::nearbyint January 12, 2017
개요
실수를 정수로 변환할 때 ceil()로 소수점 올림하거나, floor()로 소수점 버림을 한다.
nearbyint는 정수로 변환할 실수의 가장 가까운 짝수로 올림 혹은 버림을 한다.
이러한 방식을 “bankers’rounding” 이라고 부른다
문법
cmath ...
C++11 - 컨테이너에 참조 보관하기 April 17, 2020
std::reference_wrapper를 사용하면 컨테이너에 오브젝트의 참조를 보관할 수 있다.
std::reference_wrapper는 <functional> 헤더를 사용한다.
#include <iostream>
#include <string>...
C++14 - recursive_(timed_)mutex의 재귀 lock 상한 수 April 7, 2017
C++11 표준 라이브러리의 recursive_mutex, recursive_timed_mutex 클래스는 동일 스레드에서의 재귀 lock 획득 횟수의 상한은 미정의로(unspecified) 되어 있다.
단 상한 회수를 넘는 try_lock 조작은 실패하고, lock 조작은 예외를...
C++14 - shared_(timed_)mutex가 지원하는 Reader 스레드 수 April 10, 2017
C++14 표준 라이브러리의 shared_timed_mutex 클래스는 적어도 10000 스레드 이상의 Reader 스레드에서의 공유 lock(shared lock) 동시 획득을 지원한다.
또 동시 획득 가능한 공유 lock 수 상한을 넘은 경우도 공유 lock을 획득 할 수 있을...
C++14 - 람다식의 인수에 가변 길이 인수 사용하는 예제 November 6, 2019
출처
#include <iostream>
using namespace std;
void print (){
cout << endl;
}
template <typename T,typename ...Types>
...
C++17 - Boyer-Moore, Boyer-Moore-Horspool 검색 알고리즘 추가 November 22, 2019
헤더 파일은
#include <functional>
Boyer-Moore
최악의 케이스가 o(n). n은 검색 대상 범위의 길이
전처리 시에 테이블을 2개 만들므로 전처리 시간이 걸리고, 메모리를 더 먹는다.
검색 패턴이나 검색 대상 범위가 긴 경우, 혹...
C++17 - RVO(Return Value Optimization) 지원 November 26, 2019
컴파일러 최적화 기능으로 RVO(Return Value Optimization) 나 NRVO(Named Return Value Optimization)를 지원하고 있었다.
그러나 이 최적화 기능은 각 컴파일러에서 제공하는 것이지 C++ 표준으로 정해진 것이 아니다.
즉 어떤 컴파일...
C++17 - __has_include October 26, 2019
포함(include)하는 파일이 존재하는지 확인하는 프리프로세서 기능이다.
아래는 optional 파일이 존재하는지 확인한다.
#if __has_include(<optional>)
#include <optional>
#endif
혹은
#if __h...
C++17 - atomic::is_always_lock_free March 26, 2020
</a></h3>
C++ 17은 atomic 클래스 템플릿에 is_always_lock_free라는 정적 멤버 상수가 정의 되어 있는데 C++11의 is_lock_free()의 static 멤버 버전이라고 생각하면 좋다.
is_lock_free()를 사용하기 위해서는 atomic 클래스 오브젝트를...
C++17 - false sharing와 true sharing 제어 June 24, 2020
출처
병행 프로그래밍으로 문제가 될 수 있는 캐시 무효화 문제를 제어 할 수 있다.
false sharing 제어
struct keep_apart {
atomic<int> cat;
atomic<int> dog;
};
이런 구조가 있으면 c...
C++17 - hardware_destructive_interference_size, hardware_constructive_interference_size November 15, 2019
출처
C++ 17 표준 라이브러리 헤더에 추가 되었다
hardware_destructive_interference_size
False-Sharing 발생을 방지하기 위해 필요한 최소 메모리 주소 거리. 2개의 변수를 서로 다른 캐시 라인에 싣기 위해 얼라이먼트 정보로 사용한다...
C++17 - map과 unordered_map의 try_emplace()와 insert_or_assign() June 19, 2020
try_emplace() 멤버 함수: 삽입 실패 시에 주어진 파라미터 args…를 변경하지 않는다.
insert_or_assign() 멤버 함수: 삽입에 실패하면 덮어 쓴다.
std::map<std::string, std::unique_ptr<Foo>> m;...
C++17 - null pointer를 delete 해도 문제 없음 November 25, 2019
C++14까지는 메모리 할당을 받은 객체인지 확인 후 delete를 하였다.
if(pUser) {
delete pUser;
}
C++17 에서는 null pointer를 delete 해도 문제 없다(아래 설명에서는 C++14도 괜찮은 듯…).
delete pUser;
...
C++17 - shared_mutex November 20, 2019
출처
mutex로 보호 된 데이터를 다수의 스레드가 액세스 할 때 성능이 저하된다.
이 데이터 변경을 하지 않는 스레드가 다수인 경우 성능 저하를 줄일 수 있다.
데이터의 변경을 하지 않는 읽기(reader) 스레드와 데이터의 변경을 하는 쓰기(writer) 스레드가 각각 복수...
C++17 - shared_ptr 배열에 대응 May 13, 2020
C++17에서는 아래처럼 사용할 수 있다.
std::shared_ptr<double[1024]> p1 {new double[1024]};
std::shared_ptr<double[]> p2 {new double[n]};
double* p = p1[0];
C++17 - shared_ptr의 참조 카운트와 data reace December 10, 2019
C++17 표준 라이브러리에서는 스마트 포인터인 std::shared_ptr의 unique 멤버 함수는 비추천이 되었다.
상위 호환이 되는 use_count 멤버 함수는 잔존하지만 스레드 간 동기에는 관여하지 않는다는 요건이 명확화 되어서 멀티스레드 실행에서는 반환 값은 근사(ap...
C++17 - static_assert의 에러 메시지 생략 가능 October 24, 2019
static_assert는 C++11에서 생긴 기능으로 컴파일 타임에 식의 true, false 여부를 조사해서 false인 경우 지정한 에러 메시지를 출력한다.
static_assert(a == b, "a와b는 같아야 한다");
C++17에서는 static_assert 에 에...
C++17 - std::byte January 19, 2021
C++17 - string_view의 주의점 November 24, 2019
출처
string_view 클라스 == 문자열에 대한 읽기 전용 뷰.
std::string와 같이 null 종단 문자열 이외도 올바르게 다룰 수 있다. null 종단 문자를 도중에 포함 할 수 있다.
string_view 클래스는 참조처...
C++17 - 람다식에서 *this의 복사 캡쳐 November 14, 2019
C++11에서 람다식의 캡쳐 리스트에 this를 지정하면 이 람다식이 속하는 클래스 오브젝트가 참조로 캡쳐된다.
비동기 처리나 병렬 처리에서 오브젝트 수명 관리를 간단하게 하기 위해 this를 참조가 아닌 복사로 캡쳐해야 하는 경우가 있다.
이 때 C++17에서 새로 생긴 *th...
C++17 - 랜덤 샘플링 알고리즘 June 23, 2020
std::sample()이 <algorithm>에 추가 되었다.
#include <iostream>
#include <string>
#include <iterator>
#include <random>
#include <a...
C++17 - 복수의 using 선언 시 컴마 구분 사용 November 18, 2019
간결한 코딩을 위해 네임 스페이스를 생략하고 싶다면 using 선언을 사용한다
std::cout << "hello";
using std::cout;
cout << "hello";
그러나 아래와 같은 경우는
using std::cout;
using std...
C++17 - 숫자to문자열, 문자열to숫자 변환 표준 라이브러리 November 21, 2019
C++17에서 숫자를 문자열로 변환, 문자열을 숫자로 변환 해주는 라이브러리가 새로 생김
출처
특징
서식 지정은 문자열이 아니다
동적 메모리 할당을 하지 않는다
로케일 무시
가상 함수 호출이 아니다
버퍼 오버런 방지
반환 값에서 에러를 반환한다
입력 문...
C++17 - 숫자를 문자열로 변환하는 to_chars(), 문자열에서 숫자로 변환는 from_chars() May 14, 2020
로케일은 C 로케일(POSIX 로케일) 고정
함수 내에서 동적 메모리 할당이 없다. 즉 호출 측에서 만들어줘야 한다
포맷은 파라메터로 주고, 자동적으로 포맷을 해석할 수 없다
사용할 수 있는 포맷은 최소한
부호...
C++17 - 시간 반올림 연산 May 21, 2020
밀리 세컨드를 세컨드 단위로 변경할 때 딱 맞아 떨어지지 않는 경우 반올림 혹은 내림을 할 수 있는 floor(내림), ceil(올림), round(가장 근접한 수로)가 생겼다.
#include <iostream>
#include <chrono>
using...
C++17 - 연관 컨테이너의 extract, merge, insert May 20, 2020
2개의 연관 컨테이너를 접합(splice)하는 기능이 생겼다.
map, set, unordered_map, unordered_set와 이 들의 multi 버전 모두도 포함된다.
특정 요소 추출
extract() 멤버 함수를 사용하면 컨테이너의 특정 요소를 추출 할 수 있다.
n...
C++17 - 중첩된 namespace 선언 November 16, 2019
C++14 까지
namespace A
{
namespace B
{
class AA {};
}
}
C++17 부터는
namespace A::B
{
class AA {};
}
C++17 - 튜플을 유저 정의 타입으로 변환하는 make_from_tuple 함수 May 15, 2020
예제 코드
#include <iostream>
#include <string>
#include <tuple>
struct Person {
int id;
double bodyHeight;
std::string name;
...
C++20 - Feature List 동결 - 모듈, 코루틴, Concepts 채용, Contracts은 연기 September 22, 2019
출처
ISO C++ 위원회는 2020년 2월까지 공개 예정인 C++20 이라고 불리는 차기 C ++ 표준 기능 목록을 종료했다. C++20은 C++의 중요한 개정판으로 모듈, 코루틴, Concepts을 새로운 주요 기능으로 제공한다.
최근 쾰른에서 열린 회의에서 ISO C++ ...
C++20 - Using enum January 21, 2021
using enum은 C++20의 새로운 기능.
scoped enum을 namespace의 using directive를 사용할 수 있다.
C++17까지는 enum을 아래처럼 사용한다.
enum struct color { red, green, blue } ;
void f( co...
C++20 - std::ssize January 22, 2021
CMake에서 GoogleTest 사용하기 February 23, 2019
출처
구성은 아래와 같이 되어 있다고 한다.
src 폴더 아래가 테스트 대상 코드, test 폴더 아래는 테스트 코드
클래스 단위로 파일이 나누어져 있다고 가정한다.
mk.sh을 실행하면 build/src/ 에 응용 프로그램의 실행 파일...
CPU 캐시 잘 활용하는 방법 - 프로그램 코드가 작게하기 November 8, 2020
Poco 라이브러리 설치하기 July 10, 2019
Linux
공식 사이트에서 최신 버전을 다운로드 한다.
압축을 풀고, 빌드한다.
아래는 64비트, static 라이브러리, 테스트와 샘플은 제외 하는 설정으로 빌드 한다
$ tar zxvf poco-1.7.8p2-all.tar.gz
$ cd poco-1.7.8p2-...
Trip report Fall ISO C++ standards meeting(Albuquerque) Sutter’s Mill December 1, 2017
Trip report: Fall ISO C++ standards meeting (Albuquerque) | Sutter’s Mill
을 번역한 일본 문서를 일부 번역한 것이다.
range-based for 에 초기화자를 쓸 수 있도록 되었다.
for( auto res...
Ubuntu에 gcc 8, clang 6 설치하기 June 20, 2019
gcc 8 (Ubuntu 17.04)
PPA로 최신 버전 설치
sudo add-apt-repository ppa:jonathonf/gcc-8.0
sudo apt update
sudo apt install gcc-8 g++-8
LLVM 설치
Ubuntu 18.04
apt-get ...
Vcpkg Product Roadmap - 2020.04 May 2, 2020
Vcpkg 2020.04 Update and Product Roadmap 글에서 roadmap 관련된 부분만을 일부 번역하였다.
새로운 라이브러리의 지원을 계속하고, Linux와 macOS에서의 지원을 개선한다.
사용자들의 피드백이나 제안을 기초로 제품에 새로운 기능을 추가한다...
Win32API - CRITICAL_SECTION의 OwningThread June 5, 2017
Windows Vista부터 CRITICAL_SECTION의 내부 구조가 바뀌었다고 한다.
이 중 눈여겨 볼 것은 CRITICAL_SECTION의 멤버 변수 중 OwningThread 인데 이 변수에는 CRITICAL_SECTION을 소유중인 스레드의 ThreadID가 설정된다....
YOUTUBE - C++ OpenSiv3D로 즐거운 그래픽스 프로그래밍 November 25, 2020
YOUTUBE - C++ Redis 프로그래밍 November 24, 2020
YOUTUBE - IOCP 네트워크 프로그래밍 학습을 위한 단계별 실습 November 21, 2020
YOUTUBE - IOCP 샘플 코드 설명 November 26, 2020
cmake에서 CMAKE_C_FLAGS에 설정한 값이 무시될 때 February 20, 2019
출처
CMakeLists.txt 안에서 컴파일 옵션을 지정하려고 했는데 설정이 무시되는 문제를 만났다.
컴파일 옵션 지정과 add_subdirectory 명령어 기술 순서가 문제였다.
문제
CMakeLists.txt
cmake_minimum_required(VERSION 3.1...
epoll을 사용한 echo 서버 June 6, 2019
출처
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/socket....
google benchmark로 C++ 코드 성능 측정하기 December 22, 2018
posix aio의 네트워크 소켓을 지원에 대해서 July 31, 2019
posix의 비동기 IO의 API인 aio는 파일 조작만 지원하는 걸로 알고 있었는데 소켓 조작에도 사용할 수 있다고 한다.
https://koyo.kr/post/posix-aio-socket-server-example/
그런데 리눅스쪽 서버 개발 관련해서 자료를 찾을 때 소켓 ...
premake April 29, 2019
CMake와 같은 멀티 플랫폼 오픈소스 개발에 유용한 툴.
lua를 통해 스크립트를 작성한다. 루아 파일 이름과 같은 이름의 솔루션 파일을 만들어준다.
현재 premake4와 premake5 두 가지 버전이 있다.
Visual Studio 2013 ...
std::codecvt_utf8로 wstring을 utf-8 문자열로 변환 하기 April 4, 2017
std::wstring을 utf-8 문자열로 변환 하는 방법은 아래와 같다.
std::wstring wStr = L"우하하";
std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> utf8Conv;
auto ...
tm 에서 time_t로 UTC로 변환 하는 함수 March 10, 2017
헤더 파일 time.h 혹은 헤더 파일 ctime 에서 time_t와 tm 구조체와의 변환을 하는 함수를 정리했다.
time_t→ tm 구조체
tm 구조체 → time_t
현지 시각
...
unorder_set 에서 구조체(혹은 클래스)를 Key로 하고 싶을 때 March 9, 2019
출처
== 오퍼레이터를 오버라이드 한다.
hash 함수를 구현한다.
// key로 사용할 구조체
struct Point {
int x, y;
Point(int x, int y) : x(x), y(y) { }
// override == ope...
멤버 변수에 대한 포인터를 이용하여 타입의 특성을 판정 April 21, 2017
멤버 변수에 대한 포인터라는 것은
우선, 예로서 단순히 정수를 래핑 한 클래스를 보자
class int_wrapper {
public:
int data;
int_wrapper(int data) : data(data) {}
};
위 코드에서 int_wrapper::dat...
번역 - RAII 해설 January 31, 2020
번역 - 게임개발과 mvc January 12, 2020
번역 - 게임개발과 디자인패턴 January 14, 2020
번역 - 덤프를 이용한 hang 상태의 애플리케이션 조사 방법 - 크리티컬섹션 August 18, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
실전 Modern C++ - module 1 May 11, 2023
실전 Modern C++ - module 2 May 14, 2023
클래스 멤버 함수 포인터 배열 사용하기 December 16, 2016
함수 포인터 관련 검색을 하면 C 버전이 많이 나오고, 배열 타입을 사용하는 경우는 별로 없어서 공유한다.
(사실 최신 C++에서는 std::function을 사용하면 되기 때문에 이걸 사용하지 않아도 된다)
선언
bool(TEST::*m_pFunc[4])(const int, ...
표준 C++ 규격이 3년 간격으로 제정 되는 이유 July 17, 2019
Draft FAQ: Why does the C++ standard ship every three years? – Sutter’s Mill
현재 C++ 표준은 3년 단위로 제정 되고 있는데 왜 3년 주기인지 C++ 표준 위원회 의장인 Herb Sutter씨의 설명.
C++ 표준...
CLion (25)
CLion - CLion에서 Boost 라이브러리 사용 하기 December 3, 2021
CLion - CMake Install과 비 CMake 프로젝트 December 1, 2021
CLion - CMake 옵션에서 컴파일러 지정하기 November 4, 2021
CLion - CPU 프로파일러 November 13, 2021
CLion - Clang-Tidy로 유연성과 컨트롤 향상 November 12, 2021
CLion - ClangFormat November 22, 2021
CLion - Clangd 기반 언어 엔진과의 통합 강화 November 28, 2021
CLion - Clangd 기반 탐색 및 검색 November 16, 2021
CLion - Google Sanitizers 지원 November 15, 2021
CLion - Naming Convention November 20, 2021
CLion - Run Anything, Search Everywhere November 2, 2021
CLion - Windows에서 CLion 사용하기 October 31, 2021
CLion - googletest 설정 November 18, 2021
CLion - 디스 어셈블리 뷰 November 8, 2021
CLion - 메모리 보기 November 6, 2021
CLion - 사용자 지정 빌드 대상으로 실행 / 디버그 구성 November 25, 2021
CLion - 새로운 빌드와 리빌드 작업 November 2, 2021
CLion - 여러 줄의 TODO 주석 November 2, 2021
CLion - 원격 개발 지원 December 4, 2021
CLion - 코드 정리 정돈하기(파일 리포맷) November 2, 2021
CLion - 파일 단위로 실행 November 2, 2021
GoLand - 에디터의 (파일)탭을 숨기지 않고 모두 표시하기 November 10, 2021
GoLand - 정형화 시키지 않을 파일 지정 November 8, 2021
JetBrains - Docker 상에서 jetbrains 제품을 실행하는 방법 December 7, 2021
JetBrains - Projector로 JetBrains IDE를 원격으로 사용하기 December 6, 2021
Cloud (15)
AWS - P2P에서 클라우드로의 전환. For Honor와 Friday the 13th The Game이 어떻게 플레이어 경험을 향상 시켰는가 May 13, 2018
원문
게임 개발자로서 출시에 이르기까지 열정을 잃지 않고 게임 개발과 팬 커뮤니티의 육성에 수 년의 세월 투자 되어 왔다고 생각한다.
최고의 사용자 경험을 제공 할 수 있는 것에 대해서는 예를 들어 네트워크 연결시 플레이어의 대기 시간에 대한 백엔드의 선택 등 백엔드 인프라는 가...
AWS re:Invent 2021 - How Epic Games develops Fortnite faster with a build farm on AWS January 18, 2022
AWS 오픈 소스 컨테이너 개발 툴 「Finch」의 Windows판 릴리스. 컨테이너 빌드 및 실행 환경 세트 April 9, 2024
Cloud Logging 구조화 로그의 특수한 JSON 필드 정리 November 17, 2023
Google Cloud Platform의 15개 서비스를 영구 무료 한도를 제공 March 17, 2017
구글은 2017년 3월 10일 Google Cloud Next 17의 3일째 기조 강연에서 15개 서비스의 영구 무료 쿼터를 발표.
영구 무료 한도 대상 서비스 이름과 월 제한은 다음과 같다(제품에 따라서는 아래 외에도 제한이 있다).
Google Cloud Engine(...
Google Cloud 네트워크 관련 특징 October 24, 2022
Stackdriver Monitoring(Cloud Monitoring) 입문 February 20, 2022
구글 클라우드 로깅에 대해서 November 16, 2023
번역 - AWS re Invent 2019 1000 만명 사용자를 향해 확장해 나가기 August 22, 2020
번역 - AWS re Invent 2019 CAPCOM이 컨테이너 ,데이터, ML을 사용하여 유저에게 즐거움을 주는 게임을 빠르게 구축하는 방법 August 16, 2020
번역 - AWS re Invent 2019 How Rovio teaches Angry Birds to fly in the cloud using ML August 17, 2020
번역 - AWS에서 온라인 게임 출시 August 23, 2020
번역 - 서버리스 온라인 게임과 실시간 리더 보드 구축 August 27, 2020
번역 - 온라인 게임 개발에서의 클라우드 디자인 패턴 August 26, 2020
번역 - 최강의 ECS & Fargate build 환경 on AWS August 25, 2020
Coding (1)
NASA의 10가지 코딩 룰의 힘 November 4, 2020
DB (55)
DB 샤딩 알고리즘 November 29, 2023
DBA가 (서버)개발자에게 가장 많이 받은 질문들 February 1, 2022
<a href="https://jacking75.github.io/db-0820/" title="Discord가 데이터베이스를 "Apache Cassandra"에서 "ScyllaDB"로 마이그레이션 한 이유">Discord가 데이터베이스를 "Apache Cassandra"에서 "ScyllaDB"로 마이그레이션 한 이유
August 20, 2023
</a>
MongoDB - C# find April 26, 2019
모든 도큐먼트 가져오기
클래스 맵핑
var collection = GetDBCollection<DBBasic>("Basic");
var documents = await collection.Find(_ => true).ToListAsync();
return ...
MongoDB - C# insert, update, delete April 25, 2019
기본 추가
클래스 맵핑으로 새 도큐먼트 추가
var newData = new DBBasic()
{
_id = "test01",
Level = 1,
Exp = 0,
Money = 1000,
Costume = new List<int&g...
MongoDB - C# 프로그래밍 April 24, 2019
MongoDB 공식 C# Driver
1.x와 2.x 라이브러리가 많이 다름.
2.0 드라이버 소개
레퍼런스
온라인 도움 문서
Indexes.CreateOneAsync sample
Find & FindAsync sample
아래 예제 코드에서 사용...
MongoDB - wiredTiger April 23, 2019
wiredTiger 사용 conf 파일 예
// mongodb_wt.conf
storage:
dbPath: "/data/mongod_wt"
engine: "wiredTiger"
directoryPerDB: true
wiredTiger:
...
MongoDB - 데이터 추출 툴 mongoexport 와 mongodump 간단 비교 September 11, 2017
MongoDB의 데이터를 출력하는 툴로 mongoexport 와 mongodump가 있다.
둘 다 mongodb-tools 패키지에 포함되는 도구이다.
mongoexport는 CSV 또는 JSON 텍스트 데이터, mongodump는 BSON 형식의 이진 데이터로 출력한다.
사용...
MongoDB 3.0.6 Windows에서 설치 및 실행 April 22, 2019
이 글은 이것을 정리한 것이다.
MongoDB 3.0.6 Windows에서 설치 및 실행
MongoDB 공식 다운로드 에서 ‘Windows 64-bit 2008 R2+’를 선택해서 다운로드 한다.
기본 설치 위치는 C:\Program Files\Mongo...
MySQL - 100M으로 스케일링 하기. Key-Value 저장소로 MySQL을 사용하여 NoSQL 이상의 퍼포먼스를 내자 December 24, 2019
MySQL - Waiting for table metadata lock 대처 방법 January 26, 2022
MySQL 8.0.16의 CHECK 제약 February 19, 2020
참고
CHECK 제약 조건을 지정하여 테이블을 만든다. (※ t1.a에 “0 < a AND a <= 3” 이라는 CHEKC 제약을 지정한다)
mysql> SELECT version();
+-----------+
| version() |
+-----------+
...
MySQL 8.0.22에서 innodb_log_writer_threads의 효과를 알아보자 March 17, 2022
MySQL 8.0에서 JSON 타입의 partial update 및 이에 대한 InnoDB의 최적화 January 2, 2022
MySQL 8.0에서의 Json 사용하기 December 30, 2021
MySQL 8.0의 lock read의 NOWAIT와 SKIP LOCKED 옵션에 대해서 February 7, 2022
MySQL 메타데이터 Lock에 대해서 February 18, 2023
MySQL 온라인 DDL에서 Deadlock 오류가 발생하는 경우 May 24, 2023
MySQL 트랜잭션 격리 수준과 발생하는 법칙을 정리 February 2, 2023
MySQL에 IP 주소를 저장하기 May 9, 2023
MySQL에서 JSON 다루기 December 30, 2021
MySQL에서 문자열의 유니크 제약 조건을 걸 때 조심할 것 February 12, 2023
MySQL에서 발생할 수 있는 뜻밖의 데드락과 대응 방법 January 29, 2023
MySQL의 3가지 lock - Record lock, Gap lock, Next-key lock September 8, 2017
Record lock(레코드 락): 단일 인덱스 레코드의 락.
Gap lock(갭 락): 인덱스 레코드 사이의 갭의 락, 선두 인덱스 레코드의 앞이나 말미 인덱스 레코드의 뒤의 갭의 락
Next-key lock(넥스트 키 락):레코드 락과 이 레코드 직전의 갭 락의 조...
MySQL의 ALTER TABLE 문 실행 시 주의 사항 December 20, 2023
MySQL의 Index를 붙이는 요령 January 4, 2022
MySQL의 Too many connections 에러 대처법 December 22, 2021
MySQL의 갭락과 넥스트 키 락에 대해서 February 14, 2022
MySQL의 다양한 타임 아웃 옵션 정보 June 6, 2023
MySQL의 다양한 타임아웃 옵션 January 6, 2022
MySQL의 저장 프로 시저, 함수 및 트리거의 성능이 나쁜 이유 January 20, 2022
MySQL의 정렬 처리에 대해 January 29, 2022
Redis 4.0의 핵심 기능 May 1, 2019
(몇년 전의 글을 블로그에 올린 것임)
참고
redis 4.0은 지금까지와는 비교하면 아마 가장 극단적인 버전 업 중 하나이다.
향후 사용자에 의해 발견된 중대한 문제는 수주일에서 수개월로 패치 발표할 테니 신중하게 이용하자.
a modules system
redis는 이미 해...
Redis 서비스 전에 조사할 것들 May 6, 2019
Redis 서버의 흔한 실수 법
Redis 서버가 떨어지거나 APP서버가 떨어질지는 상황에 따른다.
KEYS 명령과 ZRANGE 명령으로 수만건 이상에 접근하여 I/O대기로 죽는다
데이터 설계를 실패하여 메모리 부족으로 쓸 수 없게 되어 죽는다
Redis 서버에서 장애...
Redis, Lua Script vs Transaction January 30, 2022
Redis로 방문자수 구현하기 June 29, 2023
Redis를 사용하여 동일 유저의 요청은 순차적으로 처리되도록 하기 July 16, 2022
Redis를 사용한 분산 잠금 (SETNX, Redlock) January 27, 2023
SQL 약간의 퍼포먼스 튜닝 정리 December 15, 2023
SQLFluff를 사용하여 SQL을 린트(Lint) 하기 March 12, 2022
<a href="https://jacking75.github.io/db-20220225/" title="SQL용 포맷터(코드 정리) "SQLFluff"">SQL용 포맷터(코드 정리) "SQLFluff"
February 25, 2022
</a>
SQL을 다루는 사람 모두가 이해해야 할 SELECT 문의 논리적 처리 순서 March 19, 2022
UPDATE IN SELECT로 인한 교착 상태가 더 이상 발생하지 않게된 이야기 January 6, 2024
Wireshark를 이용한 MySQL 문제 해결 January 7, 2022
dbdiagram.io를 사용하여 코드 기반에서 쉽게 ER 다이어그램을 만들자 February 21, 2022
docker로 mysql을 사용하기 February 16, 2022
innodb_dedicated_server에 의한 buffer_pool 할당 February 11, 2022
게임 서비스 시 MySQL에서 검토해야할 파라메터 December 19, 2021
데이터베이스 락(Lock) 기초부터 교착 상태(데드락)까지 January 8, 2024
데이터베이스를 느리게 하는 8가지 방법 February 17, 2022
로컬 환경에서 docker mysql에 연결 May 16, 2023
번역 - 월간 10억 PV를 지지하기 위한 MongoDB Tip January 10, 2020
수신 기한이 지난 데이터를 MySQL에서 삭제할 때의 이야기 January 20, 2023
커넥션 풀의 크기를 제어하는 3가지 설정 January 12, 2022
트랜잭션 격리 수준에 대한 요약 February 1, 2023
Docker (1)
Docker - Windows + Docker 환경이 무거운 문제를 unison으로 해결 August 12, 2021
ETC (41)
2018 컴투스 경력직 원클릭 채용 March 29, 2018
4월 한달 동안 간단한 절차로 컴투스에 지원할 수 있습니다~~
지원하기
2021년 컴투스 경력직 원클릭채용 April 6, 2021
2021년 컴투스 경력직 원클릭채용
다른 채용 방식과 달리 초 간단 지원을 한 후 “5분 전화 인터뷰”를 통해 회사와 구직자 간에 서로 맞는지 알아 볼 수 있어서 혹시 서로 맞지 않은 경우 빨리 알 수 있어서 이력서 작성이나 면접 등의 불필요한 시간 낭비를 줄일 수 있습니다.
...
2022년 회고 December 31, 2022
회고를 거의 하지 않았지만 올해 게임 개발자로서 변화가 있어서 남겨 봅니다.
관리자로 더 진화
현 회사에서(어디인지 궁금하다면 제 깃허브 보시면 됩니다^^) 이미 2년 전부터 팀장 직책으로 관리자 업무를 하고 있었지만 그래도 업무 비중에서 관리 비중이 50% 이하였는데 올해 관리...
2023년 회고 - 책 December 31, 2023
MS 기술 문서 번역하기 December 9, 2018
MS의 기술 문서는 예전에는 MSDN을 통해서 제공했지만 몇년 전부터는 https://docs.microsoft.com 을 통해서 제공하고 있다.
(이전에 만든 문서는 아직 MSDN에 있다)
https://docs.microsoft.com 의 장점은 한글로 번역되어 있지 않는 문...
POCO를 이용한 C++ 네트워크 프로그래밍 June 29, 2017
e-book으로 나온 후 몇 주전에 종이 책으로 나왔습니다.
yes24
POCO를 사용하면 C++로 네트워크 프로그래밍을 이전 보다 훨씬 쉽게 할 수 있으니 꼭 한번 공부 해보기를 추천합니다^^
PlantUML Cheat Sheet November 25, 2020
ebook - POCO를 이용한 C++ 네트워크 프로그래밍 May 1, 2017
구입
며칠 전에 나왔습니다^^
NHN Next 에서 일하게 되면서 시간 여유가 생겨서 짧은 분량이지만 책을 집필 할 수 있었습니다.
책 내용은 제목 그대로 POCO 라이브러리 중 Net 부분의 라이브러리를 사용하여 네트워크 프로그래밍을 하는 방법을 설명하고 있습니다.
아직...
mermaid.js와 PlantUML로 서버 개발 및 유지 보수에 필요한 문서 만들기 November 19, 2019
컴투스에서 매달 게임 서버 프로그래머 대상으로 세미나(회사에서는 월 세션 이라고 부릅니다)를 진행합니다.
주제는 게임 서버 개발과 관련된 것입니다.
이번 달에 발표한 문서를 공유합니다.
컴투스에서 모든 서버 프로그래머는 기본으로 JetBrains의 All Products Pa...
svn 에러 E155010 is scheduled for addition, but is missing May 23, 2019
svn 업데이트를 하니 특정 디렉토리가 삭제가 되었는데 충돌이 나서 수동으로 지웠음.
이 후 커밋을 하려니 위와 같은 에러가 발생.
이런 경우 –force라는 플래그를 사용하여 강제적으로 없애준다.
위에 삭제된 디렉토리가 test1 이라고 하면
svn delete --force...
게임 서버 학습 및 게임 서버 신입 구직 멘토링 오픈 카톡방 November 23, 2023
신입으로 취업 준비 중인 분들을 대상으로 합니다.
장소는: 지하철 2호선 낙성대역 3번 출구 근처 카페
시간: 토, 일요일 오전 10:20 ~ 12시까지
비용: 커피 한잔(공짜는 아닙니다^^;)
오픈 카톡방
들어와서 멘토링 신청하면 됩니다
입장할 때는 실명으로 들어와 주시기...
구인 - 서버 프로그래머 March 9, 2018
저는 현재 가산디지털역에 있는 컴투스에서 일 하고 있습니다.
제가 소속된 회사에서 서버 프로그래머를 구인 중이라서 혹시나 하는 마음에 글 올려봅니다.
스카이랜더스
컴투스의 스카이랜더스 라는 프로젝트에서 서버 프로그래머를 구인 중입니다.
스카이랜더스는 해외 유명 IP로 애니메이션까...
내가 신입사원 때 저지른 실수 10가지와 그 해결 방안 October 26, 2024
레이팅 관련 글 February 12, 2020
1:1 elo 레이팅 계산
Glicko Ratings
TrueSkill
github/EloRate
로그 설계 지침 May 4, 2019
원문
마크다운 문법 - Table of contents March 5, 2019
Table of contents
=================
* [gh-md-toc](#gh-md-toc)
* [Table of contents](#table-of-contents)
* [Installation](#installation)
* [Usa...
모델이나 메소드에 이름을 붙일 때는 영어의 품사에 주의 하자 June 7, 2019
모델의 이름은 명사로 한다
예: “지불 정보”를 나타내는 모델을 만들고 싶은 경우
× Pay
○ Payment
pay는 동사로 pay의 명사형이 payment 이다.
Pay 모델이 아니라 Payment 모델을 만들자.
예: “종교”를 나타내는 모델을 만들고 싶은 경우...
분산 폴더 동기화 툴 Syncthing November 30, 2019
Syncthing는 분산 폴더 동기화 툴이다.
Syncthing 인터넷을 통해 여러 단말기의 로컬 폴더를 동기화 할 수있는 도구이다.
3자가 관리하는 중앙 서버를 거치지 않고 개인 데이터를 공유 하려는 경우에 적합하다.
통신이 완벽하게 암호화 되어 있는 것과 개발이 오픈 소스로 ...
스터디 인원 모집 - Go로 게임 서버 만들기 July 21, 2017
프로그래밍 언어 Go로 게임 서버를 만들기 위해 필요한 기술과 경험을 서로 공유하기 위해 스터디를 시작하려고 합니다.
스터디를 만드는 큰 이유는 이 모임을 통해서 꾸준히 Go를 공부하고, 다른 사람들과 Go 관련 지식이나 경험을 공유하기 위해서 입니다.
아마 Go로 실제 일을...
신인 프로그래머가 알아야 할 프로그래밍의 원칙 5개 October 8, 2019
출처
KISS
Keep It Simple, Stupid
간단하게 해 어리석은 놈아
코드를 쓸 때 “단순성”이나 “간결성”을 최대 중요 항목으로 한다.
코드는 자연에 맡겨 수정해 가면 무 질서하게 되고 복잡해진다.
그 결과, 읽기 어렵...
신입 게임 프로그래머가 될 분들께 간단한 조언 November 27, 2017
아는 내용일 수도 있지만 혹시나 하는 마음에 간단하게 글 적습니다.
큰 회사들은 공채로 신입을 많이 뽑고, 공채는 10월초부터 시작합니다.
요즘은 큰 회사(상장된, 혹은 규모가 큰)들은 신입을 공채로 많이 뽑고 있습니다.
대부분의 회사가 공채는 10월초부터 시작합니다.
그러니 1...
신입 공개 채용 캠퍼리 리쿠르팅에 갑니다(부산대학교) September 24, 2019
제가 다니고 있는 컴투스에서 현재 신입 공개 채용을 하고 있습니다.
바로가기
게임 회사에 대해서 잘 모르는 분들을 위해 컴투스에서 각 지역의 대학교에서 회사 설명회를 하고 있습니다.
저는 9/30일에 부산대학교에서 12:00~17:00까지 채용 상담을 할 예정입니다.
게임 서버 ...
유튜브 시작 October 4, 2020
몇 년전에 유튜브에 개인 채널을 만들어서 예전 강연 중 동영상으로 남아 있는 것은 올려 놓았는데 영상 보관용으로 사용하고 있었습니다.
그러다가 올해에 코로나로 인해 강연 등을 정상적으로 할 수 없게 되어서 앞으로는 유튜브에 영상을 자주 올려 볼려고 합니다.
주제는 게임 서버 개발,...
유튜브 하고 있습니다 July 23, 2022
유튜브 시작한지는 2년전쯤 되는데 조금 하다가 중단하고… 또 다시 자주는 아니라도 꾸준히 하려고 합니다.
돈을 벌 목적은 아니라서 시간 투자가 작아야 하므로 퀄리티는 높지 않습니다^^;
https://www.youtube.com/user/jacking75/videos
이름 붙이기 June 8, 2019
메소드 이름은 동사로 시작한다
동사 이름
한글 표현
주된 반환 값
Get
취득하다
객체
Set
설정하다
void
...
좋은 에러 메시지 쓰는 법 May 5, 2019
원문
에러 메시지를 2가지로 분류한다
우선, 에러 메세지라고 해도 다음의 2가지 패턴에서 크게 달라진다.
(1) 이용자가 보는 에러 메세지
(2) 개발자가 보는 에러 메시지
(1) 이용자가 보는 에러 메세지
내부 구현에 대해서는 적지 않는다
| | |
|–|–|
|NG | ...
좋은 클래스 이름을 짓기 위한 참고 정보 June 9, 2019
데이터 소스를 취급하는 레이어
이름
보충
예
Client
HttpClient 등 Server-Client 의미로 사용하는
TwitterApiClient, QiitaApiC...
좋은 함수 이름을 짓기 위한 참고 정보 June 10, 2019
참 거짓을 돌려주는 메소드
장소
단어
의미
예
Prefix
is
(오브제그트가)대기 하는 상태가 되어 있나?
isChecked
...
참, 거짓을 반환 하는 함수의 네이밍 June 11, 2019
참 거짓 값(Boolean, bool)을 반환하는 함수는 is로 시작하는 것이 일반적이라고 생각한다. 적어도 C++ 에서는…
그러나 영어적으로 is 시작이 어려운 경우도 있다.
is로 시작할 수 없는 함수 이름의 명명 방식을 생각해 봤다.
존재 하는가?
가장 하기 쉬운 실패가 “...
추천 프로그램(개발 유틸리티) November 16, 2018
asciinema https://asciinema.org/
터미널에서의 입력 기록과 재생, web으로 공유도 가능
사용법 소개 (일어) https://dev.classmethod.jp/tool/intro-asciinema/
...
컴투버스 경력직 대규모 특별 채용 August 23, 2022
안녕하세요
https://www.com2us-recruit.com/
메타버스 개발에 관심 있는 분들은 꼭 지원해 보시기 바랍니다.
저를 아는 분이라면 추천인에 제 이름을 넣어주시면 됩니다^^
궁금한 것이 있으면 이메일로 연락주시기 바랍니다~
컴투스 2019 신입 게임프로그래머 특별채용 - 02/11까지 January 25, 2019
링크
컴투스 서버캠퍼스 1기 모집 March 15, 2023
안녕하세요
컴투스에서 서버캠퍼스라는 교육 프로그램을 4월부터 시작하려고 합니다.
이 교육에 참가를 원하신다면 3월31일까지 지원하시면 됩니다.
지원하기
위 링크에 이 교육에 대한 자세한 설명도 있습니다.
이 교육을 통해서 게임 서버 중 웹서버 방식의 게임서버 개발 방법을 배우고...
컴투스 서버캠퍼스 2기 March 19, 2024
안녕하세요
2023년에 이어 올해도 컴투스 서버캠퍼스를 합니다.
접수는 3월 6(수요일)일부터 시작합니다 (3월21일(목요일) 16시까지)
지원
작년과 달라진 것
소켓 방식의 게임 서버 개발이 중심.
교육 기간이 5주에서 7주로
...
컴투스 서버캠퍼스 2기 March 15, 2024
안녕하세요
2023년에 이어 올해도 컴투스 서버캠퍼스를 합니다.
접수는 3월 6(수요일)일부터 시작합니다 (3월21일(목요일) 16시까지)
지원
작년과 달라진 것
소켓 방식의 게임 서버 개발이 중심.
교육 기간이 5주에서 7주로
...
컴투스 서버캠퍼스 2기 March 4, 2024
안녕하세요
2023년에 이어 올해도 컴투스 서버캠퍼스를 합니다.
접수는 3월 6(수요일)일부터 시작합니다 (3월21일(목요일) 16시까지)
지원
작년과 달라진 것
소켓 방식의 게임 서버 개발이 중심.
교육 기간이 5주에서 7주로
...
컴투스 서버캠퍼스가 궁금하다면? 대표 강사 인터뷰 March 22, 2023
[컴투스 서버캠퍼스가 궁금하다면? 클릭!🤓
대표 강사 인터뷰](https://blog.com2us.com/?p=3475)
클라이언트, 서버 양쪽 다 하기를 원하거나 혹은 호기심에 게임 서버 개발을 배우기 원하는분 보다는 게임 ...
컴투스 온라인 채용설명회, 직무상담 사전신청 October 15, 2022
신청하기
신청 마감일은 13일까지였는데 신청하면 될 수도 있을 것 같습니다(주말이라 가능한지 확인은 못해봤습니다. 신청자가 적은걸로 알고 있습니다^^; )
컴투스 게임서버는 제가 참석합니다.
신입 공개 채용 지원은 10/24일까지입니다.
2022 컴투스 그룹 신입 ...
컴투스에서 야구 프로젝트 대규모 채용을 합니다(~04/17) April 10, 2022
안녕하세요
컴투스에서 야구 프로젝트 대규모 채용을 합니다.
https://com2us.recruiter.co.kr/app/jobnotice/view?systemKindCode=MRS2&jobnoticeSn=88971
컴투스는 복수의 야구 게임을 신규 개발 및 라이브 서비...
코딩용 폰트 May 24, 2019
CodingFont - 자신에게 맞는 코딩 폰트를 찾는 게임
MonoLisa - 개발자를 위한 고정폭 폰트 (monolisa.dev)
https://monolisa.dev/
눈이 편하게 폭이 넓음
C와G, IL1, 0OØ 등에 확실한 차이를 둠
읽기 편한 선의...
회고 - 2018년에 본 책(IT) December 30, 2018
당연히 올해에 본 책들도 다 회사의 도움을 받았다.
대부분의 회사들은 책 구입을 지원할테니 회사 도움을 받아서 가능하면 책을 사 보기 바란다.
2018년에는 아래의 책을 구입해서 보았다.
PHP 7 예비학교 예비 웹 프로그래머를 위한 과외 수업
러닝 PHP PHP 입문...
Git (5)
GitHub의 master 브랜치를 Web 페이지로 게시하는 방법 (GitHub Pages) November 6, 2020
git - GitSheet March 20, 2020
출처
Git의 브랜치 조작
git branch
모든 로컬 브랜치를 나열한다.
git branch -a
원격 및 로컬 브랜치를 나열한다.
git checkout -b branch_name
로컬 브랜치를 생성하고 전환한다.
git checkout branch_name
기...
git - submodule 사용 예 October 12, 2019
C++ 오프소스 라이브러리 googletest를 submodule로 설치 후 커밋하기
cd helloworld
mkdir third_party
cd third_party/
git submodule add git@github.com:google/googletest.git gtest...
git - 자주 사용하는 git 명령어 March 19, 2020
출처
자신의 commit을 pull request 할 때까지
git pull #로컬 저장소를 최신으로
git checkout -b <branchName> #브랜치 작성과 이동
#파일 편진
git status #편집한 파일을 확인
git diff #차분을 확인
git ...
<a href="https://jacking75.github.io/git_lazygit/" title="터미널 UI Git 도구 "lazygit"소개">터미널 UI Git 도구 "lazygit"소개
October 28, 2020
</a>
January 19, 2019
</a></h3>출처 소개: Hello World 런타임이 .Net Core 2.1 이후라면 표준으로 사용할 수 있다. 그렇지 않으면 Nuget에서 System.Memory 라는 패키지를 넣자. 그리고, 언어는 C# 7.2 이상이 필요하다. Span라는게 뭐야? A. 우선, 배열 같은 것이라...
Span 이용에 따른 최적화 January 16, 2019
</a></h3>
출처
힙 사용량 절감
Span 를 사용하면 빠르게 되는 이유는 간단하게 힙 사용량을 줄아가 때문이다.
string.Substring 등으로 새로운 문자열을 만들어 않아도 된다.
stackallock욿 임시 버퍼에 힙을 사용하지 않는다
네이티브 메모리를 직접 읽을 수 ...
StackExchange.Redis - Json.Net과 같이 사용할 때 예외가 발생하는 경우 March 2, 2020
StackExchange.Redis 사용 방법 정리.
접속 실패
출처
try
{
cache = Connection.GetDatabase();
}
catch (RedisConnectionException e)
{
WriteException("접속 실패", e);
...
StackExchange.Redis - link 모음 March 2, 2020
(한글)StackExchange.Redis Introduction
(한글)StackExchange.Redis Cluster
(한글)C# Redis hset, hget, hgetall
(한글)stackExchange.Redis lua script load
StackExchange.Redis - list March 2, 2020
StackExchange.Redis 사용 방법 정리.
리스트 선두에 추가
출처
var redis = ConnectionMultiplexer.Connect("127.0.0.1:6379");
var db = redis.GetDatabase();
db.ListLeftPush("myk...
StackExchange.Redis - score 사용하기 March 2, 2020
StackExchange.Redis 사용 방법 정리.
접속 실패
출처
//Redis의 DB를 선택
IDatabase db = RedisRepository.SelectCache(0);
//key 생성
var key = "hoge";
// score 계산을 위해 Unixtime ...
StackExchange.Redis - 간단 사용 March 2, 2020
StackExchange.Redis 사용 방법 정리.
문자열 저장 및 읽기
출처
using System;
using StackExchange.Redis;
using System.Threading;
namespace RedisSample
{
class Program
...
WCF - AsyncAwait January 12, 2019
예제 코드
[ServiceContract]
public interface IServerService
{
[OperationContract]
Task<RES_LOGIN> RequestUserLogin(REQ_LOGIN reqData);
}
// http://loc...
WCF - RESTful API January 10, 2019
RESTful 서비스
URI나 표준 동사(POST, GET, PUT, DELETE) 등 HTTP 사양을 강하게 의식한 리소스 베이스의 접근을 제공.
최신의 프레임워크는 대 부분 RESTful 서비스를 만들 수 있는 기능 지원.
WCF의 REST 서비스에서는 POX (P...
WCF - TCP Sample January 13, 2019
서버
WCF LIB
namespace WCFServerLib
{
public interface IClientCallback
{
[OperationContract(IsOneWay = true)]
void SendMessageToClient(string message);
...
WCF - Tips January 14, 2019
클라이언트가 요청 데이터를 null로 보내는 경우 대처
클라이언트에서 public RES_LOGIN_DATA RequestLogin(REQ_LOGIN_DATA reqData)을 요청한 경우 reqData을 null로 보낼 수 있음(악의적인 이유로).
그래서 아래처럼 요청 데이터를 ...
YOUTUBE - C# 네트워크 프로그래밍 공부 November 20, 2020
introselect 알고리즘 January 28, 2020
.NET 4.5 이상에서 컬렉션의 정렬 알고리즘에서 사용
https://github.com/Microsoft/referencesource/blob/master/mscorlib/system/collections/generic/arraysorthelper.cs
rasberry pi zero + C#으로 카메라 조작 June 14, 2017
nuget의 아래 모듈을 받는다.
https://www.nuget.org/packages/Unosquare.Raspberry.IO/
GPIO 에 더해서 카메라 모듈도 조작할 수 있다.
이것을 사용하여
public static async Task SendImage()
{
v...
닷넷 코어 2.1은 어디로 향하고 있는가? April 4, 2018
원문
Microsoft의 Scott Hunter씨는 .NET Core 2.1에서의 동사의 계획을 발표했다.
CLI 툴이 개발자의 편리한 사용을 대폭 향상시키는 것으로 보인다.
Microsoft는 매일 50만명에 가까운 개발자의 적극적인 이용을 감시할 수 있다고 Hunter씨는 말...
번역 - .NET Hangfire January 15, 2020
번역 - Microsoft.IO.RecycableMemoryStream January 20, 2020
번역 - Rider 기능 소개 January 12, 2020
번역 - 폭권에 있어서 게임 에디터 설계와 구현 January 8, 2020
오래된 버전의 .NET Core 삭제 시 .NET Standard 2.0을 인식하지 못하는 문제 February 12, 2019
컴퓨터 정리를 하다가 여러 버전의 닷넷코어가 설치 되어 있어서 최신 버전(2.2.103)을 제외하고 이전 버전의 닷넷코어를 삭제하였다.
그런데 Visual Studio에서 ‘.NET Standard 2.0’을 찾지 못하는 문제가 발생하였다.
다행히 구글링 해보니 이 문제에 대한 답...
최소한으로 ASP.NET Web API 사이트 만들기 October 6, 2018
Visual Studio의 프로젝트 템플릿으로 만들면 불필요한 코드가 너무 많이 붙어 있음.
특히 Razor은 사용하지 않고 클라이언트 부분은 JavaScript를 사용하고 싶은 경우에 좋지 않음.
Building Out a Clean, ...
프로그램을 관리자 권한으로 실행하는 코드 April 21, 2019
출처
권한을 확인하고 관리자 권한이 아니면 다른 프로세스로 관리 권한을 부여하고 다시 시작한다
Thread.GetDomain().SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
var pri = (WindowsPrincipal)Th...
AWS (1)
AWS - 1대의 EC2에서도 ELB을 사용하면 좋은 점 October 11, 2018
인스턴스 교체가 편리하다
운용을 시작한 후 EC2에 대해서 수정을 해야하는 경우 인스턴스 교체가 쉬워진다.
DNS 변경을 할 필요 없이 백엔드 교체가 가능하다.
ELB의 헬스 체크로 감시
ELB의 헬스 체크를 이용하여 WEB 서버가 죽었는지 감시를 할 수 있다.
CloudWa...
Book (3)
책 - Unity 네트워크 게임 개발 실전 입문 UNET/니프티 클라우드 mobile backend(일서) February 18, 2018
Unityネットワークゲーム開発 実践入門 UNET/ニフティクラウド mobile backend版
책 내용은 크게 두개로 나누어진다.
전반부는 일본의 모바일 백엔드 서비스를 사용하는 방법(즉 한국 독자는 별로 도움 되지 않는다), 후반부는 UNET을 사용하는 방법을 설명한다.
아직...
책 - 러스트 핵심 노트(e-book) February 6, 2018
출판사: 한빛미디어
한빛미디어
2018년 2월에 읽은 책.
이전부터 미루다가 3~4일 동안에 다 보았다.
Go 언어와 비슷한 부분이 있어서 Go 언어를 알면 공부하기 좋을 듯(물론 그 반대도)
원서가 Packt 출판사인데 책 내용이 좀 정리가 안 된 것 같고, 구성이 머...
책 - 모던 C 언어 프로그래밍 IDE, 디자인 패턴, XP, TDD, 리팩터링, 지속적인 통합 February 5, 2018
출판사: 위키북스
yes24
2016년에 읽었던 책이다.
C 언어를 기초부터 가르쳐주는 책이 아니다.
C 언어를 알고 있는 사람을 대상으로 하고 있다.
오래된(?) 언어인 C 언어를 현대에 맞게 사용할 수 있는 툴과 기법을 알려준다.
특히 C 언어에 디자인패턴을 사용하는...
C (1)
C99의 sizeof와 가변길이 배열 April 12, 2017
C99 에서는 배열의 사이즈 지정에 변수를 사용할 수 있다.
void test1( int n )
{
int fixed_array[10];
int varlen_array[n];
printf( "sizeof(fixed_array)==%ld\n", sizeof(fixed_...
C++ (382)
AWS Lambda에서 C++ 프로그램 실행하기 December 24, 2018
이 글을 번역한 것이다.
re:Invent 2018에서 AWS Lambda의 새로운 기능, Custom Runtime이 발표 되었다.
이 기능은 Custom Runtime을 준비하는 것으로서 임의의 언어로 Lambda를 사용할 수 있다.
Custom Runtime은 직접 구현해...
Boost 라이브러리 설치하기 July 1, 2019
설치
Linux
Boost 라이브러리 공식 사이트에서 다운로드 후 압축 풀기
압축을 푼 디렉토리로 이동 후 아래처럼 입력
$ ./bootstrap.sh
생성된 b2를 사용하여 Boost 라이브러리 빌드하기
$ ./b2 toolset=gcc link=static ...
Boost.Asio 공부하기 March 17, 2017
나는 2007년부터 Boost.Asio를 온라인 게임 서버 개발에 처음 사용하였다(업무에 사용하는 것을 말한다.그전에 공부는 했었다)
당시 주위의 게임 개발자를 통해서 생각외로 사용하는 곳이 꽤 있었다.
이 후 한국 및 해외의 유명 회사들도 C++ 네트워크 프로그래밍에 사용하고 ...
C++ - 4개의 auto, 4개의 C++ 규격 December 12, 2019
원문
2020년에 출시될 예정인 「C++20」에서는 아래와 같은 함수 템플릿을 쓸 수 있다.
cpp20.cpp
template <auto N>
auto func(auto x)
{
auto r = N + x;
return r;
}
// 호출 예
assert( ...
C++ - 5가지 알고 싶은 람다 예제. 재귀, constexpr, 컨테이너 등 June 30, 2022
C++ - 6-tips-to-supercharge-c11-vector-performance May 19, 2017
NHN Next의 학생이 C++ Advance 수업의 과제로 번역 정리한 것이다.
원문
슬라이드 쉐어
C++ - A simple C++11 Thread Pool implementation May 25, 2017
NHN Next의 학생이 C++ Advance 수업의 과제로 번역 정리한 것이다.
Github의 코드
위 코드를 설명한 문서
C++ - AWS SDK for C++을 이용해서 Amazon DynamoDB 사용하기 September 16, 2020
C++ - Aggregates(집성체) September 11, 2020
출처
Aggregates(이하, 집성체)는 배열과 아래의 조건을 충족한 클래스이다.
사용자 정의 생성자(복사, 무브 포함)이 없음.
생성자는 전혀 기술되지 않거나 default 지정된 상태다.
모든 데이터 멤버가 public 이다. st...
C++ - Argument Dependent Lookup August 5, 2020
출처
C++ 언어가 가진 화려한 기구의 하나로 ADL(Argument Dependent Lookup)라는 것이 있다.
번역하면 “실 매개 변수 의존 이름 검색”으로 읽고, 글씨처럼 “실 매개 변수”에 의존하는 “이름 검색”이 된다.
ADL의 동작
코드를 보면서 차례로 이해해 보...
C++ - Boehm 알고리즘 GC라이브러리 사용하기 March 12, 2020
출처
C++에서 GC(가베지컬렉션)를 사용할 수 있게 해주는 라이브러리 이다.
1. 소스 코드 다운로드
다운로드 페이지에서 다운로드.
특별한 이유가 없으면 ‘recent stable release” 버전을 다운로드.
압축을 푼다.
2. 솔루션 파일 만들기
솔루션을 만들기 위해...
C++ - Boost 라이브러리 빌드 링크 모음 November 6, 2017
Windows
Boost 라이브러리 빌드 및 설치 - VC++ (VS2012, Boost 1.53)
boost 간단 설치기 (Windows환경) - VS 2010 중심
Boost 64비트로 빌드하기
VS2008에서 Boost 빌드하기
버전 별로 이미 빌드된 라이브러리 배포하는 사...
C++ - Boost 라이브러리의 간단하면서 유용한 것들 August 19, 2020
몇 년전에 강의에 사용했던 글이다.
C++ - Boost 라이브러리의 모든 것 (1.60 버전까지) December 23, 2019
5년 전에 번역 정리했던 글입니다
C++ - Boost 타이머 취소하기 March 9, 2020
출처
타이머를 다시 이용하지 않는 경우
상태 변수를 추가하지 않고 취소를 알 수 있다.
#include <iostream>
#include <boost/asio.hpp>
#include <boost/asio/steady_timer.hpp>
int...
C++ - Boost.Asio에서 Boost.Chrono 베이스의 타이머 사용 December 11, 2019
Boost 1.49.0 버전에서 Boost.Chrono 베이스의 타이머가 도입 되었다.
basic_waitable_timer : 클락 전환용
system_timer : system_clock용 타이머
steady_timer : steady_clock용 타이머
hig...
C++ - Boost의 object_pool 사용은 비 추천 September 15, 2017
boost 라이브러리에는 메모리 풀 라이브러리로 object_pool 이라는 것이 있다.
사용법은 아래와 같다.
boost::object_pool<int> pool;
int* p = pool.construct(10);
pool.destroy(p);
사용하면 안 되는...
C++ - C 언어 보다 왜 컴파일이 느릴까? June 17, 2020
일반적으로 C++로 작성된 코드가 C 보다 컴파일 시간이 느린 이유
그 이유는 주로 아래의 5개이다.
C++ 문법의 복잡성, 소스 코드의 parse(어휘 분석, 구문 분석, 의미 분석)에 시간을 요하고 있다
템플릿의 실체화에 시간이 걸린다
복잡한 최적화를 실시 할 필요...
C++ - C#의 region 사용하기 September 20, 2019
VC 에서는 개요 확장/축소 기능이 있다.
클래스, 함수, if 문 등을 개요 축소로 화면에 시작 줄만 표시할 수 있다.
긴 코드를 핵심만 보고 싶을 때 사용하면 유용하다.
그런데 아래와 같은 변수들의 나열은 개요 축소를 할 수 없다.
const int TEXT_1 = 1;
co...
C++ - C++ attributes를 좋아하는 이유 July 29, 2022
C++ - C++ callback 디자인패턴 March 23, 2022
C++ - C++ 메모리 모델 May 20, 2022
C++ - C++ 반복자(이터레이터) 만들기 March 31, 2022
C++ - C++ 언어의 명명 규칙들 일부 조사 January 15, 2023
C++ - C++ 표준 위원회 문서 P0563R0:Vector Front Operations (pdf) September 7, 2020
흥미로운 글이 있어서 일부 번역했습니다.(오랜전에)
(원본 https://cpplover.blogspot.kr/2017/02/c-p0550r0-p0601r0.html )
PDF P0563R0:Vector Front Operations
vector에 push_front와 po...
C++ - C++ 표준으로 와일드 문자열과 멀티바이트 문자열을 상호 변환하기 March 29, 2023
C++ - C++ 프로그래밍의 생산성을 약간 향상시키는 Visual Studio 기능(2023년) January 15, 2024
C++ - C++/CLI February 1, 2019
클래스(class), 핸들(^)
C++/CLI에서 관리 클래스는 ‘ref’라는 키워드를 사용하여 만든다.
비 관리 클래스
class Test
{
};
관리 클래스
ref class Test
{
};
관리 클래스는 ‘ref’를 제외하고는 외관상으로는 비 ...
C++ - C++03과 C++11 싱글톤 구현 차이 February 1, 2018
C++11에는 ‘C++11 - 블럭 범위를 가진 static 변수 초기화는 스레드 세이프 하다’ 라는 기능이 생겼다.
그래서 아래와 같이 쉽게 싱글톤 인스턴스 생성 가능하다.
template <typename T>
inline T& Singleton<T&g...
C++ - C++11 메모리 모델 April 24, 2022
C++ - C++11 스마터 포인터에서 피해야할 실수 Top 10 July 4, 2020
몇 년전에 웹에 공개된 글을 보고 번역했던 글이다.
C++ - C++11 이후에서 JSON 문자열에서 정적 클래스(or struct)에 값을 복원하기(StaticJSON, jsoncons, spotify-json, nlohmann json) January 1, 2022
C++ - C++11 조건 변수와 spurious wakeup May 29, 2022
C++ - C++11에서 std::vector 타입의 변수에서 타입 T를 알아내기 February 5, 2022
</a></h3>
C++ - C++11에서 추가된 사이즈 엄밀한 정수 타입 July 15, 2020
출처
C++11에서 새로 추가됨
int8_t, int16_t, int32_t, int64_t, uint8_t, uint16_t, uint32_t, uint64_t, int_fast8_t, int_fast16_t, int_fast32_t, int_fast64_t, uint_fast...
C++ - C++11의 Universal Initialization은 언제라도 사용하는 것이 좋을까? June 15, 2020
3,4년 전쯤에 번역했던 것을 공유한다
C++ - C++11의 memory_order 구분 December 13, 2021
C++ - C++17시대 Herb Sutter씨에게 듣는다 December 19, 2017
원문
Herb Suttrer씨는 소프트웨어 개발의 제일인자로 “Exceptional C++” 이나 “C++Coding Standars”라는 책을 집필했다.
ISO C++ 표준 위원회 위원장을 15년간 맡음과 더불어 Microsoft에서는 소프트웨어 아키텍트로서 C++/CLI, C...
C++ - C++20 Designated initializers January 20, 2021
출처
Designated initializers(지시 붙은 초기화) C++20 에서 집성체 초기화 때에 데이터 멤버를 지정하는 구문이다.
struct(class)
struct A
{
int x = 0;
int y = 0;
int z = 0;
};
A a{...
C++ - C++20 Synchronized Buffered Ostream August 21, 2022
C++ - C++20 std::ranges::views <-> vector 사용 예 March 14, 2023
C++ - C++20 모듈에 대해서 April 7, 2023
C++ - C++23 P2740R0 Simpler implicit dangling resolution January 18, 2024
C++ - C++23 std::print 소개 April 13, 2024
C++ - C++를 공부할 때 도움이 되는 C++ MS Docs 사이트 October 1, 2019
마이크로 소프트사의 개발자 지원 중에서 예전부터 칭찬을 받는 것 하나가 풍부한 문서를 제공하는 것이다.
예전에는 MSDN 이라는 사이트에 가서 MS가 만든 다양한 기술 문서를 보았다.
몇 년전부터는 MS는 Docs 라는 사이트를 만든 후 여기에 문서를 업데이트 하고, 이전 문서는...
C++ - C++에서 ULID 생성 November 30, 2023
C++ - C++에서 http 요청하기(cpp-httplib + nlohmann.json) November 21, 2023
C++ - C++의 dangling 검출, 제안 문서 버전 1.0 공개 October 21, 2018
출처
C++의 저명한 개발자, ISO C++ 표준위원회의 위원장 Herb Sutter씨가 dangling(잘못된 영역에 대한 잘못된 참조)의 검출 방법을 제안하는 문서 “Lifetime Safety: Preventing Common Danglng”의 버전 1.0을 공개 했다.
C...
C++ - C++의 가장 일반적이면서 가장 중요한 Rule November 5, 2022
출처: The Design and Evolution of C++ (by Bjarne Stroustrup)
C++의 진화는 현실의 문제를 그 동인(動因)으로 한다
완전주의에 연연하지 않는다
C++은 지금 유용한 언어이어야 한다
어떤 기능도 알기 쉬운 구현을 가져야 ...
C++ - C4100 경고를 없애주는 UNREFERENCED_PARAMETER 매크로 September 7, 2019
VC에서 경고 레벨 4로 컴파일 하면 자주 볼 수 있는 경고주 하나가 아래와 같은 경고이다.
warning C4100: 'argc' : unreferenced formal parameter
warning C4100: 'argc' : 참조되지 않은 형식 매개 변수입니다.
&l...
C++ - CAtlMap에서 KEY 값을 두 개 사용하고 싶을 때 May 18, 2019
예제 코드
#include <atlcoll.h>
#include <boost/functional/hash.hpp> // hash를 만들기 위해 사용
// KEY가 될 유저 정의형
struct FRIENDKEY
{
union
{
...
C++ - CEDEC 2020 - 게임 개발자를 위한 C++11에서 C++20 장래의 Cpp 전망.pdf December 28, 2023
pdf 다운로드
C++ - CMake 사용법 및 예제 코드 January 2, 2019
GitHub 저장소에 공개하였다.
CMake 기초 설명과 예제 코드가 있다
C++ - Core Guidelines Checker와 GSL 도입 February 25, 2020
출처
시작하기
C++ Core Guidelines Checker는?
주로 Bjarne Stroustrup과 Herb Sutter에 의한 C++ Core Guidelines는 더 나은 C++ 코드를 작성하는데 필요한 지침이 정비 되어 있다. 이 지침의 많은 항목은 분석 도구를 통해...
C++ - DO-WHILE에 의한 매크로 트랩핑 July 2, 2020
출처
#ifdef _DEBUG
#define DEBUG_LOG(exp, ...) do {if (!(exp)){std::printf(__VA_ARGS__);}} while(0)
#else
#define DEBUG_LOG(exp, ...) do {(void)(exp);} ...
C++ - Delay Queue December 13, 2023
C++ - Delegate 라이브러리 May 20, 2019
상호 참조를 할 경우, 상호 참조 되는 클래스 중 둘 중 하나가 변경될 경우 상호 컴파일이 일어난다
-> 작은 프로젝트라면 모르겠지만 대규모 프로젝트에서는 작은 소스 수정 하나가 큰 짐이 될 수 있다
그리고 설계 상 상호 참조를 하고 있다는 것은 좋지 않다.
상호 참조를 하...
C++ - EASTL January 24, 2018
GitHub EASTL
게임 회사 EA에서 오픈 소스로 공개한 것으로 C++ STL을 게임 개발에 맞게 고친 STL 이다.
크로스플랫폼을 지원하고 Visual Studio 2017을 지원한다.
빌드는 Cmake를 사용한다.
관련 글
일어로 된 글은 네이버 번역기로 보면 된...
C++ - Ecosystem International Standard February 19, 2023
C++ - Google Test/Mock 기능 정리 April 30, 2020
원문
매크로
TEST(), TEST_F(),TEST_P()
https://github.com/google/googletest/blob/master/googletest/docs/primer.md#simple-tests
TEST(TestSuiteName, TestName) {
...
C++ - INI 파일 읽기/쓰기를 일괄적으로 할 수 있는 라이브러리 inifile-cpp November 5, 2023
C++ - Iterator 만들기 May 18, 2020
3,4년 전쯤에 번역했던 것을 공유한다
C++ - JSON for Modern C++ 이 버전 3.1로 August 30, 2018
원문
JSON for Modern C ++ 3.1 에서는 Universal Binary JSON(UBJSON) 기능 지원 및 JSON Merge Patch가 새롭게 추가 되었다.
UBJSON는 JSON for Modern C++에서 지원하는 여러 가지 형식의 하나로, 인코딩 크...
C++ - LLVM Sanitizer December 23, 2020
C++ - Linux C/C++ 자작 라이브러리 제작 환경 구축 February 20, 2022
C++ - Linux 커널에서 배우는 C 언어 매크로 July 19, 2022
C++ - Linux, UDP - 100만 pps를 수신하는 프로그램을 만드는 것의 어려움 July 29, 2021
C++ - Linux에서 Poco 라이브러리 사용하기 November 29, 2021
C++ - Makefile 만들기(초보자용) October 14, 2020
C++ - Modern C++에서 컴파일 시간 줄이는 방법 November 10, 2020
C++ - NEW 구현 August 7, 2020
출처
new는 인수로 사이즈를 받지만 표준 new는 size가 0에서도 올바르게 동작하는 것을 규격으로 정하고 있다.
직접 구현 할 때에 의식하면 약간으로 규격에 준한 코드가 되어서 좋다.
void* operator new(std::size_t size) {
if (siz...
C++ - OpenSiv3D 번역/정리 December 17, 2019
C++ - PLAIN OLD DATA July 26, 2020
출처
C++의 POD(Plain Old Data)는 C언어의 데이터와 호환을 가진 데이터 구조이다.
memcpy로 데이터를 복사하거나 하지만 그것은 본질적인 것이 아니지만 어쨌든 POD의 가장 큰 의미는 C 언어의 데이터와 bit 수준으로 완전히 호환을 갖는다는 것이다.
C+...
C++ - POD 타입의 기본 초기화 September 26, 2019
출처
C++ 에서는 변수의 선언이나 new 식에서 생성자에 넘기는 인수가 빈 경우는 인수 리스트를 생략할 수 있다.
class foo {
// 생략
};
int
main(void) {
// ↓ 어느쪽을 사용해도 같다
foo a;
foo b{};
...
C++ - PPL 병렬 컨테이너와 Asynchronous Agents May 23, 2017
NHN Next의 학생이 C++ Advance 수업의 과제로 번역 정리한 것이다.
PPL 병렬 컨테이너 슬라이드 쉐어
Asynchronous Agents 슬라이드 쉐어
C++ - PRIVATE 멤버에 합법적으로 접근하기 July 19, 2020
출처
class Employer{
float time_for_game_;//게임 시간
float time_for_anime_;//애니메이션의 시간
float time_for_family_;//가족과의 시간
public:
float time_for_work_;//일의 시간
//...
C++ - PVS-Studio 설치 및 사용 September 6, 2020
C++ - Poco 라이브러리 네트워크 프로그래밍 예제 코드 GitHub 저장소 December 24, 2019
GitHub에 C++ 오픈 소스 Poco를 사용한 네트워크 라이브러리 예제 코드를 정리한 저장소이다.
Poco_network_sample
Poco_network_sample 저장소가 도움이 되었다면 스타 부탁한다~
C++ - Python의 print()와 비슷한 cpp-dump December 6, 2023
C++ - RAII idiom에 대한 글 번역 March 17, 2020
몇 년전에 번역했던 글로 RAII idiom에 대한 글이다.
번역이 좀 거친편이다^^;
C++ - Range based for 정리 January 21, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
<a href="https://jacking75.github.io/Cpp-0321/" title="C++ - RapidJSON 또는 simdjson 보다 빠르고, C 언어에서 사용할 수 있는 JSON 라이브러리 "yyjson"">C++ - RapidJSON 또는 simdjson 보다 빠르고, C 언어에서 사용할 수 있는 JSON 라이브러리 "yyjson"
March 21, 2023
</a>
C++ - Recommendations to speed C++ builds in Visual Studio May 22, 2017
NHN Next의 학생이 C++ Advance 수업의 과제로 번역 정리한 것이다.
원문
슬라이드 쉐어
C++ - Redis 사용 방법 정리 GitHub 저장소 December 15, 2019
GitHub에 C++에서 Redis 클라이언트 라이브러리에 대해서 간단하게 정리하였다.
jacking75/examples_cpp_redis
만약 Redis를 key-value 정도로 간단하게 사용한다면 RedisCpp-hiredis 와 redis_client 를 추천한다.
hir...
C++ - Return Value Optimization과 move semantics February 4, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
C++ - SFINAE 정리 January 20, 2024
C++ - SSO(Small-string optimization) January 2, 2018
보통 std::string는 문자열을 확보할 때 동적으로 메모리를 확보하지만 작은 크기의 문자열의 경우는 동적 할당은 성능적으로 낭비이므로 동적 할당을 하지 않는 최적화가 구현 되어 있고 이것을 SSO 라고 한다.
아래처럼 std::string 안에 문자열을 저장할 수 있는 버퍼...
C++ - STL function, lambda, bind 사용 예 June 5, 2019
/*
* std_function1.cpp
* Copyright (C) 2014 kaoru <kaoru@bsd>
*/
#include <iostream>
#include <functional>
using namespace std;
struct...
C++ - STL map에 함수 포인터 사용 June 5, 2019
#include <iostream>
#include <map>
#include <string>
double Add(double a, double b){ return a + b; }
double Sub(double a, double b){ retur...
C++ - STL map에서 선형 탐색을 하면 안되는 이유 April 12, 2020
몇 년전에 번역했던 글이다.
번역이 좀 거친편이다^^;
C++ - STL 컨테이너의 인스턴스에서 요소의 Type 얻기 June 12, 2020
template<class T>
struct foo{
T operator()( ... ){ ... };
};
std::array< double, ... > a = ;
bar( foo< >() ); // < > 안에 a의 요소 타입 ...
C++ - STL의 sort와 search May 1, 2020
C++ - State 패턴으로 CSV 파일을 읽자 June 9, 2017
NHN Next의 학생이 C++ Advance 수업의 과제로 번역 정리한 것이다.
[원문]
State 패턴으로 CSV 파일을 읽자
슬라이드쉐어
C++ - StdAfx.h에 관한 고찰 March 28, 2020
C++ - The Observable C++ library June 8, 2017
NHN Next의 학생이 C++ Advance 수업의 과제로 번역 정리한 것이다.
[원문]
The Observable C++ library – implementing the observer pattern
Observable C++ expressions – using the Obs...
C++ - TimingWheel 알고리즘을 사용한 타이머 February 27, 2020
자세한 설명은 http://d2.naver.com/helloworld/267396.
타임아웃 작업의 만료 여부에 대한 검사가 필요 없는 등록과 실행 두 작업만을 모두 O(1)의 시간 복잡도로 처리할 수 있는 타이머를 구현할 수 있다.
출처: https://github....
C++ - UNIX 소켓 (AF_UNIX)를 이용하여 Win32 프로세스간에 프로세스 간 통신 January 31, 2021
C++ - Ubuntu 18 에서 g++(gcc) 설치 September 16, 2018
출처: https://linuxconfig.org/how-to-install-g-the-c-compiler-on-ubuntu-18-04-bionic-beaver-linux
우분투 18 에서 apt-get으로 설치하는 g++ 버전은 7.3 이다.
7.3 버전은 C++17 표준을 지...
C++ - Ubuntu에 clang, libc++-, lldb 설치하기 October 8, 2018
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -
echo deb http://apt.llvm.org/stretch/ llvm-toolchain-stretch-6.0 main>> /etc/ap...
C++ - VC++ 디버깅 기능 소개 September 21, 2020
C++ - VC++ 에서 링크 에러가 발생하는 경우 August 12, 2020
VC++을 사용할 때 링크 오류가 발생하여 시간을 허비하는 경우가 있다.
보통 아래의 이유로 링크 오류가 발생하는 경우가 많다.
문자 코드의 취급이 같지 않다.
Use Unicode Character Set, Use Multi-Byte Character Set
[C/C++][C...
C++ - VC용으로 빌드된 Boost 라이브러리 얻기 October 27, 2017
VC용으로 빌드된 Boost 라이브러리 Lib 파일을 제공하고 있다.
다운로드 페이지이다.
Boost 라이브러리의 다양한 버전 및 VC의 버전 별로 준비 되어 있다.
C++ - VSCode에서 경쟁적 프로그래밍 환경(C++)을 구축하기 November 11, 2023
C++ - Virtual 전파 July 27, 2020
이 Box 클래스를 public 계승해도 안전할까?
class Box : public Object {
public:
Box();
~Box();
};
정답은…이 정보만으로는 뭐라고 말할 수 없다 이다.
얼핏 보면 안 되다고 느끼는 사람도 많을 걸로 생각한다.특히 c...
C++ - Visual C++ 에서의 std::chrono의 고해상도 시계 January 16, 2018
Visual Studio 2015 이전에는 std::chrono(high_resolution_clock을 사용해도)로 시간 측정을 하면 nano 단위로는 측정할 수 없었다.
그래서 VC에서 nano 단위로 측정하려면 이전처럼 Win32 API인 PerformanceCounter...
C++ - Visual C++에서 Intellisense의 경고를 억제하는 방법의 경고를 억제하는 방법 February 24, 2023
C++ - Visual C++에서 UTF-8 소스 코드를 사용하는 방법 October 21, 2019
출처
전제
최신 msbuild가 필요하다. VisualStudio 2017 Community Edition을 설치하면 자동으로 설치 될 것이다.
경로가 통하지 않는 경우 다음 명령을 실행 msbuild을 사용할 수 있게하자.
set PATH=%PATH%;%PROGRAMFILES(...
C++ - Visual C++의 코드 분석을 지지하는 SAL August 6, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
C++ - Visual Studio 2017 15.7이 C++17 완전 준수 July 5, 2018
원문
Microsoft는 Visual Studio 2017 15.7 일반용 제공을 발표했다.
InfoQ는 VS2017의 7번째 메이저 업데이트 개발을 쫓아왔다. 이것에 의해 IDE 전체의 많은 영역이 개선되었다.
이 업데이트는 현재 복사본을 덮어 설치할 수 있지만, 반면에 새로...
C++ - Visual Studio 2017 에서 최신 C++ 기능 사용하기 November 22, 2017
Visual Studio 2017에서는 C++17 및 C++20에 들어갈 기능이 일부 구현 되어 있다.
그러나 이 기능들은 그냥은 사용할 수 없고 컴파일러 옵션에서 사용함을 선언해야 한다.
(C++17 기능 중 VS 업데이트를 통해서 구현된 기능은 보통 바로 사용할 수 없다.)
...
C++ - Visual Studio 2019에서 구문 검사에서 정형까지 자동화하는 방법 September 18, 2022
C++ - Visual Studio 2019의 C++ 프로젝트에서 새로 만드는 파일의 인코딩을 UTF-8로 하는 방법 February 14, 2020
C++ - Visual Studio 2022에서 배열 범위를 벗어난 접근을 쉽게 알 수 있는 방법 December 14, 2022
C++ - Visual Studio Code에서 C/C++ 프로그래밍 November 26, 2021
C++ - Visual Studio에서 C++ Core Guidelines 사용하기 October 1, 2023
C++ - Visual Studio에서 라이브러리 같은 외부 코드의 경고가 나오지 않도록 하는 방법 January 1, 2023
C++ - Win32 시스템 정보 얻기(Code) June 3, 2019
출처
win32_systemInfo.h
#pragma once
#include <cstdint>
#include <vector>
#include <string>
#include <memory>
#include <rapid/uti...
C++ - Win32API 스레드 풀을 사용하는 타이머 February 26, 2020
Windows Vista부터 사용 가능.
CreateThreadpoolTimer, SetThreadpoolTimer API 사용.
‘윈도우 시스템 프로그램을 구현하는 기술(한빛미디어)’에 설명이 잘 나와 있음
예제 코드 출처: https://github.com/...
C++ - Win32API 실행 파일의 full path 얻기 January 28, 2020
Win32 API의 ‘GetModuleFileName’ 함수 사용.
std::wstring getApplicationFilePath()
{
wchar_t fileName[MAX_PATH] = { 0 };
::GetModuleFileNameW(nullptr, fil...
C++ - Windows Implementation Libraries (WIL) September 20, 2023
C++ - Windows Performance Analayzer로 C++ 빌드 시간을 프로파일링 해 보자 September 29, 2020
C++ - Windows 에서 hiredis 사용하기 March 2, 2018
MS에서 Windows용으로 redis를 포팅한 것이 있어서 여기서 hiredis 윈도우 버전을 구할 수 있다.
아래 글은 MS가 윈도우로 포팅한 redis 프로젝트를 기준으로 한 것인데 얼마전에 hiredis 부분만 따로 떨어져 나온 프로젝트가 공개 되었다(이 글은 2017년 ...
C++ - Windows 텍스트 인코딩 변환 June 12, 2019
Ansi <-> UTF-8
std::string CGlobal::ToUFT8( const char* pszIn )
{
std::string resultString;
int nLenOfUni = 0, nLenOfUTF = 0;
wchar_t* us...
C++ - Windows에서 hiredis 빌드하기 August 29, 2020
C++ - Windows의 LFH April 14, 2020
C++ - Writing modern C++ code. how C++ has evolved over the years August 10, 2020
몇 년전에 번역 했던 글이다.
Herb Sutter씨의 2011년 “Writing modern C++ code: how C++ has evolved over the years” 강연 문서이다.
문서 하단의 설명 부분에 Herb Sutter씨의 말을 일본어로 번역된 것이 있어서 이...
C++ - [번역] C++ 포인터 부트 캠프 November 23, 2019
3,4년 전에 번역했던 문서
C++ - [번역] nested class와 로컬 클래스 January 4, 2020
C++ - [번역]shared_ptr & weak_ptr December 9, 2019
C++ - [번역]shared_ptr과 게임 프로그래밍에서의 메모리 관리 December 3, 2019
C++ - [펌] Linux에서 동적 라이브러리 만들기 April 20, 2019
출처: [리눅스 공유라이브러리(동적 라이브러리) 만들어 쓰기
작성자 라온이아부지 선성태](http://blog.naver.com/r2adne/120127832516)
순서
라이브러리로 쓸 함수가 포함된 소스 두 개 작성
...
C++ - [펌] Linux에서 라이브러리 로딩 April 20, 2019
출처: 라이브러리 로딩 - ld.so.conf
라이브러리 로딩 - ld.so.conf
동적 라이브러리를 호출하기 위해서는 path 지정이 필수이다.
해당 라이브러리가 어디에 위치해 있는지 모든 디렉토리를 탐색하기에는 비효율적이기 때문이다.
우리가 흔히 설정하는 LD_...
C++ - [펌] Linux에서 정적 라이브러리 만들기 April 20, 2019
출처: [리눅스 정적 라이브러리 만들어 쓰기
작성자 라온이아부지 선성태] (http://blog.naver.com/r2adne/120127876141)
순서
라이브러리로 쓸 함수가 포함된 파일 두개 만들기
컴파일 해서...
C++ - __if_exists July 14, 2020
출처
Visual C++ 전용 키워드 이다.
__if_exists ( identifier ) {
statements
};
identifier에 전달한 식별자가 존재한다면 statements가 실행된다.
부정형으로 __if_not_exists가 있다.
컴파일...
C++ - _pFirstBlock == pHead 에러 August 21, 2020
실행 프로그램에서 공용 dll을 사용하는 경우 아래와 같은 에러가 발생할 때가 있다.
File: f:\dd\vctools\crt_bld\self_64_amd64\crt\src\dbgheap.c
Line: 1424
Expression: _pFirstBlock == pHead
...
C++ - `void*`를 사용한 구조체, 클래스 판별 방법 March 13, 2022
C++ - atomic compare_exchange_weak/strong 함수 January 23, 2020
출처
C++11 표준 라이브러리의 atomic 조작 함수 compare_exchange_weak와 compare_exchange_strong에 대한 메모.
두 함수 모두 변수의 atomic한 CAS(compare-and-swap) 작업을 제공한다. weak 버전과 strong ...
C++ - boost::irange March 4, 2020
출처
정수의 범위를 사용하려면 boost::irange 함수를 사용한다.
범위로서 [0, n) 을 지정하고, 제 3인수로 단계 폭을 2로 지정하고 있다. (제 3 인수를 생략하면 단계 폭은 1이 된다)
이것에 대해 range-based for 문을 작성할 수 있으며, Pytho...
C++ - boost::multiprecision::cpp_int March 5, 2020
출처
다배수 길이 정수를 다룰 때는 boost::multiprecision::cpp_int를 사용한다.
#include <bits/stdc++.h>
#include <boost/multiprecision/cpp_int.hpp>
using namespace...
C++ - boost::stacktrace July 19, 2021
C++ - cache 잘 사용하기 August 24, 2020
몇 년 전에 정리, 번역했던 글이다.
C++ - callback_manager 라이브러리 January 31, 2022
C++ - capnproto(Cap'n Proto), C++11 으로 serialization February 10, 2021
C++ - clang-tidy으로 안심, 안전한 C/C++ 코딩 극대화! November 23, 2021
C++ - condition_variable December 5, 2023
C++ - const와 포인터의 관계 September 4, 2023
C++ - define and expansion of cpp macro(C 프리프로세서 매크로 정의와 전개) August 9, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
C++ - delete 호출과 구현 September 10, 2020
출처
#define SAFE_DELETE(p)if(p){delete p;}
옛날, 마이크로 소프트가 DirectX의 샘플에서 이런 매크로를 정의한 바 있다.
아마도 많은 사람이 그 샘플의 대로 익힌 결과, 특히 생각 없이 구현하는 경우도 적지 않을것이다.
포인터가 null이...
C++ - f()와 f(void)의 차이 September 3, 2020
VC++을 통해서 멤버 함수를 정의할 때 파리미터가 없는 함수의 경우 파라미터 리스트가 들어가는 자리에 void가 들어가는 것을 볼 수 있다.
기본적으로 void f()와 void f(void)의 함수 시그네쳐는 같은 것이다.
다만 파라미터 리스트에 void를 사용하는 것은 ‘빈...
C++ - final 지정자와 최적화 December 26, 2021
C++ - flags. 프로그램 실행 시의 인자를 파싱하는 라이브러리 January 22, 2020
C++17로 표준으로 구현.
헤더 파일 1개로 구성.
저장소: https://github.com/sailormoon/flags
라이센스: 퍼블릭도메인(완전 마음대로 사용 가능)
예제
#include "flags.h"
void ParseConfig(int a...
C++ - functional 활용하기 October 27, 2023
C++ - gcc의 전 처리기에 정의된 매크로(Predefined Macros) 확인 방법 June 8, 2022
C++ - gdb + core 분석하기 January 25, 2022
C++ - httpClient, json, redis 예제 코드 June 24, 2018
C++로 http client 요청, Json 데이터 조작, redis와 통신하는 짧은 예제 코드 들이다.
아래 링크에 가면 코드를 볼 수 있다.
curl 라이브러리를 사용하여 http 클라이언트 Post, Get 요청
http 클라이언트 사용 방법 (Post)
http 클라이언...
C++ - idiom - Construct on First Use June 2, 2020
원문
정적 오브젝트는 주의하지 않으면 초기화 되기 전에 사용하는 실수를 할 수 있다. 아래는 그 예이다.
#include <iostream>
class StaticObject
{
public:
StaticObject()
{
std::cou...
C++ - idiom - Construction Tracker June 3, 2020
원문
생성자에서 멤버 초기화 때 예외가 발생하는 경우가 있더. try와 catch로 예외를 잡을 수는 있지만 때로는 아래와 같이 어디에서 예외가 발생했는지 알 수 없을 때가 있다.
class A
{
public:
A(int n)
{
/* 초기화에...
C++ - idiom - Erase-Remove June 4, 2020
원문
아래는 STL의 컨테이너에서 특정 요소를 삭제하는 코드.
std::vector<int> a;
/*a에 요소를 추가하는 코드는 생략*/
std::remove(a.begin(), a.end(), 100);
이것으로 사라진 것이 아니다. 실은 remove 함수는...
C++ - idiom - Execute-Around Pointer June 5, 2020
원문
스마트 포인터는 객체의 라이프 타임이 다한 때에 자동적으로 확보된 리소스를 삭제한다.
생성자와 소멸자, 연산자 오버 라이드를 잘 구현하였다.
이것을 응용하면 클래스의 멤버 함수가 실행될 때 특정 처리를 실행하는 스마트 포인터를 구현할 수 있다.
class ExecuteP...
C++ - inline 지정자 February 28, 2022
C++ - libcurl 공식 Tutorial 번역 February 19, 2021
C++ - libuv - Visual Stuido 솔루션 파일 만들기 October 14, 2019
GitHub
에서 소스 코드를 받는다.
소스 코드의 root 디렉토리에 vcbuild.bat 파일이 있다.
콘솔 창을 열어서 vcbuild.bat을 실행한다.
사전에 Visual Stuido가 먼저 설치 되어 있어야 한다.
vcbuild.bat 이 있는 root 디렉토리에 uv...
C++ - libxlsxwriter를 사용하여 C++로 xlsx 파일 쓰기 April 29, 2020
libxlsxwriter
C용의 간단한 xlsx 쓰기 라이브러리.
Github 저장소에서 공개하고 있다.
풍부한 예제가 들어가 있다.
설치
설치 하지 않아도 이용 가능.
이 경우는 패스 설정이 필요.
$ git clone https://github.com/jmcnamara/l...
C++ - localtime_s 사용 예 February 7, 2020
최신 VC 에서는 localtime을 사용하면 경고(컴파일 실패 되는)가 나온다.
localtime_s를 사용해야 한다.
```
include
include
C++ - localtime에서 초 단위의 시간으로 변환 (Code) June 3, 2019
struct tm timeinfo;
memset( &timeinfo, 0, sizeof(timeinfo) );
timeinfo.tm_year = atoi( szYear ) - 1900;
timeinfo.tm_mon = atoi( szMonth ) - 1;
timeinfo....
C++ - malloc으로 확보한 메모리를 unique_ptr로 관리하기 July 22, 2020
원문
호출 예
hoge.h
#pragma once
struct Hoge
{
int _data1;
unsigned char _data2[1];
};
main.cc
#include "uniqueptr1.h"
#include "uniqueptr2.h"
#includ...
C++ - memcpy 최적화 December 16, 2023
C++ - new로 메모리 할당 실패 시 예외 발생하지 않게 하기 September 15, 2020
아래 코드를 실행하면 아마 메모리를 할당할 수 없어서 예외가 발생할 것 이다.
long long n = 1LL << 63LL;
int *p = new int[n];
그러나 예외가 아닌 null pointer을 발생하고 싶다면 아래와 같이 한다.
long long n ...
C++ - noexcept를 사용하여 이동 생성자 생략 방지하기 January 5, 2024
C++ - null 객체의 멤버 함수 호출 January 11, 2018
클래스를 메모리 할당(new 생성)하지 않고 생성한 후 멤버 함수를 호출하면 어떻게 될까?
호출된 멤버 함수가 자신의 멤버 변수를 호출하지 않는다면 무사히 호출된다.
당근 멤버 변수를 호출하면 세그먼트폴이 생긴다.
아래 코드는 gcc 8.0 에서 테스트 되었다. VC에서도 문제 ...
C++ - printf 방식의 디버깅을 극적으로 효율적으로 할 수 있게 해주는 라이브러리 icecream-cpp September 4, 2022
C++ - redis 사용하기 July 1, 2018
게임 서버를 개발할 때 사용하는 기술이 모바일 시대 이전에 비해서 많이 다양해졌는데 거의 대부분 꼭 사용하고 있는 것이 redis 이다.
다른 언어들은 redis 사용이 간단한데 C++은 간단하지는 않아서 정리를 해 봤다.
boost를 사용하면 아주 쉽게 사용할 수 있고, boos...
C++ - ref-qualifier 유무로 오버로드 할 수는 없다 July 29, 2020
출처
C++11에는 implicit object parameter(*this를 참조하는 객체)를 lvalue 참조로 받거나 rvalue 참조로 받는지를 지정하는 기능이 있다. 이를 참고 참고 수식자(ref-qualifier)라고 한다.
struct S
{
// void S...
C++ - segmentation fault를 보완해주는 로그를 출력하자 December 5, 2018
출처
C++ 서버(Linux)가 크래쉬 되는 버그로 고생해서 segmentation fault를 보완해주는 로그를 출력하는 기능을 만들어 보았다.
코드
CrashReporter.hpp
#pragma once
class ICrashReporter
{
public:
vir...
C++ - shared_from_this가 가리키는 곳을 변경하지 못하도록 규정 June 25, 2020
출처
this 포인터를 std::shared_ptr로 얻을 수 있는 기능으로 std::enable_shared_from_this 기본 클래스와 멤버 함수 shared_from_this()가 있다.
std::enable_shared_from_this에서 파생된 클래스의 개체를 n...
C++ - single-file C, C++ libraries 소개 November 4, 2023
C++ - sizeof()로 알아보는 C++의 메모리 April 22, 2020
몇 년전에 번역했던 글이다.
C++ - split, join, replace_all, brent_find_minima March 6, 2020
출처
split
지정한 구분 문자로 문자열을 분할 할 때는 boost::algorithm::split 함수를 사용한다.
얻어진 결과는 지정한 컨테이너에서 받는다.
구분 문자인지 판정하는 것은 boost::is_any_of를 사용한다.
아래 예는 문자열을 + 로 구분하고 있다.
s...
C++ - stack_alloc 라이브러리 June 7, 2020
3,4년 전쯤에 번역했던 것을 공유한다
C++ - std::any가 동적 메모리 할당을 할 때와 하지 않을 때(msvc) January 26, 2023
C++ - std::bind 사용 June 8, 2020
지정한 함수를 wrap해서 std::function을 만든다.
#include <iostream>
void test_function(int a, int b) {
printf("a=%d, b=%d\n", a, b);
}
int main(int argc, con...
C++ - std::bitset 정리 March 8, 2020
C++ - std::data January 25, 2024
C++ - std::exchange May 7, 2020
C++14부터 사용 가능.
아래의 파일을 포함해야 한다
#include <utility>
함수 원형
template< class T, class U = T >
T exchange( T& obj, U&& new_value );
...
C++ - std::function June 10, 2020
C++에 존재하는 여러 종류의 함수를 wrap 하여 똑같이 다룬다
C++에 있는 함수의 종류
함수
람다식
함수 객체
클래스의 멤버 함수
람다식 사용법
[캡처](인수)->반환 값 타입 { 함수의 내용 }(실행 시 인수);
캡처에는 기본적으로[=] ...
C++ - std::function 및 함수 포인터의 성능 평가 October 28, 2023
C++ - std::invoke July 1, 2021
C++ - std::map과 함수 포인터 June 11, 2020
예제 코드
#include <iostream>
#include <map>
#include <string>
double Add(double a, double b){ return a + b; }
double Sub(double a, double b)...
C++ - std::sort과 std::unique로 std::vector의 중복 요소를 삭제 June 9, 2020
#include <iostream> // std::cout, std::endl;
#include <algorithm> // std::unique
#include <vector> // std::vector
void printVec(std...
C++ - std::span February 7, 2024
C++ - std::string_view에 대해서 July 25, 2021
C++ - std::string에서 메모리 할당이 발생하지 않는 최대 바이트 수 December 8, 2023
C++ - std::thread 사용법 December 9, 2023
C++ - std::variant June 27, 2021
C++ - std::variant로 상속을 대체 June 29, 2021
C++ - stdafx.h 파일을 찾지 못한다는 에러가 나올 때 August 11, 2020
VC++에서 프로그래밍을 할 때 컴파일 속도를 올리기 위해 대부분 ‘프리 헤더’ 파일을 사용한다.
보통 자신이 만든 소스파일을 사용할 때 문제가 없다가 외부 파일을 가져와서 사용하는 경우 또는 비슷한 행동을 하는 소스 파일 마다 별도의 디렉토리에 들어가 있는 경우 (예 DB 관련 ...
C++ - strict aliasing rules, type punning 해설 May 6, 2022
C++ - string local buffer July 30, 2020
C++ - template와 define, constexpr 구분 August 9, 2022
C++ - threads affinity and hyperthreading June 26, 2020
3,4년 전쯤에 번역했던 것을 공유한다
C++ - unique_ptr에 포인터 이외의 것을 가지도록 할 때 July 10, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
C++ - unorderd_set, unorderd_map의 key를 임의의 클래스로 하기 February 3, 2020
출처
클래스의 같은 값 비교, 해시 함수가 필요
#include <unordered_map>
class Point{
public:
int x, y;
Point(){}
Point(int x, int y):x(x),y(y){}
bool ope...
C++ - unordered_map 와 map 속도 비교(emplace 편) July 22, 2021
C++ - unordered_map의 key로 std::pair 사용하기 November 25, 2023
C++ - volatile 에 대해서 November 28, 2023
C++ - volatile의 효과 February 10, 2022
C++ - wildcard를 이용한 간단한 범용 Makefile October 26, 2020
C++ - winget으로 Visual C++ 재배포 가능 패키지를 설치하는 방법 December 20, 2022
C++ - 가변 길이 템플릿에서 std::source_location 사용하기 December 4, 2023
C++ - 가상함수는 느릴까? May 4, 2022
C++ - 가상함수의 inline화에 대해서 September 9, 2020
출처: Web의 어딘가…
혹시 가상함수는 inline 되지 않는다고 생각하는 사람이 있을 것이다.
경우에 따라서 되기도 하고 안 되기도 한다.
되는 경우는 컴파일 시점에서 어떤 클래스의 가상함수를 사용하는지 알 수 있느냐 이다.
아래 코드의 경우 컴파일 시점에서 Delive...
C++ - 각종 STL 컨테이너에서 루프 중 요소 삭제하기 September 30, 2019
원문
vector
vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
vector<int>::iterator it = v.begin();
while (it != v.end()) {
...
C++ - 간단한 Object 메모리 풀링 June 28, 2020
의사 코드
class Player
{
Player(const int index) {}
};
class UserManager
{
public:
void NewUser();
void DeleteUser(const int playerIndex);
private:
...
C++ - 공변형 반환 값과 오버라이드 룰 완화 September 23, 2020
출처
C++에서는 일반적으로 반환 값만 다른 메소드를 오버라이드 할 수 없다.
struct Base{
virtual int func()=0;
};
struct Derived:public Base{
float func()override; //에러! 반환 값 타입이 다르다...
C++ - 구조체 alignment April 27, 2020
C++ - 구조체 멤버 접근을 배열처럼 접근하고 싶은 경우 September 4, 2020
일반적으로 구조체 멤버에 접근하는 예
struct Point {
int x;
int y;
int z;
}
int main(void){
Point p;
p.x = 100;
p.y = 200;
p.z = 300;
cout <...
C++ - 구조화 속박(structured bindings)에 대응하는 클래스 만들기 April 16, 2023
C++ - 다른 클래스의 특정 멤버 함수만을 friend로 선언 July 6, 2020
보통 다른 클래스를 friend로 선언할 때 그 클래스 전체를 선언하는 경우가 많은데 클래스 전체가 아닌 일부 멤버 함수만을 friend로 선언할 수 있다.
struct TEST2;
struct TEST1
{
void T1();
void T2();
};
stru...
C++ - 다차원 배열 초기화 방법. std::fill()의 편리한 사용법 May 6, 2020
std::fill
// n 차원 배열의 초기화. 제 2인수의 형의 사이즈마다 초기화 해 둔다
template<typename A, size_t N, typename T>
void Fill(A (&array)[N], const T &val){
std:...
C++ - 대단한 const를 재미있게 사용하자 July 17, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
C++ - 대체 토큰 사용하기 April 9, 2020
C++ - 라이브러리 링크 모음 November 5, 2019
일어로 된 문서는 번역기로 돌려서 보는 것을 추천한다.
signal-slot-benchmarks
WMI Explorer
Handy wmi query tool
압축
고속 압축 알고리즘 비교 테스트
mini-LZ library
lz4
Zstandard...
C++ - 라이브러리 출력 이름 변경하기 July 20, 2020
출처
라이브러리 출력 이름을
MyLibrary_x86_Debug.lib
라고 하고 싶다.
또 아래처럼 디렉토리 구성으로 하고 싶다.
MyLibrary
MyLibrary.sln
MyLibrary
MyLibrary.vcxproj
lib
MyLi...
C++ - 라이브러리를 사용한 프로그램 고속화 September 6, 2018
tcmalloc, jemalloc, nedmalloc
malloc 대체에 의한 고속화.
아래와 같이 실행함으로써 malloc이 대체되어 실행된다.
LD_PRELOAD=/usr/lib/libtcmalloc.so ./exefile
상황에 따라 다르겠지만 tcmalloc...
C++ - 람다 식의 5개의 장점과 코드를 더 좋게 하는 방법 April 9, 2022
C++ - 람다식 오버로드 February 15, 2022
C++ - 리눅스에서 공유라이브러리 추가하는 방법 November 23, 2023
C++ - 리눅스의 /usr/bin/c++의 실체 December 19, 2020
C++ - 맴버 함수 포인터와 배열을 사용하여 멤버 함수를 번호로 지정하여 호출 하는 방법 July 16, 2020
출처
#include <iostream>
#include <memory>
using ub4 = unsigned int;
// 외부에 공개해서 이용하는 클래스
class A {
public: // 클래스 밖에서 using을 사용하고 싶으므로 public 로...
C++ - 메모리 영역 May 29, 2017
메모리 영역에 대해서
5 종류의 메모리 영역
C++ 에서는 다른 특성을 갖는 5 종류의 메모리 영역이 존재한다.
(※ 단 c++ 규격에는 스택이나 힙은 명시 하지 않고 Free-Store는 명시 하고 있다)
Const Data
컴파일 시 값을 알 수 있는 데이터(예를 들면 sta...
C++ - 메소드 내의 this 최적화 February 24, 2022
C++ - 멤버 함수를 함수 객체로 전달하는 방법 - std::bind 와 람다식 December 25, 2023
C++ - 문자열을 수치로 변환하는 방법 July 1, 2020
atoi
#include <cstdlib>
#include <iostream>
#include <string>
#include <typeinfo>
int main()
{
const std::string str("123");
...
C++ - 배열 참조 August 3, 2020
출처
배열 참조는 배열보다 안전한 속도 면에서 유리하다 !!!
int *a[1]; // (1)
int (*a)[1]; // (2)
int &a[1]; // (3)
int (&a)[1]; // (4)
이 4개의 차이점은 ?
(1)은 모두 알다시피 int의 ...
C++ - 배치파일을 사용하여 원격 디버깅 할 때 IP 주소 변경 및 설치, 설정 등등 한방에 하기 December 4, 2019
출처
방법
아래와 같은 배치 파일을 만든다. 하고있는 것은 아래와 같다.
IP 주소를 고정으로 세팅(여기에서는 192.168.1.111 로 하고 있다)
폴더 공유를 활성화 한다
“응용 프로그램 및 안전하지 않은 파일의 시작” 설정을 변경 (경고 창을 내지 않는다)
...
C++ - 번역) VcPkg로 라이브러리 환경 정의 September 28, 2020
C++ - 복잡한 초기화를 할 때에도 변수에 const 를 부여하기 December 22, 2023
C++ - 분산환경에서의 uniqueId 생성 오픈 소스 snowflake-ModernCpp October 18, 2017
snowflake ?
Twitter에서 만든 오픈 소스 라이브러리로 주 목적은 분산 서버에서 일련 번호를 생성하는 것이다.
자세한 설명은 본인의 문서(https://www.slideshare.net/jacking/twitter-snowflake)를 보기 바란다.
snowflake...
C++ - 비 public 계승을 사용하는 곳 September 8, 2020
출처: 웹 어딘가에서…
계승에는 3가지 단계가 있다.
public
protected
private
객체 지향적 사고로는 public 계승은 자주 is-a 관계를 나타낸다 라고 한다.
한편 private 계승, protected 계승은 is-a 관계가 아니다.
is...
C++ - 생성자에 용도 별로 이름 붙이기 July 21, 2020
최근 C++ 표준 라이브러리와 Boost의 작은 유행으로 태그 디스패치의 태그를 사용자에게 명시적으로 지정하게 함으로써 함수 오버로드를 손쉽게 하는 방법이 몇몇 곳에서 나타나고 있다.
// Boost.Container의 vector의 예
// 태그 정의
struct default...
C++ - 세 가지 정적 변수의 차이 December 21, 2023
C++ - 스레드 내에서 발생한 예외 처리 November 28, 2019
참고
아래의 코드는 sigma_reference 함수에서 예외가 발생하는 경우 main에서 catch하고 있지만 예외가 잡히지 않는다.
이유는 sigma_reference 함수의 스레드와 main 함수의 스레드가 서로 다르기 때문이다.
#include <thread>
#...
C++ - 실수 부에서 짜르기, 가장 간단한 반올림 처리 January 31, 2019
실수 부에서 짜르기
(float)floor( (WeaponShot.nDamage * pow(10.0f,4)) + 0.5 ) / pow(10.0f,4);
가장 간단한 반올림 처리
int nScore = (int)( nCalcuteScore + 0.5 );
C++ - 실전 Modern C++ - module June 19, 2023
YouTube 실전 Modern C++ - module 1
YouTube 실전 Modern C++ - module 2
YouTube 실전 Modern C++ - module 3
C++ - 싱글 헤더 라이브러리 모음 mmx December 11, 2021
C++ - 안전한 문자열 조작 함수 February 3, 2019
문자열 복사
strcpy_s, strcpy, _tcscpy_s, wcscpy, wcscpy_s
대체 추천 함수
strncpy_s(char), _tcsncpy_s(TCHAR) , wcsncpy_s(wchar_t)
errno_t wcsncpy_s( wchar_t *st...
C++ - 약어와 의미 November 27, 2019
약어
의미
ADL
Argument Dependent name Lookup
COW
Copy On Write
CRTP
...
C++ - 언제 shared_ptr, unique_ptr을 사용할까? July 10, 2020
C++ - 오픈 소스 라이브러리 A better date and time C++ library May 18, 2017
NHN Next의 학생이 C++ Advance 수업의 과제로 정리한 것이다.
슬라이드 쉐어
예제 코드
C++ - 오픈 소스 라이브러리 POCO 설명 및 예제 코드 November 29, 2019
GitHub examples C++ Poco
몇 년전에 만든 코드와 작년에 사내 발표에 사용한 문서가 있다.
이 저장소가 도움이 되었다면 스타 부탁한다~
C++ - 오픈소스 folly 라이브러리 Visual Studio 2022 빌드하기 November 24, 2023
C++ - 오픈소스 라이브러리 Meta Enum December 24, 2020
C++ - 온갖 플래그를 저장할 수 있는 최강 클래스를 만들어 보자 December 18, 2023
C++ - 온라인 C++ 컴파일러 리스트 December 15, 2017
C++ 공부를 할 때 기능이 어떻게 동작하는지 알고 싶을 때 웹브라우져만 있으면 바로 테스트 해볼 수 있다.
List of Online C++ Compilers
생각 외로 온라인 C++ 컴파일러는 많다. VC도 있다.
이런 온라인 컴파일러를 사용하면 지금처럼 막 C++ 새 표준...
C++ - 왜 move를 해야할까? January 3, 2022
C++ - 우측 값 참조 value category June 18, 2020
value category
C++의 식은 타입과는 별도로 value category라는 것을 갖는다.
value category는 prvalue, xvalue, lvalue 중 하나이고, prvalue와 xvalue를 모아서 우측 값 이라고 부른다.
주의해야 할 것으로
같...
C++ - 유저 정의 클래스에서 간단하게 확장 for 문을 사용할 수 있도록 하는 방법 March 27, 2020
출처
STL 컨테이너를 public 상속한 경우
유의해야 할 것은 STL 컨테이너의 소멸자는 virtual 이 아니다
예를 들면 부모 클래스의 포인터로 업 캐스트하고 delete 하면 자식 클래스의 소멸자가 호출되지 않는다.
코드 예
#include <iostream>...
C++ - 자세히 알아보는 include May 11, 2020
3,4년 전쯤에 번역했던 것을 공유한다
C++ - 자식 클래스에서 부모 클래스를 가리키는 키워드 __super July 8, 2020
C++ 표준은 아니고 VC++ 7.0에서 생긴 키워드로 자식 클래스에서 부모 클래스의 멤버를 호출할 때 사용하면 편리하다.
이 키워드를 사용하면 부모 클래스의 이름이 바뀌어도 변경 없이 부모 클래스의 멤버를 호출할 수 있다.
struct B1 {
void mf(int) {}...
C++ - 자식 클래스에서 오버라이드한 멤버함수의 접근 지정이 부모 클래스의 멤버함수와 다른 경우 July 9, 2020
class Base
{
public :
virtual void f() { }
} ;
class Derived : public Base
{
private :
void f() { }
} ;
int main()
{
Derived d ;
d.f(); ...
C++ - 자주 사용하는 C++ 이디엄(idiom) CRTP May 27, 2020
CRTP는 Curiously Recurring Template Pattern의 약어로 자주 직역되고 있지만 기묘하게 재기한 템플릿 패턴이라고 부른다.
template<class Inher>
struct X{};
struct Derived:X<Derived>...
C++ - 자주 사용하는 C++ 이디엄(idiom) Coercion by Member Template June 1, 2020
클래스 B가 A에서 파생되어 B 타입 객체에 대한 포인터는 A 타입의 포인터에 대입할 수 있지만 이들 타입의 복합 타입은 바탕이 된 타입의 관계를 공유하지 않는다.
예를 들면 template_class는 template_class에 대입할 수는 없다.
class A{};
str...
C++ - 자주 사용하는 C++ 이디엄(idiom) Detection May 26, 2020
C++17에서 type_traits 헤더에 추가된 std::void_t를 이용한 idiom 이다.
std::void_t의 구현은 아래처럼 되어 있다.
template<class...>
using void_t=void;
뭘 넣어도 void를 반환하므로 넢고 싶은 것을...
C++ - 자주 사용하는 C++ 이디엄(idiom) Extension Member Function June 6, 2020
C#의 확장 메소드와 같이 기존 클래스에 대해서 멤버 함수의 확장을 operator 오버로드를 구사하여 시뮬레이트 하는 idiom 이다.
예컨대 std::vector에 print 라는 모든 요소를 출력하는 확장 구성원을 만들려고 한다면
const struct Listed_prin...
C++ - 자주 사용하는 C++ 이디엄(idiom) NVI와RAII May 22, 2020
3,4년 전쯤에 번역했던 것을 공유한다
C++ - 자주 사용하는 C++ 이디엄(idiom) No Copyable mix-in May 29, 2020
계승된 클래스는 복사 금지라고 명쾌하게 표현할 수 있는 idiom 이다.
class noCopyable{
noCopyable(const noCopyable&)=delete;
noCopyable& operator=(const noCopyable&...
C++ - 자주 사용하는 C++ 이디엄(idiom) cheked delete May 28, 2020
규격에 의해 delete식에 의해 불완전 타입을 delete에 넘기는 것이 허가되고 있다.
그러나 trival 생성자가 아닌지, 독자적인 delete 연산자를 정의하고 있는 경우 미 정의 동작이 된다.
미정의 동작은 좋지 않으므로 delete 대상 형식이 불완전 타입인 경우 컴파...
C++ - 자주 사용하는 C++ 이디엄(idiom) pimpl May 25, 2020
Pimpl(Pointer to IMPLementation)은 구현을 숨기거나, 헤더를 바꾸지 않는 것으로 컴파일을 속도를 고속화 할 때 사용한다.
C++20의 module에서는 필요 없어지겠지만 아직은 필요하다
hoge.h
class Hoge {
int foo_;
...
C++ - 전방 선언 February 20, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
C++ - 전치 증가와 후치 증가 February 26, 2021
C++ - 조건 변수와 춤을(Two-Step Dance) December 2, 2023
C++ - 주석을 지원하는 Json 파서 jsoncpp October 15, 2022
C++ - 차세대 파이썬 바인딩 라이브러리 nanobind August 31, 2022
C++ - 채팅 서버 개발로 알아보는 C++의 기술들 October 17, 2020
강연문서
유튜브
C++ - 최신 C++에서 이제 비추천 혹은 삭제된 것들 November 6, 2022
C++ - 추상 기저 클래스 July 12, 2020
아래 코드처럼 virtual 이 붙은 가상 기반 클래스는 “모호성” 을 피하기 위함이다.
class B : virtual public A{}
class C : virtual public A{}
class D : public B, public C{}
가상 기반 클래스가 아니라...
C++ - 커스텀 Allocator를 사용하는 basic_string을 unordered_map의 key로 사용하는 방법 January 29, 2020
아래의 코드는 컴파일 에러가 된다.
using MyString = std::basic_string<
char,
std::char_traits<char>,
...
C++ - 컴파일과 링크가 느린 경우 개선 방법 August 20, 2020
헤더 의존을 줄인다. 자주 변할 수 있는 코드는 헤더에 쓰지 않는다.
모듈화 하여 의존을 줄이거나 모듈을 dll화 하여 링크 시간을 단축하다(단 너무 나누는 것은 주의).
모듈별로 프로젝트를 분할하면 자연스럽게 의존이 없어지고 그 결과 프로그램 변경 시 빌드 시간 단축도 생긴...
C++ - 컴파일러 최적화 copy elision December 31, 2018
c++ 생성자와 move constructor 관련해서 궁금한 점이 있습니다.
라는 질문을 보고 알게된 것이다.
처음 질문을 봤을 때는 별거 아니라고 생각했는데 좀 더 보니 예전에 내가 C++11 표준 관련 강연을 했을 사용한 코드와 비슷한데 그때와 다른 결과가 나와서 구글링을 ...
C++ - 컴퓨터의 실제 IP 얻기 (code) June 4, 2019
#include <ws2tcpip.h>
bool ServerInfoMgr::GetLocalIP( string& strIP )
{
char host_name[256];
if (gethostname(host_name, 256) == SOCKET_ERR...
C++ - 콜백(Callback) 디자인 패턴 February 3, 2024
C++ - 클로져 디자인패턴 December 27, 2019
C++ - 템플릿 입문 June 20, 2020
4,5년 전쯤에 번역했던 것을 공유한다
C++ - 템플릿 프로그래밍 SFINAE을 이해하기 January 22, 2024
C++ - 특수한 반복자 May 9, 2020
C++ - 패키지 매니저 Conan July 21, 2021
C++ - 패키지 시스템 vcpkg May 1, 2023
작년에 정리한 것으로 최신 버전과 일부 다른 부분이 있을 수 있음.
C++ 패키지 시스템 vcpkg
크로스 플랫폼 지원 C++ 패키지 툴
버전 관리, 바이너리 캐싱, 매니페스트 및 레지스트리를 지원
공식 사이트
Browse packages
문서
한국어로 쓴...
C++ - 편리한 C++17 기능 소개 September 24, 2020
C++ - 포인터 변수에서 const 위치에 따른 차이 December 26, 2017
변수에 const를 사용하는 이유와 사용 방법은 아주 쉽다.
그런데 포인터 타입 변수에 const를 붙였을 때 포인터의 앞이나 뒤 어디에 붙여야 할지 헷갈릴 때가 있다.
포인터에 const를 붙이는 경우 아래에 따라서 차이가 발생한다.
*앞에 const를 붙인 경우는 포인터를 ...
C++ - 표준 attribute 정리 June 30, 2020
원문
attribute(속성) 라는 것은
attribute(속성)는 컴파일러에 추가 정보를 전달하는 구문으로 [[attributes]] 이라고 쓴다.
최적화나 경고 추가나 제어 등을 할 수 있다.
C++11
noreturn 속성
함수
함수가 결코 반환 하지 않는 것을 표시하...
C++ - 함수 반환 값의 생성자 호출과 RVO(Visual Studio 2019 Community 16.7.0 Preview 2.0) January 3, 2021
C++ - 함수 반환값 파기를 명시하는 방법 October 28, 2024
C++ - 함수 템플릿 포인터를 함수에서 파라미터로 받기 June 16, 2020
출처
함수 템플릿의 포인터를 함수에 넘기는 경우
template<typename T, typename Func>
T
calc(T a, T b, Func func){
return func(a, b);
}
template<typename T>
T
plu...
C++ - 함수 템플릿의 포인터를 함수로 받기 July 23, 2020
출처
C++11 이상 가능.
// 템플릿의 default 값에 함수 포인터 타입을 정의
template<typename T, typename Func = T(*)(T, T)>
constexpr T
calc(T a, T b, Func func){
return fu...
C++ - 함수 핸들러(Funtion Dispatcher) (Code) June 4, 2019
온라인 서버 제작자 모임의 핵랑님이 만든 것
비공개 카페라서 링크를 눌러도 멤버가 아니라면 접속할 수 없습니다.
#pragma warning(disable:4819)
#include <boost/bind.hpp>
#include <boost/function...
C++ - 함수의 디폴트 인자 값을 동적으로 바꾸기 July 7, 2020
일반적인 함수의 기본 인자 값
void TEST_1(int nValue = 5 )
{
std::cout << __FUNCTION__ << ". " << nValue << std::endl;
}
위의 디폴트 값은 고정인데 아래처럼...
C++ - 헤더 파일로 만드는 actor 모델 라이브러리 May 7, 2019
원문
C++의 표준 라이브러리로만 구현(thread, chrono, mutex, atomic, queue)
성능보다 구성 요소의 작음을 우선
소스
actor 모델?
actor 모델은 병렬 계산의 수학적 모델의 일종이다.
병렬 처리 지향이라는 Erlang과 함수형...
C++ 컴파일 시 조건에 의해 변수 선언 타입을 변경하기 January 30, 2020
컴파일 시에 정해진 조건 C의 bool 값에 의해 타입 A 혹은 B를 선택하고 이 타입의 변수를 선언하고 싶은 경우 의사 코드는 아래와 같다.
if (C)
{
A x;
}
else
{
B x;
}
이것을 구현하기 위해 std::conditional을 사용하여
type...
C++- Poco 1.8 Net 라이브러리 빌드 하기 November 15, 2017
본인이 집필한 poco 네트워크 프로그래밍 책의 예제가 poco 1.8 에서는 빌드 에러가 난다.
이유는 스태틱 라이브러리 사용, win32 lib 미 추가 문제이다.
아래 그림처러 하면 문제 없이 빌드가 된다.
C++- Poco 라이브러리 Visual Studio 2017 에서 빌드 하기 November 15, 2017
poco 라이브러리를 Visual Studio 2017 에서 빌드하려면 아직 쉽게 되지 않는다.
아래처럼 Visual Studio 2017 설치 메뉴에 있는 콘솔 프로그램을 실행해서 빌드 파일을 실행해야 한다.
buildwin.cmd 150 rebuild static_md...
C++- Poco 라이브러리를 VC++에서 static 라이브러리로 사용할 때 September 6, 2017
Poco 라이브러리를 VC++ 에서 static 라이브러리로 사용할 때 lib 파일을 찾을 수 없다는 링크 에러를 만나는 경우는 아래의 선언을 추가하면 된다.
#define POCO_STATIC
Poco 라이브러리는 default로는 동적라이브러리를 사용하는 것으로 설정 ...
C++11 - C++11용 gcc 옵션 October 2, 2020
C++11 - C11 / C++11 / POSIX 스레드 API 비교 September 14, 2020
C++11 - _Pragma 전처리 연산자 December 22, 2016
개요
C99 에서 도입된 전처리 연산자 이다.
_Pragma 연산자는 매크로에서 처리 계 정의 기능을 사용하기위한 기능이다.
처리 계 정의 기능을 사용하기 위해 기존에는 #pragma 지시자를 사용하여 왔지만 이 기능은 매크로 내에서는 사용할 수 없다.
#pragma 지시자를 매...
C++11 - alignas April 1, 2017
개요
alignas()은 컴파일러에 대한 변수를 메모리 상의 특정 위치에 배치(배열) 하도록 요구하는 키워드이다.
예를 들면 4바이트 경계 위치에 배치할 경우 변수는 4의 배수 주소로 배치되고, 8바이트 경계 위치에 배치할 경우 변수는 8의 배수 주소로 배치된다.
문법
alig...
C++11 - alignof April 1, 2017
개요
alignof()는 지정한 타입이 메모리의 어느 위치에 배치될지를(배치) 얻는 연산자이다.
sizeof()와는 다르고 alignof()는 변수에는 사용할 수 없다.
예를 들면 타입 int가 4바이트 경계 위치로 배치되는 시스템이라면 alignof(int)은 4를 반환한다.
...
C++11 - boost::shared_ptr 에서 std::shared_ptr로 변환 하는 가장 간단한 방법 March 8, 2017
#include <iostream>
// std::shared_ptr
#include <memory>
// boost::shared_ptr
#include <boost/shared_ptr.hpp>
auto main() -> int
{
...
C++11 - long long 타입 December 26, 2016
개요
C99 호환을 위해 long long 정수 타입이 추가 되었다.
long long 과 unsigned long long 타입은 64비트 이상의 값을 표현할 수 있는 것을 보증한다.
long long 타입의 최대 값 매크로는 LLONG_MAX 이다.
long long을 뜻하는...
C++11 - map에 삽입 insert, emplace May 19, 2020
아래 방식은 unordered_map에도 적용된다.
map::insert
insert를 사용하면 key와 value의 pair를 삽입할 수 있다.
map<int,int> dic{};
dic.insert(std::make_pair(1,3));
map::emplace...
C++11 - noexcept February 27, 2017
noexcept 키워드 목적.
1) throw 키워드에 의한 예외 사양 대체. 함수가 어떤 예외를 던질 가능성이 있는지를 열거하는 것이 아니라 예외를 던질 가능성이 있는지 없는지만 지정한다. 예외를 던질 가능성이 있는 함수에는 noexcept(false)을 지정하고, 예외를 던질...
C++11 - std::atomic::compare_exchange_strong March 11, 2020
출처
bool compare_exchange_strong(T& expected,
T desired,
memory_order success,
...
C++11 - std::error_code, std::error_category, std::error_condition의 차이 December 28, 2020
C++11 - std::exception_ptr 사용하기 October 22, 2019
출처
Windows의 윈도우 관련 프로그래밍을 할 때 반드시 나오는 윈도우 프로시저이지만, 윈도우 프로시저 외부에 그대로 예외를 던지려하면 무시되거나 프로세스를 강제 종료하는 것이 MSDN의 WindowProc callback function의 Remarks에 적혀 있다.
Win...
C++11 - std::get_time February 6, 2017
개요
» get_time(tmb, fmt) 식을 사용하여 현재 입력 스트림에서 전달 받은 로컬 시간 값을 변환 형식 문자열에 맞추어 tm 오브젝트로 변환한다.
문법
template< class CharT >
/*unspecified*/ get_time( s...
C++11 - std::put_time February 3, 2017
개요
날짜 서식을 출력한다.
문법
template <class CharT>
unspecified put_time(const struct tm* tmb, const CharT* fmt);
tmb 은 유효한 tm 타입 오브젝트를 가리키는 포인터
fm...
C++11 - type_info와 type_index March 23, 2017
C++에서는 RTTI(Run Time Type Infomation/Identification)라고 불리는 기능이 있다.
( 타 언어의 리플렉션과 좀 비슷한데 기능은 훨씬 떨어짐 ^^;)
std::type_info는 타입 정보를 표현하는 클래스이다. type_info 객체는 type...
C++11 - 고정형 정수 타입 March 17, 2019
C++11에서 고정형 길이의 정수 타입이 새로 생겼음.
고정형 길이라는 것은 int8_t, int16_t 등 타입에 숫자가 붙는 것을 말함.
플랫폼에 상관 없이 크기가 고정 되어 있어서 크로스 플랫폼 개발에 사용하면 좋음.
헤더 파일
#include <cstdint>...
C++11 - 문자열 리터럴과 wide 문자열 리터럴 결합 January 23, 2017
C99 호환을 위해서 만들어진 기능으로 문자열 리터럴과 wide 문자열 리터럴을 결합하면 wide 문자열로 결합한다.
문자열 리터럴인란 멀티바이트 문자열을 뜻하고, wide 문자열 리터럴은 유니코드 문자열을 뜻한다.
C++11 이전에는 문자열 리터럴과 wide 문자열 리터럴 결합에...
C++11 - 블럭 범위를 가진 static 변수 초기화는 스레드 세이프 하다 February 14, 2017
개요
static 변수의 초기화가 완료할 때까지 다른 스레드는 초기화 처리 앞에서 대기한다.
class singleton {
public:
static singleton& get_instance()
{
static singleton instance; // ...
C++11 - 생성자 상속(inheriting constructors) January 9, 2017
개요
부모 클래스에서 정의한 생성자들을 자식 클래스에서 그대로 사용할 수 있는 편의 기능이다.
문법
자식 클래스에서 using 키워드를 사용하여 부모 클래스 이름과 부모 클래스의 생성자 이름을 :: 구분으로 호출한다.
자식 클래스는 복수의 부모 클래스를 상속한 경우에도...
C++11 - 예외 지정 March 2, 2017
C ++에서는 함수에 예외 지정이라는 것을 작성할 수 있다.
이것은 C++98에서 부터 있는 기능으로 throw (T1, T2, …)라는 문법으로 함수가 밖으로 던지는 예외를 지정하는 기능이다.
// C++98/03
void f() throw( int, double );
만...
C++11 - 우측값 참조. 함수의 가인수는 좌측값 참조이다 July 7, 2017
#include<iostream>
using namespace std;
void foo2( string& s) {
cout << "lvalue" << endl;
};
void foo2( string&& s) {
co...
C++11 - 인라인 이름 공간(inline namespace) January 2, 2017
개요
이름 공간 내에 있는 기능을 투과해서 접근할 수 있는 기능이다.
즉 이름 공간(my_namespace) 안에 또 다른 이름 공간(features)을 inline로 선언하고 있으면 features에 정의된 기능을 my_namespace를 통해서 접근 할 수 있다.
#incl...
C++11 - 최근접 짝수 반올림 std::nearbyint January 12, 2017
개요
실수를 정수로 변환할 때 ceil()로 소수점 올림하거나, floor()로 소수점 버림을 한다.
nearbyint는 정수로 변환할 실수의 가장 가까운 짝수로 올림 혹은 버림을 한다.
이러한 방식을 “bankers’rounding” 이라고 부른다
문법
cmath ...
C++11 - 컨테이너에 참조 보관하기 April 17, 2020
std::reference_wrapper를 사용하면 컨테이너에 오브젝트의 참조를 보관할 수 있다.
std::reference_wrapper는 <functional> 헤더를 사용한다.
#include <iostream>
#include <string>...
C++14 - recursive_(timed_)mutex의 재귀 lock 상한 수 April 7, 2017
C++11 표준 라이브러리의 recursive_mutex, recursive_timed_mutex 클래스는 동일 스레드에서의 재귀 lock 획득 횟수의 상한은 미정의로(unspecified) 되어 있다.
단 상한 회수를 넘는 try_lock 조작은 실패하고, lock 조작은 예외를...
C++14 - shared_(timed_)mutex가 지원하는 Reader 스레드 수 April 10, 2017
C++14 표준 라이브러리의 shared_timed_mutex 클래스는 적어도 10000 스레드 이상의 Reader 스레드에서의 공유 lock(shared lock) 동시 획득을 지원한다.
또 동시 획득 가능한 공유 lock 수 상한을 넘은 경우도 공유 lock을 획득 할 수 있을...
C++14 - 람다식의 인수에 가변 길이 인수 사용하는 예제 November 6, 2019
출처
#include <iostream>
using namespace std;
void print (){
cout << endl;
}
template <typename T,typename ...Types>
...
C++17 - Boyer-Moore, Boyer-Moore-Horspool 검색 알고리즘 추가 November 22, 2019
헤더 파일은
#include <functional>
Boyer-Moore
최악의 케이스가 o(n). n은 검색 대상 범위의 길이
전처리 시에 테이블을 2개 만들므로 전처리 시간이 걸리고, 메모리를 더 먹는다.
검색 패턴이나 검색 대상 범위가 긴 경우, 혹...
C++17 - RVO(Return Value Optimization) 지원 November 26, 2019
컴파일러 최적화 기능으로 RVO(Return Value Optimization) 나 NRVO(Named Return Value Optimization)를 지원하고 있었다.
그러나 이 최적화 기능은 각 컴파일러에서 제공하는 것이지 C++ 표준으로 정해진 것이 아니다.
즉 어떤 컴파일...
C++17 - __has_include October 26, 2019
포함(include)하는 파일이 존재하는지 확인하는 프리프로세서 기능이다.
아래는 optional 파일이 존재하는지 확인한다.
#if __has_include(<optional>)
#include <optional>
#endif
혹은
#if __h...
C++17 - atomic::is_always_lock_free March 26, 2020
</a></h3>
C++ 17은 atomic 클래스 템플릿에 is_always_lock_free라는 정적 멤버 상수가 정의 되어 있는데 C++11의 is_lock_free()의 static 멤버 버전이라고 생각하면 좋다.
is_lock_free()를 사용하기 위해서는 atomic 클래스 오브젝트를...
C++17 - false sharing와 true sharing 제어 June 24, 2020
출처
병행 프로그래밍으로 문제가 될 수 있는 캐시 무효화 문제를 제어 할 수 있다.
false sharing 제어
struct keep_apart {
atomic<int> cat;
atomic<int> dog;
};
이런 구조가 있으면 c...
C++17 - hardware_destructive_interference_size, hardware_constructive_interference_size November 15, 2019
출처
C++ 17 표준 라이브러리 헤더에 추가 되었다
hardware_destructive_interference_size
False-Sharing 발생을 방지하기 위해 필요한 최소 메모리 주소 거리. 2개의 변수를 서로 다른 캐시 라인에 싣기 위해 얼라이먼트 정보로 사용한다...
C++17 - map과 unordered_map의 try_emplace()와 insert_or_assign() June 19, 2020
try_emplace() 멤버 함수: 삽입 실패 시에 주어진 파라미터 args…를 변경하지 않는다.
insert_or_assign() 멤버 함수: 삽입에 실패하면 덮어 쓴다.
std::map<std::string, std::unique_ptr<Foo>> m;...
C++17 - null pointer를 delete 해도 문제 없음 November 25, 2019
C++14까지는 메모리 할당을 받은 객체인지 확인 후 delete를 하였다.
if(pUser) {
delete pUser;
}
C++17 에서는 null pointer를 delete 해도 문제 없다(아래 설명에서는 C++14도 괜찮은 듯…).
delete pUser;
...
C++17 - shared_mutex November 20, 2019
출처
mutex로 보호 된 데이터를 다수의 스레드가 액세스 할 때 성능이 저하된다.
이 데이터 변경을 하지 않는 스레드가 다수인 경우 성능 저하를 줄일 수 있다.
데이터의 변경을 하지 않는 읽기(reader) 스레드와 데이터의 변경을 하는 쓰기(writer) 스레드가 각각 복수...
C++17 - shared_ptr 배열에 대응 May 13, 2020
C++17에서는 아래처럼 사용할 수 있다.
std::shared_ptr<double[1024]> p1 {new double[1024]};
std::shared_ptr<double[]> p2 {new double[n]};
double* p = p1[0];
C++17 - shared_ptr의 참조 카운트와 data reace December 10, 2019
C++17 표준 라이브러리에서는 스마트 포인터인 std::shared_ptr의 unique 멤버 함수는 비추천이 되었다.
상위 호환이 되는 use_count 멤버 함수는 잔존하지만 스레드 간 동기에는 관여하지 않는다는 요건이 명확화 되어서 멀티스레드 실행에서는 반환 값은 근사(ap...
C++17 - static_assert의 에러 메시지 생략 가능 October 24, 2019
static_assert는 C++11에서 생긴 기능으로 컴파일 타임에 식의 true, false 여부를 조사해서 false인 경우 지정한 에러 메시지를 출력한다.
static_assert(a == b, "a와b는 같아야 한다");
C++17에서는 static_assert 에 에...
C++17 - std::byte January 19, 2021
C++17 - string_view의 주의점 November 24, 2019
출처
string_view 클라스 == 문자열에 대한 읽기 전용 뷰.
std::string와 같이 null 종단 문자열 이외도 올바르게 다룰 수 있다. null 종단 문자를 도중에 포함 할 수 있다.
string_view 클래스는 참조처...
C++17 - 람다식에서 *this의 복사 캡쳐 November 14, 2019
C++11에서 람다식의 캡쳐 리스트에 this를 지정하면 이 람다식이 속하는 클래스 오브젝트가 참조로 캡쳐된다.
비동기 처리나 병렬 처리에서 오브젝트 수명 관리를 간단하게 하기 위해 this를 참조가 아닌 복사로 캡쳐해야 하는 경우가 있다.
이 때 C++17에서 새로 생긴 *th...
C++17 - 랜덤 샘플링 알고리즘 June 23, 2020
std::sample()이 <algorithm>에 추가 되었다.
#include <iostream>
#include <string>
#include <iterator>
#include <random>
#include <a...
C++17 - 복수의 using 선언 시 컴마 구분 사용 November 18, 2019
간결한 코딩을 위해 네임 스페이스를 생략하고 싶다면 using 선언을 사용한다
std::cout << "hello";
using std::cout;
cout << "hello";
그러나 아래와 같은 경우는
using std::cout;
using std...
C++17 - 숫자to문자열, 문자열to숫자 변환 표준 라이브러리 November 21, 2019
C++17에서 숫자를 문자열로 변환, 문자열을 숫자로 변환 해주는 라이브러리가 새로 생김
출처
특징
서식 지정은 문자열이 아니다
동적 메모리 할당을 하지 않는다
로케일 무시
가상 함수 호출이 아니다
버퍼 오버런 방지
반환 값에서 에러를 반환한다
입력 문...
C++17 - 숫자를 문자열로 변환하는 to_chars(), 문자열에서 숫자로 변환는 from_chars() May 14, 2020
로케일은 C 로케일(POSIX 로케일) 고정
함수 내에서 동적 메모리 할당이 없다. 즉 호출 측에서 만들어줘야 한다
포맷은 파라메터로 주고, 자동적으로 포맷을 해석할 수 없다
사용할 수 있는 포맷은 최소한
부호...
C++17 - 시간 반올림 연산 May 21, 2020
밀리 세컨드를 세컨드 단위로 변경할 때 딱 맞아 떨어지지 않는 경우 반올림 혹은 내림을 할 수 있는 floor(내림), ceil(올림), round(가장 근접한 수로)가 생겼다.
#include <iostream>
#include <chrono>
using...
C++17 - 연관 컨테이너의 extract, merge, insert May 20, 2020
2개의 연관 컨테이너를 접합(splice)하는 기능이 생겼다.
map, set, unordered_map, unordered_set와 이 들의 multi 버전 모두도 포함된다.
특정 요소 추출
extract() 멤버 함수를 사용하면 컨테이너의 특정 요소를 추출 할 수 있다.
n...
C++17 - 중첩된 namespace 선언 November 16, 2019
C++14 까지
namespace A
{
namespace B
{
class AA {};
}
}
C++17 부터는
namespace A::B
{
class AA {};
}
C++17 - 튜플을 유저 정의 타입으로 변환하는 make_from_tuple 함수 May 15, 2020
예제 코드
#include <iostream>
#include <string>
#include <tuple>
struct Person {
int id;
double bodyHeight;
std::string name;
...
C++20 - Feature List 동결 - 모듈, 코루틴, Concepts 채용, Contracts은 연기 September 22, 2019
출처
ISO C++ 위원회는 2020년 2월까지 공개 예정인 C++20 이라고 불리는 차기 C ++ 표준 기능 목록을 종료했다. C++20은 C++의 중요한 개정판으로 모듈, 코루틴, Concepts을 새로운 주요 기능으로 제공한다.
최근 쾰른에서 열린 회의에서 ISO C++ ...
C++20 - Using enum January 21, 2021
using enum은 C++20의 새로운 기능.
scoped enum을 namespace의 using directive를 사용할 수 있다.
C++17까지는 enum을 아래처럼 사용한다.
enum struct color { red, green, blue } ;
void f( co...
C++20 - std::ssize January 22, 2021
CMake에서 GoogleTest 사용하기 February 23, 2019
출처
구성은 아래와 같이 되어 있다고 한다.
src 폴더 아래가 테스트 대상 코드, test 폴더 아래는 테스트 코드
클래스 단위로 파일이 나누어져 있다고 가정한다.
mk.sh을 실행하면 build/src/ 에 응용 프로그램의 실행 파일...
CPU 캐시 잘 활용하는 방법 - 프로그램 코드가 작게하기 November 8, 2020
Poco 라이브러리 설치하기 July 10, 2019
Linux
공식 사이트에서 최신 버전을 다운로드 한다.
압축을 풀고, 빌드한다.
아래는 64비트, static 라이브러리, 테스트와 샘플은 제외 하는 설정으로 빌드 한다
$ tar zxvf poco-1.7.8p2-all.tar.gz
$ cd poco-1.7.8p2-...
Trip report Fall ISO C++ standards meeting(Albuquerque) Sutter’s Mill December 1, 2017
Trip report: Fall ISO C++ standards meeting (Albuquerque) | Sutter’s Mill
을 번역한 일본 문서를 일부 번역한 것이다.
range-based for 에 초기화자를 쓸 수 있도록 되었다.
for( auto res...
Ubuntu에 gcc 8, clang 6 설치하기 June 20, 2019
gcc 8 (Ubuntu 17.04)
PPA로 최신 버전 설치
sudo add-apt-repository ppa:jonathonf/gcc-8.0
sudo apt update
sudo apt install gcc-8 g++-8
LLVM 설치
Ubuntu 18.04
apt-get ...
Vcpkg Product Roadmap - 2020.04 May 2, 2020
Vcpkg 2020.04 Update and Product Roadmap 글에서 roadmap 관련된 부분만을 일부 번역하였다.
새로운 라이브러리의 지원을 계속하고, Linux와 macOS에서의 지원을 개선한다.
사용자들의 피드백이나 제안을 기초로 제품에 새로운 기능을 추가한다...
Win32API - CRITICAL_SECTION의 OwningThread June 5, 2017
Windows Vista부터 CRITICAL_SECTION의 내부 구조가 바뀌었다고 한다.
이 중 눈여겨 볼 것은 CRITICAL_SECTION의 멤버 변수 중 OwningThread 인데 이 변수에는 CRITICAL_SECTION을 소유중인 스레드의 ThreadID가 설정된다....
YOUTUBE - C++ OpenSiv3D로 즐거운 그래픽스 프로그래밍 November 25, 2020
YOUTUBE - C++ Redis 프로그래밍 November 24, 2020
YOUTUBE - IOCP 네트워크 프로그래밍 학습을 위한 단계별 실습 November 21, 2020
YOUTUBE - IOCP 샘플 코드 설명 November 26, 2020
cmake에서 CMAKE_C_FLAGS에 설정한 값이 무시될 때 February 20, 2019
출처
CMakeLists.txt 안에서 컴파일 옵션을 지정하려고 했는데 설정이 무시되는 문제를 만났다.
컴파일 옵션 지정과 add_subdirectory 명령어 기술 순서가 문제였다.
문제
CMakeLists.txt
cmake_minimum_required(VERSION 3.1...
epoll을 사용한 echo 서버 June 6, 2019
출처
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/socket....
google benchmark로 C++ 코드 성능 측정하기 December 22, 2018
posix aio의 네트워크 소켓을 지원에 대해서 July 31, 2019
posix의 비동기 IO의 API인 aio는 파일 조작만 지원하는 걸로 알고 있었는데 소켓 조작에도 사용할 수 있다고 한다.
https://koyo.kr/post/posix-aio-socket-server-example/
그런데 리눅스쪽 서버 개발 관련해서 자료를 찾을 때 소켓 ...
premake April 29, 2019
CMake와 같은 멀티 플랫폼 오픈소스 개발에 유용한 툴.
lua를 통해 스크립트를 작성한다. 루아 파일 이름과 같은 이름의 솔루션 파일을 만들어준다.
현재 premake4와 premake5 두 가지 버전이 있다.
Visual Studio 2013 ...
std::codecvt_utf8로 wstring을 utf-8 문자열로 변환 하기 April 4, 2017
std::wstring을 utf-8 문자열로 변환 하는 방법은 아래와 같다.
std::wstring wStr = L"우하하";
std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> utf8Conv;
auto ...
tm 에서 time_t로 UTC로 변환 하는 함수 March 10, 2017
헤더 파일 time.h 혹은 헤더 파일 ctime 에서 time_t와 tm 구조체와의 변환을 하는 함수를 정리했다.
time_t→ tm 구조체
tm 구조체 → time_t
현지 시각
...
unorder_set 에서 구조체(혹은 클래스)를 Key로 하고 싶을 때 March 9, 2019
출처
== 오퍼레이터를 오버라이드 한다.
hash 함수를 구현한다.
// key로 사용할 구조체
struct Point {
int x, y;
Point(int x, int y) : x(x), y(y) { }
// override == ope...
멤버 변수에 대한 포인터를 이용하여 타입의 특성을 판정 April 21, 2017
멤버 변수에 대한 포인터라는 것은
우선, 예로서 단순히 정수를 래핑 한 클래스를 보자
class int_wrapper {
public:
int data;
int_wrapper(int data) : data(data) {}
};
위 코드에서 int_wrapper::dat...
번역 - RAII 해설 January 31, 2020
번역 - 게임개발과 mvc January 12, 2020
번역 - 게임개발과 디자인패턴 January 14, 2020
번역 - 덤프를 이용한 hang 상태의 애플리케이션 조사 방법 - 크리티컬섹션 August 18, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
실전 Modern C++ - module 1 May 11, 2023
실전 Modern C++ - module 2 May 14, 2023
클래스 멤버 함수 포인터 배열 사용하기 December 16, 2016
함수 포인터 관련 검색을 하면 C 버전이 많이 나오고, 배열 타입을 사용하는 경우는 별로 없어서 공유한다.
(사실 최신 C++에서는 std::function을 사용하면 되기 때문에 이걸 사용하지 않아도 된다)
선언
bool(TEST::*m_pFunc[4])(const int, ...
표준 C++ 규격이 3년 간격으로 제정 되는 이유 July 17, 2019
Draft FAQ: Why does the C++ standard ship every three years? – Sutter’s Mill
현재 C++ 표준은 3년 단위로 제정 되고 있는데 왜 3년 주기인지 C++ 표준 위원회 의장인 Herb Sutter씨의 설명.
C++ 표준...
CLion (25)
CLion - CLion에서 Boost 라이브러리 사용 하기 December 3, 2021
CLion - CMake Install과 비 CMake 프로젝트 December 1, 2021
CLion - CMake 옵션에서 컴파일러 지정하기 November 4, 2021
CLion - CPU 프로파일러 November 13, 2021
CLion - Clang-Tidy로 유연성과 컨트롤 향상 November 12, 2021
CLion - ClangFormat November 22, 2021
CLion - Clangd 기반 언어 엔진과의 통합 강화 November 28, 2021
CLion - Clangd 기반 탐색 및 검색 November 16, 2021
CLion - Google Sanitizers 지원 November 15, 2021
CLion - Naming Convention November 20, 2021
CLion - Run Anything, Search Everywhere November 2, 2021
CLion - Windows에서 CLion 사용하기 October 31, 2021
CLion - googletest 설정 November 18, 2021
CLion - 디스 어셈블리 뷰 November 8, 2021
CLion - 메모리 보기 November 6, 2021
CLion - 사용자 지정 빌드 대상으로 실행 / 디버그 구성 November 25, 2021
CLion - 새로운 빌드와 리빌드 작업 November 2, 2021
CLion - 여러 줄의 TODO 주석 November 2, 2021
CLion - 원격 개발 지원 December 4, 2021
CLion - 코드 정리 정돈하기(파일 리포맷) November 2, 2021
CLion - 파일 단위로 실행 November 2, 2021
GoLand - 에디터의 (파일)탭을 숨기지 않고 모두 표시하기 November 10, 2021
GoLand - 정형화 시키지 않을 파일 지정 November 8, 2021
JetBrains - Docker 상에서 jetbrains 제품을 실행하는 방법 December 7, 2021
JetBrains - Projector로 JetBrains IDE를 원격으로 사용하기 December 6, 2021
Cloud (15)
AWS - P2P에서 클라우드로의 전환. For Honor와 Friday the 13th The Game이 어떻게 플레이어 경험을 향상 시켰는가 May 13, 2018
원문
게임 개발자로서 출시에 이르기까지 열정을 잃지 않고 게임 개발과 팬 커뮤니티의 육성에 수 년의 세월 투자 되어 왔다고 생각한다.
최고의 사용자 경험을 제공 할 수 있는 것에 대해서는 예를 들어 네트워크 연결시 플레이어의 대기 시간에 대한 백엔드의 선택 등 백엔드 인프라는 가...
AWS re:Invent 2021 - How Epic Games develops Fortnite faster with a build farm on AWS January 18, 2022
AWS 오픈 소스 컨테이너 개발 툴 「Finch」의 Windows판 릴리스. 컨테이너 빌드 및 실행 환경 세트 April 9, 2024
Cloud Logging 구조화 로그의 특수한 JSON 필드 정리 November 17, 2023
Google Cloud Platform의 15개 서비스를 영구 무료 한도를 제공 March 17, 2017
구글은 2017년 3월 10일 Google Cloud Next 17의 3일째 기조 강연에서 15개 서비스의 영구 무료 쿼터를 발표.
영구 무료 한도 대상 서비스 이름과 월 제한은 다음과 같다(제품에 따라서는 아래 외에도 제한이 있다).
Google Cloud Engine(...
Google Cloud 네트워크 관련 특징 October 24, 2022
Stackdriver Monitoring(Cloud Monitoring) 입문 February 20, 2022
구글 클라우드 로깅에 대해서 November 16, 2023
번역 - AWS re Invent 2019 1000 만명 사용자를 향해 확장해 나가기 August 22, 2020
번역 - AWS re Invent 2019 CAPCOM이 컨테이너 ,데이터, ML을 사용하여 유저에게 즐거움을 주는 게임을 빠르게 구축하는 방법 August 16, 2020
번역 - AWS re Invent 2019 How Rovio teaches Angry Birds to fly in the cloud using ML August 17, 2020
번역 - AWS에서 온라인 게임 출시 August 23, 2020
번역 - 서버리스 온라인 게임과 실시간 리더 보드 구축 August 27, 2020
번역 - 온라인 게임 개발에서의 클라우드 디자인 패턴 August 26, 2020
번역 - 최강의 ECS & Fargate build 환경 on AWS August 25, 2020
Coding (1)
NASA의 10가지 코딩 룰의 힘 November 4, 2020
DB (55)
DB 샤딩 알고리즘 November 29, 2023
DBA가 (서버)개발자에게 가장 많이 받은 질문들 February 1, 2022
<a href="https://jacking75.github.io/db-0820/" title="Discord가 데이터베이스를 "Apache Cassandra"에서 "ScyllaDB"로 마이그레이션 한 이유">Discord가 데이터베이스를 "Apache Cassandra"에서 "ScyllaDB"로 마이그레이션 한 이유
August 20, 2023
</a>
MongoDB - C# find April 26, 2019
모든 도큐먼트 가져오기
클래스 맵핑
var collection = GetDBCollection<DBBasic>("Basic");
var documents = await collection.Find(_ => true).ToListAsync();
return ...
MongoDB - C# insert, update, delete April 25, 2019
기본 추가
클래스 맵핑으로 새 도큐먼트 추가
var newData = new DBBasic()
{
_id = "test01",
Level = 1,
Exp = 0,
Money = 1000,
Costume = new List<int&g...
MongoDB - C# 프로그래밍 April 24, 2019
MongoDB 공식 C# Driver
1.x와 2.x 라이브러리가 많이 다름.
2.0 드라이버 소개
레퍼런스
온라인 도움 문서
Indexes.CreateOneAsync sample
Find & FindAsync sample
아래 예제 코드에서 사용...
MongoDB - wiredTiger April 23, 2019
wiredTiger 사용 conf 파일 예
// mongodb_wt.conf
storage:
dbPath: "/data/mongod_wt"
engine: "wiredTiger"
directoryPerDB: true
wiredTiger:
...
MongoDB - 데이터 추출 툴 mongoexport 와 mongodump 간단 비교 September 11, 2017
MongoDB의 데이터를 출력하는 툴로 mongoexport 와 mongodump가 있다.
둘 다 mongodb-tools 패키지에 포함되는 도구이다.
mongoexport는 CSV 또는 JSON 텍스트 데이터, mongodump는 BSON 형식의 이진 데이터로 출력한다.
사용...
MongoDB 3.0.6 Windows에서 설치 및 실행 April 22, 2019
이 글은 이것을 정리한 것이다.
MongoDB 3.0.6 Windows에서 설치 및 실행
MongoDB 공식 다운로드 에서 ‘Windows 64-bit 2008 R2+’를 선택해서 다운로드 한다.
기본 설치 위치는 C:\Program Files\Mongo...
MySQL - 100M으로 스케일링 하기. Key-Value 저장소로 MySQL을 사용하여 NoSQL 이상의 퍼포먼스를 내자 December 24, 2019
MySQL - Waiting for table metadata lock 대처 방법 January 26, 2022
MySQL 8.0.16의 CHECK 제약 February 19, 2020
참고
CHECK 제약 조건을 지정하여 테이블을 만든다. (※ t1.a에 “0 < a AND a <= 3” 이라는 CHEKC 제약을 지정한다)
mysql> SELECT version();
+-----------+
| version() |
+-----------+
...
MySQL 8.0.22에서 innodb_log_writer_threads의 효과를 알아보자 March 17, 2022
MySQL 8.0에서 JSON 타입의 partial update 및 이에 대한 InnoDB의 최적화 January 2, 2022
MySQL 8.0에서의 Json 사용하기 December 30, 2021
MySQL 8.0의 lock read의 NOWAIT와 SKIP LOCKED 옵션에 대해서 February 7, 2022
MySQL 메타데이터 Lock에 대해서 February 18, 2023
MySQL 온라인 DDL에서 Deadlock 오류가 발생하는 경우 May 24, 2023
MySQL 트랜잭션 격리 수준과 발생하는 법칙을 정리 February 2, 2023
MySQL에 IP 주소를 저장하기 May 9, 2023
MySQL에서 JSON 다루기 December 30, 2021
MySQL에서 문자열의 유니크 제약 조건을 걸 때 조심할 것 February 12, 2023
MySQL에서 발생할 수 있는 뜻밖의 데드락과 대응 방법 January 29, 2023
MySQL의 3가지 lock - Record lock, Gap lock, Next-key lock September 8, 2017
Record lock(레코드 락): 단일 인덱스 레코드의 락.
Gap lock(갭 락): 인덱스 레코드 사이의 갭의 락, 선두 인덱스 레코드의 앞이나 말미 인덱스 레코드의 뒤의 갭의 락
Next-key lock(넥스트 키 락):레코드 락과 이 레코드 직전의 갭 락의 조...
MySQL의 ALTER TABLE 문 실행 시 주의 사항 December 20, 2023
MySQL의 Index를 붙이는 요령 January 4, 2022
MySQL의 Too many connections 에러 대처법 December 22, 2021
MySQL의 갭락과 넥스트 키 락에 대해서 February 14, 2022
MySQL의 다양한 타임 아웃 옵션 정보 June 6, 2023
MySQL의 다양한 타임아웃 옵션 January 6, 2022
MySQL의 저장 프로 시저, 함수 및 트리거의 성능이 나쁜 이유 January 20, 2022
MySQL의 정렬 처리에 대해 January 29, 2022
Redis 4.0의 핵심 기능 May 1, 2019
(몇년 전의 글을 블로그에 올린 것임)
참고
redis 4.0은 지금까지와는 비교하면 아마 가장 극단적인 버전 업 중 하나이다.
향후 사용자에 의해 발견된 중대한 문제는 수주일에서 수개월로 패치 발표할 테니 신중하게 이용하자.
a modules system
redis는 이미 해...
Redis 서비스 전에 조사할 것들 May 6, 2019
Redis 서버의 흔한 실수 법
Redis 서버가 떨어지거나 APP서버가 떨어질지는 상황에 따른다.
KEYS 명령과 ZRANGE 명령으로 수만건 이상에 접근하여 I/O대기로 죽는다
데이터 설계를 실패하여 메모리 부족으로 쓸 수 없게 되어 죽는다
Redis 서버에서 장애...
Redis, Lua Script vs Transaction January 30, 2022
Redis로 방문자수 구현하기 June 29, 2023
Redis를 사용하여 동일 유저의 요청은 순차적으로 처리되도록 하기 July 16, 2022
Redis를 사용한 분산 잠금 (SETNX, Redlock) January 27, 2023
SQL 약간의 퍼포먼스 튜닝 정리 December 15, 2023
SQLFluff를 사용하여 SQL을 린트(Lint) 하기 March 12, 2022
<a href="https://jacking75.github.io/db-20220225/" title="SQL용 포맷터(코드 정리) "SQLFluff"">SQL용 포맷터(코드 정리) "SQLFluff"
February 25, 2022
</a>
January 16, 2019
</a></h3>출처 힙 사용량 절감 Span 를 사용하면 빠르게 되는 이유는 간단하게 힙 사용량을 줄아가 때문이다. string.Substring 등으로 새로운 문자열을 만들어 않아도 된다. stackallock욿 임시 버퍼에 힙을 사용하지 않는다 네이티브 메모리를 직접 읽을 수 ...
StackExchange.Redis - Json.Net과 같이 사용할 때 예외가 발생하는 경우 March 2, 2020
StackExchange.Redis 사용 방법 정리. 접속 실패 출처 try { cache = Connection.GetDatabase(); } catch (RedisConnectionException e) { WriteException("접속 실패", e); ...
StackExchange.Redis - link 모음 March 2, 2020
(한글)StackExchange.Redis Introduction (한글)StackExchange.Redis Cluster (한글)C# Redis hset, hget, hgetall (한글)stackExchange.Redis lua script load
StackExchange.Redis - list March 2, 2020
StackExchange.Redis 사용 방법 정리. 리스트 선두에 추가 출처 var redis = ConnectionMultiplexer.Connect("127.0.0.1:6379"); var db = redis.GetDatabase(); db.ListLeftPush("myk...
StackExchange.Redis - score 사용하기 March 2, 2020
StackExchange.Redis 사용 방법 정리. 접속 실패 출처 //Redis의 DB를 선택 IDatabase db = RedisRepository.SelectCache(0); //key 생성 var key = "hoge"; // score 계산을 위해 Unixtime ...
StackExchange.Redis - 간단 사용 March 2, 2020
StackExchange.Redis 사용 방법 정리. 문자열 저장 및 읽기 출처 using System; using StackExchange.Redis; using System.Threading; namespace RedisSample { class Program ...
WCF - AsyncAwait January 12, 2019
예제 코드 [ServiceContract] public interface IServerService { [OperationContract] Task<RES_LOGIN> RequestUserLogin(REQ_LOGIN reqData); } // http://loc...
WCF - RESTful API January 10, 2019
RESTful 서비스 URI나 표준 동사(POST, GET, PUT, DELETE) 등 HTTP 사양을 강하게 의식한 리소스 베이스의 접근을 제공. 최신의 프레임워크는 대 부분 RESTful 서비스를 만들 수 있는 기능 지원. WCF의 REST 서비스에서는 POX (P...
WCF - TCP Sample January 13, 2019
서버 WCF LIB namespace WCFServerLib { public interface IClientCallback { [OperationContract(IsOneWay = true)] void SendMessageToClient(string message); ...
WCF - Tips January 14, 2019
클라이언트가 요청 데이터를 null로 보내는 경우 대처 클라이언트에서 public RES_LOGIN_DATA RequestLogin(REQ_LOGIN_DATA reqData)을 요청한 경우 reqData을 null로 보낼 수 있음(악의적인 이유로). 그래서 아래처럼 요청 데이터를 ...
YOUTUBE - C# 네트워크 프로그래밍 공부 November 20, 2020
introselect 알고리즘 January 28, 2020
.NET 4.5 이상에서 컬렉션의 정렬 알고리즘에서 사용 https://github.com/Microsoft/referencesource/blob/master/mscorlib/system/collections/generic/arraysorthelper.cs
rasberry pi zero + C#으로 카메라 조작 June 14, 2017
nuget의 아래 모듈을 받는다. https://www.nuget.org/packages/Unosquare.Raspberry.IO/ GPIO 에 더해서 카메라 모듈도 조작할 수 있다. 이것을 사용하여 public static async Task SendImage() { v...
닷넷 코어 2.1은 어디로 향하고 있는가? April 4, 2018
원문 Microsoft의 Scott Hunter씨는 .NET Core 2.1에서의 동사의 계획을 발표했다. CLI 툴이 개발자의 편리한 사용을 대폭 향상시키는 것으로 보인다. Microsoft는 매일 50만명에 가까운 개발자의 적극적인 이용을 감시할 수 있다고 Hunter씨는 말...
번역 - .NET Hangfire January 15, 2020
번역 - Microsoft.IO.RecycableMemoryStream January 20, 2020
번역 - Rider 기능 소개 January 12, 2020
번역 - 폭권에 있어서 게임 에디터 설계와 구현 January 8, 2020
오래된 버전의 .NET Core 삭제 시 .NET Standard 2.0을 인식하지 못하는 문제 February 12, 2019
컴퓨터 정리를 하다가 여러 버전의 닷넷코어가 설치 되어 있어서 최신 버전(2.2.103)을 제외하고 이전 버전의 닷넷코어를 삭제하였다. 그런데 Visual Studio에서 ‘.NET Standard 2.0’을 찾지 못하는 문제가 발생하였다. 다행히 구글링 해보니 이 문제에 대한 답...
최소한으로 ASP.NET Web API 사이트 만들기 October 6, 2018
Visual Studio의 프로젝트 템플릿으로 만들면 불필요한 코드가 너무 많이 붙어 있음. 특히 Razor은 사용하지 않고 클라이언트 부분은 JavaScript를 사용하고 싶은 경우에 좋지 않음. Building Out a Clean, ...
프로그램을 관리자 권한으로 실행하는 코드 April 21, 2019
출처 권한을 확인하고 관리자 권한이 아니면 다른 프로세스로 관리 권한을 부여하고 다시 시작한다 Thread.GetDomain().SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); var pri = (WindowsPrincipal)Th...
AWS (1)
AWS - 1대의 EC2에서도 ELB을 사용하면 좋은 점 October 11, 2018
인스턴스 교체가 편리하다 운용을 시작한 후 EC2에 대해서 수정을 해야하는 경우 인스턴스 교체가 쉬워진다. DNS 변경을 할 필요 없이 백엔드 교체가 가능하다. ELB의 헬스 체크로 감시 ELB의 헬스 체크를 이용하여 WEB 서버가 죽었는지 감시를 할 수 있다. CloudWa...
Book (3)
책 - Unity 네트워크 게임 개발 실전 입문 UNET/니프티 클라우드 mobile backend(일서) February 18, 2018
Unityネットワークゲーム開発 実践入門 UNET/ニフティクラウド mobile backend版 책 내용은 크게 두개로 나누어진다. 전반부는 일본의 모바일 백엔드 서비스를 사용하는 방법(즉 한국 독자는 별로 도움 되지 않는다), 후반부는 UNET을 사용하는 방법을 설명한다. 아직...
책 - 러스트 핵심 노트(e-book) February 6, 2018
출판사: 한빛미디어 한빛미디어 2018년 2월에 읽은 책. 이전부터 미루다가 3~4일 동안에 다 보았다. Go 언어와 비슷한 부분이 있어서 Go 언어를 알면 공부하기 좋을 듯(물론 그 반대도) 원서가 Packt 출판사인데 책 내용이 좀 정리가 안 된 것 같고, 구성이 머...
책 - 모던 C 언어 프로그래밍 IDE, 디자인 패턴, XP, TDD, 리팩터링, 지속적인 통합 February 5, 2018
출판사: 위키북스 yes24 2016년에 읽었던 책이다. C 언어를 기초부터 가르쳐주는 책이 아니다. C 언어를 알고 있는 사람을 대상으로 하고 있다. 오래된(?) 언어인 C 언어를 현대에 맞게 사용할 수 있는 툴과 기법을 알려준다. 특히 C 언어에 디자인패턴을 사용하는...
C (1)
C99의 sizeof와 가변길이 배열 April 12, 2017
C99 에서는 배열의 사이즈 지정에 변수를 사용할 수 있다. void test1( int n ) { int fixed_array[10]; int varlen_array[n]; printf( "sizeof(fixed_array)==%ld\n", sizeof(fixed_...
C++ (382)
AWS Lambda에서 C++ 프로그램 실행하기 December 24, 2018
이 글을 번역한 것이다. re:Invent 2018에서 AWS Lambda의 새로운 기능, Custom Runtime이 발표 되었다. 이 기능은 Custom Runtime을 준비하는 것으로서 임의의 언어로 Lambda를 사용할 수 있다. Custom Runtime은 직접 구현해...
Boost 라이브러리 설치하기 July 1, 2019
설치 Linux Boost 라이브러리 공식 사이트에서 다운로드 후 압축 풀기 압축을 푼 디렉토리로 이동 후 아래처럼 입력 $ ./bootstrap.sh 생성된 b2를 사용하여 Boost 라이브러리 빌드하기 $ ./b2 toolset=gcc link=static ...
Boost.Asio 공부하기 March 17, 2017
나는 2007년부터 Boost.Asio를 온라인 게임 서버 개발에 처음 사용하였다(업무에 사용하는 것을 말한다.그전에 공부는 했었다) 당시 주위의 게임 개발자를 통해서 생각외로 사용하는 곳이 꽤 있었다. 이 후 한국 및 해외의 유명 회사들도 C++ 네트워크 프로그래밍에 사용하고 ...
C++ - 4개의 auto, 4개의 C++ 규격 December 12, 2019
원문 2020년에 출시될 예정인 「C++20」에서는 아래와 같은 함수 템플릿을 쓸 수 있다. cpp20.cpp template <auto N> auto func(auto x) { auto r = N + x; return r; } // 호출 예 assert( ...
C++ - 5가지 알고 싶은 람다 예제. 재귀, constexpr, 컨테이너 등 June 30, 2022
C++ - 6-tips-to-supercharge-c11-vector-performance May 19, 2017
NHN Next의 학생이 C++ Advance 수업의 과제로 번역 정리한 것이다. 원문 슬라이드 쉐어
C++ - A simple C++11 Thread Pool implementation May 25, 2017
NHN Next의 학생이 C++ Advance 수업의 과제로 번역 정리한 것이다. Github의 코드 위 코드를 설명한 문서
C++ - AWS SDK for C++을 이용해서 Amazon DynamoDB 사용하기 September 16, 2020
C++ - Aggregates(집성체) September 11, 2020
출처 Aggregates(이하, 집성체)는 배열과 아래의 조건을 충족한 클래스이다. 사용자 정의 생성자(복사, 무브 포함)이 없음. 생성자는 전혀 기술되지 않거나 default 지정된 상태다. 모든 데이터 멤버가 public 이다. st...
C++ - Argument Dependent Lookup August 5, 2020
출처 C++ 언어가 가진 화려한 기구의 하나로 ADL(Argument Dependent Lookup)라는 것이 있다. 번역하면 “실 매개 변수 의존 이름 검색”으로 읽고, 글씨처럼 “실 매개 변수”에 의존하는 “이름 검색”이 된다. ADL의 동작 코드를 보면서 차례로 이해해 보...
C++ - Boehm 알고리즘 GC라이브러리 사용하기 March 12, 2020
출처 C++에서 GC(가베지컬렉션)를 사용할 수 있게 해주는 라이브러리 이다. 1. 소스 코드 다운로드 다운로드 페이지에서 다운로드. 특별한 이유가 없으면 ‘recent stable release” 버전을 다운로드. 압축을 푼다. 2. 솔루션 파일 만들기 솔루션을 만들기 위해...
C++ - Boost 라이브러리 빌드 링크 모음 November 6, 2017
Windows Boost 라이브러리 빌드 및 설치 - VC++ (VS2012, Boost 1.53) boost 간단 설치기 (Windows환경) - VS 2010 중심 Boost 64비트로 빌드하기 VS2008에서 Boost 빌드하기 버전 별로 이미 빌드된 라이브러리 배포하는 사...
C++ - Boost 라이브러리의 간단하면서 유용한 것들 August 19, 2020
몇 년전에 강의에 사용했던 글이다.
C++ - Boost 라이브러리의 모든 것 (1.60 버전까지) December 23, 2019
5년 전에 번역 정리했던 글입니다
C++ - Boost 타이머 취소하기 March 9, 2020
출처 타이머를 다시 이용하지 않는 경우 상태 변수를 추가하지 않고 취소를 알 수 있다. #include <iostream> #include <boost/asio.hpp> #include <boost/asio/steady_timer.hpp> int...
C++ - Boost.Asio에서 Boost.Chrono 베이스의 타이머 사용 December 11, 2019
Boost 1.49.0 버전에서 Boost.Chrono 베이스의 타이머가 도입 되었다. basic_waitable_timer : 클락 전환용 system_timer : system_clock용 타이머 steady_timer : steady_clock용 타이머 hig...
C++ - Boost의 object_pool 사용은 비 추천 September 15, 2017
boost 라이브러리에는 메모리 풀 라이브러리로 object_pool 이라는 것이 있다. 사용법은 아래와 같다. boost::object_pool<int> pool; int* p = pool.construct(10); pool.destroy(p); 사용하면 안 되는...
C++ - C 언어 보다 왜 컴파일이 느릴까? June 17, 2020
일반적으로 C++로 작성된 코드가 C 보다 컴파일 시간이 느린 이유 그 이유는 주로 아래의 5개이다. C++ 문법의 복잡성, 소스 코드의 parse(어휘 분석, 구문 분석, 의미 분석)에 시간을 요하고 있다 템플릿의 실체화에 시간이 걸린다 복잡한 최적화를 실시 할 필요...
C++ - C#의 region 사용하기 September 20, 2019
VC 에서는 개요 확장/축소 기능이 있다. 클래스, 함수, if 문 등을 개요 축소로 화면에 시작 줄만 표시할 수 있다. 긴 코드를 핵심만 보고 싶을 때 사용하면 유용하다. 그런데 아래와 같은 변수들의 나열은 개요 축소를 할 수 없다. const int TEXT_1 = 1; co...
C++ - C++ attributes를 좋아하는 이유 July 29, 2022
C++ - C++ callback 디자인패턴 March 23, 2022
C++ - C++ 메모리 모델 May 20, 2022
C++ - C++ 반복자(이터레이터) 만들기 March 31, 2022
C++ - C++ 언어의 명명 규칙들 일부 조사 January 15, 2023
C++ - C++ 표준 위원회 문서 P0563R0:Vector Front Operations (pdf) September 7, 2020
흥미로운 글이 있어서 일부 번역했습니다.(오랜전에) (원본 https://cpplover.blogspot.kr/2017/02/c-p0550r0-p0601r0.html ) PDF P0563R0:Vector Front Operations vector에 push_front와 po...
C++ - C++ 표준으로 와일드 문자열과 멀티바이트 문자열을 상호 변환하기 March 29, 2023
C++ - C++ 프로그래밍의 생산성을 약간 향상시키는 Visual Studio 기능(2023년) January 15, 2024
C++ - C++/CLI February 1, 2019
클래스(class), 핸들(^) C++/CLI에서 관리 클래스는 ‘ref’라는 키워드를 사용하여 만든다. 비 관리 클래스 class Test { }; 관리 클래스 ref class Test { }; 관리 클래스는 ‘ref’를 제외하고는 외관상으로는 비 ...
C++ - C++03과 C++11 싱글톤 구현 차이 February 1, 2018
C++11에는 ‘C++11 - 블럭 범위를 가진 static 변수 초기화는 스레드 세이프 하다’ 라는 기능이 생겼다. 그래서 아래와 같이 쉽게 싱글톤 인스턴스 생성 가능하다. template <typename T> inline T& Singleton<T&g...
C++ - C++11 메모리 모델 April 24, 2022
C++ - C++11 스마터 포인터에서 피해야할 실수 Top 10 July 4, 2020
몇 년전에 웹에 공개된 글을 보고 번역했던 글이다.
C++ - C++11 이후에서 JSON 문자열에서 정적 클래스(or struct)에 값을 복원하기(StaticJSON, jsoncons, spotify-json, nlohmann json) January 1, 2022
C++ - C++11 조건 변수와 spurious wakeup May 29, 2022
C++ - C++11에서 std::vector 타입의 변수에서 타입 T를 알아내기 February 5, 2022
</a></h3>
C++ - C++11에서 추가된 사이즈 엄밀한 정수 타입 July 15, 2020
출처
C++11에서 새로 추가됨
int8_t, int16_t, int32_t, int64_t, uint8_t, uint16_t, uint32_t, uint64_t, int_fast8_t, int_fast16_t, int_fast32_t, int_fast64_t, uint_fast...
C++ - C++11의 Universal Initialization은 언제라도 사용하는 것이 좋을까? June 15, 2020
3,4년 전쯤에 번역했던 것을 공유한다
C++ - C++11의 memory_order 구분 December 13, 2021
C++ - C++17시대 Herb Sutter씨에게 듣는다 December 19, 2017
원문
Herb Suttrer씨는 소프트웨어 개발의 제일인자로 “Exceptional C++” 이나 “C++Coding Standars”라는 책을 집필했다.
ISO C++ 표준 위원회 위원장을 15년간 맡음과 더불어 Microsoft에서는 소프트웨어 아키텍트로서 C++/CLI, C...
C++ - C++20 Designated initializers January 20, 2021
출처
Designated initializers(지시 붙은 초기화) C++20 에서 집성체 초기화 때에 데이터 멤버를 지정하는 구문이다.
struct(class)
struct A
{
int x = 0;
int y = 0;
int z = 0;
};
A a{...
C++ - C++20 Synchronized Buffered Ostream August 21, 2022
C++ - C++20 std::ranges::views <-> vector 사용 예 March 14, 2023
C++ - C++20 모듈에 대해서 April 7, 2023
C++ - C++23 P2740R0 Simpler implicit dangling resolution January 18, 2024
C++ - C++23 std::print 소개 April 13, 2024
C++ - C++를 공부할 때 도움이 되는 C++ MS Docs 사이트 October 1, 2019
마이크로 소프트사의 개발자 지원 중에서 예전부터 칭찬을 받는 것 하나가 풍부한 문서를 제공하는 것이다.
예전에는 MSDN 이라는 사이트에 가서 MS가 만든 다양한 기술 문서를 보았다.
몇 년전부터는 MS는 Docs 라는 사이트를 만든 후 여기에 문서를 업데이트 하고, 이전 문서는...
C++ - C++에서 ULID 생성 November 30, 2023
C++ - C++에서 http 요청하기(cpp-httplib + nlohmann.json) November 21, 2023
C++ - C++의 dangling 검출, 제안 문서 버전 1.0 공개 October 21, 2018
출처
C++의 저명한 개발자, ISO C++ 표준위원회의 위원장 Herb Sutter씨가 dangling(잘못된 영역에 대한 잘못된 참조)의 검출 방법을 제안하는 문서 “Lifetime Safety: Preventing Common Danglng”의 버전 1.0을 공개 했다.
C...
C++ - C++의 가장 일반적이면서 가장 중요한 Rule November 5, 2022
출처: The Design and Evolution of C++ (by Bjarne Stroustrup)
C++의 진화는 현실의 문제를 그 동인(動因)으로 한다
완전주의에 연연하지 않는다
C++은 지금 유용한 언어이어야 한다
어떤 기능도 알기 쉬운 구현을 가져야 ...
C++ - C4100 경고를 없애주는 UNREFERENCED_PARAMETER 매크로 September 7, 2019
VC에서 경고 레벨 4로 컴파일 하면 자주 볼 수 있는 경고주 하나가 아래와 같은 경고이다.
warning C4100: 'argc' : unreferenced formal parameter
warning C4100: 'argc' : 참조되지 않은 형식 매개 변수입니다.
&l...
C++ - CAtlMap에서 KEY 값을 두 개 사용하고 싶을 때 May 18, 2019
예제 코드
#include <atlcoll.h>
#include <boost/functional/hash.hpp> // hash를 만들기 위해 사용
// KEY가 될 유저 정의형
struct FRIENDKEY
{
union
{
...
C++ - CEDEC 2020 - 게임 개발자를 위한 C++11에서 C++20 장래의 Cpp 전망.pdf December 28, 2023
pdf 다운로드
C++ - CMake 사용법 및 예제 코드 January 2, 2019
GitHub 저장소에 공개하였다.
CMake 기초 설명과 예제 코드가 있다
C++ - Core Guidelines Checker와 GSL 도입 February 25, 2020
출처
시작하기
C++ Core Guidelines Checker는?
주로 Bjarne Stroustrup과 Herb Sutter에 의한 C++ Core Guidelines는 더 나은 C++ 코드를 작성하는데 필요한 지침이 정비 되어 있다. 이 지침의 많은 항목은 분석 도구를 통해...
C++ - DO-WHILE에 의한 매크로 트랩핑 July 2, 2020
출처
#ifdef _DEBUG
#define DEBUG_LOG(exp, ...) do {if (!(exp)){std::printf(__VA_ARGS__);}} while(0)
#else
#define DEBUG_LOG(exp, ...) do {(void)(exp);} ...
C++ - Delay Queue December 13, 2023
C++ - Delegate 라이브러리 May 20, 2019
상호 참조를 할 경우, 상호 참조 되는 클래스 중 둘 중 하나가 변경될 경우 상호 컴파일이 일어난다
-> 작은 프로젝트라면 모르겠지만 대규모 프로젝트에서는 작은 소스 수정 하나가 큰 짐이 될 수 있다
그리고 설계 상 상호 참조를 하고 있다는 것은 좋지 않다.
상호 참조를 하...
C++ - EASTL January 24, 2018
GitHub EASTL
게임 회사 EA에서 오픈 소스로 공개한 것으로 C++ STL을 게임 개발에 맞게 고친 STL 이다.
크로스플랫폼을 지원하고 Visual Studio 2017을 지원한다.
빌드는 Cmake를 사용한다.
관련 글
일어로 된 글은 네이버 번역기로 보면 된...
C++ - Ecosystem International Standard February 19, 2023
C++ - Google Test/Mock 기능 정리 April 30, 2020
원문
매크로
TEST(), TEST_F(),TEST_P()
https://github.com/google/googletest/blob/master/googletest/docs/primer.md#simple-tests
TEST(TestSuiteName, TestName) {
...
C++ - INI 파일 읽기/쓰기를 일괄적으로 할 수 있는 라이브러리 inifile-cpp November 5, 2023
C++ - Iterator 만들기 May 18, 2020
3,4년 전쯤에 번역했던 것을 공유한다
C++ - JSON for Modern C++ 이 버전 3.1로 August 30, 2018
원문
JSON for Modern C ++ 3.1 에서는 Universal Binary JSON(UBJSON) 기능 지원 및 JSON Merge Patch가 새롭게 추가 되었다.
UBJSON는 JSON for Modern C++에서 지원하는 여러 가지 형식의 하나로, 인코딩 크...
C++ - LLVM Sanitizer December 23, 2020
C++ - Linux C/C++ 자작 라이브러리 제작 환경 구축 February 20, 2022
C++ - Linux 커널에서 배우는 C 언어 매크로 July 19, 2022
C++ - Linux, UDP - 100만 pps를 수신하는 프로그램을 만드는 것의 어려움 July 29, 2021
C++ - Linux에서 Poco 라이브러리 사용하기 November 29, 2021
C++ - Makefile 만들기(초보자용) October 14, 2020
C++ - Modern C++에서 컴파일 시간 줄이는 방법 November 10, 2020
C++ - NEW 구현 August 7, 2020
출처
new는 인수로 사이즈를 받지만 표준 new는 size가 0에서도 올바르게 동작하는 것을 규격으로 정하고 있다.
직접 구현 할 때에 의식하면 약간으로 규격에 준한 코드가 되어서 좋다.
void* operator new(std::size_t size) {
if (siz...
C++ - OpenSiv3D 번역/정리 December 17, 2019
C++ - PLAIN OLD DATA July 26, 2020
출처
C++의 POD(Plain Old Data)는 C언어의 데이터와 호환을 가진 데이터 구조이다.
memcpy로 데이터를 복사하거나 하지만 그것은 본질적인 것이 아니지만 어쨌든 POD의 가장 큰 의미는 C 언어의 데이터와 bit 수준으로 완전히 호환을 갖는다는 것이다.
C+...
C++ - POD 타입의 기본 초기화 September 26, 2019
출처
C++ 에서는 변수의 선언이나 new 식에서 생성자에 넘기는 인수가 빈 경우는 인수 리스트를 생략할 수 있다.
class foo {
// 생략
};
int
main(void) {
// ↓ 어느쪽을 사용해도 같다
foo a;
foo b{};
...
C++ - PPL 병렬 컨테이너와 Asynchronous Agents May 23, 2017
NHN Next의 학생이 C++ Advance 수업의 과제로 번역 정리한 것이다.
PPL 병렬 컨테이너 슬라이드 쉐어
Asynchronous Agents 슬라이드 쉐어
C++ - PRIVATE 멤버에 합법적으로 접근하기 July 19, 2020
출처
class Employer{
float time_for_game_;//게임 시간
float time_for_anime_;//애니메이션의 시간
float time_for_family_;//가족과의 시간
public:
float time_for_work_;//일의 시간
//...
C++ - PVS-Studio 설치 및 사용 September 6, 2020
C++ - Poco 라이브러리 네트워크 프로그래밍 예제 코드 GitHub 저장소 December 24, 2019
GitHub에 C++ 오픈 소스 Poco를 사용한 네트워크 라이브러리 예제 코드를 정리한 저장소이다.
Poco_network_sample
Poco_network_sample 저장소가 도움이 되었다면 스타 부탁한다~
C++ - Python의 print()와 비슷한 cpp-dump December 6, 2023
C++ - RAII idiom에 대한 글 번역 March 17, 2020
몇 년전에 번역했던 글로 RAII idiom에 대한 글이다.
번역이 좀 거친편이다^^;
C++ - Range based for 정리 January 21, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
<a href="https://jacking75.github.io/Cpp-0321/" title="C++ - RapidJSON 또는 simdjson 보다 빠르고, C 언어에서 사용할 수 있는 JSON 라이브러리 "yyjson"">C++ - RapidJSON 또는 simdjson 보다 빠르고, C 언어에서 사용할 수 있는 JSON 라이브러리 "yyjson"
March 21, 2023
</a>
February 5, 2022
</a></h3>
C++ - C++11에서 추가된 사이즈 엄밀한 정수 타입 July 15, 2020
출처 C++11에서 새로 추가됨 int8_t, int16_t, int32_t, int64_t, uint8_t, uint16_t, uint32_t, uint64_t, int_fast8_t, int_fast16_t, int_fast32_t, int_fast64_t, uint_fast...
C++ - C++11의 Universal Initialization은 언제라도 사용하는 것이 좋을까? June 15, 2020
3,4년 전쯤에 번역했던 것을 공유한다
C++ - C++11의 memory_order 구분 December 13, 2021
C++ - C++17시대 Herb Sutter씨에게 듣는다 December 19, 2017
원문 Herb Suttrer씨는 소프트웨어 개발의 제일인자로 “Exceptional C++” 이나 “C++Coding Standars”라는 책을 집필했다. ISO C++ 표준 위원회 위원장을 15년간 맡음과 더불어 Microsoft에서는 소프트웨어 아키텍트로서 C++/CLI, C...
C++ - C++20 Designated initializers January 20, 2021
출처 Designated initializers(지시 붙은 초기화) C++20 에서 집성체 초기화 때에 데이터 멤버를 지정하는 구문이다. struct(class) struct A { int x = 0; int y = 0; int z = 0; }; A a{...
C++ - C++20 Synchronized Buffered Ostream August 21, 2022
C++ - C++20 std::ranges::views <-> vector 사용 예 March 14, 2023
C++ - C++20 모듈에 대해서 April 7, 2023
C++ - C++23 P2740R0 Simpler implicit dangling resolution January 18, 2024
C++ - C++23 std::print 소개 April 13, 2024
C++ - C++를 공부할 때 도움이 되는 C++ MS Docs 사이트 October 1, 2019
마이크로 소프트사의 개발자 지원 중에서 예전부터 칭찬을 받는 것 하나가 풍부한 문서를 제공하는 것이다. 예전에는 MSDN 이라는 사이트에 가서 MS가 만든 다양한 기술 문서를 보았다. 몇 년전부터는 MS는 Docs 라는 사이트를 만든 후 여기에 문서를 업데이트 하고, 이전 문서는...
C++ - C++에서 ULID 생성 November 30, 2023
C++ - C++에서 http 요청하기(cpp-httplib + nlohmann.json) November 21, 2023
C++ - C++의 dangling 검출, 제안 문서 버전 1.0 공개 October 21, 2018
출처 C++의 저명한 개발자, ISO C++ 표준위원회의 위원장 Herb Sutter씨가 dangling(잘못된 영역에 대한 잘못된 참조)의 검출 방법을 제안하는 문서 “Lifetime Safety: Preventing Common Danglng”의 버전 1.0을 공개 했다. C...
C++ - C++의 가장 일반적이면서 가장 중요한 Rule November 5, 2022
출처: The Design and Evolution of C++ (by Bjarne Stroustrup) C++의 진화는 현실의 문제를 그 동인(動因)으로 한다 완전주의에 연연하지 않는다 C++은 지금 유용한 언어이어야 한다 어떤 기능도 알기 쉬운 구현을 가져야 ...
C++ - C4100 경고를 없애주는 UNREFERENCED_PARAMETER 매크로 September 7, 2019
VC에서 경고 레벨 4로 컴파일 하면 자주 볼 수 있는 경고주 하나가 아래와 같은 경고이다. warning C4100: 'argc' : unreferenced formal parameter warning C4100: 'argc' : 참조되지 않은 형식 매개 변수입니다. &l...
C++ - CAtlMap에서 KEY 값을 두 개 사용하고 싶을 때 May 18, 2019
예제 코드 #include <atlcoll.h> #include <boost/functional/hash.hpp> // hash를 만들기 위해 사용 // KEY가 될 유저 정의형 struct FRIENDKEY { union { ...
C++ - CEDEC 2020 - 게임 개발자를 위한 C++11에서 C++20 장래의 Cpp 전망.pdf December 28, 2023
pdf 다운로드
C++ - CMake 사용법 및 예제 코드 January 2, 2019
GitHub 저장소에 공개하였다. CMake 기초 설명과 예제 코드가 있다
C++ - Core Guidelines Checker와 GSL 도입 February 25, 2020
출처 시작하기 C++ Core Guidelines Checker는? 주로 Bjarne Stroustrup과 Herb Sutter에 의한 C++ Core Guidelines는 더 나은 C++ 코드를 작성하는데 필요한 지침이 정비 되어 있다. 이 지침의 많은 항목은 분석 도구를 통해...
C++ - DO-WHILE에 의한 매크로 트랩핑 July 2, 2020
출처 #ifdef _DEBUG #define DEBUG_LOG(exp, ...) do {if (!(exp)){std::printf(__VA_ARGS__);}} while(0) #else #define DEBUG_LOG(exp, ...) do {(void)(exp);} ...
C++ - Delay Queue December 13, 2023
C++ - Delegate 라이브러리 May 20, 2019
상호 참조를 할 경우, 상호 참조 되는 클래스 중 둘 중 하나가 변경될 경우 상호 컴파일이 일어난다 -> 작은 프로젝트라면 모르겠지만 대규모 프로젝트에서는 작은 소스 수정 하나가 큰 짐이 될 수 있다 그리고 설계 상 상호 참조를 하고 있다는 것은 좋지 않다. 상호 참조를 하...
C++ - EASTL January 24, 2018
GitHub EASTL 게임 회사 EA에서 오픈 소스로 공개한 것으로 C++ STL을 게임 개발에 맞게 고친 STL 이다. 크로스플랫폼을 지원하고 Visual Studio 2017을 지원한다. 빌드는 Cmake를 사용한다. 관련 글 일어로 된 글은 네이버 번역기로 보면 된...
C++ - Ecosystem International Standard February 19, 2023
C++ - Google Test/Mock 기능 정리 April 30, 2020
원문 매크로 TEST(), TEST_F(),TEST_P() https://github.com/google/googletest/blob/master/googletest/docs/primer.md#simple-tests TEST(TestSuiteName, TestName) { ...
C++ - INI 파일 읽기/쓰기를 일괄적으로 할 수 있는 라이브러리 inifile-cpp November 5, 2023
C++ - Iterator 만들기 May 18, 2020
3,4년 전쯤에 번역했던 것을 공유한다
C++ - JSON for Modern C++ 이 버전 3.1로 August 30, 2018
원문 JSON for Modern C ++ 3.1 에서는 Universal Binary JSON(UBJSON) 기능 지원 및 JSON Merge Patch가 새롭게 추가 되었다. UBJSON는 JSON for Modern C++에서 지원하는 여러 가지 형식의 하나로, 인코딩 크...
C++ - LLVM Sanitizer December 23, 2020
C++ - Linux C/C++ 자작 라이브러리 제작 환경 구축 February 20, 2022
C++ - Linux 커널에서 배우는 C 언어 매크로 July 19, 2022
C++ - Linux, UDP - 100만 pps를 수신하는 프로그램을 만드는 것의 어려움 July 29, 2021
C++ - Linux에서 Poco 라이브러리 사용하기 November 29, 2021
C++ - Makefile 만들기(초보자용) October 14, 2020
C++ - Modern C++에서 컴파일 시간 줄이는 방법 November 10, 2020
C++ - NEW 구현 August 7, 2020
출처 new는 인수로 사이즈를 받지만 표준 new는 size가 0에서도 올바르게 동작하는 것을 규격으로 정하고 있다. 직접 구현 할 때에 의식하면 약간으로 규격에 준한 코드가 되어서 좋다. void* operator new(std::size_t size) { if (siz...
C++ - OpenSiv3D 번역/정리 December 17, 2019
C++ - PLAIN OLD DATA July 26, 2020
출처 C++의 POD(Plain Old Data)는 C언어의 데이터와 호환을 가진 데이터 구조이다. memcpy로 데이터를 복사하거나 하지만 그것은 본질적인 것이 아니지만 어쨌든 POD의 가장 큰 의미는 C 언어의 데이터와 bit 수준으로 완전히 호환을 갖는다는 것이다. C+...
C++ - POD 타입의 기본 초기화 September 26, 2019
출처 C++ 에서는 변수의 선언이나 new 식에서 생성자에 넘기는 인수가 빈 경우는 인수 리스트를 생략할 수 있다. class foo { // 생략 }; int main(void) { // ↓ 어느쪽을 사용해도 같다 foo a; foo b{}; ...
C++ - PPL 병렬 컨테이너와 Asynchronous Agents May 23, 2017
NHN Next의 학생이 C++ Advance 수업의 과제로 번역 정리한 것이다. PPL 병렬 컨테이너 슬라이드 쉐어 Asynchronous Agents 슬라이드 쉐어
C++ - PRIVATE 멤버에 합법적으로 접근하기 July 19, 2020
출처 class Employer{ float time_for_game_;//게임 시간 float time_for_anime_;//애니메이션의 시간 float time_for_family_;//가족과의 시간 public: float time_for_work_;//일의 시간 //...
C++ - PVS-Studio 설치 및 사용 September 6, 2020
C++ - Poco 라이브러리 네트워크 프로그래밍 예제 코드 GitHub 저장소 December 24, 2019
GitHub에 C++ 오픈 소스 Poco를 사용한 네트워크 라이브러리 예제 코드를 정리한 저장소이다. Poco_network_sample Poco_network_sample 저장소가 도움이 되었다면 스타 부탁한다~
C++ - Python의 print()와 비슷한 cpp-dump December 6, 2023
C++ - RAII idiom에 대한 글 번역 March 17, 2020
몇 년전에 번역했던 글로 RAII idiom에 대한 글이다. 번역이 좀 거친편이다^^;
C++ - Range based for 정리 January 21, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
<a href="https://jacking75.github.io/Cpp-0321/" title="C++ - RapidJSON 또는 simdjson 보다 빠르고, C 언어에서 사용할 수 있는 JSON 라이브러리 "yyjson"">C++ - RapidJSON 또는 simdjson 보다 빠르고, C 언어에서 사용할 수 있는 JSON 라이브러리 "yyjson"
March 21, 2023
</a>
C++ - Recommendations to speed C++ builds in Visual Studio May 22, 2017
NHN Next의 학생이 C++ Advance 수업의 과제로 번역 정리한 것이다. 원문 슬라이드 쉐어
C++ - Redis 사용 방법 정리 GitHub 저장소 December 15, 2019
GitHub에 C++에서 Redis 클라이언트 라이브러리에 대해서 간단하게 정리하였다. jacking75/examples_cpp_redis 만약 Redis를 key-value 정도로 간단하게 사용한다면 RedisCpp-hiredis 와 redis_client 를 추천한다. hir...
C++ - Return Value Optimization과 move semantics February 4, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
C++ - SFINAE 정리 January 20, 2024
C++ - SSO(Small-string optimization) January 2, 2018
보통 std::string는 문자열을 확보할 때 동적으로 메모리를 확보하지만 작은 크기의 문자열의 경우는 동적 할당은 성능적으로 낭비이므로 동적 할당을 하지 않는 최적화가 구현 되어 있고 이것을 SSO 라고 한다. 아래처럼 std::string 안에 문자열을 저장할 수 있는 버퍼...
C++ - STL function, lambda, bind 사용 예 June 5, 2019
/* * std_function1.cpp * Copyright (C) 2014 kaoru <kaoru@bsd> */ #include <iostream> #include <functional> using namespace std; struct...
C++ - STL map에 함수 포인터 사용 June 5, 2019
#include <iostream> #include <map> #include <string> double Add(double a, double b){ return a + b; } double Sub(double a, double b){ retur...
C++ - STL map에서 선형 탐색을 하면 안되는 이유 April 12, 2020
몇 년전에 번역했던 글이다. 번역이 좀 거친편이다^^;
C++ - STL 컨테이너의 인스턴스에서 요소의 Type 얻기 June 12, 2020
template<class T> struct foo{ T operator()( ... ){ ... }; }; std::array< double, ... > a = ; bar( foo< >() ); // < > 안에 a의 요소 타입 ...
C++ - STL의 sort와 search May 1, 2020
C++ - State 패턴으로 CSV 파일을 읽자 June 9, 2017
NHN Next의 학생이 C++ Advance 수업의 과제로 번역 정리한 것이다. [원문] State 패턴으로 CSV 파일을 읽자 슬라이드쉐어
C++ - StdAfx.h에 관한 고찰 March 28, 2020
C++ - The Observable C++ library June 8, 2017
NHN Next의 학생이 C++ Advance 수업의 과제로 번역 정리한 것이다. [원문] The Observable C++ library – implementing the observer pattern Observable C++ expressions – using the Obs...
C++ - TimingWheel 알고리즘을 사용한 타이머 February 27, 2020
자세한 설명은 http://d2.naver.com/helloworld/267396. 타임아웃 작업의 만료 여부에 대한 검사가 필요 없는 등록과 실행 두 작업만을 모두 O(1)의 시간 복잡도로 처리할 수 있는 타이머를 구현할 수 있다. 출처: https://github....
C++ - UNIX 소켓 (AF_UNIX)를 이용하여 Win32 프로세스간에 프로세스 간 통신 January 31, 2021
C++ - Ubuntu 18 에서 g++(gcc) 설치 September 16, 2018
출처: https://linuxconfig.org/how-to-install-g-the-c-compiler-on-ubuntu-18-04-bionic-beaver-linux 우분투 18 에서 apt-get으로 설치하는 g++ 버전은 7.3 이다. 7.3 버전은 C++17 표준을 지...
C++ - Ubuntu에 clang, libc++-, lldb 설치하기 October 8, 2018
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add - echo deb http://apt.llvm.org/stretch/ llvm-toolchain-stretch-6.0 main>> /etc/ap...
C++ - VC++ 디버깅 기능 소개 September 21, 2020
C++ - VC++ 에서 링크 에러가 발생하는 경우 August 12, 2020
VC++을 사용할 때 링크 오류가 발생하여 시간을 허비하는 경우가 있다. 보통 아래의 이유로 링크 오류가 발생하는 경우가 많다. 문자 코드의 취급이 같지 않다. Use Unicode Character Set, Use Multi-Byte Character Set [C/C++][C...
C++ - VC용으로 빌드된 Boost 라이브러리 얻기 October 27, 2017
VC용으로 빌드된 Boost 라이브러리 Lib 파일을 제공하고 있다. 다운로드 페이지이다. Boost 라이브러리의 다양한 버전 및 VC의 버전 별로 준비 되어 있다.
C++ - VSCode에서 경쟁적 프로그래밍 환경(C++)을 구축하기 November 11, 2023
C++ - Virtual 전파 July 27, 2020
이 Box 클래스를 public 계승해도 안전할까? class Box : public Object { public: Box(); ~Box(); }; 정답은…이 정보만으로는 뭐라고 말할 수 없다 이다. 얼핏 보면 안 되다고 느끼는 사람도 많을 걸로 생각한다.특히 c...
C++ - Visual C++ 에서의 std::chrono의 고해상도 시계 January 16, 2018
Visual Studio 2015 이전에는 std::chrono(high_resolution_clock을 사용해도)로 시간 측정을 하면 nano 단위로는 측정할 수 없었다. 그래서 VC에서 nano 단위로 측정하려면 이전처럼 Win32 API인 PerformanceCounter...
C++ - Visual C++에서 Intellisense의 경고를 억제하는 방법의 경고를 억제하는 방법 February 24, 2023
C++ - Visual C++에서 UTF-8 소스 코드를 사용하는 방법 October 21, 2019
출처 전제 최신 msbuild가 필요하다. VisualStudio 2017 Community Edition을 설치하면 자동으로 설치 될 것이다. 경로가 통하지 않는 경우 다음 명령을 실행 msbuild을 사용할 수 있게하자. set PATH=%PATH%;%PROGRAMFILES(...
C++ - Visual C++의 코드 분석을 지지하는 SAL August 6, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
C++ - Visual Studio 2017 15.7이 C++17 완전 준수 July 5, 2018
원문 Microsoft는 Visual Studio 2017 15.7 일반용 제공을 발표했다. InfoQ는 VS2017의 7번째 메이저 업데이트 개발을 쫓아왔다. 이것에 의해 IDE 전체의 많은 영역이 개선되었다. 이 업데이트는 현재 복사본을 덮어 설치할 수 있지만, 반면에 새로...
C++ - Visual Studio 2017 에서 최신 C++ 기능 사용하기 November 22, 2017
Visual Studio 2017에서는 C++17 및 C++20에 들어갈 기능이 일부 구현 되어 있다. 그러나 이 기능들은 그냥은 사용할 수 없고 컴파일러 옵션에서 사용함을 선언해야 한다. (C++17 기능 중 VS 업데이트를 통해서 구현된 기능은 보통 바로 사용할 수 없다.) ...
C++ - Visual Studio 2019에서 구문 검사에서 정형까지 자동화하는 방법 September 18, 2022
C++ - Visual Studio 2019의 C++ 프로젝트에서 새로 만드는 파일의 인코딩을 UTF-8로 하는 방법 February 14, 2020
C++ - Visual Studio 2022에서 배열 범위를 벗어난 접근을 쉽게 알 수 있는 방법 December 14, 2022
C++ - Visual Studio Code에서 C/C++ 프로그래밍 November 26, 2021
C++ - Visual Studio에서 C++ Core Guidelines 사용하기 October 1, 2023
C++ - Visual Studio에서 라이브러리 같은 외부 코드의 경고가 나오지 않도록 하는 방법 January 1, 2023
C++ - Win32 시스템 정보 얻기(Code) June 3, 2019
출처 win32_systemInfo.h #pragma once #include <cstdint> #include <vector> #include <string> #include <memory> #include <rapid/uti...
C++ - Win32API 스레드 풀을 사용하는 타이머 February 26, 2020
Windows Vista부터 사용 가능. CreateThreadpoolTimer, SetThreadpoolTimer API 사용. ‘윈도우 시스템 프로그램을 구현하는 기술(한빛미디어)’에 설명이 잘 나와 있음 예제 코드 출처: https://github.com/...
C++ - Win32API 실행 파일의 full path 얻기 January 28, 2020
Win32 API의 ‘GetModuleFileName’ 함수 사용. std::wstring getApplicationFilePath() { wchar_t fileName[MAX_PATH] = { 0 }; ::GetModuleFileNameW(nullptr, fil...
C++ - Windows Implementation Libraries (WIL) September 20, 2023
C++ - Windows Performance Analayzer로 C++ 빌드 시간을 프로파일링 해 보자 September 29, 2020
C++ - Windows 에서 hiredis 사용하기 March 2, 2018
MS에서 Windows용으로 redis를 포팅한 것이 있어서 여기서 hiredis 윈도우 버전을 구할 수 있다. 아래 글은 MS가 윈도우로 포팅한 redis 프로젝트를 기준으로 한 것인데 얼마전에 hiredis 부분만 따로 떨어져 나온 프로젝트가 공개 되었다(이 글은 2017년 ...
C++ - Windows 텍스트 인코딩 변환 June 12, 2019
Ansi <-> UTF-8 std::string CGlobal::ToUFT8( const char* pszIn ) { std::string resultString; int nLenOfUni = 0, nLenOfUTF = 0; wchar_t* us...
C++ - Windows에서 hiredis 빌드하기 August 29, 2020
C++ - Windows의 LFH April 14, 2020
C++ - Writing modern C++ code. how C++ has evolved over the years August 10, 2020
몇 년전에 번역 했던 글이다. Herb Sutter씨의 2011년 “Writing modern C++ code: how C++ has evolved over the years” 강연 문서이다. 문서 하단의 설명 부분에 Herb Sutter씨의 말을 일본어로 번역된 것이 있어서 이...
C++ - [번역] C++ 포인터 부트 캠프 November 23, 2019
3,4년 전에 번역했던 문서
C++ - [번역] nested class와 로컬 클래스 January 4, 2020
C++ - [번역]shared_ptr & weak_ptr December 9, 2019
C++ - [번역]shared_ptr과 게임 프로그래밍에서의 메모리 관리 December 3, 2019
C++ - [펌] Linux에서 동적 라이브러리 만들기 April 20, 2019
출처: [리눅스 공유라이브러리(동적 라이브러리) 만들어 쓰기 작성자 라온이아부지 선성태](http://blog.naver.com/r2adne/120127832516) 순서 라이브러리로 쓸 함수가 포함된 소스 두 개 작성 ...
C++ - [펌] Linux에서 라이브러리 로딩 April 20, 2019
출처: 라이브러리 로딩 - ld.so.conf 라이브러리 로딩 - ld.so.conf 동적 라이브러리를 호출하기 위해서는 path 지정이 필수이다. 해당 라이브러리가 어디에 위치해 있는지 모든 디렉토리를 탐색하기에는 비효율적이기 때문이다. 우리가 흔히 설정하는 LD_...
C++ - [펌] Linux에서 정적 라이브러리 만들기 April 20, 2019
출처: [리눅스 정적 라이브러리 만들어 쓰기 작성자 라온이아부지 선성태] (http://blog.naver.com/r2adne/120127876141) 순서 라이브러리로 쓸 함수가 포함된 파일 두개 만들기 컴파일 해서...
C++ - __if_exists July 14, 2020
출처 Visual C++ 전용 키워드 이다. __if_exists ( identifier ) { statements }; identifier에 전달한 식별자가 존재한다면 statements가 실행된다. 부정형으로 __if_not_exists가 있다. 컴파일...
C++ - _pFirstBlock == pHead 에러 August 21, 2020
실행 프로그램에서 공용 dll을 사용하는 경우 아래와 같은 에러가 발생할 때가 있다. File: f:\dd\vctools\crt_bld\self_64_amd64\crt\src\dbgheap.c Line: 1424 Expression: _pFirstBlock == pHead ...
C++ - `void*`를 사용한 구조체, 클래스 판별 방법 March 13, 2022
C++ - atomic compare_exchange_weak/strong 함수 January 23, 2020
출처 C++11 표준 라이브러리의 atomic 조작 함수 compare_exchange_weak와 compare_exchange_strong에 대한 메모. 두 함수 모두 변수의 atomic한 CAS(compare-and-swap) 작업을 제공한다. weak 버전과 strong ...
C++ - boost::irange March 4, 2020
출처 정수의 범위를 사용하려면 boost::irange 함수를 사용한다. 범위로서 [0, n) 을 지정하고, 제 3인수로 단계 폭을 2로 지정하고 있다. (제 3 인수를 생략하면 단계 폭은 1이 된다) 이것에 대해 range-based for 문을 작성할 수 있으며, Pytho...
C++ - boost::multiprecision::cpp_int March 5, 2020
출처 다배수 길이 정수를 다룰 때는 boost::multiprecision::cpp_int를 사용한다. #include <bits/stdc++.h> #include <boost/multiprecision/cpp_int.hpp> using namespace...
C++ - boost::stacktrace July 19, 2021
C++ - cache 잘 사용하기 August 24, 2020
몇 년 전에 정리, 번역했던 글이다.
C++ - callback_manager 라이브러리 January 31, 2022
C++ - capnproto(Cap'n Proto), C++11 으로 serialization February 10, 2021
C++ - clang-tidy으로 안심, 안전한 C/C++ 코딩 극대화! November 23, 2021
C++ - condition_variable December 5, 2023
C++ - const와 포인터의 관계 September 4, 2023
C++ - define and expansion of cpp macro(C 프리프로세서 매크로 정의와 전개) August 9, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
C++ - delete 호출과 구현 September 10, 2020
출처 #define SAFE_DELETE(p)if(p){delete p;} 옛날, 마이크로 소프트가 DirectX의 샘플에서 이런 매크로를 정의한 바 있다. 아마도 많은 사람이 그 샘플의 대로 익힌 결과, 특히 생각 없이 구현하는 경우도 적지 않을것이다. 포인터가 null이...
C++ - f()와 f(void)의 차이 September 3, 2020
VC++을 통해서 멤버 함수를 정의할 때 파리미터가 없는 함수의 경우 파라미터 리스트가 들어가는 자리에 void가 들어가는 것을 볼 수 있다. 기본적으로 void f()와 void f(void)의 함수 시그네쳐는 같은 것이다. 다만 파라미터 리스트에 void를 사용하는 것은 ‘빈...
C++ - final 지정자와 최적화 December 26, 2021
C++ - flags. 프로그램 실행 시의 인자를 파싱하는 라이브러리 January 22, 2020
C++17로 표준으로 구현. 헤더 파일 1개로 구성. 저장소: https://github.com/sailormoon/flags 라이센스: 퍼블릭도메인(완전 마음대로 사용 가능) 예제 #include "flags.h" void ParseConfig(int a...
C++ - functional 활용하기 October 27, 2023
C++ - gcc의 전 처리기에 정의된 매크로(Predefined Macros) 확인 방법 June 8, 2022
C++ - gdb + core 분석하기 January 25, 2022
C++ - httpClient, json, redis 예제 코드 June 24, 2018
C++로 http client 요청, Json 데이터 조작, redis와 통신하는 짧은 예제 코드 들이다. 아래 링크에 가면 코드를 볼 수 있다. curl 라이브러리를 사용하여 http 클라이언트 Post, Get 요청 http 클라이언트 사용 방법 (Post) http 클라이언...
C++ - idiom - Construct on First Use June 2, 2020
원문 정적 오브젝트는 주의하지 않으면 초기화 되기 전에 사용하는 실수를 할 수 있다. 아래는 그 예이다. #include <iostream> class StaticObject { public: StaticObject() { std::cou...
C++ - idiom - Construction Tracker June 3, 2020
원문 생성자에서 멤버 초기화 때 예외가 발생하는 경우가 있더. try와 catch로 예외를 잡을 수는 있지만 때로는 아래와 같이 어디에서 예외가 발생했는지 알 수 없을 때가 있다. class A { public: A(int n) { /* 초기화에...
C++ - idiom - Erase-Remove June 4, 2020
원문 아래는 STL의 컨테이너에서 특정 요소를 삭제하는 코드. std::vector<int> a; /*a에 요소를 추가하는 코드는 생략*/ std::remove(a.begin(), a.end(), 100); 이것으로 사라진 것이 아니다. 실은 remove 함수는...
C++ - idiom - Execute-Around Pointer June 5, 2020
원문 스마트 포인터는 객체의 라이프 타임이 다한 때에 자동적으로 확보된 리소스를 삭제한다. 생성자와 소멸자, 연산자 오버 라이드를 잘 구현하였다. 이것을 응용하면 클래스의 멤버 함수가 실행될 때 특정 처리를 실행하는 스마트 포인터를 구현할 수 있다. class ExecuteP...
C++ - inline 지정자 February 28, 2022
C++ - libcurl 공식 Tutorial 번역 February 19, 2021
C++ - libuv - Visual Stuido 솔루션 파일 만들기 October 14, 2019
GitHub 에서 소스 코드를 받는다. 소스 코드의 root 디렉토리에 vcbuild.bat 파일이 있다. 콘솔 창을 열어서 vcbuild.bat을 실행한다. 사전에 Visual Stuido가 먼저 설치 되어 있어야 한다. vcbuild.bat 이 있는 root 디렉토리에 uv...
C++ - libxlsxwriter를 사용하여 C++로 xlsx 파일 쓰기 April 29, 2020
libxlsxwriter C용의 간단한 xlsx 쓰기 라이브러리. Github 저장소에서 공개하고 있다. 풍부한 예제가 들어가 있다. 설치 설치 하지 않아도 이용 가능. 이 경우는 패스 설정이 필요. $ git clone https://github.com/jmcnamara/l...
C++ - localtime_s 사용 예 February 7, 2020
최신 VC 에서는 localtime을 사용하면 경고(컴파일 실패 되는)가 나온다. localtime_s를 사용해야 한다. ``` include include
C++ - localtime에서 초 단위의 시간으로 변환 (Code) June 3, 2019
struct tm timeinfo; memset( &timeinfo, 0, sizeof(timeinfo) ); timeinfo.tm_year = atoi( szYear ) - 1900; timeinfo.tm_mon = atoi( szMonth ) - 1; timeinfo....
C++ - malloc으로 확보한 메모리를 unique_ptr로 관리하기 July 22, 2020
원문 호출 예 hoge.h #pragma once struct Hoge { int _data1; unsigned char _data2[1]; }; main.cc #include "uniqueptr1.h" #include "uniqueptr2.h" #includ...
C++ - memcpy 최적화 December 16, 2023
C++ - new로 메모리 할당 실패 시 예외 발생하지 않게 하기 September 15, 2020
아래 코드를 실행하면 아마 메모리를 할당할 수 없어서 예외가 발생할 것 이다. long long n = 1LL << 63LL; int *p = new int[n]; 그러나 예외가 아닌 null pointer을 발생하고 싶다면 아래와 같이 한다. long long n ...
C++ - noexcept를 사용하여 이동 생성자 생략 방지하기 January 5, 2024
C++ - null 객체의 멤버 함수 호출 January 11, 2018
클래스를 메모리 할당(new 생성)하지 않고 생성한 후 멤버 함수를 호출하면 어떻게 될까? 호출된 멤버 함수가 자신의 멤버 변수를 호출하지 않는다면 무사히 호출된다. 당근 멤버 변수를 호출하면 세그먼트폴이 생긴다. 아래 코드는 gcc 8.0 에서 테스트 되었다. VC에서도 문제 ...
C++ - printf 방식의 디버깅을 극적으로 효율적으로 할 수 있게 해주는 라이브러리 icecream-cpp September 4, 2022
C++ - redis 사용하기 July 1, 2018
게임 서버를 개발할 때 사용하는 기술이 모바일 시대 이전에 비해서 많이 다양해졌는데 거의 대부분 꼭 사용하고 있는 것이 redis 이다. 다른 언어들은 redis 사용이 간단한데 C++은 간단하지는 않아서 정리를 해 봤다. boost를 사용하면 아주 쉽게 사용할 수 있고, boos...
C++ - ref-qualifier 유무로 오버로드 할 수는 없다 July 29, 2020
출처 C++11에는 implicit object parameter(*this를 참조하는 객체)를 lvalue 참조로 받거나 rvalue 참조로 받는지를 지정하는 기능이 있다. 이를 참고 참고 수식자(ref-qualifier)라고 한다. struct S { // void S...
C++ - segmentation fault를 보완해주는 로그를 출력하자 December 5, 2018
출처 C++ 서버(Linux)가 크래쉬 되는 버그로 고생해서 segmentation fault를 보완해주는 로그를 출력하는 기능을 만들어 보았다. 코드 CrashReporter.hpp #pragma once class ICrashReporter { public: vir...
C++ - shared_from_this가 가리키는 곳을 변경하지 못하도록 규정 June 25, 2020
출처 this 포인터를 std::shared_ptr로 얻을 수 있는 기능으로 std::enable_shared_from_this 기본 클래스와 멤버 함수 shared_from_this()가 있다. std::enable_shared_from_this에서 파생된 클래스의 개체를 n...
C++ - single-file C, C++ libraries 소개 November 4, 2023
C++ - sizeof()로 알아보는 C++의 메모리 April 22, 2020
몇 년전에 번역했던 글이다.
C++ - split, join, replace_all, brent_find_minima March 6, 2020
출처 split 지정한 구분 문자로 문자열을 분할 할 때는 boost::algorithm::split 함수를 사용한다. 얻어진 결과는 지정한 컨테이너에서 받는다. 구분 문자인지 판정하는 것은 boost::is_any_of를 사용한다. 아래 예는 문자열을 + 로 구분하고 있다. s...
C++ - stack_alloc 라이브러리 June 7, 2020
3,4년 전쯤에 번역했던 것을 공유한다
C++ - std::any가 동적 메모리 할당을 할 때와 하지 않을 때(msvc) January 26, 2023
C++ - std::bind 사용 June 8, 2020
지정한 함수를 wrap해서 std::function을 만든다. #include <iostream> void test_function(int a, int b) { printf("a=%d, b=%d\n", a, b); } int main(int argc, con...
C++ - std::bitset 정리 March 8, 2020
C++ - std::data January 25, 2024
C++ - std::exchange May 7, 2020
C++14부터 사용 가능. 아래의 파일을 포함해야 한다 #include <utility> 함수 원형 template< class T, class U = T > T exchange( T& obj, U&& new_value ); ...
C++ - std::function June 10, 2020
C++에 존재하는 여러 종류의 함수를 wrap 하여 똑같이 다룬다 C++에 있는 함수의 종류 함수 람다식 함수 객체 클래스의 멤버 함수 람다식 사용법 [캡처](인수)->반환 값 타입 { 함수의 내용 }(실행 시 인수); 캡처에는 기본적으로[=] ...
C++ - std::function 및 함수 포인터의 성능 평가 October 28, 2023
C++ - std::invoke July 1, 2021
C++ - std::map과 함수 포인터 June 11, 2020
예제 코드 #include <iostream> #include <map> #include <string> double Add(double a, double b){ return a + b; } double Sub(double a, double b)...
C++ - std::sort과 std::unique로 std::vector의 중복 요소를 삭제 June 9, 2020
#include <iostream> // std::cout, std::endl; #include <algorithm> // std::unique #include <vector> // std::vector void printVec(std...
C++ - std::span February 7, 2024
C++ - std::string_view에 대해서 July 25, 2021
C++ - std::string에서 메모리 할당이 발생하지 않는 최대 바이트 수 December 8, 2023
C++ - std::thread 사용법 December 9, 2023
C++ - std::variant June 27, 2021
C++ - std::variant로 상속을 대체 June 29, 2021
C++ - stdafx.h 파일을 찾지 못한다는 에러가 나올 때 August 11, 2020
VC++에서 프로그래밍을 할 때 컴파일 속도를 올리기 위해 대부분 ‘프리 헤더’ 파일을 사용한다. 보통 자신이 만든 소스파일을 사용할 때 문제가 없다가 외부 파일을 가져와서 사용하는 경우 또는 비슷한 행동을 하는 소스 파일 마다 별도의 디렉토리에 들어가 있는 경우 (예 DB 관련 ...
C++ - strict aliasing rules, type punning 해설 May 6, 2022
C++ - string local buffer July 30, 2020
C++ - template와 define, constexpr 구분 August 9, 2022
C++ - threads affinity and hyperthreading June 26, 2020
3,4년 전쯤에 번역했던 것을 공유한다
C++ - unique_ptr에 포인터 이외의 것을 가지도록 할 때 July 10, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
C++ - unorderd_set, unorderd_map의 key를 임의의 클래스로 하기 February 3, 2020
출처 클래스의 같은 값 비교, 해시 함수가 필요 #include <unordered_map> class Point{ public: int x, y; Point(){} Point(int x, int y):x(x),y(y){} bool ope...
C++ - unordered_map 와 map 속도 비교(emplace 편) July 22, 2021
C++ - unordered_map의 key로 std::pair 사용하기 November 25, 2023
C++ - volatile 에 대해서 November 28, 2023
C++ - volatile의 효과 February 10, 2022
C++ - wildcard를 이용한 간단한 범용 Makefile October 26, 2020
C++ - winget으로 Visual C++ 재배포 가능 패키지를 설치하는 방법 December 20, 2022
C++ - 가변 길이 템플릿에서 std::source_location 사용하기 December 4, 2023
C++ - 가상함수는 느릴까? May 4, 2022
C++ - 가상함수의 inline화에 대해서 September 9, 2020
출처: Web의 어딘가… 혹시 가상함수는 inline 되지 않는다고 생각하는 사람이 있을 것이다. 경우에 따라서 되기도 하고 안 되기도 한다. 되는 경우는 컴파일 시점에서 어떤 클래스의 가상함수를 사용하는지 알 수 있느냐 이다. 아래 코드의 경우 컴파일 시점에서 Delive...
C++ - 각종 STL 컨테이너에서 루프 중 요소 삭제하기 September 30, 2019
원문 vector vector<int> v; v.push_back(10); v.push_back(20); v.push_back(30); vector<int>::iterator it = v.begin(); while (it != v.end()) { ...
C++ - 간단한 Object 메모리 풀링 June 28, 2020
의사 코드 class Player { Player(const int index) {} }; class UserManager { public: void NewUser(); void DeleteUser(const int playerIndex); private: ...
C++ - 공변형 반환 값과 오버라이드 룰 완화 September 23, 2020
출처 C++에서는 일반적으로 반환 값만 다른 메소드를 오버라이드 할 수 없다. struct Base{ virtual int func()=0; }; struct Derived:public Base{ float func()override; //에러! 반환 값 타입이 다르다...
C++ - 구조체 alignment April 27, 2020
C++ - 구조체 멤버 접근을 배열처럼 접근하고 싶은 경우 September 4, 2020
일반적으로 구조체 멤버에 접근하는 예 struct Point { int x; int y; int z; } int main(void){ Point p; p.x = 100; p.y = 200; p.z = 300; cout <...
C++ - 구조화 속박(structured bindings)에 대응하는 클래스 만들기 April 16, 2023
C++ - 다른 클래스의 특정 멤버 함수만을 friend로 선언 July 6, 2020
보통 다른 클래스를 friend로 선언할 때 그 클래스 전체를 선언하는 경우가 많은데 클래스 전체가 아닌 일부 멤버 함수만을 friend로 선언할 수 있다. struct TEST2; struct TEST1 { void T1(); void T2(); }; stru...
C++ - 다차원 배열 초기화 방법. std::fill()의 편리한 사용법 May 6, 2020
std::fill // n 차원 배열의 초기화. 제 2인수의 형의 사이즈마다 초기화 해 둔다 template<typename A, size_t N, typename T> void Fill(A (&array)[N], const T &val){ std:...
C++ - 대단한 const를 재미있게 사용하자 July 17, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
C++ - 대체 토큰 사용하기 April 9, 2020
C++ - 라이브러리 링크 모음 November 5, 2019
일어로 된 문서는 번역기로 돌려서 보는 것을 추천한다. signal-slot-benchmarks WMI Explorer Handy wmi query tool 압축 고속 압축 알고리즘 비교 테스트 mini-LZ library lz4 Zstandard...
C++ - 라이브러리 출력 이름 변경하기 July 20, 2020
출처 라이브러리 출력 이름을 MyLibrary_x86_Debug.lib 라고 하고 싶다. 또 아래처럼 디렉토리 구성으로 하고 싶다. MyLibrary MyLibrary.sln MyLibrary MyLibrary.vcxproj lib MyLi...
C++ - 라이브러리를 사용한 프로그램 고속화 September 6, 2018
tcmalloc, jemalloc, nedmalloc malloc 대체에 의한 고속화. 아래와 같이 실행함으로써 malloc이 대체되어 실행된다. LD_PRELOAD=/usr/lib/libtcmalloc.so ./exefile 상황에 따라 다르겠지만 tcmalloc...
C++ - 람다 식의 5개의 장점과 코드를 더 좋게 하는 방법 April 9, 2022
C++ - 람다식 오버로드 February 15, 2022
C++ - 리눅스에서 공유라이브러리 추가하는 방법 November 23, 2023
C++ - 리눅스의 /usr/bin/c++의 실체 December 19, 2020
C++ - 맴버 함수 포인터와 배열을 사용하여 멤버 함수를 번호로 지정하여 호출 하는 방법 July 16, 2020
출처 #include <iostream> #include <memory> using ub4 = unsigned int; // 외부에 공개해서 이용하는 클래스 class A { public: // 클래스 밖에서 using을 사용하고 싶으므로 public 로...
C++ - 메모리 영역 May 29, 2017
메모리 영역에 대해서 5 종류의 메모리 영역 C++ 에서는 다른 특성을 갖는 5 종류의 메모리 영역이 존재한다. (※ 단 c++ 규격에는 스택이나 힙은 명시 하지 않고 Free-Store는 명시 하고 있다) Const Data 컴파일 시 값을 알 수 있는 데이터(예를 들면 sta...
C++ - 메소드 내의 this 최적화 February 24, 2022
C++ - 멤버 함수를 함수 객체로 전달하는 방법 - std::bind 와 람다식 December 25, 2023
C++ - 문자열을 수치로 변환하는 방법 July 1, 2020
atoi #include <cstdlib> #include <iostream> #include <string> #include <typeinfo> int main() { const std::string str("123"); ...
C++ - 배열 참조 August 3, 2020
출처 배열 참조는 배열보다 안전한 속도 면에서 유리하다 !!! int *a[1]; // (1) int (*a)[1]; // (2) int &a[1]; // (3) int (&a)[1]; // (4) 이 4개의 차이점은 ? (1)은 모두 알다시피 int의 ...
C++ - 배치파일을 사용하여 원격 디버깅 할 때 IP 주소 변경 및 설치, 설정 등등 한방에 하기 December 4, 2019
출처 방법 아래와 같은 배치 파일을 만든다. 하고있는 것은 아래와 같다. IP 주소를 고정으로 세팅(여기에서는 192.168.1.111 로 하고 있다) 폴더 공유를 활성화 한다 “응용 프로그램 및 안전하지 않은 파일의 시작” 설정을 변경 (경고 창을 내지 않는다) ...
C++ - 번역) VcPkg로 라이브러리 환경 정의 September 28, 2020
C++ - 복잡한 초기화를 할 때에도 변수에 const 를 부여하기 December 22, 2023
C++ - 분산환경에서의 uniqueId 생성 오픈 소스 snowflake-ModernCpp October 18, 2017
snowflake ? Twitter에서 만든 오픈 소스 라이브러리로 주 목적은 분산 서버에서 일련 번호를 생성하는 것이다. 자세한 설명은 본인의 문서(https://www.slideshare.net/jacking/twitter-snowflake)를 보기 바란다. snowflake...
C++ - 비 public 계승을 사용하는 곳 September 8, 2020
출처: 웹 어딘가에서… 계승에는 3가지 단계가 있다. public protected private 객체 지향적 사고로는 public 계승은 자주 is-a 관계를 나타낸다 라고 한다. 한편 private 계승, protected 계승은 is-a 관계가 아니다. is...
C++ - 생성자에 용도 별로 이름 붙이기 July 21, 2020
최근 C++ 표준 라이브러리와 Boost의 작은 유행으로 태그 디스패치의 태그를 사용자에게 명시적으로 지정하게 함으로써 함수 오버로드를 손쉽게 하는 방법이 몇몇 곳에서 나타나고 있다. // Boost.Container의 vector의 예 // 태그 정의 struct default...
C++ - 세 가지 정적 변수의 차이 December 21, 2023
C++ - 스레드 내에서 발생한 예외 처리 November 28, 2019
참고 아래의 코드는 sigma_reference 함수에서 예외가 발생하는 경우 main에서 catch하고 있지만 예외가 잡히지 않는다. 이유는 sigma_reference 함수의 스레드와 main 함수의 스레드가 서로 다르기 때문이다. #include <thread> #...
C++ - 실수 부에서 짜르기, 가장 간단한 반올림 처리 January 31, 2019
실수 부에서 짜르기 (float)floor( (WeaponShot.nDamage * pow(10.0f,4)) + 0.5 ) / pow(10.0f,4); 가장 간단한 반올림 처리 int nScore = (int)( nCalcuteScore + 0.5 );
C++ - 실전 Modern C++ - module June 19, 2023
YouTube 실전 Modern C++ - module 1 YouTube 실전 Modern C++ - module 2 YouTube 실전 Modern C++ - module 3
C++ - 싱글 헤더 라이브러리 모음 mmx December 11, 2021
C++ - 안전한 문자열 조작 함수 February 3, 2019
문자열 복사 strcpy_s, strcpy, _tcscpy_s, wcscpy, wcscpy_s 대체 추천 함수 strncpy_s(char), _tcsncpy_s(TCHAR) , wcsncpy_s(wchar_t) errno_t wcsncpy_s( wchar_t *st...
C++ - 약어와 의미 November 27, 2019
약어 의미 ADL Argument Dependent name Lookup COW Copy On Write CRTP ...
C++ - 언제 shared_ptr, unique_ptr을 사용할까? July 10, 2020
C++ - 오픈 소스 라이브러리 A better date and time C++ library May 18, 2017
NHN Next의 학생이 C++ Advance 수업의 과제로 정리한 것이다. 슬라이드 쉐어 예제 코드
C++ - 오픈 소스 라이브러리 POCO 설명 및 예제 코드 November 29, 2019
GitHub examples C++ Poco 몇 년전에 만든 코드와 작년에 사내 발표에 사용한 문서가 있다. 이 저장소가 도움이 되었다면 스타 부탁한다~
C++ - 오픈소스 folly 라이브러리 Visual Studio 2022 빌드하기 November 24, 2023
C++ - 오픈소스 라이브러리 Meta Enum December 24, 2020
C++ - 온갖 플래그를 저장할 수 있는 최강 클래스를 만들어 보자 December 18, 2023
C++ - 온라인 C++ 컴파일러 리스트 December 15, 2017
C++ 공부를 할 때 기능이 어떻게 동작하는지 알고 싶을 때 웹브라우져만 있으면 바로 테스트 해볼 수 있다. List of Online C++ Compilers 생각 외로 온라인 C++ 컴파일러는 많다. VC도 있다. 이런 온라인 컴파일러를 사용하면 지금처럼 막 C++ 새 표준...
C++ - 왜 move를 해야할까? January 3, 2022
C++ - 우측 값 참조 value category June 18, 2020
value category C++의 식은 타입과는 별도로 value category라는 것을 갖는다. value category는 prvalue, xvalue, lvalue 중 하나이고, prvalue와 xvalue를 모아서 우측 값 이라고 부른다. 주의해야 할 것으로 같...
C++ - 유저 정의 클래스에서 간단하게 확장 for 문을 사용할 수 있도록 하는 방법 March 27, 2020
출처 STL 컨테이너를 public 상속한 경우 유의해야 할 것은 STL 컨테이너의 소멸자는 virtual 이 아니다 예를 들면 부모 클래스의 포인터로 업 캐스트하고 delete 하면 자식 클래스의 소멸자가 호출되지 않는다. 코드 예 #include <iostream>...
C++ - 자세히 알아보는 include May 11, 2020
3,4년 전쯤에 번역했던 것을 공유한다
C++ - 자식 클래스에서 부모 클래스를 가리키는 키워드 __super July 8, 2020
C++ 표준은 아니고 VC++ 7.0에서 생긴 키워드로 자식 클래스에서 부모 클래스의 멤버를 호출할 때 사용하면 편리하다. 이 키워드를 사용하면 부모 클래스의 이름이 바뀌어도 변경 없이 부모 클래스의 멤버를 호출할 수 있다. struct B1 { void mf(int) {}...
C++ - 자식 클래스에서 오버라이드한 멤버함수의 접근 지정이 부모 클래스의 멤버함수와 다른 경우 July 9, 2020
class Base { public : virtual void f() { } } ; class Derived : public Base { private : void f() { } } ; int main() { Derived d ; d.f(); ...
C++ - 자주 사용하는 C++ 이디엄(idiom) CRTP May 27, 2020
CRTP는 Curiously Recurring Template Pattern의 약어로 자주 직역되고 있지만 기묘하게 재기한 템플릿 패턴이라고 부른다. template<class Inher> struct X{}; struct Derived:X<Derived>...
C++ - 자주 사용하는 C++ 이디엄(idiom) Coercion by Member Template June 1, 2020
클래스 B가 A에서 파생되어 B 타입 객체에 대한 포인터는 A 타입의 포인터에 대입할 수 있지만 이들 타입의 복합 타입은 바탕이 된 타입의 관계를 공유하지 않는다. 예를 들면 template_class는 template_class에 대입할 수는 없다. class A{}; str...
C++ - 자주 사용하는 C++ 이디엄(idiom) Detection May 26, 2020
C++17에서 type_traits 헤더에 추가된 std::void_t를 이용한 idiom 이다. std::void_t의 구현은 아래처럼 되어 있다. template<class...> using void_t=void; 뭘 넣어도 void를 반환하므로 넢고 싶은 것을...
C++ - 자주 사용하는 C++ 이디엄(idiom) Extension Member Function June 6, 2020
C#의 확장 메소드와 같이 기존 클래스에 대해서 멤버 함수의 확장을 operator 오버로드를 구사하여 시뮬레이트 하는 idiom 이다. 예컨대 std::vector에 print 라는 모든 요소를 출력하는 확장 구성원을 만들려고 한다면 const struct Listed_prin...
C++ - 자주 사용하는 C++ 이디엄(idiom) NVI와RAII May 22, 2020
3,4년 전쯤에 번역했던 것을 공유한다
C++ - 자주 사용하는 C++ 이디엄(idiom) No Copyable mix-in May 29, 2020
계승된 클래스는 복사 금지라고 명쾌하게 표현할 수 있는 idiom 이다. class noCopyable{ noCopyable(const noCopyable&)=delete; noCopyable& operator=(const noCopyable&...
C++ - 자주 사용하는 C++ 이디엄(idiom) cheked delete May 28, 2020
규격에 의해 delete식에 의해 불완전 타입을 delete에 넘기는 것이 허가되고 있다. 그러나 trival 생성자가 아닌지, 독자적인 delete 연산자를 정의하고 있는 경우 미 정의 동작이 된다. 미정의 동작은 좋지 않으므로 delete 대상 형식이 불완전 타입인 경우 컴파...
C++ - 자주 사용하는 C++ 이디엄(idiom) pimpl May 25, 2020
Pimpl(Pointer to IMPLementation)은 구현을 숨기거나, 헤더를 바꾸지 않는 것으로 컴파일을 속도를 고속화 할 때 사용한다. C++20의 module에서는 필요 없어지겠지만 아직은 필요하다 hoge.h class Hoge { int foo_; ...
C++ - 전방 선언 February 20, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
C++ - 전치 증가와 후치 증가 February 26, 2021
C++ - 조건 변수와 춤을(Two-Step Dance) December 2, 2023
C++ - 주석을 지원하는 Json 파서 jsoncpp October 15, 2022
C++ - 차세대 파이썬 바인딩 라이브러리 nanobind August 31, 2022
C++ - 채팅 서버 개발로 알아보는 C++의 기술들 October 17, 2020
강연문서 유튜브
C++ - 최신 C++에서 이제 비추천 혹은 삭제된 것들 November 6, 2022
C++ - 추상 기저 클래스 July 12, 2020
아래 코드처럼 virtual 이 붙은 가상 기반 클래스는 “모호성” 을 피하기 위함이다. class B : virtual public A{} class C : virtual public A{} class D : public B, public C{} 가상 기반 클래스가 아니라...
C++ - 커스텀 Allocator를 사용하는 basic_string을 unordered_map의 key로 사용하는 방법 January 29, 2020
아래의 코드는 컴파일 에러가 된다. using MyString = std::basic_string< char, std::char_traits<char>, ...
C++ - 컴파일과 링크가 느린 경우 개선 방법 August 20, 2020
헤더 의존을 줄인다. 자주 변할 수 있는 코드는 헤더에 쓰지 않는다. 모듈화 하여 의존을 줄이거나 모듈을 dll화 하여 링크 시간을 단축하다(단 너무 나누는 것은 주의). 모듈별로 프로젝트를 분할하면 자연스럽게 의존이 없어지고 그 결과 프로그램 변경 시 빌드 시간 단축도 생긴...
C++ - 컴파일러 최적화 copy elision December 31, 2018
c++ 생성자와 move constructor 관련해서 궁금한 점이 있습니다. 라는 질문을 보고 알게된 것이다. 처음 질문을 봤을 때는 별거 아니라고 생각했는데 좀 더 보니 예전에 내가 C++11 표준 관련 강연을 했을 사용한 코드와 비슷한데 그때와 다른 결과가 나와서 구글링을 ...
C++ - 컴퓨터의 실제 IP 얻기 (code) June 4, 2019
#include <ws2tcpip.h> bool ServerInfoMgr::GetLocalIP( string& strIP ) { char host_name[256]; if (gethostname(host_name, 256) == SOCKET_ERR...
C++ - 콜백(Callback) 디자인 패턴 February 3, 2024
C++ - 클로져 디자인패턴 December 27, 2019
C++ - 템플릿 입문 June 20, 2020
4,5년 전쯤에 번역했던 것을 공유한다
C++ - 템플릿 프로그래밍 SFINAE을 이해하기 January 22, 2024
C++ - 특수한 반복자 May 9, 2020
C++ - 패키지 매니저 Conan July 21, 2021
C++ - 패키지 시스템 vcpkg May 1, 2023
작년에 정리한 것으로 최신 버전과 일부 다른 부분이 있을 수 있음. C++ 패키지 시스템 vcpkg 크로스 플랫폼 지원 C++ 패키지 툴 버전 관리, 바이너리 캐싱, 매니페스트 및 레지스트리를 지원 공식 사이트 Browse packages 문서 한국어로 쓴...
C++ - 편리한 C++17 기능 소개 September 24, 2020
C++ - 포인터 변수에서 const 위치에 따른 차이 December 26, 2017
변수에 const를 사용하는 이유와 사용 방법은 아주 쉽다. 그런데 포인터 타입 변수에 const를 붙였을 때 포인터의 앞이나 뒤 어디에 붙여야 할지 헷갈릴 때가 있다. 포인터에 const를 붙이는 경우 아래에 따라서 차이가 발생한다. *앞에 const를 붙인 경우는 포인터를 ...
C++ - 표준 attribute 정리 June 30, 2020
원문 attribute(속성) 라는 것은 attribute(속성)는 컴파일러에 추가 정보를 전달하는 구문으로 [[attributes]] 이라고 쓴다. 최적화나 경고 추가나 제어 등을 할 수 있다. C++11 noreturn 속성 함수 함수가 결코 반환 하지 않는 것을 표시하...
C++ - 함수 반환 값의 생성자 호출과 RVO(Visual Studio 2019 Community 16.7.0 Preview 2.0) January 3, 2021
C++ - 함수 반환값 파기를 명시하는 방법 October 28, 2024
C++ - 함수 템플릿 포인터를 함수에서 파라미터로 받기 June 16, 2020
출처 함수 템플릿의 포인터를 함수에 넘기는 경우 template<typename T, typename Func> T calc(T a, T b, Func func){ return func(a, b); } template<typename T> T plu...
C++ - 함수 템플릿의 포인터를 함수로 받기 July 23, 2020
출처 C++11 이상 가능. // 템플릿의 default 값에 함수 포인터 타입을 정의 template<typename T, typename Func = T(*)(T, T)> constexpr T calc(T a, T b, Func func){ return fu...
C++ - 함수 핸들러(Funtion Dispatcher) (Code) June 4, 2019
온라인 서버 제작자 모임의 핵랑님이 만든 것 비공개 카페라서 링크를 눌러도 멤버가 아니라면 접속할 수 없습니다. #pragma warning(disable:4819) #include <boost/bind.hpp> #include <boost/function...
C++ - 함수의 디폴트 인자 값을 동적으로 바꾸기 July 7, 2020
일반적인 함수의 기본 인자 값 void TEST_1(int nValue = 5 ) { std::cout << __FUNCTION__ << ". " << nValue << std::endl; } 위의 디폴트 값은 고정인데 아래처럼...
C++ - 헤더 파일로 만드는 actor 모델 라이브러리 May 7, 2019
원문 C++의 표준 라이브러리로만 구현(thread, chrono, mutex, atomic, queue) 성능보다 구성 요소의 작음을 우선 소스 actor 모델? actor 모델은 병렬 계산의 수학적 모델의 일종이다. 병렬 처리 지향이라는 Erlang과 함수형...
C++ 컴파일 시 조건에 의해 변수 선언 타입을 변경하기 January 30, 2020
컴파일 시에 정해진 조건 C의 bool 값에 의해 타입 A 혹은 B를 선택하고 이 타입의 변수를 선언하고 싶은 경우 의사 코드는 아래와 같다. if (C) { A x; } else { B x; } 이것을 구현하기 위해 std::conditional을 사용하여 type...
C++- Poco 1.8 Net 라이브러리 빌드 하기 November 15, 2017
본인이 집필한 poco 네트워크 프로그래밍 책의 예제가 poco 1.8 에서는 빌드 에러가 난다. 이유는 스태틱 라이브러리 사용, win32 lib 미 추가 문제이다. 아래 그림처러 하면 문제 없이 빌드가 된다.
C++- Poco 라이브러리 Visual Studio 2017 에서 빌드 하기 November 15, 2017
poco 라이브러리를 Visual Studio 2017 에서 빌드하려면 아직 쉽게 되지 않는다. 아래처럼 Visual Studio 2017 설치 메뉴에 있는 콘솔 프로그램을 실행해서 빌드 파일을 실행해야 한다. buildwin.cmd 150 rebuild static_md...
C++- Poco 라이브러리를 VC++에서 static 라이브러리로 사용할 때 September 6, 2017
Poco 라이브러리를 VC++ 에서 static 라이브러리로 사용할 때 lib 파일을 찾을 수 없다는 링크 에러를 만나는 경우는 아래의 선언을 추가하면 된다. #define POCO_STATIC Poco 라이브러리는 default로는 동적라이브러리를 사용하는 것으로 설정 ...
C++11 - C++11용 gcc 옵션 October 2, 2020
C++11 - C11 / C++11 / POSIX 스레드 API 비교 September 14, 2020
C++11 - _Pragma 전처리 연산자 December 22, 2016
개요 C99 에서 도입된 전처리 연산자 이다. _Pragma 연산자는 매크로에서 처리 계 정의 기능을 사용하기위한 기능이다. 처리 계 정의 기능을 사용하기 위해 기존에는 #pragma 지시자를 사용하여 왔지만 이 기능은 매크로 내에서는 사용할 수 없다. #pragma 지시자를 매...
C++11 - alignas April 1, 2017
개요 alignas()은 컴파일러에 대한 변수를 메모리 상의 특정 위치에 배치(배열) 하도록 요구하는 키워드이다. 예를 들면 4바이트 경계 위치에 배치할 경우 변수는 4의 배수 주소로 배치되고, 8바이트 경계 위치에 배치할 경우 변수는 8의 배수 주소로 배치된다. 문법 alig...
C++11 - alignof April 1, 2017
개요 alignof()는 지정한 타입이 메모리의 어느 위치에 배치될지를(배치) 얻는 연산자이다. sizeof()와는 다르고 alignof()는 변수에는 사용할 수 없다. 예를 들면 타입 int가 4바이트 경계 위치로 배치되는 시스템이라면 alignof(int)은 4를 반환한다. ...
C++11 - boost::shared_ptr 에서 std::shared_ptr로 변환 하는 가장 간단한 방법 March 8, 2017
#include <iostream> // std::shared_ptr #include <memory> // boost::shared_ptr #include <boost/shared_ptr.hpp> auto main() -> int { ...
C++11 - long long 타입 December 26, 2016
개요 C99 호환을 위해 long long 정수 타입이 추가 되었다. long long 과 unsigned long long 타입은 64비트 이상의 값을 표현할 수 있는 것을 보증한다. long long 타입의 최대 값 매크로는 LLONG_MAX 이다. long long을 뜻하는...
C++11 - map에 삽입 insert, emplace May 19, 2020
아래 방식은 unordered_map에도 적용된다. map::insert insert를 사용하면 key와 value의 pair를 삽입할 수 있다. map<int,int> dic{}; dic.insert(std::make_pair(1,3)); map::emplace...
C++11 - noexcept February 27, 2017
noexcept 키워드 목적. 1) throw 키워드에 의한 예외 사양 대체. 함수가 어떤 예외를 던질 가능성이 있는지를 열거하는 것이 아니라 예외를 던질 가능성이 있는지 없는지만 지정한다. 예외를 던질 가능성이 있는 함수에는 noexcept(false)을 지정하고, 예외를 던질...
C++11 - std::atomic::compare_exchange_strong March 11, 2020
출처 bool compare_exchange_strong(T& expected, T desired, memory_order success, ...
C++11 - std::error_code, std::error_category, std::error_condition의 차이 December 28, 2020
C++11 - std::exception_ptr 사용하기 October 22, 2019
출처 Windows의 윈도우 관련 프로그래밍을 할 때 반드시 나오는 윈도우 프로시저이지만, 윈도우 프로시저 외부에 그대로 예외를 던지려하면 무시되거나 프로세스를 강제 종료하는 것이 MSDN의 WindowProc callback function의 Remarks에 적혀 있다. Win...
C++11 - std::get_time February 6, 2017
개요 » get_time(tmb, fmt) 식을 사용하여 현재 입력 스트림에서 전달 받은 로컬 시간 값을 변환 형식 문자열에 맞추어 tm 오브젝트로 변환한다. 문법 template< class CharT > /*unspecified*/ get_time( s...
C++11 - std::put_time February 3, 2017
개요 날짜 서식을 출력한다. 문법 template <class CharT> unspecified put_time(const struct tm* tmb, const CharT* fmt); tmb 은 유효한 tm 타입 오브젝트를 가리키는 포인터 fm...
C++11 - type_info와 type_index March 23, 2017
C++에서는 RTTI(Run Time Type Infomation/Identification)라고 불리는 기능이 있다. ( 타 언어의 리플렉션과 좀 비슷한데 기능은 훨씬 떨어짐 ^^;) std::type_info는 타입 정보를 표현하는 클래스이다. type_info 객체는 type...
C++11 - 고정형 정수 타입 March 17, 2019
C++11에서 고정형 길이의 정수 타입이 새로 생겼음. 고정형 길이라는 것은 int8_t, int16_t 등 타입에 숫자가 붙는 것을 말함. 플랫폼에 상관 없이 크기가 고정 되어 있어서 크로스 플랫폼 개발에 사용하면 좋음. 헤더 파일 #include <cstdint>...
C++11 - 문자열 리터럴과 wide 문자열 리터럴 결합 January 23, 2017
C99 호환을 위해서 만들어진 기능으로 문자열 리터럴과 wide 문자열 리터럴을 결합하면 wide 문자열로 결합한다. 문자열 리터럴인란 멀티바이트 문자열을 뜻하고, wide 문자열 리터럴은 유니코드 문자열을 뜻한다. C++11 이전에는 문자열 리터럴과 wide 문자열 리터럴 결합에...
C++11 - 블럭 범위를 가진 static 변수 초기화는 스레드 세이프 하다 February 14, 2017
개요 static 변수의 초기화가 완료할 때까지 다른 스레드는 초기화 처리 앞에서 대기한다. class singleton { public: static singleton& get_instance() { static singleton instance; // ...
C++11 - 생성자 상속(inheriting constructors) January 9, 2017
개요 부모 클래스에서 정의한 생성자들을 자식 클래스에서 그대로 사용할 수 있는 편의 기능이다. 문법 자식 클래스에서 using 키워드를 사용하여 부모 클래스 이름과 부모 클래스의 생성자 이름을 :: 구분으로 호출한다. 자식 클래스는 복수의 부모 클래스를 상속한 경우에도...
C++11 - 예외 지정 March 2, 2017
C ++에서는 함수에 예외 지정이라는 것을 작성할 수 있다. 이것은 C++98에서 부터 있는 기능으로 throw (T1, T2, …)라는 문법으로 함수가 밖으로 던지는 예외를 지정하는 기능이다. // C++98/03 void f() throw( int, double ); 만...
C++11 - 우측값 참조. 함수의 가인수는 좌측값 참조이다 July 7, 2017
#include<iostream> using namespace std; void foo2( string& s) { cout << "lvalue" << endl; }; void foo2( string&& s) { co...
C++11 - 인라인 이름 공간(inline namespace) January 2, 2017
개요 이름 공간 내에 있는 기능을 투과해서 접근할 수 있는 기능이다. 즉 이름 공간(my_namespace) 안에 또 다른 이름 공간(features)을 inline로 선언하고 있으면 features에 정의된 기능을 my_namespace를 통해서 접근 할 수 있다. #incl...
C++11 - 최근접 짝수 반올림 std::nearbyint January 12, 2017
개요 실수를 정수로 변환할 때 ceil()로 소수점 올림하거나, floor()로 소수점 버림을 한다. nearbyint는 정수로 변환할 실수의 가장 가까운 짝수로 올림 혹은 버림을 한다. 이러한 방식을 “bankers’rounding” 이라고 부른다 문법 cmath ...
C++11 - 컨테이너에 참조 보관하기 April 17, 2020
std::reference_wrapper를 사용하면 컨테이너에 오브젝트의 참조를 보관할 수 있다. std::reference_wrapper는 <functional> 헤더를 사용한다. #include <iostream> #include <string>...
C++14 - recursive_(timed_)mutex의 재귀 lock 상한 수 April 7, 2017
C++11 표준 라이브러리의 recursive_mutex, recursive_timed_mutex 클래스는 동일 스레드에서의 재귀 lock 획득 횟수의 상한은 미정의로(unspecified) 되어 있다. 단 상한 회수를 넘는 try_lock 조작은 실패하고, lock 조작은 예외를...
C++14 - shared_(timed_)mutex가 지원하는 Reader 스레드 수 April 10, 2017
C++14 표준 라이브러리의 shared_timed_mutex 클래스는 적어도 10000 스레드 이상의 Reader 스레드에서의 공유 lock(shared lock) 동시 획득을 지원한다. 또 동시 획득 가능한 공유 lock 수 상한을 넘은 경우도 공유 lock을 획득 할 수 있을...
C++14 - 람다식의 인수에 가변 길이 인수 사용하는 예제 November 6, 2019
출처 #include <iostream> using namespace std; void print (){ cout << endl; } template <typename T,typename ...Types> ...
C++17 - Boyer-Moore, Boyer-Moore-Horspool 검색 알고리즘 추가 November 22, 2019
헤더 파일은 #include <functional> Boyer-Moore 최악의 케이스가 o(n). n은 검색 대상 범위의 길이 전처리 시에 테이블을 2개 만들므로 전처리 시간이 걸리고, 메모리를 더 먹는다. 검색 패턴이나 검색 대상 범위가 긴 경우, 혹...
C++17 - RVO(Return Value Optimization) 지원 November 26, 2019
컴파일러 최적화 기능으로 RVO(Return Value Optimization) 나 NRVO(Named Return Value Optimization)를 지원하고 있었다. 그러나 이 최적화 기능은 각 컴파일러에서 제공하는 것이지 C++ 표준으로 정해진 것이 아니다. 즉 어떤 컴파일...
C++17 - __has_include October 26, 2019
포함(include)하는 파일이 존재하는지 확인하는 프리프로세서 기능이다. 아래는 optional 파일이 존재하는지 확인한다. #if __has_include(<optional>) #include <optional> #endif 혹은 #if __h...
C++17 - atomic::is_always_lock_free March 26, 2020
</a></h3>
C++ 17은 atomic 클래스 템플릿에 is_always_lock_free라는 정적 멤버 상수가 정의 되어 있는데 C++11의 is_lock_free()의 static 멤버 버전이라고 생각하면 좋다.
is_lock_free()를 사용하기 위해서는 atomic 클래스 오브젝트를...
C++17 - false sharing와 true sharing 제어 June 24, 2020
출처
병행 프로그래밍으로 문제가 될 수 있는 캐시 무효화 문제를 제어 할 수 있다.
false sharing 제어
struct keep_apart {
atomic<int> cat;
atomic<int> dog;
};
이런 구조가 있으면 c...
C++17 - hardware_destructive_interference_size, hardware_constructive_interference_size November 15, 2019
출처
C++ 17 표준 라이브러리 헤더에 추가 되었다
hardware_destructive_interference_size
False-Sharing 발생을 방지하기 위해 필요한 최소 메모리 주소 거리. 2개의 변수를 서로 다른 캐시 라인에 싣기 위해 얼라이먼트 정보로 사용한다...
C++17 - map과 unordered_map의 try_emplace()와 insert_or_assign() June 19, 2020
try_emplace() 멤버 함수: 삽입 실패 시에 주어진 파라미터 args…를 변경하지 않는다.
insert_or_assign() 멤버 함수: 삽입에 실패하면 덮어 쓴다.
std::map<std::string, std::unique_ptr<Foo>> m;...
C++17 - null pointer를 delete 해도 문제 없음 November 25, 2019
C++14까지는 메모리 할당을 받은 객체인지 확인 후 delete를 하였다.
if(pUser) {
delete pUser;
}
C++17 에서는 null pointer를 delete 해도 문제 없다(아래 설명에서는 C++14도 괜찮은 듯…).
delete pUser;
...
C++17 - shared_mutex November 20, 2019
출처
mutex로 보호 된 데이터를 다수의 스레드가 액세스 할 때 성능이 저하된다.
이 데이터 변경을 하지 않는 스레드가 다수인 경우 성능 저하를 줄일 수 있다.
데이터의 변경을 하지 않는 읽기(reader) 스레드와 데이터의 변경을 하는 쓰기(writer) 스레드가 각각 복수...
C++17 - shared_ptr 배열에 대응 May 13, 2020
C++17에서는 아래처럼 사용할 수 있다.
std::shared_ptr<double[1024]> p1 {new double[1024]};
std::shared_ptr<double[]> p2 {new double[n]};
double* p = p1[0];
C++17 - shared_ptr의 참조 카운트와 data reace December 10, 2019
C++17 표준 라이브러리에서는 스마트 포인터인 std::shared_ptr의 unique 멤버 함수는 비추천이 되었다.
상위 호환이 되는 use_count 멤버 함수는 잔존하지만 스레드 간 동기에는 관여하지 않는다는 요건이 명확화 되어서 멀티스레드 실행에서는 반환 값은 근사(ap...
C++17 - static_assert의 에러 메시지 생략 가능 October 24, 2019
static_assert는 C++11에서 생긴 기능으로 컴파일 타임에 식의 true, false 여부를 조사해서 false인 경우 지정한 에러 메시지를 출력한다.
static_assert(a == b, "a와b는 같아야 한다");
C++17에서는 static_assert 에 에...
C++17 - std::byte January 19, 2021
C++17 - string_view의 주의점 November 24, 2019
출처
string_view 클라스 == 문자열에 대한 읽기 전용 뷰.
std::string와 같이 null 종단 문자열 이외도 올바르게 다룰 수 있다. null 종단 문자를 도중에 포함 할 수 있다.
string_view 클래스는 참조처...
C++17 - 람다식에서 *this의 복사 캡쳐 November 14, 2019
C++11에서 람다식의 캡쳐 리스트에 this를 지정하면 이 람다식이 속하는 클래스 오브젝트가 참조로 캡쳐된다.
비동기 처리나 병렬 처리에서 오브젝트 수명 관리를 간단하게 하기 위해 this를 참조가 아닌 복사로 캡쳐해야 하는 경우가 있다.
이 때 C++17에서 새로 생긴 *th...
C++17 - 랜덤 샘플링 알고리즘 June 23, 2020
std::sample()이 <algorithm>에 추가 되었다.
#include <iostream>
#include <string>
#include <iterator>
#include <random>
#include <a...
C++17 - 복수의 using 선언 시 컴마 구분 사용 November 18, 2019
간결한 코딩을 위해 네임 스페이스를 생략하고 싶다면 using 선언을 사용한다
std::cout << "hello";
using std::cout;
cout << "hello";
그러나 아래와 같은 경우는
using std::cout;
using std...
C++17 - 숫자to문자열, 문자열to숫자 변환 표준 라이브러리 November 21, 2019
C++17에서 숫자를 문자열로 변환, 문자열을 숫자로 변환 해주는 라이브러리가 새로 생김
출처
특징
서식 지정은 문자열이 아니다
동적 메모리 할당을 하지 않는다
로케일 무시
가상 함수 호출이 아니다
버퍼 오버런 방지
반환 값에서 에러를 반환한다
입력 문...
C++17 - 숫자를 문자열로 변환하는 to_chars(), 문자열에서 숫자로 변환는 from_chars() May 14, 2020
로케일은 C 로케일(POSIX 로케일) 고정
함수 내에서 동적 메모리 할당이 없다. 즉 호출 측에서 만들어줘야 한다
포맷은 파라메터로 주고, 자동적으로 포맷을 해석할 수 없다
사용할 수 있는 포맷은 최소한
부호...
C++17 - 시간 반올림 연산 May 21, 2020
밀리 세컨드를 세컨드 단위로 변경할 때 딱 맞아 떨어지지 않는 경우 반올림 혹은 내림을 할 수 있는 floor(내림), ceil(올림), round(가장 근접한 수로)가 생겼다.
#include <iostream>
#include <chrono>
using...
C++17 - 연관 컨테이너의 extract, merge, insert May 20, 2020
2개의 연관 컨테이너를 접합(splice)하는 기능이 생겼다.
map, set, unordered_map, unordered_set와 이 들의 multi 버전 모두도 포함된다.
특정 요소 추출
extract() 멤버 함수를 사용하면 컨테이너의 특정 요소를 추출 할 수 있다.
n...
C++17 - 중첩된 namespace 선언 November 16, 2019
C++14 까지
namespace A
{
namespace B
{
class AA {};
}
}
C++17 부터는
namespace A::B
{
class AA {};
}
C++17 - 튜플을 유저 정의 타입으로 변환하는 make_from_tuple 함수 May 15, 2020
예제 코드
#include <iostream>
#include <string>
#include <tuple>
struct Person {
int id;
double bodyHeight;
std::string name;
...
C++20 - Feature List 동결 - 모듈, 코루틴, Concepts 채용, Contracts은 연기 September 22, 2019
출처
ISO C++ 위원회는 2020년 2월까지 공개 예정인 C++20 이라고 불리는 차기 C ++ 표준 기능 목록을 종료했다. C++20은 C++의 중요한 개정판으로 모듈, 코루틴, Concepts을 새로운 주요 기능으로 제공한다.
최근 쾰른에서 열린 회의에서 ISO C++ ...
C++20 - Using enum January 21, 2021
using enum은 C++20의 새로운 기능.
scoped enum을 namespace의 using directive를 사용할 수 있다.
C++17까지는 enum을 아래처럼 사용한다.
enum struct color { red, green, blue } ;
void f( co...
C++20 - std::ssize January 22, 2021
CMake에서 GoogleTest 사용하기 February 23, 2019
출처
구성은 아래와 같이 되어 있다고 한다.
src 폴더 아래가 테스트 대상 코드, test 폴더 아래는 테스트 코드
클래스 단위로 파일이 나누어져 있다고 가정한다.
mk.sh을 실행하면 build/src/ 에 응용 프로그램의 실행 파일...
CPU 캐시 잘 활용하는 방법 - 프로그램 코드가 작게하기 November 8, 2020
Poco 라이브러리 설치하기 July 10, 2019
Linux
공식 사이트에서 최신 버전을 다운로드 한다.
압축을 풀고, 빌드한다.
아래는 64비트, static 라이브러리, 테스트와 샘플은 제외 하는 설정으로 빌드 한다
$ tar zxvf poco-1.7.8p2-all.tar.gz
$ cd poco-1.7.8p2-...
Trip report Fall ISO C++ standards meeting(Albuquerque) Sutter’s Mill December 1, 2017
Trip report: Fall ISO C++ standards meeting (Albuquerque) | Sutter’s Mill
을 번역한 일본 문서를 일부 번역한 것이다.
range-based for 에 초기화자를 쓸 수 있도록 되었다.
for( auto res...
Ubuntu에 gcc 8, clang 6 설치하기 June 20, 2019
gcc 8 (Ubuntu 17.04)
PPA로 최신 버전 설치
sudo add-apt-repository ppa:jonathonf/gcc-8.0
sudo apt update
sudo apt install gcc-8 g++-8
LLVM 설치
Ubuntu 18.04
apt-get ...
Vcpkg Product Roadmap - 2020.04 May 2, 2020
Vcpkg 2020.04 Update and Product Roadmap 글에서 roadmap 관련된 부분만을 일부 번역하였다.
새로운 라이브러리의 지원을 계속하고, Linux와 macOS에서의 지원을 개선한다.
사용자들의 피드백이나 제안을 기초로 제품에 새로운 기능을 추가한다...
Win32API - CRITICAL_SECTION의 OwningThread June 5, 2017
Windows Vista부터 CRITICAL_SECTION의 내부 구조가 바뀌었다고 한다.
이 중 눈여겨 볼 것은 CRITICAL_SECTION의 멤버 변수 중 OwningThread 인데 이 변수에는 CRITICAL_SECTION을 소유중인 스레드의 ThreadID가 설정된다....
YOUTUBE - C++ OpenSiv3D로 즐거운 그래픽스 프로그래밍 November 25, 2020
YOUTUBE - C++ Redis 프로그래밍 November 24, 2020
YOUTUBE - IOCP 네트워크 프로그래밍 학습을 위한 단계별 실습 November 21, 2020
YOUTUBE - IOCP 샘플 코드 설명 November 26, 2020
cmake에서 CMAKE_C_FLAGS에 설정한 값이 무시될 때 February 20, 2019
출처
CMakeLists.txt 안에서 컴파일 옵션을 지정하려고 했는데 설정이 무시되는 문제를 만났다.
컴파일 옵션 지정과 add_subdirectory 명령어 기술 순서가 문제였다.
문제
CMakeLists.txt
cmake_minimum_required(VERSION 3.1...
epoll을 사용한 echo 서버 June 6, 2019
출처
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/socket....
google benchmark로 C++ 코드 성능 측정하기 December 22, 2018
posix aio의 네트워크 소켓을 지원에 대해서 July 31, 2019
posix의 비동기 IO의 API인 aio는 파일 조작만 지원하는 걸로 알고 있었는데 소켓 조작에도 사용할 수 있다고 한다.
https://koyo.kr/post/posix-aio-socket-server-example/
그런데 리눅스쪽 서버 개발 관련해서 자료를 찾을 때 소켓 ...
premake April 29, 2019
CMake와 같은 멀티 플랫폼 오픈소스 개발에 유용한 툴.
lua를 통해 스크립트를 작성한다. 루아 파일 이름과 같은 이름의 솔루션 파일을 만들어준다.
현재 premake4와 premake5 두 가지 버전이 있다.
Visual Studio 2013 ...
std::codecvt_utf8로 wstring을 utf-8 문자열로 변환 하기 April 4, 2017
std::wstring을 utf-8 문자열로 변환 하는 방법은 아래와 같다.
std::wstring wStr = L"우하하";
std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> utf8Conv;
auto ...
tm 에서 time_t로 UTC로 변환 하는 함수 March 10, 2017
헤더 파일 time.h 혹은 헤더 파일 ctime 에서 time_t와 tm 구조체와의 변환을 하는 함수를 정리했다.
time_t→ tm 구조체
tm 구조체 → time_t
현지 시각
...
unorder_set 에서 구조체(혹은 클래스)를 Key로 하고 싶을 때 March 9, 2019
출처
== 오퍼레이터를 오버라이드 한다.
hash 함수를 구현한다.
// key로 사용할 구조체
struct Point {
int x, y;
Point(int x, int y) : x(x), y(y) { }
// override == ope...
멤버 변수에 대한 포인터를 이용하여 타입의 특성을 판정 April 21, 2017
멤버 변수에 대한 포인터라는 것은
우선, 예로서 단순히 정수를 래핑 한 클래스를 보자
class int_wrapper {
public:
int data;
int_wrapper(int data) : data(data) {}
};
위 코드에서 int_wrapper::dat...
번역 - RAII 해설 January 31, 2020
번역 - 게임개발과 mvc January 12, 2020
번역 - 게임개발과 디자인패턴 January 14, 2020
번역 - 덤프를 이용한 hang 상태의 애플리케이션 조사 방법 - 크리티컬섹션 August 18, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
실전 Modern C++ - module 1 May 11, 2023
실전 Modern C++ - module 2 May 14, 2023
클래스 멤버 함수 포인터 배열 사용하기 December 16, 2016
함수 포인터 관련 검색을 하면 C 버전이 많이 나오고, 배열 타입을 사용하는 경우는 별로 없어서 공유한다.
(사실 최신 C++에서는 std::function을 사용하면 되기 때문에 이걸 사용하지 않아도 된다)
선언
bool(TEST::*m_pFunc[4])(const int, ...
표준 C++ 규격이 3년 간격으로 제정 되는 이유 July 17, 2019
Draft FAQ: Why does the C++ standard ship every three years? – Sutter’s Mill
현재 C++ 표준은 3년 단위로 제정 되고 있는데 왜 3년 주기인지 C++ 표준 위원회 의장인 Herb Sutter씨의 설명.
C++ 표준...
CLion (25)
CLion - CLion에서 Boost 라이브러리 사용 하기 December 3, 2021
CLion - CMake Install과 비 CMake 프로젝트 December 1, 2021
CLion - CMake 옵션에서 컴파일러 지정하기 November 4, 2021
CLion - CPU 프로파일러 November 13, 2021
CLion - Clang-Tidy로 유연성과 컨트롤 향상 November 12, 2021
CLion - ClangFormat November 22, 2021
CLion - Clangd 기반 언어 엔진과의 통합 강화 November 28, 2021
CLion - Clangd 기반 탐색 및 검색 November 16, 2021
CLion - Google Sanitizers 지원 November 15, 2021
CLion - Naming Convention November 20, 2021
CLion - Run Anything, Search Everywhere November 2, 2021
CLion - Windows에서 CLion 사용하기 October 31, 2021
CLion - googletest 설정 November 18, 2021
CLion - 디스 어셈블리 뷰 November 8, 2021
CLion - 메모리 보기 November 6, 2021
CLion - 사용자 지정 빌드 대상으로 실행 / 디버그 구성 November 25, 2021
CLion - 새로운 빌드와 리빌드 작업 November 2, 2021
CLion - 여러 줄의 TODO 주석 November 2, 2021
CLion - 원격 개발 지원 December 4, 2021
CLion - 코드 정리 정돈하기(파일 리포맷) November 2, 2021
CLion - 파일 단위로 실행 November 2, 2021
GoLand - 에디터의 (파일)탭을 숨기지 않고 모두 표시하기 November 10, 2021
GoLand - 정형화 시키지 않을 파일 지정 November 8, 2021
JetBrains - Docker 상에서 jetbrains 제품을 실행하는 방법 December 7, 2021
JetBrains - Projector로 JetBrains IDE를 원격으로 사용하기 December 6, 2021
Cloud (15)
AWS - P2P에서 클라우드로의 전환. For Honor와 Friday the 13th The Game이 어떻게 플레이어 경험을 향상 시켰는가 May 13, 2018
원문
게임 개발자로서 출시에 이르기까지 열정을 잃지 않고 게임 개발과 팬 커뮤니티의 육성에 수 년의 세월 투자 되어 왔다고 생각한다.
최고의 사용자 경험을 제공 할 수 있는 것에 대해서는 예를 들어 네트워크 연결시 플레이어의 대기 시간에 대한 백엔드의 선택 등 백엔드 인프라는 가...
AWS re:Invent 2021 - How Epic Games develops Fortnite faster with a build farm on AWS January 18, 2022
AWS 오픈 소스 컨테이너 개발 툴 「Finch」의 Windows판 릴리스. 컨테이너 빌드 및 실행 환경 세트 April 9, 2024
Cloud Logging 구조화 로그의 특수한 JSON 필드 정리 November 17, 2023
Google Cloud Platform의 15개 서비스를 영구 무료 한도를 제공 March 17, 2017
구글은 2017년 3월 10일 Google Cloud Next 17의 3일째 기조 강연에서 15개 서비스의 영구 무료 쿼터를 발표.
영구 무료 한도 대상 서비스 이름과 월 제한은 다음과 같다(제품에 따라서는 아래 외에도 제한이 있다).
Google Cloud Engine(...
Google Cloud 네트워크 관련 특징 October 24, 2022
Stackdriver Monitoring(Cloud Monitoring) 입문 February 20, 2022
구글 클라우드 로깅에 대해서 November 16, 2023
번역 - AWS re Invent 2019 1000 만명 사용자를 향해 확장해 나가기 August 22, 2020
번역 - AWS re Invent 2019 CAPCOM이 컨테이너 ,데이터, ML을 사용하여 유저에게 즐거움을 주는 게임을 빠르게 구축하는 방법 August 16, 2020
번역 - AWS re Invent 2019 How Rovio teaches Angry Birds to fly in the cloud using ML August 17, 2020
번역 - AWS에서 온라인 게임 출시 August 23, 2020
번역 - 서버리스 온라인 게임과 실시간 리더 보드 구축 August 27, 2020
번역 - 온라인 게임 개발에서의 클라우드 디자인 패턴 August 26, 2020
번역 - 최강의 ECS & Fargate build 환경 on AWS August 25, 2020
Coding (1)
NASA의 10가지 코딩 룰의 힘 November 4, 2020
DB (55)
DB 샤딩 알고리즘 November 29, 2023
DBA가 (서버)개발자에게 가장 많이 받은 질문들 February 1, 2022
<a href="https://jacking75.github.io/db-0820/" title="Discord가 데이터베이스를 "Apache Cassandra"에서 "ScyllaDB"로 마이그레이션 한 이유">Discord가 데이터베이스를 "Apache Cassandra"에서 "ScyllaDB"로 마이그레이션 한 이유
August 20, 2023
</a>
March 26, 2020
</a></h3>C++ 17은 atomic 클래스 템플릿에 is_always_lock_free라는 정적 멤버 상수가 정의 되어 있는데 C++11의 is_lock_free()의 static 멤버 버전이라고 생각하면 좋다. is_lock_free()를 사용하기 위해서는 atomic 클래스 오브젝트를...
C++17 - false sharing와 true sharing 제어 June 24, 2020
출처 병행 프로그래밍으로 문제가 될 수 있는 캐시 무효화 문제를 제어 할 수 있다. false sharing 제어 struct keep_apart { atomic<int> cat; atomic<int> dog; }; 이런 구조가 있으면 c...
C++17 - hardware_destructive_interference_size, hardware_constructive_interference_size November 15, 2019
출처 C++ 17 표준 라이브러리 헤더에 추가 되었다 hardware_destructive_interference_size False-Sharing 발생을 방지하기 위해 필요한 최소 메모리 주소 거리. 2개의 변수를 서로 다른 캐시 라인에 싣기 위해 얼라이먼트 정보로 사용한다...
C++17 - map과 unordered_map의 try_emplace()와 insert_or_assign() June 19, 2020
try_emplace() 멤버 함수: 삽입 실패 시에 주어진 파라미터 args…를 변경하지 않는다. insert_or_assign() 멤버 함수: 삽입에 실패하면 덮어 쓴다. std::map<std::string, std::unique_ptr<Foo>> m;...
C++17 - null pointer를 delete 해도 문제 없음 November 25, 2019
C++14까지는 메모리 할당을 받은 객체인지 확인 후 delete를 하였다. if(pUser) { delete pUser; } C++17 에서는 null pointer를 delete 해도 문제 없다(아래 설명에서는 C++14도 괜찮은 듯…). delete pUser; ...
C++17 - shared_mutex November 20, 2019
출처 mutex로 보호 된 데이터를 다수의 스레드가 액세스 할 때 성능이 저하된다. 이 데이터 변경을 하지 않는 스레드가 다수인 경우 성능 저하를 줄일 수 있다. 데이터의 변경을 하지 않는 읽기(reader) 스레드와 데이터의 변경을 하는 쓰기(writer) 스레드가 각각 복수...
C++17 - shared_ptr 배열에 대응 May 13, 2020
C++17에서는 아래처럼 사용할 수 있다. std::shared_ptr<double[1024]> p1 {new double[1024]}; std::shared_ptr<double[]> p2 {new double[n]}; double* p = p1[0];
C++17 - shared_ptr의 참조 카운트와 data reace December 10, 2019
C++17 표준 라이브러리에서는 스마트 포인터인 std::shared_ptr의 unique 멤버 함수는 비추천이 되었다. 상위 호환이 되는 use_count 멤버 함수는 잔존하지만 스레드 간 동기에는 관여하지 않는다는 요건이 명확화 되어서 멀티스레드 실행에서는 반환 값은 근사(ap...
C++17 - static_assert의 에러 메시지 생략 가능 October 24, 2019
static_assert는 C++11에서 생긴 기능으로 컴파일 타임에 식의 true, false 여부를 조사해서 false인 경우 지정한 에러 메시지를 출력한다. static_assert(a == b, "a와b는 같아야 한다"); C++17에서는 static_assert 에 에...
C++17 - std::byte January 19, 2021
C++17 - string_view의 주의점 November 24, 2019
출처 string_view 클라스 == 문자열에 대한 읽기 전용 뷰. std::string와 같이 null 종단 문자열 이외도 올바르게 다룰 수 있다. null 종단 문자를 도중에 포함 할 수 있다. string_view 클래스는 참조처...
C++17 - 람다식에서 *this의 복사 캡쳐 November 14, 2019
C++11에서 람다식의 캡쳐 리스트에 this를 지정하면 이 람다식이 속하는 클래스 오브젝트가 참조로 캡쳐된다. 비동기 처리나 병렬 처리에서 오브젝트 수명 관리를 간단하게 하기 위해 this를 참조가 아닌 복사로 캡쳐해야 하는 경우가 있다. 이 때 C++17에서 새로 생긴 *th...
C++17 - 랜덤 샘플링 알고리즘 June 23, 2020
std::sample()이 <algorithm>에 추가 되었다. #include <iostream> #include <string> #include <iterator> #include <random> #include <a...
C++17 - 복수의 using 선언 시 컴마 구분 사용 November 18, 2019
간결한 코딩을 위해 네임 스페이스를 생략하고 싶다면 using 선언을 사용한다 std::cout << "hello"; using std::cout; cout << "hello"; 그러나 아래와 같은 경우는 using std::cout; using std...
C++17 - 숫자to문자열, 문자열to숫자 변환 표준 라이브러리 November 21, 2019
C++17에서 숫자를 문자열로 변환, 문자열을 숫자로 변환 해주는 라이브러리가 새로 생김 출처 특징 서식 지정은 문자열이 아니다 동적 메모리 할당을 하지 않는다 로케일 무시 가상 함수 호출이 아니다 버퍼 오버런 방지 반환 값에서 에러를 반환한다 입력 문...
C++17 - 숫자를 문자열로 변환하는 to_chars(), 문자열에서 숫자로 변환는 from_chars() May 14, 2020
로케일은 C 로케일(POSIX 로케일) 고정 함수 내에서 동적 메모리 할당이 없다. 즉 호출 측에서 만들어줘야 한다 포맷은 파라메터로 주고, 자동적으로 포맷을 해석할 수 없다 사용할 수 있는 포맷은 최소한 부호...
C++17 - 시간 반올림 연산 May 21, 2020
밀리 세컨드를 세컨드 단위로 변경할 때 딱 맞아 떨어지지 않는 경우 반올림 혹은 내림을 할 수 있는 floor(내림), ceil(올림), round(가장 근접한 수로)가 생겼다. #include <iostream> #include <chrono> using...
C++17 - 연관 컨테이너의 extract, merge, insert May 20, 2020
2개의 연관 컨테이너를 접합(splice)하는 기능이 생겼다. map, set, unordered_map, unordered_set와 이 들의 multi 버전 모두도 포함된다. 특정 요소 추출 extract() 멤버 함수를 사용하면 컨테이너의 특정 요소를 추출 할 수 있다. n...
C++17 - 중첩된 namespace 선언 November 16, 2019
C++14 까지 namespace A { namespace B { class AA {}; } } C++17 부터는 namespace A::B { class AA {}; }
C++17 - 튜플을 유저 정의 타입으로 변환하는 make_from_tuple 함수 May 15, 2020
예제 코드 #include <iostream> #include <string> #include <tuple> struct Person { int id; double bodyHeight; std::string name; ...
C++20 - Feature List 동결 - 모듈, 코루틴, Concepts 채용, Contracts은 연기 September 22, 2019
출처 ISO C++ 위원회는 2020년 2월까지 공개 예정인 C++20 이라고 불리는 차기 C ++ 표준 기능 목록을 종료했다. C++20은 C++의 중요한 개정판으로 모듈, 코루틴, Concepts을 새로운 주요 기능으로 제공한다. 최근 쾰른에서 열린 회의에서 ISO C++ ...
C++20 - Using enum January 21, 2021
using enum은 C++20의 새로운 기능. scoped enum을 namespace의 using directive를 사용할 수 있다. C++17까지는 enum을 아래처럼 사용한다. enum struct color { red, green, blue } ; void f( co...
C++20 - std::ssize January 22, 2021
CMake에서 GoogleTest 사용하기 February 23, 2019
출처 구성은 아래와 같이 되어 있다고 한다. src 폴더 아래가 테스트 대상 코드, test 폴더 아래는 테스트 코드 클래스 단위로 파일이 나누어져 있다고 가정한다. mk.sh을 실행하면 build/src/ 에 응용 프로그램의 실행 파일...
CPU 캐시 잘 활용하는 방법 - 프로그램 코드가 작게하기 November 8, 2020
Poco 라이브러리 설치하기 July 10, 2019
Linux 공식 사이트에서 최신 버전을 다운로드 한다. 압축을 풀고, 빌드한다. 아래는 64비트, static 라이브러리, 테스트와 샘플은 제외 하는 설정으로 빌드 한다 $ tar zxvf poco-1.7.8p2-all.tar.gz $ cd poco-1.7.8p2-...
Trip report Fall ISO C++ standards meeting(Albuquerque) Sutter’s Mill December 1, 2017
Trip report: Fall ISO C++ standards meeting (Albuquerque) | Sutter’s Mill 을 번역한 일본 문서를 일부 번역한 것이다. range-based for 에 초기화자를 쓸 수 있도록 되었다. for( auto res...
Ubuntu에 gcc 8, clang 6 설치하기 June 20, 2019
gcc 8 (Ubuntu 17.04) PPA로 최신 버전 설치 sudo add-apt-repository ppa:jonathonf/gcc-8.0 sudo apt update sudo apt install gcc-8 g++-8 LLVM 설치 Ubuntu 18.04 apt-get ...
Vcpkg Product Roadmap - 2020.04 May 2, 2020
Vcpkg 2020.04 Update and Product Roadmap 글에서 roadmap 관련된 부분만을 일부 번역하였다. 새로운 라이브러리의 지원을 계속하고, Linux와 macOS에서의 지원을 개선한다. 사용자들의 피드백이나 제안을 기초로 제품에 새로운 기능을 추가한다...
Win32API - CRITICAL_SECTION의 OwningThread June 5, 2017
Windows Vista부터 CRITICAL_SECTION의 내부 구조가 바뀌었다고 한다. 이 중 눈여겨 볼 것은 CRITICAL_SECTION의 멤버 변수 중 OwningThread 인데 이 변수에는 CRITICAL_SECTION을 소유중인 스레드의 ThreadID가 설정된다....
YOUTUBE - C++ OpenSiv3D로 즐거운 그래픽스 프로그래밍 November 25, 2020
YOUTUBE - C++ Redis 프로그래밍 November 24, 2020
YOUTUBE - IOCP 네트워크 프로그래밍 학습을 위한 단계별 실습 November 21, 2020
YOUTUBE - IOCP 샘플 코드 설명 November 26, 2020
cmake에서 CMAKE_C_FLAGS에 설정한 값이 무시될 때 February 20, 2019
출처 CMakeLists.txt 안에서 컴파일 옵션을 지정하려고 했는데 설정이 무시되는 문제를 만났다. 컴파일 옵션 지정과 add_subdirectory 명령어 기술 순서가 문제였다. 문제 CMakeLists.txt cmake_minimum_required(VERSION 3.1...
epoll을 사용한 echo 서버 June 6, 2019
출처 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <sys/socket....
google benchmark로 C++ 코드 성능 측정하기 December 22, 2018
posix aio의 네트워크 소켓을 지원에 대해서 July 31, 2019
posix의 비동기 IO의 API인 aio는 파일 조작만 지원하는 걸로 알고 있었는데 소켓 조작에도 사용할 수 있다고 한다. https://koyo.kr/post/posix-aio-socket-server-example/ 그런데 리눅스쪽 서버 개발 관련해서 자료를 찾을 때 소켓 ...
premake April 29, 2019
CMake와 같은 멀티 플랫폼 오픈소스 개발에 유용한 툴. lua를 통해 스크립트를 작성한다. 루아 파일 이름과 같은 이름의 솔루션 파일을 만들어준다. 현재 premake4와 premake5 두 가지 버전이 있다. Visual Studio 2013 ...
std::codecvt_utf8로 wstring을 utf-8 문자열로 변환 하기 April 4, 2017
std::wstring을 utf-8 문자열로 변환 하는 방법은 아래와 같다. std::wstring wStr = L"우하하"; std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> utf8Conv; auto ...
tm 에서 time_t로 UTC로 변환 하는 함수 March 10, 2017
헤더 파일 time.h 혹은 헤더 파일 ctime 에서 time_t와 tm 구조체와의 변환을 하는 함수를 정리했다. time_t→ tm 구조체 tm 구조체 → time_t 현지 시각 ...
unorder_set 에서 구조체(혹은 클래스)를 Key로 하고 싶을 때 March 9, 2019
출처 == 오퍼레이터를 오버라이드 한다. hash 함수를 구현한다. // key로 사용할 구조체 struct Point { int x, y; Point(int x, int y) : x(x), y(y) { } // override == ope...
멤버 변수에 대한 포인터를 이용하여 타입의 특성을 판정 April 21, 2017
멤버 변수에 대한 포인터라는 것은 우선, 예로서 단순히 정수를 래핑 한 클래스를 보자 class int_wrapper { public: int data; int_wrapper(int data) : data(data) {} }; 위 코드에서 int_wrapper::dat...
번역 - RAII 해설 January 31, 2020
번역 - 게임개발과 mvc January 12, 2020
번역 - 게임개발과 디자인패턴 January 14, 2020
번역 - 덤프를 이용한 hang 상태의 애플리케이션 조사 방법 - 크리티컬섹션 August 18, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
실전 Modern C++ - module 1 May 11, 2023
실전 Modern C++ - module 2 May 14, 2023
클래스 멤버 함수 포인터 배열 사용하기 December 16, 2016
함수 포인터 관련 검색을 하면 C 버전이 많이 나오고, 배열 타입을 사용하는 경우는 별로 없어서 공유한다. (사실 최신 C++에서는 std::function을 사용하면 되기 때문에 이걸 사용하지 않아도 된다) 선언 bool(TEST::*m_pFunc[4])(const int, ...
표준 C++ 규격이 3년 간격으로 제정 되는 이유 July 17, 2019
Draft FAQ: Why does the C++ standard ship every three years? – Sutter’s Mill 현재 C++ 표준은 3년 단위로 제정 되고 있는데 왜 3년 주기인지 C++ 표준 위원회 의장인 Herb Sutter씨의 설명. C++ 표준...
CLion (25)
CLion - CLion에서 Boost 라이브러리 사용 하기 December 3, 2021
CLion - CMake Install과 비 CMake 프로젝트 December 1, 2021
CLion - CMake 옵션에서 컴파일러 지정하기 November 4, 2021
CLion - CPU 프로파일러 November 13, 2021
CLion - Clang-Tidy로 유연성과 컨트롤 향상 November 12, 2021
CLion - ClangFormat November 22, 2021
CLion - Clangd 기반 언어 엔진과의 통합 강화 November 28, 2021
CLion - Clangd 기반 탐색 및 검색 November 16, 2021
CLion - Google Sanitizers 지원 November 15, 2021
CLion - Naming Convention November 20, 2021
CLion - Run Anything, Search Everywhere November 2, 2021
CLion - Windows에서 CLion 사용하기 October 31, 2021
CLion - googletest 설정 November 18, 2021
CLion - 디스 어셈블리 뷰 November 8, 2021
CLion - 메모리 보기 November 6, 2021
CLion - 사용자 지정 빌드 대상으로 실행 / 디버그 구성 November 25, 2021
CLion - 새로운 빌드와 리빌드 작업 November 2, 2021
CLion - 여러 줄의 TODO 주석 November 2, 2021
CLion - 원격 개발 지원 December 4, 2021
CLion - 코드 정리 정돈하기(파일 리포맷) November 2, 2021
CLion - 파일 단위로 실행 November 2, 2021
GoLand - 에디터의 (파일)탭을 숨기지 않고 모두 표시하기 November 10, 2021
GoLand - 정형화 시키지 않을 파일 지정 November 8, 2021
JetBrains - Docker 상에서 jetbrains 제품을 실행하는 방법 December 7, 2021
JetBrains - Projector로 JetBrains IDE를 원격으로 사용하기 December 6, 2021
Cloud (15)
AWS - P2P에서 클라우드로의 전환. For Honor와 Friday the 13th The Game이 어떻게 플레이어 경험을 향상 시켰는가 May 13, 2018
원문 게임 개발자로서 출시에 이르기까지 열정을 잃지 않고 게임 개발과 팬 커뮤니티의 육성에 수 년의 세월 투자 되어 왔다고 생각한다. 최고의 사용자 경험을 제공 할 수 있는 것에 대해서는 예를 들어 네트워크 연결시 플레이어의 대기 시간에 대한 백엔드의 선택 등 백엔드 인프라는 가...
AWS re:Invent 2021 - How Epic Games develops Fortnite faster with a build farm on AWS January 18, 2022
AWS 오픈 소스 컨테이너 개발 툴 「Finch」의 Windows판 릴리스. 컨테이너 빌드 및 실행 환경 세트 April 9, 2024
Cloud Logging 구조화 로그의 특수한 JSON 필드 정리 November 17, 2023
Google Cloud Platform의 15개 서비스를 영구 무료 한도를 제공 March 17, 2017
구글은 2017년 3월 10일 Google Cloud Next 17의 3일째 기조 강연에서 15개 서비스의 영구 무료 쿼터를 발표. 영구 무료 한도 대상 서비스 이름과 월 제한은 다음과 같다(제품에 따라서는 아래 외에도 제한이 있다). Google Cloud Engine(...
Google Cloud 네트워크 관련 특징 October 24, 2022
Stackdriver Monitoring(Cloud Monitoring) 입문 February 20, 2022
구글 클라우드 로깅에 대해서 November 16, 2023
번역 - AWS re Invent 2019 1000 만명 사용자를 향해 확장해 나가기 August 22, 2020
번역 - AWS re Invent 2019 CAPCOM이 컨테이너 ,데이터, ML을 사용하여 유저에게 즐거움을 주는 게임을 빠르게 구축하는 방법 August 16, 2020
번역 - AWS re Invent 2019 How Rovio teaches Angry Birds to fly in the cloud using ML August 17, 2020
번역 - AWS에서 온라인 게임 출시 August 23, 2020
번역 - 서버리스 온라인 게임과 실시간 리더 보드 구축 August 27, 2020
번역 - 온라인 게임 개발에서의 클라우드 디자인 패턴 August 26, 2020
번역 - 최강의 ECS & Fargate build 환경 on AWS August 25, 2020
Coding (1)
NASA의 10가지 코딩 룰의 힘 November 4, 2020
DB (55)
DB 샤딩 알고리즘 November 29, 2023
DBA가 (서버)개발자에게 가장 많이 받은 질문들 February 1, 2022
<a href="https://jacking75.github.io/db-0820/" title="Discord가 데이터베이스를 "Apache Cassandra"에서 "ScyllaDB"로 마이그레이션 한 이유">Discord가 데이터베이스를 "Apache Cassandra"에서 "ScyllaDB"로 마이그레이션 한 이유
August 20, 2023
</a>
MongoDB - C# find April 26, 2019
모든 도큐먼트 가져오기 클래스 맵핑 var collection = GetDBCollection<DBBasic>("Basic"); var documents = await collection.Find(_ => true).ToListAsync(); return ...
MongoDB - C# insert, update, delete April 25, 2019
기본 추가 클래스 맵핑으로 새 도큐먼트 추가 var newData = new DBBasic() { _id = "test01", Level = 1, Exp = 0, Money = 1000, Costume = new List<int&g...
MongoDB - C# 프로그래밍 April 24, 2019
MongoDB 공식 C# Driver 1.x와 2.x 라이브러리가 많이 다름. 2.0 드라이버 소개 레퍼런스 온라인 도움 문서 Indexes.CreateOneAsync sample Find & FindAsync sample 아래 예제 코드에서 사용...
MongoDB - wiredTiger April 23, 2019
wiredTiger 사용 conf 파일 예 // mongodb_wt.conf storage: dbPath: "/data/mongod_wt" engine: "wiredTiger" directoryPerDB: true wiredTiger: ...
MongoDB - 데이터 추출 툴 mongoexport 와 mongodump 간단 비교 September 11, 2017
MongoDB의 데이터를 출력하는 툴로 mongoexport 와 mongodump가 있다. 둘 다 mongodb-tools 패키지에 포함되는 도구이다. mongoexport는 CSV 또는 JSON 텍스트 데이터, mongodump는 BSON 형식의 이진 데이터로 출력한다. 사용...
MongoDB 3.0.6 Windows에서 설치 및 실행 April 22, 2019
이 글은 이것을 정리한 것이다. MongoDB 3.0.6 Windows에서 설치 및 실행 MongoDB 공식 다운로드 에서 ‘Windows 64-bit 2008 R2+’를 선택해서 다운로드 한다. 기본 설치 위치는 C:\Program Files\Mongo...
MySQL - 100M으로 스케일링 하기. Key-Value 저장소로 MySQL을 사용하여 NoSQL 이상의 퍼포먼스를 내자 December 24, 2019
MySQL - Waiting for table metadata lock 대처 방법 January 26, 2022
MySQL 8.0.16의 CHECK 제약 February 19, 2020
참고 CHECK 제약 조건을 지정하여 테이블을 만든다. (※ t1.a에 “0 < a AND a <= 3” 이라는 CHEKC 제약을 지정한다) mysql> SELECT version(); +-----------+ | version() | +-----------+ ...
MySQL 8.0.22에서 innodb_log_writer_threads의 효과를 알아보자 March 17, 2022
MySQL 8.0에서 JSON 타입의 partial update 및 이에 대한 InnoDB의 최적화 January 2, 2022
MySQL 8.0에서의 Json 사용하기 December 30, 2021
MySQL 8.0의 lock read의 NOWAIT와 SKIP LOCKED 옵션에 대해서 February 7, 2022
MySQL 메타데이터 Lock에 대해서 February 18, 2023
MySQL 온라인 DDL에서 Deadlock 오류가 발생하는 경우 May 24, 2023
MySQL 트랜잭션 격리 수준과 발생하는 법칙을 정리 February 2, 2023
MySQL에 IP 주소를 저장하기 May 9, 2023
MySQL에서 JSON 다루기 December 30, 2021
MySQL에서 문자열의 유니크 제약 조건을 걸 때 조심할 것 February 12, 2023
MySQL에서 발생할 수 있는 뜻밖의 데드락과 대응 방법 January 29, 2023
MySQL의 3가지 lock - Record lock, Gap lock, Next-key lock September 8, 2017
Record lock(레코드 락): 단일 인덱스 레코드의 락. Gap lock(갭 락): 인덱스 레코드 사이의 갭의 락, 선두 인덱스 레코드의 앞이나 말미 인덱스 레코드의 뒤의 갭의 락 Next-key lock(넥스트 키 락):레코드 락과 이 레코드 직전의 갭 락의 조...
MySQL의 ALTER TABLE 문 실행 시 주의 사항 December 20, 2023
MySQL의 Index를 붙이는 요령 January 4, 2022
MySQL의 Too many connections 에러 대처법 December 22, 2021
MySQL의 갭락과 넥스트 키 락에 대해서 February 14, 2022
MySQL의 다양한 타임 아웃 옵션 정보 June 6, 2023
MySQL의 다양한 타임아웃 옵션 January 6, 2022
MySQL의 저장 프로 시저, 함수 및 트리거의 성능이 나쁜 이유 January 20, 2022
MySQL의 정렬 처리에 대해 January 29, 2022
Redis 4.0의 핵심 기능 May 1, 2019
(몇년 전의 글을 블로그에 올린 것임) 참고 redis 4.0은 지금까지와는 비교하면 아마 가장 극단적인 버전 업 중 하나이다. 향후 사용자에 의해 발견된 중대한 문제는 수주일에서 수개월로 패치 발표할 테니 신중하게 이용하자. a modules system redis는 이미 해...
Redis 서비스 전에 조사할 것들 May 6, 2019
Redis 서버의 흔한 실수 법 Redis 서버가 떨어지거나 APP서버가 떨어질지는 상황에 따른다. KEYS 명령과 ZRANGE 명령으로 수만건 이상에 접근하여 I/O대기로 죽는다 데이터 설계를 실패하여 메모리 부족으로 쓸 수 없게 되어 죽는다 Redis 서버에서 장애...
Redis, Lua Script vs Transaction January 30, 2022
Redis로 방문자수 구현하기 June 29, 2023
Redis를 사용하여 동일 유저의 요청은 순차적으로 처리되도록 하기 July 16, 2022
Redis를 사용한 분산 잠금 (SETNX, Redlock) January 27, 2023
SQL 약간의 퍼포먼스 튜닝 정리 December 15, 2023
SQLFluff를 사용하여 SQL을 린트(Lint) 하기 March 12, 2022
<a href="https://jacking75.github.io/db-20220225/" title="SQL용 포맷터(코드 정리) "SQLFluff"">SQL용 포맷터(코드 정리) "SQLFluff"
February 25, 2022
</a>
SQL을 다루는 사람 모두가 이해해야 할 SELECT 문의 논리적 처리 순서 March 19, 2022
UPDATE IN SELECT로 인한 교착 상태가 더 이상 발생하지 않게된 이야기 January 6, 2024
Wireshark를 이용한 MySQL 문제 해결 January 7, 2022
dbdiagram.io를 사용하여 코드 기반에서 쉽게 ER 다이어그램을 만들자 February 21, 2022
docker로 mysql을 사용하기 February 16, 2022
innodb_dedicated_server에 의한 buffer_pool 할당 February 11, 2022
게임 서비스 시 MySQL에서 검토해야할 파라메터 December 19, 2021
데이터베이스 락(Lock) 기초부터 교착 상태(데드락)까지 January 8, 2024
데이터베이스를 느리게 하는 8가지 방법 February 17, 2022
로컬 환경에서 docker mysql에 연결 May 16, 2023
번역 - 월간 10억 PV를 지지하기 위한 MongoDB Tip January 10, 2020
수신 기한이 지난 데이터를 MySQL에서 삭제할 때의 이야기 January 20, 2023
커넥션 풀의 크기를 제어하는 3가지 설정 January 12, 2022
트랜잭션 격리 수준에 대한 요약 February 1, 2023
Docker (1)
Docker - Windows + Docker 환경이 무거운 문제를 unison으로 해결 August 12, 2021
ETC (41)
2018 컴투스 경력직 원클릭 채용 March 29, 2018
4월 한달 동안 간단한 절차로 컴투스에 지원할 수 있습니다~~ 지원하기
2021년 컴투스 경력직 원클릭채용 April 6, 2021
2021년 컴투스 경력직 원클릭채용 다른 채용 방식과 달리 초 간단 지원을 한 후 “5분 전화 인터뷰”를 통해 회사와 구직자 간에 서로 맞는지 알아 볼 수 있어서 혹시 서로 맞지 않은 경우 빨리 알 수 있어서 이력서 작성이나 면접 등의 불필요한 시간 낭비를 줄일 수 있습니다. ...
2022년 회고 December 31, 2022
회고를 거의 하지 않았지만 올해 게임 개발자로서 변화가 있어서 남겨 봅니다. 관리자로 더 진화 현 회사에서(어디인지 궁금하다면 제 깃허브 보시면 됩니다^^) 이미 2년 전부터 팀장 직책으로 관리자 업무를 하고 있었지만 그래도 업무 비중에서 관리 비중이 50% 이하였는데 올해 관리...
2023년 회고 - 책 December 31, 2023
MS 기술 문서 번역하기 December 9, 2018
MS의 기술 문서는 예전에는 MSDN을 통해서 제공했지만 몇년 전부터는 https://docs.microsoft.com 을 통해서 제공하고 있다. (이전에 만든 문서는 아직 MSDN에 있다) https://docs.microsoft.com 의 장점은 한글로 번역되어 있지 않는 문...
POCO를 이용한 C++ 네트워크 프로그래밍 June 29, 2017
e-book으로 나온 후 몇 주전에 종이 책으로 나왔습니다. yes24 POCO를 사용하면 C++로 네트워크 프로그래밍을 이전 보다 훨씬 쉽게 할 수 있으니 꼭 한번 공부 해보기를 추천합니다^^
PlantUML Cheat Sheet November 25, 2020
ebook - POCO를 이용한 C++ 네트워크 프로그래밍 May 1, 2017
구입 며칠 전에 나왔습니다^^ NHN Next 에서 일하게 되면서 시간 여유가 생겨서 짧은 분량이지만 책을 집필 할 수 있었습니다. 책 내용은 제목 그대로 POCO 라이브러리 중 Net 부분의 라이브러리를 사용하여 네트워크 프로그래밍을 하는 방법을 설명하고 있습니다. 아직...
mermaid.js와 PlantUML로 서버 개발 및 유지 보수에 필요한 문서 만들기 November 19, 2019
컴투스에서 매달 게임 서버 프로그래머 대상으로 세미나(회사에서는 월 세션 이라고 부릅니다)를 진행합니다. 주제는 게임 서버 개발과 관련된 것입니다. 이번 달에 발표한 문서를 공유합니다. 컴투스에서 모든 서버 프로그래머는 기본으로 JetBrains의 All Products Pa...
svn 에러 E155010 is scheduled for addition, but is missing May 23, 2019
svn 업데이트를 하니 특정 디렉토리가 삭제가 되었는데 충돌이 나서 수동으로 지웠음. 이 후 커밋을 하려니 위와 같은 에러가 발생. 이런 경우 –force라는 플래그를 사용하여 강제적으로 없애준다. 위에 삭제된 디렉토리가 test1 이라고 하면 svn delete --force...
게임 서버 학습 및 게임 서버 신입 구직 멘토링 오픈 카톡방 November 23, 2023
신입으로 취업 준비 중인 분들을 대상으로 합니다. 장소는: 지하철 2호선 낙성대역 3번 출구 근처 카페 시간: 토, 일요일 오전 10:20 ~ 12시까지 비용: 커피 한잔(공짜는 아닙니다^^;) 오픈 카톡방 들어와서 멘토링 신청하면 됩니다 입장할 때는 실명으로 들어와 주시기...
구인 - 서버 프로그래머 March 9, 2018
저는 현재 가산디지털역에 있는 컴투스에서 일 하고 있습니다. 제가 소속된 회사에서 서버 프로그래머를 구인 중이라서 혹시나 하는 마음에 글 올려봅니다. 스카이랜더스 컴투스의 스카이랜더스 라는 프로젝트에서 서버 프로그래머를 구인 중입니다. 스카이랜더스는 해외 유명 IP로 애니메이션까...
내가 신입사원 때 저지른 실수 10가지와 그 해결 방안 October 26, 2024
레이팅 관련 글 February 12, 2020
1:1 elo 레이팅 계산 Glicko Ratings TrueSkill github/EloRate
로그 설계 지침 May 4, 2019
원문
마크다운 문법 - Table of contents March 5, 2019
Table of contents ================= * [gh-md-toc](#gh-md-toc) * [Table of contents](#table-of-contents) * [Installation](#installation) * [Usa...
모델이나 메소드에 이름을 붙일 때는 영어의 품사에 주의 하자 June 7, 2019
모델의 이름은 명사로 한다 예: “지불 정보”를 나타내는 모델을 만들고 싶은 경우 × Pay ○ Payment pay는 동사로 pay의 명사형이 payment 이다. Pay 모델이 아니라 Payment 모델을 만들자. 예: “종교”를 나타내는 모델을 만들고 싶은 경우...
분산 폴더 동기화 툴 Syncthing November 30, 2019
Syncthing는 분산 폴더 동기화 툴이다. Syncthing 인터넷을 통해 여러 단말기의 로컬 폴더를 동기화 할 수있는 도구이다. 3자가 관리하는 중앙 서버를 거치지 않고 개인 데이터를 공유 하려는 경우에 적합하다. 통신이 완벽하게 암호화 되어 있는 것과 개발이 오픈 소스로 ...
스터디 인원 모집 - Go로 게임 서버 만들기 July 21, 2017
프로그래밍 언어 Go로 게임 서버를 만들기 위해 필요한 기술과 경험을 서로 공유하기 위해 스터디를 시작하려고 합니다. 스터디를 만드는 큰 이유는 이 모임을 통해서 꾸준히 Go를 공부하고, 다른 사람들과 Go 관련 지식이나 경험을 공유하기 위해서 입니다. 아마 Go로 실제 일을...
신인 프로그래머가 알아야 할 프로그래밍의 원칙 5개 October 8, 2019
출처 KISS Keep It Simple, Stupid 간단하게 해 어리석은 놈아 코드를 쓸 때 “단순성”이나 “간결성”을 최대 중요 항목으로 한다. 코드는 자연에 맡겨 수정해 가면 무 질서하게 되고 복잡해진다. 그 결과, 읽기 어렵...
신입 게임 프로그래머가 될 분들께 간단한 조언 November 27, 2017
아는 내용일 수도 있지만 혹시나 하는 마음에 간단하게 글 적습니다. 큰 회사들은 공채로 신입을 많이 뽑고, 공채는 10월초부터 시작합니다. 요즘은 큰 회사(상장된, 혹은 규모가 큰)들은 신입을 공채로 많이 뽑고 있습니다. 대부분의 회사가 공채는 10월초부터 시작합니다. 그러니 1...
신입 공개 채용 캠퍼리 리쿠르팅에 갑니다(부산대학교) September 24, 2019
제가 다니고 있는 컴투스에서 현재 신입 공개 채용을 하고 있습니다. 바로가기 게임 회사에 대해서 잘 모르는 분들을 위해 컴투스에서 각 지역의 대학교에서 회사 설명회를 하고 있습니다. 저는 9/30일에 부산대학교에서 12:00~17:00까지 채용 상담을 할 예정입니다. 게임 서버 ...
유튜브 시작 October 4, 2020
몇 년전에 유튜브에 개인 채널을 만들어서 예전 강연 중 동영상으로 남아 있는 것은 올려 놓았는데 영상 보관용으로 사용하고 있었습니다. 그러다가 올해에 코로나로 인해 강연 등을 정상적으로 할 수 없게 되어서 앞으로는 유튜브에 영상을 자주 올려 볼려고 합니다. 주제는 게임 서버 개발,...
유튜브 하고 있습니다 July 23, 2022
유튜브 시작한지는 2년전쯤 되는데 조금 하다가 중단하고… 또 다시 자주는 아니라도 꾸준히 하려고 합니다. 돈을 벌 목적은 아니라서 시간 투자가 작아야 하므로 퀄리티는 높지 않습니다^^; https://www.youtube.com/user/jacking75/videos
이름 붙이기 June 8, 2019
메소드 이름은 동사로 시작한다 동사 이름 한글 표현 주된 반환 값 Get 취득하다 객체 Set 설정하다 void ...
좋은 에러 메시지 쓰는 법 May 5, 2019
원문 에러 메시지를 2가지로 분류한다 우선, 에러 메세지라고 해도 다음의 2가지 패턴에서 크게 달라진다. (1) 이용자가 보는 에러 메세지 (2) 개발자가 보는 에러 메시지 (1) 이용자가 보는 에러 메세지 내부 구현에 대해서는 적지 않는다 | | | |–|–| |NG | ...
좋은 클래스 이름을 짓기 위한 참고 정보 June 9, 2019
데이터 소스를 취급하는 레이어 이름 보충 예 Client HttpClient 등 Server-Client 의미로 사용하는 TwitterApiClient, QiitaApiC...
좋은 함수 이름을 짓기 위한 참고 정보 June 10, 2019
참 거짓을 돌려주는 메소드 장소 단어 의미 예 Prefix is (오브제그트가)대기 하는 상태가 되어 있나? isChecked ...
참, 거짓을 반환 하는 함수의 네이밍 June 11, 2019
참 거짓 값(Boolean, bool)을 반환하는 함수는 is로 시작하는 것이 일반적이라고 생각한다. 적어도 C++ 에서는… 그러나 영어적으로 is 시작이 어려운 경우도 있다. is로 시작할 수 없는 함수 이름의 명명 방식을 생각해 봤다. 존재 하는가? 가장 하기 쉬운 실패가 “...
추천 프로그램(개발 유틸리티) November 16, 2018
asciinema https://asciinema.org/ 터미널에서의 입력 기록과 재생, web으로 공유도 가능 사용법 소개 (일어) https://dev.classmethod.jp/tool/intro-asciinema/ ...
컴투버스 경력직 대규모 특별 채용 August 23, 2022
안녕하세요 https://www.com2us-recruit.com/ 메타버스 개발에 관심 있는 분들은 꼭 지원해 보시기 바랍니다. 저를 아는 분이라면 추천인에 제 이름을 넣어주시면 됩니다^^ 궁금한 것이 있으면 이메일로 연락주시기 바랍니다~
컴투스 2019 신입 게임프로그래머 특별채용 - 02/11까지 January 25, 2019
링크
컴투스 서버캠퍼스 1기 모집 March 15, 2023
안녕하세요 컴투스에서 서버캠퍼스라는 교육 프로그램을 4월부터 시작하려고 합니다. 이 교육에 참가를 원하신다면 3월31일까지 지원하시면 됩니다. 지원하기 위 링크에 이 교육에 대한 자세한 설명도 있습니다. 이 교육을 통해서 게임 서버 중 웹서버 방식의 게임서버 개발 방법을 배우고...
컴투스 서버캠퍼스 2기 March 19, 2024
안녕하세요 2023년에 이어 올해도 컴투스 서버캠퍼스를 합니다. 접수는 3월 6(수요일)일부터 시작합니다 (3월21일(목요일) 16시까지) 지원 작년과 달라진 것 소켓 방식의 게임 서버 개발이 중심. 교육 기간이 5주에서 7주로 ...
컴투스 서버캠퍼스 2기 March 15, 2024
안녕하세요 2023년에 이어 올해도 컴투스 서버캠퍼스를 합니다. 접수는 3월 6(수요일)일부터 시작합니다 (3월21일(목요일) 16시까지) 지원 작년과 달라진 것 소켓 방식의 게임 서버 개발이 중심. 교육 기간이 5주에서 7주로 ...
컴투스 서버캠퍼스 2기 March 4, 2024
안녕하세요 2023년에 이어 올해도 컴투스 서버캠퍼스를 합니다. 접수는 3월 6(수요일)일부터 시작합니다 (3월21일(목요일) 16시까지) 지원 작년과 달라진 것 소켓 방식의 게임 서버 개발이 중심. 교육 기간이 5주에서 7주로 ...
컴투스 서버캠퍼스가 궁금하다면? 대표 강사 인터뷰 March 22, 2023
[컴투스 서버캠퍼스가 궁금하다면? 클릭!🤓 대표 강사 인터뷰](https://blog.com2us.com/?p=3475) 클라이언트, 서버 양쪽 다 하기를 원하거나 혹은 호기심에 게임 서버 개발을 배우기 원하는분 보다는 게임 ...
컴투스 온라인 채용설명회, 직무상담 사전신청 October 15, 2022
신청하기 신청 마감일은 13일까지였는데 신청하면 될 수도 있을 것 같습니다(주말이라 가능한지 확인은 못해봤습니다. 신청자가 적은걸로 알고 있습니다^^; ) 컴투스 게임서버는 제가 참석합니다. 신입 공개 채용 지원은 10/24일까지입니다. 2022 컴투스 그룹 신입 ...
컴투스에서 야구 프로젝트 대규모 채용을 합니다(~04/17) April 10, 2022
안녕하세요 컴투스에서 야구 프로젝트 대규모 채용을 합니다. https://com2us.recruiter.co.kr/app/jobnotice/view?systemKindCode=MRS2&jobnoticeSn=88971 컴투스는 복수의 야구 게임을 신규 개발 및 라이브 서비...
코딩용 폰트 May 24, 2019
CodingFont - 자신에게 맞는 코딩 폰트를 찾는 게임 MonoLisa - 개발자를 위한 고정폭 폰트 (monolisa.dev) https://monolisa.dev/ 눈이 편하게 폭이 넓음 C와G, IL1, 0OØ 등에 확실한 차이를 둠 읽기 편한 선의...
회고 - 2018년에 본 책(IT) December 30, 2018
당연히 올해에 본 책들도 다 회사의 도움을 받았다. 대부분의 회사들은 책 구입을 지원할테니 회사 도움을 받아서 가능하면 책을 사 보기 바란다. 2018년에는 아래의 책을 구입해서 보았다. PHP 7 예비학교 예비 웹 프로그래머를 위한 과외 수업 러닝 PHP PHP 입문...
Git (5)
GitHub의 master 브랜치를 Web 페이지로 게시하는 방법 (GitHub Pages) November 6, 2020
git - GitSheet March 20, 2020
출처 Git의 브랜치 조작 git branch 모든 로컬 브랜치를 나열한다. git branch -a 원격 및 로컬 브랜치를 나열한다. git checkout -b branch_name 로컬 브랜치를 생성하고 전환한다. git checkout branch_name 기...
git - submodule 사용 예 October 12, 2019
C++ 오프소스 라이브러리 googletest를 submodule로 설치 후 커밋하기 cd helloworld mkdir third_party cd third_party/ git submodule add git@github.com:google/googletest.git gtest...
git - 자주 사용하는 git 명령어 March 19, 2020
출처 자신의 commit을 pull request 할 때까지 git pull #로컬 저장소를 최신으로 git checkout -b <branchName> #브랜치 작성과 이동 #파일 편진 git status #편집한 파일을 확인 git diff #차분을 확인 git ...
<a href="https://jacking75.github.io/git_lazygit/" title="터미널 UI Git 도구 "lazygit"소개">터미널 UI Git 도구 "lazygit"소개
October 28, 2020
</a>
GoLand (1)
GoLand - shadow 감지하기 December 24, 2021
Golang (326)
Go 언어 2017년 조사는 제네릭 및 종속성 관리가 Go 언어에 가장 요구되는 기능임을 밝혔다 April 10, 2018
원문 최신 Go 언어 조사에 의하면 Go 언어는 제네릭 및 종속성 관리 기능이 부족하고, 이것이 이 언어의 양대 문제이다, 라고 개발자가 생각하고 있다는 것을 알았다. 이러한 상황에도 많은 응답자는 Go 언어를 개인 프로젝트가 아니라 전문적으로 사용하고 있다는 것이 조사에 의해 ...
YOUTUBE - Golang 실시간 서버 개발 실습 소개 November 23, 2020
YOUTUBE - 오픈소스 코드로 배우는 Golang TCP Socket Server 프로그래밍 November 22, 2020
golang - Go언어 콘솔 모드에서 콘솔 위에 그래프, 단추, 스크롤 텍스트를 표시하는 termdash의 소개 July 4, 2021
<a href="https://jacking75.github.io/go-1209/" title="golang - "거의 아무것도 할 필요 없는" asdf용 Go 플러그인 asdf-go-sdk">golang - "거의 아무것도 할 필요 없는" asdf용 Go 플러그인 asdf-go-sdk
December 9, 2021
</a>
golang - -buildmode = c-shared'로 만들 수 있는 Windows DLL을 시도해 보았다 February 20, 2021
몇 년전에 번역했던 글로 지금과 다를 수 있다.
golang - 01) TCP Server 만들기 May 9, 2019
출처 Echo Server 예제 코드 package main import ( "log" "net" ) func handleConnection(conn *net.TCPConn) { defer conn.Close() b...
golang - 02) TCP Server 만들기 May 10, 2019
출처 서버 종료하기 package main import ( "context" "log" "net" "os" "os/signal" "strings" "sync" "syscall" ) const ( listener...
golang - 03) TCP Server 만들기 May 11, 2019
출처 server 패키지 만들기 struct를 이용한다. handleConnection에서 사용하는 속성을 Server 구조체, handleConnection에서 사용하는 속성을 Conn 구조체에 정리한다. main.go package main import ( ...
golang - 04) TCP Server 만들기 May 12, 2019
출처 비동기 Write main.go package main import ( "context" "log" "os" "os/signal" "syscall" "github.com/dmmlabo/tcpserver_go/tcp4/ser...
golang - 05) TCP Server 만들기 May 14, 2019
출처 Graceful Shutdown main.go package main import ( "context" "log" "os" "os/signal" "syscall" "github.com/dmmlabo/tcpserver...
golang - 1 바이트 데이터의 왼쪽 시프트(비트 로테이션, 순환 시프트) June 26, 2023
golang - Analyzing Core Dump Generated By Go Program June 22, 2021
golang - Benchmark Tooling으로 실행 결과 가시화 기능 이용 하기 July 20, 2021
golang - Build September 28, 2018
아래 글은 golang을 공부할 목적으로 웹에서 본 글들을 정리한 것이다. 빌드 go build -tags를 사용하여 Release/Debug를 바꾸기 디버깅/릴리스에서 기능을 바꾸고 싶은 경우 Build constrains를 사용하면 좋다. Build Constrains는?...
golang - CLI 툴을 만들 때 편리한 패키지 April 28, 2019
출처 커맨드 라인 옵션 파서 cli.go A small package for building command line apps in Go https://github.com/codegangsta/cli Cobra A Commander for modern Go CLI interact...
golang - CPU나 메모리 등의 정보를 얻는 gopsutil 소개 February 2, 2021
golang - CentOS 7에서 Go 설치하기 September 5, 2019
Go 다운로드 여기에서 다운로드 $ cd ~ $ wget https://dl.google.com/go/go1.12.6.linux-amd64.tar.gz 설치 다운로드한 파일의 업축을 푼다. $ sudo tar -C /usr/local -xzf ~/go1.12.6.linux-am...
<a href="https://jacking75.github.io/go-0712/" title="golang - Charm의 Go 로깅 라이브러리 "Log"를 사용해 보기">golang - Charm의 Go 로깅 라이브러리 "Log"를 사용해 보기
July 12, 2023
</a>
golang - Collection 조작을 편하게 쓸 수 있는 samber/lo 라이브러리 소개 June 4, 2023
golang - DATA-DOG/go-txdb로 DB 연결을 포함한 테스트를 쉽게 만들자 October 27, 2021
golang - DB 마이그레이션 툴 migu 소개 February 19, 2022
golang - Deep dive into sync.Pool July 30, 2021
golang - Docker 상의 GoLang을 GoLand에서 원격 디버깅 March 10, 2021
golang - Docker에서의 Golang의 modules 관리 October 23, 2020
golang - Functional Option Pattern October 14, 2021
golang - GCP를 사용하여 가능한 쉽게 Go 언어의 goroutine 누수를 감시하기 April 12, 2022
golang - GO 언어의 웹 핸들러에서 모든 요청을 공통적으로 처리하기 September 9, 2021
golang - GOPATH 모드에서 모듈 대응 모드로 이행 October 20, 2020
golang - GameServer(TCP) 프로그래밍 학습을 위한 Github 저장소 March 3, 2020
Golang으로 게임서버(TCP)를 만들 수 있는 기술을 배우기 위해 단계 별로 실습을 할 수 있도록 만든 저장소이다. golang_socketGameServer_codelab 회사에서 위 저장소 코드를 중심으로 실습을 하였다. 저장소가 도움이 되었다면 스타 부탁한다~ ^^ ...
golang - Generics를 사용하여 Collection 조작 May 4, 2023
golang - Go 1.14에서 defer가 빨라지는 것은 8개까지 December 31, 2020
golang - Go 1.15 정보 September 5, 2020
“Go 1.15”에서 변화의 대부분은 툴 체인, 런타임, 라이브러리의 구현이며, 기존과 마찬가지로 Go 버전 1과의 호환성이 유지되고 있어서 대부분의 프로그램은 수정 없이 실행할 수 있다. 주요 변경 사항 중 하나는 링커의 대폭적인 개선으로 링커의 리소스 사용량(시간 및 메모리)...
golang - Go 1.16 버전에 go:embed 기능 추가 January 25, 2021
golang - Go 1.17 sync/atomic 패키지 업데이트 사항과 CompareAndSwap December 29, 2021
golang - Go 1.20 New Features March 6, 2023
golang - Go 1.20 Profile-Guided Optimization March 7, 2023
golang - Go 1.21 릴리스, WASI(WebAssembly System Interface) 지원, 런타임 프로파일로 컴파일 최적화 October 22, 2023
golang - Go 1.21 버전에서 panic(nil) 동작이 변경 March 8, 2024
golang - Go 1.21에서 추가된 slice의 기능 November 2, 2023
golang - Go 1.22 버전의 math/rand/v2 September 6, 2024
golang - Go 1.22에서 slices 패키지에 추가된 편리한 함수 March 20, 2024
golang - Go Modules에 대해서 October 15, 2020
유튜브 영상
golang - Go psutil 라이브러리 소개 June 22, 2023
golang - Go 네이밍 룰 May 7, 2021
<a href="https://jacking75.github.io/go-0205/" title="golang - Go 디버깅 및 코드 생성에 편리한 pretty print 할 수 있는 라이브러리 "dd"">golang - Go 디버깅 및 코드 생성에 편리한 pretty print 할 수 있는 라이브러리 "dd"
February 5, 2023
</a>
golang - Go 런타임 동작 분석 April 29, 2022
golang - Go 명명 규칙 October 30, 2020
golang - Go 모듈 모드에서 모듈 내에 만든 모듈을 import 하기 October 21, 2020
golang - Go 애플리케이션을 Supervisor로 대몬화 December 12, 2018
원문 Go는 언어 레벨에서 daemon화가 지원되지 않으므로 Supervisor 이나 systemd로 daemon화 한다. Supervisor 도입 sudo apt-get install supervisor Go 애플리케이션 빌드 go build hoge supervi...
golang - Go 언어 HTTP Body의 Close 에 대해서 December 17, 2023
golang - Go 언어 defer의 이해를 확인하는 기본 문제 3개 August 9, 2023
golang - Go 언어 코딩 시 헷갈리는 부분에 대해서 April 21, 2021
golang - Go 언어로 Windows, Linux 백그라운드 상주 실행 프로그램 개발 April 20, 2023
golang - Go 언어로 작성된 프로그램이 느려지는 이유 October 19, 2021
golang - Go 언어로 파일 업로드를 사용해 보기 January 14, 2021
golang - Go 언어에서 Context를 활용하는 세 가지 패턴 July 25, 2023
golang - Go 언어에서 루프 내의 포인터를 안전하게 다루기 위한 일반적인 버그와 해결책 June 25, 2023
golang - Go 언어에서 쉽게 json 항목 파싱하기 March 29, 2022
golang - Go 언어에서 시간을 다루는(pkg/time) 기능 요약 November 1, 2021
golang - Go 언어에서 정기 실행과 타임 아웃 April 15, 2021
golang - Go 언어와 병렬 처리 November 3, 2021
golang - Go 언어의 DB mock(sqlmock)을 알기 쉽도록 해 보았다 June 23, 2021
golang - Go 언어의 slice에서 요소를 삭제하려면 January 13, 2022
golang - Go 언어의 strings.Builder을 이용한 문자열 연결 최적화 및 벤치마킹 June 19, 2021
golang - Go 언어의 메모리 관리 December 7, 2021
golang - Go 언어의 응용 프로그램 설정 및 환경 변수를 Struct에 정리 February 13, 2020
출처 Go 언어에서 환경 변수를 읽기 Go 언어의 표준 패키지에서 쉽게 환경 변수를 읽을 수 있다. fmt.Println(os.Getenv("HOME")) 그러나 때때로 환경 변수가 없을 때의 기본 설정을 할 수 있다. home := os.Getenv("HOME") if h...
golang - Go 채팅 서버를 만들면서 goroutine과 channel 이해하기 June 25, 2021
golang - Go 최신 버전 설치하기(우분투에서) February 22, 2023
golang - Go 테스트 seeding 하기 September 16, 2021
golang - Go 패키지 경로와 패키지 이름은 달라도 좋은가? December 29, 2018
원문 Go 에서는 패키지 패스의 최후의 요소는 go 파일의 패키지 이름과 같이 하는 것이 관례인데 “서로 다르면 어떻게 될까?” 확인해 보자 경로 트리 $ GOPATH / + - src / + - japan / + - main.go ...
golang - Go 프로그램에서 동적 업데이트에 대한 퀴즈 July 2, 2021
golang - Go 프로젝트에서 클래스 다이어그램 만들기 July 28, 2021
golang - Go1.11에서 커스텀 패키지를 추가하는 방법 October 22, 2020
golang - Go1.14의 Go Modules 변경점 October 24, 2020
golang - Go1.16에서 추가된 io/fs패키지에 대해서 간단 조사 March 5, 2021
golang - Go1.18의 Generics에서 할수 없는 것 September 15, 2022
golang - Go1.20의 새로운 기능 일부 소개 May 10, 2023
golang - Go1.21 log/slog 패키지 초입문 January 7, 2024
golang - GoLand 설치 및 기본 설정 September 30, 2020
golang - Golang WebSocket 서버 & 클라이언트 샘플 코드 June 11, 2023
golang - Golang 스케쥴러 관련 이야기 December 10, 2021
golang - Golang에서 Flame Graph 그리기 November 19, 2021
golang - Golang에서 HTTP3 사용해보기 May 30, 2023
golang - Golang에서 메모리 상태 파악하기 August 16, 2021
golang - Golang으로 직접 WebSocket 통신 구현해보기 June 28, 2023
golang - Golang으로 크로스 플랫폼 GUI 응용 프로그램 만들기 July 16, 2021
golang - Golang의 GC 알고리즘 July 23, 2021
golang - Golang의 GC를 쫒는다 December 2, 2021
golang - Golang의 interface에서 알아두면 유익한 Tips January 24, 2022
golang - Golang의 함수 인라인 February 5, 2020
함수 인라인화 조건 함수에 포함 되는 식이 40개 미만 함수 호출・루프・클로져・panic・recover・select・switch 라는 복잡한 것을 포함하지 않는다 출처 인라인화 막기 //go:noinline 라는 pragma를 사용한다. package main f...
golang - Goroutine 시각화 August 9, 2021
golang - Go는 블록체인 영역에서 왜 사용되고, 어떤 활약을 하고 있을까? July 20, 2023
golang - Go는 언제 GC를 할까? April 19, 2022
golang - Go로 crontab과 같은 도구를 만들고 데몬으로 실행 October 12, 2022
golang - Go로 각 OS용 라이브러리를 빌드하고 사용하기 September 3, 2021
golang - Go로 개발한 스트리밍 서버의 메모리 사용량 문제 대처 January 14, 2022
golang - Go로 개발할 때 사용하는 tool January 11, 2022
golang - Go로 구현한 Web 애플리케이션과 Prometheus 연계 March 8, 2022
golang - Go로 만드는 P2P 라이브러리 June 9, 2021
golang - Go로 만든 라이브러리 버전 업 하는 방법 February 24, 2021
golang - Go로 백그라운드로 애플리케이션 실행하기 February 25, 2021
golang - Go로 분당 100만 요청을 처리하기 January 2, 2020
golang - Go로 확장 가능한 스케줄러를 만들기 October 2, 2021
golang - Go에 들어갔다면 Go에 따라라 October 1, 2020
golang - Go에서 GitHub에 push 하기 전에 make 명령으로 precommit 하는 방법 January 17, 2023
golang - Go에서 MySQL의 JSON 타입 다루기 July 1, 2021
golang - Go에서 build constraints를 사용하여 빌드 분리하기 July 1, 2023
golang - Go에서 cron 다루기 April 14, 2023
golang - Go에서 key가 일정하지 않은 Json 다루기 March 21, 2022
golang - Go에서 pprof를 사용하여 메모리 누수를 확인하는 방법 August 25, 2023
golang - Go에서 text/template 을 사용하여 문서 만들기 August 6, 2024
golang - Go에서 구조체의 타입을 변환하는 방법 March 25, 2023
golang - Go에서 릴리스 빌드할 때 최소한으로 붙여야 하는 옵션 July 7, 2023
golang - Go에서 사용하는 태스크 러너 Mage August 7, 2021
golang - Go에서 응용 프로그램과 클라이언트 미들웨어를 만드는 방법 July 5, 2021
golang - Go에서 처리 도중에 재시도할 수 있는 패키지 January 31, 2023
golang - Go에서의 WebSocket 통신 December 20, 2021
golang - Go에서의 에러 컨텍스트 및 에러 처리 July 7, 2021
golang - Go의 Cache package 벤치마크 측정 August 21, 2021
golang - Go의 Web Server를 Systemd에서 동작시키기 April 30, 2023
golang - Go의 Workspace 모드 사용법 January 1, 2023
golang - Go의 example 함수를 사용하여 문서 관리와 테스트를 동시에 하기 August 25, 2021
golang - Go의 fmt.Printf의 폭(너비)과 정밀도를 인수로 지정하기 May 22, 2023
golang - Go의 internal 패키지란? May 15, 2023
golang - Go의 net/http Client 구조체 옵션 December 11, 2022
golang - Go의 netpoller 구현 설명 January 1, 2022
golang - Go의 struct의 크기를 줄이기(fieldalignment) July 12, 2022
golang - Go의 time package에 의한 wall clock과 monotonic clock에 대해서 December 7, 2023
golang - Go의 가비지 컬렉터를 시각화 하는 도구 October 29, 2021
golang - Go의 개발 환경으로 Docker를 이용하기 February 21, 2021
몇 년전에 번역했던 글로 지금과 다를 수 있다.
golang - Go의 로깅 라이브러리 비교 표 - 2021년 겨울 January 9, 2022
golang - Go의 분산 배타 처리 패키지 Redsync 사용해보기 April 26, 2023
golang - Go의 빌드 버전 정보를 참조 February 23, 2021
golang - HTTP Client의 응답 Body 닫기와 HTTP 연결 닫기 January 16, 2021
golang - HTTP Response Body 내용을 로그로 남기기 November 9, 2021
golang - Hot Reload 툴 만드는 방법 January 16, 2022
golang - Introduction to Go 1.14 December 29, 2020
golang - Linux의 binfmt_misc을 사용하여 Go 스크립트를 직접 실행할 수 있게 하기 June 20, 2021
golang - Lorca를 사용하여 Go로 HTML5 앱 만들기 June 5, 2021
golang - Named type과 Type alias 구분 September 21, 2021
golang - OOP 프로그래밍 하기 January 8, 2019
캡슐화 Go에서는 구조체와 해당 필드, 함수, 메소드의 범위는 이름의 선두가 대문자, 소문자로 결정된다. 대문자이면 public, 소문자라면 같은 패키지 내로 닫힌 범위로. 그러므로 아래와 같이 쓰는 것으로 캡슐화를 실현할 수 있다. //human.go packag...
golang - Panic과 Recover 사용을 쉽게 해주는 패키지 November 16, 2022
golang - Performance Tuning October 21, 2021
golang - Protocol Buffers 송수신 - Go, Vue.js June 28, 2021
golang - Redis 클라이언트 라이브러리 go-redis February 3, 2021
golang - Response Body의 안전하게 다루는 방법 December 25, 2022
golang - Runtime에 대하여 정리 March 15, 2021
golang - Slice의 함정 April 2, 2021
golang - SoundCloud의 프로덕션 환경에서의 모범 사례 November 9, 2020
golang - Supervisor으로 데몬화 해서 실행하기 May 6, 2022
golang - TensorFlow API를 사용해 본 이야기 January 12, 2021
golang - The Catcher in the Cli 라이브러리로 표준 출력, 표준 입력, 표준 오류 출력을 캡쳐하기 June 24, 2022
golang - The Go Playground 약간의 기능 소개 December 12, 2020
golang - The Go Playground에서 유닛테스트 하기 August 13, 2018
Go는 온라인 상에서 코드를 실행 해 볼 수 있다. The Go Playground The Go Playground에서는 유닛테스트 코드도 실행 할 수 있다. package main import "testing" func Hello(name string) string { ...
golang - TinyGo 소개 January 14, 2024
golang - Try Golang! Slice는 포인터인가? 포인터가 아닌가? March 28, 2021
golang - Twelve Go Best Practices March 14, 2021
golang - UDP 서버에서 각 클라이언트 마다 net.Conn 만들기 August 3, 2021
golang - ULID로 유니크한 ID 만들기 April 8, 2021
golang - Ubuntu에 최신 버전 설치하기 September 19, 2018
출처: https://medium.com/@RidhamTarpara/install-go-1-11-on-ubuntu-18-04-16-04-lts-8c098c503c5f Step 1 Install Go Language 패키지 설치 sudo apt-get update sudo a...
golang - WSL2에 Go를 설치하는 방법 January 24, 2021
golang - Wails - Go와 HTML/CSS/JavaScript로 데스크탑앱을 개발할 수 있는 프레임워크 August 5, 2021
golang - Web Frameworks 비교 - 2020년 10월 February 22, 2021
golang - WebFramework gin December 20, 2018
아래 글은 golang을 공부할 목적으로 웹에서 본 글들을 정리한 것이다. 개요 공식페이지 비교적 경량, 간단한 인터페이스를 갖추 프레임워크 벤치마크 설치 go get github.com/gin-gonic/gin hello World package main...
golang - WebSocket(gobwas/ws) 서버와 C# 클라이언트 예제 December 21, 2021
golang - Windows Management Instrumentation을 쉽게 얻을 수 있는 도구 wmi2struct June 18, 2021
golang - Windows 플랫폼에서의 GUI 라이브러리 walk January 18, 2021
golang - Windows, GUI 라이브러리 link 모음 May 7, 2020
golang - Windows에서 godep 설치 후 godep 명령어를 찾지 못하는 경우 April 29, 2018
godep은 Go언어의 라이브러리가 의존하고 있는 패키지를 관리하는 툴로 node.js의 npm이나 Ruby의 Gem과 비슷한 것이다. godep을 Windows에서 설치 후 실행하면 아래와 같은 에러가 나오는 경우는 설치한 godep 실행 파일이 있는 디렉토리가 path에 들어...
golang - Windows에서의 go 프로그래밍 준비하기 January 16, 2020
번역
golang - Zerolog 사용해 보기 March 31, 2023
golang - atomic September 15, 2018
아래 글은 golang을 공부할 목적으로 웹에서 본 글들을 정리한 것이다. atomic atomic 패키지는 int32, uint32, int64, uint64, uintptr의 5가지 타입 각각에 Add, CompareAndSwap, Load, Store, Swap 5 종류의...
golang - bcrypt로 패스워드를 hash화 할 때 패스워드의 bytes 수에 조심하자 July 15, 2019
bcrypt는 자주 사용 되고 있는 패스워드의 해시 함수이다. Slack’s hashing function is bcrypt with a randomly generated salt per-password which makes it computationally infeasible ...
golang - binary encoding November 3, 2018
아래 글은 golang을 공부할 목적으로 웹에서 본 글들을 정리한 것이다. 바이너리 엔코딩 개요 복수의 값과 바이트 열의 상호 교환을 한다 복수의 값은 고정 길이 값으로 해석된다. 고정 길이 값으로 다룰 수 있는 것 ...
golang - cenkalt backoff 라는 라이브러리를 사용하여 ReTry(재시도) 처리하기 May 28, 2023
golang - chan chan은 의외로 멋지다 August 1, 2021
golang - channel 사용하기 November 4, 2018
아래 글은 golang을 공부할 목적으로 웹에서 본 글들을 정리한 것이다. 채널 사용하기 받기 전용, 보내기 전용 채널 선언 받기 전용 c <-chan int 보내기 전용 c chan<- int 다른 고루틴에 동기적으로 통신하고 싶은 경우 2개의 채널이 서로...
golang - chan에 보내기를 할 때 버퍼 공간 부족에 의한 블럭킹 여부 판별 June 29, 2020
chan의 공간이 다 찰 때까지 보내기를 하면 빈 공간이 생길 때까지 블럭킹 상태가 된다. 블럭킹 상태에 빠지지 않게 하는 방법 중의 하나의 select와 조합해서 사용한다. ch1 chan []byte ch1 = make(chan []byte, config.MaxChanne...
golang - charsetutil- An easiest way to convert character set encodings in Go February 4, 2021
golang - cobra & viper - cli 프레임 워크 March 8, 2021
golang - cockroachdb/errors란? March 2, 2023
golang - concurrency 기초 October 1, 2021
golang - core dump September 29, 2021
golang - cui 라이브러리 소개 November 7, 2021
golang - defer October 29, 2018
아래 글은 golang을 공부할 목적으로 웹에서 본 글들을 정리한 것이다. defer 테스트 테스트 1: 마지막으로 쓴 것이 가장 뒤에 쓴 것이 제일 처음 호출된다 http://play.golang.org/p/gb8tbGk4wr package main import...
golang - defer 기본 사용법 July 30, 2023
golang - defer 제대로 이해하기 November 27, 2021
golang - epoll 예제 코드 October 8, 2020
Golang에서 epoll API를 호출해서 서버 프로그램을 만드는 예제 코드이다. 출처 epoll.go package main import ( "syscall" "fmt" ) const ( EPOLLET = 1 << 31 ...
golang - erning/gorun 패키지 소개 October 1, 2018
출처 Github : https://github.com/erning/gorun 용도는 매우 간단하다. “Go 소스 코드를 Python이나 Ruby 같은 실행 파일로 돌린다.”라는 느낌이다. 아이디어의 승리라는 느낌이다. hello.go #!/usr/bin/env gorun //...
golang - error November 8, 2018
아래 글은 golang을 공부할 목적으로 웹에서 본 글들을 정리한 것이다. Error 스택 상태 출력과 에러 핸들링 github.com/pkg/errors 를 사용하여 error 오브젝트를 랩핑하면 스택 트레이스를 추가할 수 있다. error 중의 스택 트레이스는 “%+v”...
golang - errorgroup.SetLimit 과 TryGo로 goroutine 동시 실행 횟수 제어 July 18, 2023
golang - exec.Command에 대해서 February 23, 2022
golang - exec.LookPath 커맨드 명령어가 실행 가능한지 조사 November 26, 2018
아래 글은 golang을 공부할 목적으로 웹에서 본 글들을 정리한 것이다. os/exec.LookPath를 사용하면 커맨드가 실행 가능한지 조사 할 수 있다. $PATH 를 고려하여 찾아주지만 슬래쉬가 들어가 있으면 $PATH를 고려하지 않는다. package main imp...
golang - fmt.Scanner 사용하기 October 8, 2021
golang - go 1.11의 modules를 사용하는 방법 October 19, 2020
golang - go module의 replace에서 헷갈리는 것 January 28, 2022
golang - go tool trace로 goroutine의 실행 상황을 가시화 하자 December 5, 2021
golang - go-cmp를 사용하여 구조체의 등가성 평가 August 29, 2021
golang - go-funk를 사용하여 배열에 요소가 있는지 확인하기 March 15, 2022
golang - go-ini 라이브러리 사용하기 January 5, 2022
golang - go-prompt를 사용하여 멋진 명령어 라인 툴 만드는 방법 July 26, 2021
golang - go.mod에서 Go 버전 업데이트 June 16, 2023
golang - go.mod의 replace로 로컬에 있는 다른 프로젝트에 접근 July 25, 2022
golang - go.uber.org/atomic 패키지를 사용하여 atomic 다루기 June 17, 2021
golang - gocelery 라이브러리 사용하기 May 16, 2021
golang - golang error handling (Go1.13) June 12, 2021
golang - golangci-lint 이해하기 February 12, 2022
golang - gonew를 사용하여 Go 프로젝트 템플릿 사용 September 7, 2023
golang - gonew를 사용하여 Go 프로젝트 템플릿 사용 August 16, 2023
golang - goroutine이 교체 되는 타이밍 June 7, 2018
결론 Go언어에서 goroutine은 반드시 스위치 하는 것은 아니다. “for() {}” 같은 비지 루프를 GOMAXPROCS의 지정 수 이상 포함시키면 스위칭 되지 않는다. 경위 처리가 없는 비지 루프가 있으면 goroutine이 교환 되지 않고 처리가 멈추는 것을 알았다. ...
golang - gosigar을 이용한 서버 리소스 정보 얻기 July 12, 2021
golang - go로 쓴 코드의 힙 할당 여부 확인하는 방법 January 6, 2019
출처 서두 Allocation Efficiency in High-Performance Go Services · Segment Blog 라는 기사를 읽었다. 좋기 때문에 꼭 일독을 권장한다. 이 글은 나의 이해와 실제로 시험해 본 결과의 메모이다. 가장 중요한 포인트는 go bu...
golang - go에서 에러 핸들링을 무난하게 하는 방법 (2021.07 현재) February 27, 2022
golang - go의 map 구조 July 9, 2021
golang - http 패키지에 있는 MaxBytesHandler August 28, 2022
golang - http 패키지에 있는 MaxBytesHandler August 12, 2022
golang - http.Client 재시도 처리에서 고려할 것 March 5, 2022
golang - http.RoundTripper 구현 가이드 July 13, 2021
golang - http.RoundTripper로 HTTP 클라이언트를 확장하기 July 14, 2021
golang - map을 range로 순회할 때 접근 순서는 무작위로 된다 May 26, 2022
golang - math/rand와 crypto/rand November 8, 2019
출처 Go 난수 생성에 관한 표준 패키지는 math/rand와 crypto/rand의 2가지가 있다. 각각 math/rand은 약한 난수에 crypto/rand 강한 난수인데 강한 난수 쪽이 반드시 좋다는 것은 아니고, 특성 및 성능의 차이에서 유스 케이스가 나누어진다. mat...
golang - net/http 클라이언트에서 대량의 요청을 빠르게 하는 방법 July 18, 2021
golang - net/http의 client에서 왜 responseBody를 Close로 끊지 않으면 안될까? June 11, 2022
golang - new와 make의 차이 December 3, 2018
원문 정리 차이를 간략하게 설명한다. new(T) make(T) 대상 임의의 타입 slice, map, channel 만 초기화 ...
golang - nil November 11, 2018
아래 글은 golang을 공부할 목적으로 웹에서 본 글들을 정리한 것이다. nil 타입을 가진 nil nil은 사실 타입이 있다. nil과 nil이 등가가 아닌 것처럼 보인다 nil이 타입 정보를 가지므로 nil==nil 이 true가 된다는 법은 없다. true가 되기 위해...
golang - or-done-channel로 코드 가독성을 높인다 December 18, 2018
원문 Go 병렬 패턴 for-select loop or-channel or-done-channel tee-channel fan-in, fan-out 등이 있다. 어떤 때 or-done-channel을 사용하나 상한 수가 정해져 있는 것 같은 처리를 할 경우...
golang - os/signal에 NotifyContext가 추가 October 17, 2021
golang - package의 prefix를 생략 November 27, 2018
아래 글은 golang을 공부할 목적으로 웹에서 본 글들을 정리한 것이다. // main.go package main import ( "log" ) func main() { log.Printf("hello") } 에서 “log.”를 생략하려면 import ( . ...
golang - pprof snippet November 21, 2021
golang - pprof 마스터 편 (pprof의 구조) 메타 데이터의 끝으로 건너 뛰기 November 16, 2021
golang - pprof 응용편 (CPU 이외의 프로파일링) November 14, 2021
golang - pprof 입문편 (CPU Profile 및 명령 줄 도구) November 12, 2021
golang - pprof에 대해서 November 11, 2021
golang - protoactor-go 정리 August 14, 2021
golang - random November 28, 2018
아래 글은 golang을 공부할 목적으로 웹에서 본 글들을 정리한 것이다. 공식 문서 일어 0 에서 9까지(포함)의 난수 얻기 import ( "fmt" "math/rand" "time" ) func main() { rand.Seed(time....
golang - redis를 다루는 코드를 유닛 테스트 하기 March 17, 2021
golang - runtime 패키지 소개 March 22, 2021
golang - serialization benchmarks (2018년 8월) October 16, 2018
출처: https://github.com/alecthomas/go_serialization_benchmarks 2018-08-19 Results with Go 1.10 on a 2.5 GHz Intel Core i7 MacBook Pro (Retina, 15-inch, Mid 2...
golang - serialization 관련 오픈 소스 April 23, 2020
Serialization in Go go_serialization_benchmarks (일어)범용적인 시리얼라이즈 방법(MessagePack/Protocol Buffers/FlatBuffers) (일어)Go의 msgpack 라이브러리 비교 restruct ...
golang - slice를 sync.pool에서 사용 할 때의 함정 November 5, 2021
golang - slice의 shuffle November 1, 2018
Fisher–Yates shuffle 이라는 알고리즘 사용 package main import ( "fmt" "math/rand" ) func main() { n := 30 arr := generate(n) fmt.Println(arr) ...
golang - slog를 랩핑할 때 의도한 소스 코드 위치 표시하기 January 30, 2024
golang - socket API ResolveTCPAddr, DialTCP December 10, 2020
golang - sql.DB 튜닝 방법 August 11, 2021
golang - string November 24, 2018
아래 글은 golang을 공부할 목적으로 웹에서 본 글들을 정리한 것이다. []byte를 string으로 변환 시 널 문자 제거하기 var rawUserID []byte userID := strings.Trim(string(rawUserID), "\x00") byte ar...
golang - string to slice, slice to string, slice to array, array to slice, uint16 to []byte (Little Enddian), []byte to Uint32 (Little Enddian) June 11, 2018
string => slice 출처: https://github.com/soshi8/GoLangTrans package main import ( "fmt" ) func main() { var aaa string aaa = "sample string" bbb ...
golang - strings.Cut과 strings.SplitN 중 어느 쪽이 빠를까? June 1, 2022
golang - sync.Map November 22, 2018
아래 글은 golang을 공부할 목적으로 웹에서 본 글들을 정리한 것이다. sync.Map의 성능 원문 Golang 동시성은 공유 리소스에 액세스 하는 경우 충돌이 발생하지 않도록 잠금을 준비해야 한다. 예를 들어 표준 맵의 경우 goroutine safe 하지 않기 때문에, ...
golang - sync.pool May 22, 2018
쉽게 말하면 메모리풀 이라고 생각하면 좋다. Go 1.3 버전에서 표준 패키지로 들어왔다. sync.Pool로 극상의 메모리 효율 의 글 중 일부를 번역 정리 했다.
golang - systemd로 go로 만든 API 서버를 서비스화 하기 January 28, 2021
golang - thread pool과 GOMAXPROCS는 관계 없음 June 4, 2018
golang의 경우 스레드 풀을 사용하고 있으며 블러킹 하는 시스템 콜이라면 다른 스레드로 옮겨서 처리한다. 부족한 경우에는 OS가 허락하는 한도 내에서 만든다. 이 수는 GOMAXPROCS 와는 관계 없다.
golang - time October 23, 2018
아래 글은 golang을 공부할 목적으로 웹에서 본 글들을 정리한 것이다. 시간 및 날짜 표준 API 표준 라이브러리 사용 예 현재 날짜 package main import ( "fmt" "time" ) func main() { now := time....
golang - tip. 터미널 입력에서 입력 문자열 표시하지 않기, uintptr을 int로 변환 November 13, 2018
아래 글은 golang을 공부할 목적으로 웹에서 본 글들을 정리한 것이다. 터미널 입력에서 입력 문자열 표시하지 않기 패스워드 등을 입력 받을 때 화면에 문자가 나오지 않게 하는 방법. 아래 코드는 Windows에서는 동작하지 않음 package main impor...
golang - unix domain socket을 이용한 echo 서버 January 15, 2021
golang - unsafe.StringData, unsafe.String, unsafe.SliceData July 15, 2023
golang - v1.16에 추가된 signal.NotifyContext 사용해보기 December 28, 2021
golang - web December 4, 2018
시작 기본적으로 필요한 것은 net/http 패키지에 있다. import "net/http" 이것만으로 기본적인 HTTP 리퀘스트와 리스폰에 관한 처리를 실시할 수 있다 http.Handle("/foo", fooHandler) http.HandleFunc("/bar", fun...
golang - webFramework Echo October 30, 2018
아래 글은 golang을 공부할 목적으로 웹에서 본 글들을 정리한 것이다. 개요 웹 프레임워크. 경량 고속. 공식 페이지 https://labstack.com/echo 설치 go get github.com/labstack/echo 버전 2부터는 fastht...
golang - 고루틴 pool 라이브러리. go-playground/pool March 12, 2021
golang - 고루틴과 콜스택 December 10, 2018
고루틴이 기동한 시점에서 함수의 콜스택이 분리된다. panic은 고루틴의 콜스택을 돌아간다. 즉 defer & recover는 panic이 발생한 고루틴 내에서 사용해야 한다. 일바 함수 호출 고루틴을 포함한 함수 호출
golang - 고속 JSON 라이브러리 go-json May 2, 2021
golang - 고정 길이/가변 길이 인코딩 이해하기 February 3, 2022
golang - 공유 라이브러리(so)를 로드하여 사용 September 4, 2021
golang - 구조체 December 2, 2018
아래 글은 golang을 공부할 목적으로 웹에서 본 글들을 정리한 것이다. 구조체 만들기 package main import ( "log" ) type Money struct { amount uint currency string } func mai...
golang - 구조체 구현 패턴 December 27, 2018
출처 생성자 함수 export에 의한 접근 허가 인터페이스에 의한 다형성 구조체에 의한 다형성 구조체에 의한 서브 클래스, responsibility 구조체에 의한 이양 함수에 의한 이양 생성자 함수 Go 언어는 구조체의 생성자가 없으므로 구조체를 ...
golang - 구조체의 변환과 비교 June 18, 2023
golang - 구조체의 정확한 크기 계산하기 February 8, 2019
golang의 구조체도 c/c++과 같이 패딩이 있다. type PacketHeader struct { N1 int32 N2 int16 N3 int64 } 위 구조체를 unsafe.Sizeof를 하면 패딩 때문에 크기가 16이 나온다. (sizeof가 기본 기능이 아니고...
golang - 구조체의 필드를 출력해주는 pp 라이브러리 May 11, 2021
golang - 구현하면서 이해하는 슬라이스 November 1, 2020
golang - 그림으로 보는 Go Slice Tricks November 2, 2020
golang - 기본 문법 September 29, 2018
아래 글은 golang을 공부할 목적으로 웹에서 본 글들을 정리한 것이다. 지원 기능 tar, zip, zlib, gzip, bzip2 DES, AES, SHA1, SHA256, SHA512 PE, ELF, DWARF BASE64, ASN.1, JSON, XML,...
golang - 길이가 0인 slice는 nil로 July 10, 2018
출처 package main import ( "fmt" ) func testNil(p []byte) { fmt.Printf("p: %v\n", p) fmt.Printf("len(p): %d\n", len(p)) fmt.Printf("cap(p): %...
golang - 랜덤 seed 설정하기 May 22, 2019
출처: https://qiita.com/makiuchi-d/items/9c4af327bc8502cdcdce 시간을 seed로 설정하기 time.Now().UnixNano()를 사용한다. package main import ( "fmt" "math/rand" ...
<a href="https://jacking75.github.io/go_make_middle_proxy/" title="golang - 만들면서 배우는 "Https Man in The Middle Proxy"in Go">golang - 만들면서 배우는 "Https Man in The Middle Proxy"in Go
March 11, 2021
</a>
golang - 모니터링을 위한 애플리케이션 매트릭스 expvar October 11, 2021
golang - 문자열 조작 샘플 코드 April 25, 2021
golang - 바이너리 등의 bit 조작을 위한 라이브러리 go-bit May 19, 2021
golang - 배열과 slice 기초 September 9, 2018
아래 글은 golang을 공부할 목적으로 웹에서 본 글들을 정리한 것이다. 배열 배열 기초 배열 사용 // 크기 4, int 형 배열 var a [4]int // 0번째 요소에 1 대입 a[0] = 1 // 변수 i를 선언하고 a[0]을 i에 대입 i := a[0]...
golang - 버전 1.9 August 30, 2017
“Go 1.9”의 가장 중요한 변경은 타입 앨리어스의 도입으로 type T1=T2 라고 선언함으로써 타입 T2의 앨리어스 이름을 T1으로 정의할 수 있다. 또 math/bit 패키지는 CPU의 특수 명령에 대응한 무부호 정수비트 계수/조작 기능을 갖추고 있으며 sync 패키지...
golang - 변환 November 30, 2018
아래 글은 golang을 공부할 목적으로 웹에서 본 글들을 정리한 것이다. 출처 문자열 <-> 수치 변환 strconv 패키지를 사용한다. 문자열 → 수치변환 func Atoi(s string) (i int, err error) 문자열을 10 진수 int 타입으...
golang - 병렬 처리에서 효과적인 디버깅 및 분석 방법 May 14, 2022
golang - 브로드캐스팅 하는 에코 서버 예제 코드 May 16, 2019
서버 package main import ( "bufio" "fmt" "log" "net" "os" ) func main() { if len(os.Args) != 2 { log.Fatalf("Usage: %s <p...
golang - 비공개(unexported) 기능을 사용한 테스트 February 1, 2021
golang - 빠른 컬렉션 조작 라이브러리 Koazee June 1, 2021
golang - 사용 사례 April 23, 2020
일어 문서는 번역기 돌리는 것을 추천한다. (일어)메루카리 소오조오에서는 어떻게 Go를 활용하고 있나? (일어)처음으로 Golang으로 대규모 마이크로서비스를 만들고 얻은 교훈 (일어)어느 BtoB 기업에서 Go를 사용해 보았던 ...
golang - 설치와 GoPath October 24, 2018
아래 글은 golang을 공부할 목적으로 웹에서 본 글들을 정리한 것이다. 설치 (일어)Ubuntu에 GO 언어(golang)의 최신 버전을 apt로 설치 (일어)Homebrew로 Go 1.6 설치 (일어)Go 언어 개발환경 셋업 (일어)Go 개발 환경/빌드 환경...
golang - 성능 조사 map과 GC May 25, 2018
테스트 환경: go version go1.7.3 windows/amd64 기본 용량 golang의 map은 용량을 확장 할 때 원 데이터의 복사와 재 해시를 하기 때문에 map을 만들 때 용량을 설정하는 것이 좋다. package main import "testing" fun...
golang - 성능 조사 slice vs array May 28, 2018
출처 테스트 환경: go version go1.7.3 windows/amd64 package go1_6 const capacity = 1024 //배열 조작 array는 slice 보다 빠르다 func array() [capacity]int { // 배열 처리 테스트 함수 ...
golang - 성능 튜닝하기 January 1, 2019
대전제 프로파일링을 취한 뒤 어떻게 최적화 할 것인가에 대한 이야기 추측하지말고 계측하라 알고리즘이나 데이터 구조는 최적인 것을 선택하고 있다고 가정. 손 재주로 최적화하는 것보다 알고리즘 자체를 바꾸는 쪽이 압도적으로 좋아진다. 이 기사의 각 벤치 마크는 Go 1....
golang - 속도 제한 패키지 golang.org/x/time/rate October 5, 2021
golang - 스택과 힙에 대해 January 9, 2019
실행 시 동적으로 메모리를 확보하는 영역으로서 스택과 힙이 있다. 스택 메모리는 함수 호출 스택을 저장하고 로컬 변수, 인수, 반환 값도 여기에 둔다. 스택의 Push와 Pop은 고속이므로 객체를 스택 메모리에 저장하는 비용은 작다. 단 함수를 나오면 스택이 Pop 되...
golang - 시그널 핸들링 September 28, 2019
Go에서는 아래처럼 시그널을 핸들링 할 수 있다. package main import ( "fmt" "os" "os/signal" "syscall" ) func main() { sig := make(chan os.Signal, 1) s...
golang - 시스템 상태 알기 October 4, 2019
이 저장소의 코드 발췌 import ( "encoding/json" "io" "net/http" "runtime" "strconv" "sync" "time" ) // Stats represents activity status ...
golang - 실전에 도움이 되는 4개의 익명 함수(Anonymous function) 이용 패턴 February 9, 2023
golang - 실행 중인 코드의 행 수와 파일 이름 얻기 November 6, 2018
현재 실행 중인 Go의 코드 정보를 로그를 남기고 싶을 때는 코드의 파일 이름과 행 수를 알아야 한다. runtime.Caller 함수를 사용하면 이 정보들을 얻을 수 있다. package main import ( "runtime" "fmt" ) func main() ...
golang - 애플리케이션을 Cloud Run에서 단 3 스탭으로 배포하기 January 26, 2021
golang - 언제 go build 한 서버인지 확인하기 June 30, 2023
golang - 에코 서버 예제코드 May 15, 2019
클라이언트 관리를 채널 별로 나누어서 처리. distribute 라는 함수를 고루틴으로 동작시키고, 내부에서 채널을 통해서 메시지를 받는다. 클라이언트 접속, 클라이언트 접속 해제, 클라이언트에게 메시지 보내기 채널을 나눈다. 고루틴은 handle, distribu...
<a href="https://jacking75.github.io/go-1130/" title="golang - 왜 slice의 empty 조사는 "nil"이 아닌 "길이"로 체크할까?">golang - 왜 slice의 empty 조사는 "nil"이 아닌 "길이"로 체크할까?
November 30, 2021
</a>
golang - 외부 명령어의 stdout/stderr를 zap(로그)으로 보내기 January 25, 2023
golang - 웹 서버 애플리케이션 표준 패키지인 time/rate로 처리량 제어하기 April 9, 2023
golang - 유용한 오픈 소스 소개 March 10, 2020
golang - 인 메모리 DB를 사용하여 RDB를 사용 하는 코드를 단위 테스트(Golang + Gorm를 예로) June 10, 2021
golang - 일련 번호를 생성 할 수 있는 패키지 March 17, 2023
golang - 전방 호환성을 유지하면서 http.DefaultTransport에서 튜닝한 http.Transport를 만들기 February 14, 2023
golang - 주기적으로 실행하는 패턴 December 13, 2018
main에서는 아래와 같이 ctx를 만들어서 periodicLoop에 넘기고, 멈추고 싶을 때는 cancel()을 호출한다. func main() { ... ctx, cancel := context.WithCancel(context.Background()) ...
golang - 직접 만든 Logger 안에서 zap 라이브러리를 사용할 때 Caller에 Logger 보다 위의 계층을 출력하는 방법 December 15, 2021
golang - 채널의 내부 구조 May 17, 2022
golang - 추첨 기능 라이브러리 lottery December 8, 2018
github 추첨 기능 라이브러리 random을 랩핑 지정한 확률 20%의 확률로 ~ 같은 처리를 하고 싶을 때 lot : = lottery.New (rand.New (rand.NewSource (time.Now () UnixNano ()))) if lot.Lo...
golang - 코드 스니펫-바이너리 파일 만들기, 실행 중인 프로그램 종료 시키기,실행 중인 프로그램 PID 얻기, 파일 권한 바꾸기, 외부 명령어 실행하기 February 9, 2022
golang - 코드 정적 분석 툴 go vet October 26, 2018
아래 글은 golang을 공부할 목적으로 웹에서 본 글들을 정리한 것이다. go vet go의 표준 패키지에 포함된 코드 정적 분석 툴이다. 공식 문서는 https://golang.org/cmd/vet/ go vet 사용 방법 ・flag 등 go vet packag...
golang - 쿼리 유형의 JSON 파서 April 4, 2022
golang - 특이한 init 함수 June 11, 2021
golang - 파일 업로드 하기 October 18, 2018
출처 Go 언어에서 HTML 페이지에서 파일 업로드 된 경우 서버 측의 임의의 장소에 업로드 된 파일을 저장하는 샘플 코드. sever.go package main import (format "fmt"); import ("net/http"); import "os"; imp...
golang - 패닉 발생 시 stack trace 출력 January 29, 2019
아래 코드는 어떤 오픈 소스에서 본 것을 아주 약간 변경한 것이다. 보기 좋게 출력하기 위해 go-spew 라는 오픈 소스 라이브러리를 사용하였다. import ( "fmt" "runtime" "github.com/davecgh/go-spew/spew" ) func Pr...
golang - 패닉 발생 시 메시지 출력을 보기 좋게 해주는 tool panicparse January 11, 2021
golang - 패키지 관리와 유용한 라이브러리들 November 29, 2018
아래 글은 golang을 공부할 목적으로 웹에서 본 글들을 정리한 것이다. 라이브러리 관리 go get 으로 받은 패키지 갱신 go get -u all 로 안된다면 문제의 xx.a 파일을 삭제하고 go run을 실행한다. rm /Users/kjunichi/gocode/pkg/da...
golang - 프로세스 간 동기 처리 October 24, 2021
golang - 프로파일러 fgprof November 24, 2021
golang - 프로파일링 툴 pprof의 Web UI가 엄청 편리해서 소개 November 17, 2021
golang - 핸들러 패턴 December 28, 2018
type SpecialFunc func(int) bool SpecialFunc은 int를 받고 bool을 반환하는 함수를 뜻하는 타입이 된다. 이것에 대해서 메소드를 생성하는 것이 가능핟. func (sf SpecialFunc) SpecialMethod() { ... }...
golang - 호출 그래프로 시작하는 Go 코드 읽기 March 16, 2021
golang - 호출 측의 func 이름 알기 November 20, 2018
아래 글은 golang을 공부할 목적으로 웹에서 본 글들을 정리한 것이다. pc, _, _, _ := runtime.Caller(1) caller_name := runtime.FuncForPC(pc).Name(); 로 할 수 있다. DEBUG 플래그가 있으면: import ...
golang - 효율 좋은 Go 테스트 만들기 September 11, 2021
번역 - 이벤트 루프 없이 하이 퍼포먼스 – C10K 문제에 대한 Go의 응답 January 9, 2020
JetBrains (9)
JetBrain IDE - (에디터에서)자동 줄 바꿈 October 12, 2021
JetBrains IDE - [플러그인] 미니맵을 표시해주는 CodeGlance October 16, 2021
JetBrains IDE - [플러그인] 인덴트에 색을 칠해주는 Indent Rainbow October 18, 2021
JetBrains IDE - [플러그인] 함수의 복잡도를 가시화 해주는 CognitiveComplexity October 20, 2021
JetBrains IDE - 실수로 코드 삭제 시 Local History로 복구하기 October 15, 2021
JetBrains IDE - 특정 범위에서 코드 포맷을 무효화 October 13, 2021
JetBrains IDE - 파일 끝의 줄 바꿈을 1개로, 의미 없는 스페이스 삭제 October 10, 2021
JetBrains IDE를 사용한다면 알고 있어야 할 10개의 tips October 9, 2021
JetBrains IDE를 사용한다면 알고 있어야 할 10개의 tips November 16, 2020
Jetbrains (5)
Docker에서 sshd를 실행하여, jetBrain IDE의 원격 개발을 사용해보기 January 12, 2023
GoLand를 사용하게 만드는 4개의 편리한 기능 January 11, 2023
JetBrains IDE 공통. 환경 변수를 설정하여 코드상에서 참조하는 방법 August 29, 2023
Jetbrains - 에러, 경고 내용을 코드 행에 표시되게 해주는 플러그인 Inspection Lens 소개 January 18, 2023
실무에서 자주 사용하는 GoLand의 기능 January 21, 2023
Linux (13)
Linux - Linux의 logrotate에 대해서 December 14, 2021
Linux - NTP(Chrony) 설치 방법(CentOS8) September 10, 2021
Linux - Slab 캐시 사용량이 증가한 원인을 SystemTap으로 조사(많은 오래된 로그 파일이 문제) January 14, 2023
Linux - Ubuntu 22.04 CPU 및 메모리 사용률과 같은 시스템 정보를 상단 패널에 표시 December 2, 2022
Linux - dstat + Fluentd + Influxdb + Grafana September 8, 2021
Linux - dstat - tcp 옵션 September 6, 2021
Linux - dstat - 서버의 자원을 실시간으로 모니터링 August 31, 2021
Linux - dstat 옵션 좀 더 상세히 September 2, 2021
Linux - dstat 편리한 옵션 모음 September 1, 2021
Linux - dstat 플러그인 만드는 법 September 7, 2021
Linux - 「PATH가 통한다」 라는 의미가 무엇인지 다시 정리해 보았다 January 6, 2023
Linux - 리눅스 서버에서 발생한 병목 조사하기 March 28, 2023
Linux - 리소스 모니터링 툴 - gtop August 30, 2021
Log (2)
Log Parser Studio 소개 November 5, 2020
큰 로그 파일도 신속하게 분석 할 수 있는 무료 도구 TextAnalysisTool.NET October 27, 2020
Network (107)
10GbE 에서는 Jumbo Frame가 효과적, 1G와의 혼재 환경에서는 MTU 사이즈에 주의 January 29, 2018
번역. 원본 10GBASE-T 회선의 성능이 6~7Gbps 정도로 포화 되는 경우가 많다. 이유는 MTU(Maximum Transmission Unit)이다. MTU는 요컨대 최대 프레임 크기로 이 숫자를 넘는 데이터를 전송하는 경우 프레임이 분할된다. Ethernet에서는 최...
APNS/GCM의 리퀘스트 제한 November 8, 2017
번역 글로 2016/10월 기준. 이후 바뀔 수 있음 APNS와 GCM에서 Push 통지를 할 때의 제한 정리 APNS iOS8 미만의 경우 페이 로드 데이터의 상한은 256 바이트까지. iOS8의 경우 페이 로드 데이터의 상한은 2K 바이트까지. iOS9 이후의 경우 페이 로...
Actor 프레임워크의 메시지 전달에서 사용하는 용어 July 14, 2017
at-most-once delivery는 메커니즘에 건네지는 각 메시지에 대해 해당 메시지가 0 번 또는 1 번 전달됨을 의미합니다. 보다 일반적인 용어로는 메시지가 손실 될 수 있음을 의미합니다. at-least-once(최소한 한 번 전달) 메커니즘에 전달 된...
BaaS - GameSparks November 7, 2017
아래 글의 일부 번역이다. BaaSでゲームサーバを作る話 2016년 7월을 자료이므로 지금과 다른 부분이 있을 수 있다.
C 언어로 Simple HTTP 서버 만들기 March 16, 2020
출처 기능은 아주 단순하다. 그만큼 분석하기 쉽다. 웹서버의 대략적인 동작을 엿볼 수 있다. 간단하게 아래의 기능만 구현했다. HTTP 서버 HTML 출력 라우팅 환경 아래 환경에서 개발, 테스트 했다. OS : Windows 10 IDE : Visual...
C# - proto.actor 프레임워크 July 12, 2017
proto.actor Akka와 비슷한 프레임워크이다. Akka.NET의 개발자가 만든 것이다. Akka.NET 이 있는데 이것을 만든 이유는 Akka.NET은 처음부터 모든 것을 다 만들어서 점차 유지 보수가 힘들었다고 한다. proto.actor는 이미 검증 받은 라이브러리를...
C# 네트워크 프로그래밍 학습용 저장소 March 9, 2020
C# 네트워크 프로그래밍 학습을 위한 자료를 모아 놓은 저장소이다. jacking75/com2usStudy_CSharpNetworkProgramming master 버전에는 주로 예제 코드만 있고 설명은 Docs 디렉토리에 있다. 회사 동료 분이 브랜치로 따서 만든 곳에는 잘 ...
C# 오픈 소스 네트워크 라이브러리 FreeNet December 1, 2018
FreeNet은 C#으로 온라인 게임 서버 만들기의 저자 이석현님이 Github에 공개한 네트워크 라이브러리이다. 책을 먼저 보면 코드 이해가 쉽다. C# 오픈 소스 네트워크 라이브러리로 SuperSocket이 유명한데 이 라이브러리는 기능이 많은만큼 복잡한데 FreeNet은 필...
C++ http 클라이언트 요청하기 - HappyHttp April 17, 2018
HappyHttp Visual Studio 2017에서 빌드하면 에러가 난다. 조금 수정이 필요하다. happyhttp.cpp 파일의 상단에 아래의 전처리를 선언한다. #define _WINSOCK_DEPRECATED_NO_WARNINGS 1 #define _CRT_SECURE_N...
C++ http 클라이언트 요청하기 - WinHttpClient March 14, 2018
Win32 API인 WinHttp를 랩핑한 라이브러리이다. 원 출처는 코드 프로젝트이다. A Fully Featured Windows HTTP Wrapper in C++ 예제 코드 - ConsoleApplicationWinHttp
C++ http 클라이언트 요청하기 WinHttp March 11, 2018
아직은 기본 C++ 라이브러리로 http 통신을 할 수 없다. (아마 C++ 20 에서는 가능하지 않을까 생각한다). C++로 웹서버에 http 통신을 하려면 외부 라이브러리를 사용하던가 혹은 OS에서 제공하는 API를 사용해야 한다. 이 글에서는 Windows 플랫폼 한정으로 ...
C++ http 클라이언트 요청하기. libcurl, cpp-netlib, cpprestsdk March 21, 2018
libcurl 개요 공식 사이트. https://curl.haxx.se/libcurl/ 이 라이브러리를 C++ 클래스로 랩핑한 프로젝트도 있다. https://github.com/mrtazz/restclient-cpp VS2017도 지원한다(단 VS...
C++ 오픈소스 서버 라이브러리 March 12, 2020
sniper00/moon 저장소: https://github.com/sniper00/moon A cross-platform,lightweight,scalable game server framework written in C++, and support Lua Script ...
Cassandra의 스토리지 엔진을 바꾸어서 고속화한 Rocksandra를 Instagram이 오픈소스로 공개 March 18, 2018
원문 Instagram은 NoSQL 데이터베이스 Cassandra에서 발생했던 Java의 가베지 컬렉션에 기인한 지연을 해소한 고성능 개량 버전 Cassandra를 오픈 소스로 공개했다고 발표했다. https://engineering.instagram.com/open-sourci...
DPDK 글 링크 모음 November 1, 2019
일어로 된 문서는 번역기로 돌려서 보는 것을 추천한다. High Performance Networking with DPDK & Multi/Many Core (일어)DPSK 실험 환경을 만들어 보았다 (일어)NFV와 Intel DPDK 1, 2 (일어)3.6...
DPDK를 이용한 네트워크 스택, 고성능 통신 베이스 February 12, 2018
번역입니다. 원본
GameServer - 게임서버의 DB 작업 처리 프로그래밍 February 28, 2020
GameServer - 치트 방지. 메모리 상의 수치를 암호화 하기 April 6, 2020
HyperV-Switch를 사용하여 Windows 10의 HyperV on-off 하기 October 11, 2017
Windows 10에서 VirtualBox에 linux를 설치할 때 64비트를 설치 못하는 문제가 있다. 이것은 Windows에서 HyperV를 사용하고 있기 때문이다. 해결을 위해서는 HyperV를 종료하면 된다. HyperV를 때때로 사용해야 하는 경우는 HyperV-Sw...
IOCP 관련 확장 함수 사용 준비 October 16, 2019
오랜된 Windows(아마 Windows Vista 이전)에서는 Winsock 확장 함수를 사용하기 위해서는 확장 함수의 함수 포인터를 가져와야 사용할 수 있었다. 예를들면 AcceptEx의 경우는 아래처럼 해야 사용할 수 있었다. static LPFN_ACCEPTEX mFnAc...
IOCP 프로그래밍 tutorial December 1, 2019
IOCP 프로그래밍을 배울 때 사용할 자료로 IOCP 프로그래밍 tutorial을 만들었다. jacking75/edu_cpp_IOCP (도움이 되었다면 Star 부탁합니다 ^^) 아주 간단한 IOCP용 에코 서버에서 시작하여 10단계로 나누어서 기능을 확장하면서 채팅 서버를 만들...
IPv6 소켓 프로그래밍 관련 link 모음 May 2, 2020
IT 엔지니어라면 당연히 알아야 할 보안 지식 퀴즈. 무료 Wi-Fi 편 October 3, 2024
League of Legends Platform의 AWS 이행 March 5, 2018
AWS re:Invent 2017에서의 LoL 세션을 정리한 글. 원문(일본어) 강연자 Rob Cameron씨. Senior Infrastructure Engineer, Riot Games 세션 내용 무엇을 해결 했는가? LoL의 컴포넌트는 크게...
Linux - Linux OS에서의 네트워크 관련 설정 August 19, 2021
Linux - Linux 네트워크 성능 향상 August 20, 2021
Linux - NIC 상태를 표시하는 툴 ethtool September 17, 2021
Linux - 로드 밸런서와 캐시 서버를 멀티 코어 스케일 시키기 위한 커널 튜닝 August 22, 2021
Linux Ethernet의 수신 처리 July 24, 2020
몇 년전에 웹에 공개된 글을 번역한 글이다.
Linux kernel 3.9의 새로운 기능 SO_REUSEPORT 사용 March 3, 2021
Linux 소켓 프로그래밍의 5가지 함정 October 5, 2020
Linux 에서의 커널 패킷 전송 July 5, 2020
몇 년전에 웹에 공개된 글을 보고 번역했던 글이다.
Linux에 있어서의 소켓 기능의 향상 August 8, 2021
Linux에서의 EINTR 에러 December 16, 2020
Linux의 Zero-copy Sendmsg, Receive August 28, 2021
MQ - EMQ 소개 March 24, 2020
얼랭으로 만든 MQ
MQTT September 11, 2019
출처 ##MQTT란? MQTT(MQ Telemetry Transport)는 publish/subscribe 모델을 기반으로 하는 경량 메시지 프로토콜이다. 네트워크가 불안정한 장소에서 동작하기 위한 기능이나 힘이 약한 장치에서 움직이기 위한 경량화 등이 특징이다. MQ라고 이름...
MQTT 관련 link 모음 May 2, 2020
Microsoft 가 공개한 네트워크 성능 측정 도구 ctsTraffic December 9, 2021
NAT 통신에 대해서 October 31, 2023
NHN Next 게임서버 수업 실습용 채팅서버 소스 코드 April 17, 2017
NHN Next의 2016 ~ 2017년 게임서버 과정 수업에서 실습으로 만드는 채팅 서버 코드이다. Github Windows 플랫폼만 지원(Linux 지원 어렵지 않음) 64 비트 지원 C++ 로 구현 Visual Studio 2017 select 기반.동...
Nagle 알고리즘과 지연된 ACK August 2, 2021
Network - 네트워크에 게임에서의 TCP와 UDP 알맞게 사용하기 February 29, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
Network Simulating tool - clumsy 0.2 October 7, 2021
Network Simulating tool - comcast October 6, 2021
Network Tool - netstat December 22, 2020
Windows Linux
QUIC은 데이터 손실시 처리 대기를 어떻게 최소화할까? September 23, 2023
RPS(Receive Packet Steering)와 RFS(Receive Flow Steering) April 23, 2018
RPS(Receive Packet Steering) RPS는 수신한 패킷을 처리하는 네트워크 부하를 다중 코어로 분배할 수 있다. 이 기술은 TCP/IP 같은 프로토콜을 패킷으로서 병행적으로 처리할 수 있다. 매핑은 해시 테이블 메커니즘에서 행해진다. 수신한 큐에는 CPU에 대한 ...
RPS, RFS 설정에 의한 Linux 네트워크 성능 향상 December 27, 2020
SockPerf를 사용하여 네트워크 레이턴시 측정 November 28, 2021
TCP 터널링 bore로 쉽게 셀프 호스팅 하기 January 22, 2023
TCP 통신에서 데이터 전송을 모아서 보내야할 또 하나의 이유 February 5, 2021
TCP 혼잡 제어 알고리즘들 December 7, 2017
원문 TCPの輻輳制御アルゴリズム、どれが一番速い? 의 일부이다. TCP의 중요한 요소로 혼잡 제어 알고리즘이 있다. TCP는 시퀀스 번호를 사용한 응답 확인에 의해 데이터의 확실한 도착을 보장하고 있다. 응답 확인을 하지 않은 패킷에 대해서는 다시 같은 데이터를 송신하도록, ...
<a href="https://jacking75.github.io/network_processtcpsummary/" title="TCP/UDP 연결을 하고 있는 프로세스의 정보를 보여주는 "ProcessTCPSummary" 유틸리티">TCP/UDP 연결을 하고 있는 프로세스의 정보를 보여주는 "ProcessTCPSummary" 유틸리티
October 9, 2020
</a>다운로드 ProcessTCPSummary는 TCP/UDP 연결을 하고 있는 프로세스를 나열해 주는 유틸리티이다. 64bit 버전을 포함하여 Windows XP에서 Windows 10까지 대응하고, “NirSoft”의 Web 사이트에서 무료로 다운로드 할 수 있다. TCP 또는...
TCP와 UDP의 차이 10가지 November 11, 2020
TIME_WAIT 문제 September 24, 2021
TSO(TCP Segmentation Offload)에 대해서 August 5, 2023
UDP에서 recvmmsg를 사용하여 고성능 Receive 처리하기 October 16, 2020
recvmmsg 라는 함수를 http://www.jp.square-enix.com/conference/2018/onlinetech/pdf/20180421_ishimori.pdf 라는 문서에서 알게 되었다. Linux에는 recvmmsg 라는 함수를 사용할 수 있고, 시스템 호출 ...
Ubisoft 사례 - For Honor에서의 Amazon ECS 사용법 March 8, 2018
AWS re:Invent 2017에서의 Ubisoft 세션을 정리한 글. 원문(일본어) AWS ECS 사전 지식 강연자 Ralf Mueller - Online Technical Architect, Ubisoft Louis-Michel Gélinas - DevOps Team...
Virtual Box 팁과 링크 모음 November 1, 2017
가상머신과 Host간에 클립보드 공유 Ctrl-Alt-Del 누르기 게스트 확장 설치 공유 폴더 만들고 사용하기 가상화 활성화 하기 http://ubuntu.or.kr/viewtopic.php?p=44555 http://www.ibora.net/board/?i...
VirtualBox에 설치한 가상PC를 외부에서 RDP로 접속하기 November 1, 2017
WSAPoll October 11, 2020
개요 Windows Vista부터 새로 생긴 네트워크 API UNIX(Linux) OS의 poll과 비슷한 것이다 복수의 파일 디스크립터를 감시하는 API 지정한 소켓의 상태가 변화했는지 확인하는 기능을 제공한다. 기능적으로는 select와 유사하다 API 설명...
Web 서버에서의 Thundering Herd December 12, 2017
원문 WebサーバでのThundering Herdは過去の話? Thundering Herd란 하나의 소켓에 대해서 select나 epoll 같이 통신 가능하게 되는 것을 기다리는 시스템 콜을 이용하여 복수의 프로세스(또는 스레드)가 대기하고 있다면, 통신 가능하게 되었을 때 원래...
Win32 API - 대기 체인 분석 November 10, 2017
Windows7 에서 새로 생긴 기능이다. 이것을 사용하면 프로그램을 종료 시켰는데는 프로세스는 죽지 않고 살아 있는 경우 어디서 문제가 되었는지 어느 정도 알아낼 수 있다. 이 프로그램은 내가 집에서 만든 서버 애플리케이션으로 X 버튼을 눌러서 종료시킨다. 그런데 작업...
Win32 API Http Client 관련 글 링크 모음 October 29, 2019
일어로 된 문서는 번역기로 돌려서 보는 것을 추천한다. (일어)Http 프로그래밍 1, 2, 3, 4, 5, 6 (일어)XMLHttpRequest를 VC++에서 사용하는 예 WinHttp (일어)winHttp (일어)WinHTTP API 를 사용한 단순한 ...
Win32 Socket 프로그래밍 관련 글 모음 November 4, 2019
일어로 된 문서는 번역기로 돌려서 보는 것을 추천한다. (일어)Winsock Programmer’s FAQ 윈속 프로그래밍 기본 윈도 비동기 이벤트 기반 네트워크 프로그래밍 WSADuplicateSocket 1, 2, (일어) (일어)WinSock 에서 IP...
Windows 10 에서 Unix Domain Socket 사용 가능 June 15, 2018
Windows 10 2018년 봄 대형 업데이트에서 Unix Domain Socket 기능이 추가 되었다. AF_UNIX comes to Windows – Windows Command Line Tools For Developers Unix Domain Socket을 사용하기 위해서...
Windows Server 2012에 새로 추가된 네트워크 기능 October 25, 2020
Windows에서 IOCP를 사용하는 경우의 설계에 관한 문제 July 10, 2017
MSDN에서… 개요 이 자료는 Windows NT IOCP(I/O Completion Port)의 입출력 모델에 대해서 이미 이해하고 관련된 API에 대한 자세한 지식이 있는 유저를 대상으로 하고 있다. IOCP에 대해서는 IOCP의 구현과, IOCP를 사용하기 위해서 필요한 A...
Windows의 네트워크 성능을 더 좋게 해주는 기능 October 4, 2021
ZeroMQ September 16, 2019
소개 공식 사이트 http://www.zeromq.org/ Github https://github.com/zeromq 예제 https://github.com/imatix/zguide N-N 통신을 구현하는 socket API풍의 경량 메시지 라이브러리 자동적으...
akka 관련 link 모음 May 2, 2020
epoll 네트워크 프로그래밍 November 3, 2023
gRPC 디버깅 클라이언트 BloomRPC 사용하기 July 15, 2021
gethostbyaddr, getnameinfo, inet_ntop, inet_pton 사용하기 May 12, 2022
netsh(Windows) 명령으로 수집한 패킷 캡쳐에서 통신을 한 프로세스를 확인하는 방법 January 29, 2021
non-blocking I/O 및 비동기 I/O의 차이를 이해하기 October 12, 2020
select() 보다는 pselect()를 사용하는 것이 좋다 September 18, 2020
pselect ? 다중 입출력 함수 - pselect() (일어)pselect로 시그널을 무시한다 예제 코드 - pselect #include <stdio.h> #include <signal.h> #include <sys/select.h> v...
socket 프로그래밍을 할 때의 SIGPIPE에 의한 문제 July 21, 2019
출처 연결이 끊어진 소켓에 쓰기(send(2) 혹은 write(2) 같은 것)를 하면 SIGPIPE 시그널이 발생하고 프로세스가 종료하기 때문에 제대로 SIGPIPE 시그널을 핸들링 해 두자는 이야기 이다. (Windows OS에서는 상관 없는 이야기이다) SISGPIPE를 받...
socket.io 관련 글 링크 모음 October 30, 2019
일어로 된 문서는 번역기로 돌려서 보는 것을 추천한다. 소개 및 사용법 (일어)Socket.IO으로 시작하는 WebSocket 초 입문 (일어)Engine.IO 에서 보는 Socket.IO 의 지금과 미래 (일어)Node.js의 Socket.io 입문 (일어)So...
socket의 accept에서 발생하는 에러와 의미 September 22, 2018
출처: https://qiita.com/kawasin73/items/3371d35166af733c2ce4
socket의 read에서 발생하는 에러와 의미 September 26, 2018
출처: https://qiita.com/kawasin73/items/3371d35166af733c2ce4
warning C4996 'inet_addr' June 27, 2017
몇 년전에 만들어진 Winsock API를 사용한 코드를 최신 VC++로 빌드하면 아래와 같은 경고를 볼 수 있다. warning C4996: 'inet_addr': Use inet_pton() or InetPton() instead or define _WINSOCK_DEPREC...
ØMQ (ZeroMQ) 서론 July 28, 2019
출처 https://www.infoq.com/jp/news/2010/09/introduction-zero-mq/ PostRank의 설립자이자 CTO인 Ilya Grigorik씨가 지난주 ZeroMQ의 소개 기사를 썻다 . 버클리 소켓(BSD)는 모든 네트워크 통신의 기...
내 PC에서 실행 중인 VirtualBox에 내트워크 연결하기 October 30, 2017
내 PC에서 실행 중인 VirtualBox에 설치된 애플리케이션에 네트워크로 접속하려면 VirtualBox의 ‘포트 포워딩’을 설정하면 된다. 아래는 VirtualBox에 설치된 MongoDB를 내 PC에서 접속하기 위해 포트 포워딩 설정을 하였다. VirtualBox에 설치된...
네트워크 Dummy 테스트 시 TIME_WAIT 문제 February 6, 2020
네트워크 벤치마크 툴 NTtcp September 15, 2021
네트워크 상태 시뮬레이션 툴 May 4, 2020
comcast Simulating shitty network connections so you can build better systems. https://github.com/tylertreat/comcast 네트워크 상태 시뮬레이션 툴이다. 패킷 드럅율이나 레이턴시...
네트워크 용어 July 18, 2019
Receive-Side Scaling(RSS) http://minimonk.net/2728 Windows Server 2012의 NIC 티밍(teaming)에 대응. TCP Chimney Offload http://vstarmanv.tistory.com/58 ...
네트워크 툴 - 2개의 호스트 사이의 MTU를 확인할 수 있는 툴 mturoute.exe November 19, 2020
네트워크 툴 - TCPView (Windows) November 18, 2020
네트워크 툴 - netcat November 11, 2020
도서 '온라인 게임 서버'의 예제 코드 March 31, 2018
온라인 게임 서버(지은이 강정중) 책의 예제 코드를 리팩토링 한 것이다. Visual Studio 2017(2015도 가능하다) ChatClient와 GameClient는 MFC로 구현되어 있어서 포팅하지 않았다(원본 코드를 보기 바란다) 원본 디렉토리에 원본 코드가 있다.
동영상 전달 서비스에 UDP를 사용하는 Akamai August 21, 2017
일본의 Akamai 기사 중 동영상 전달 서비스에 UDP를 사용하는 이야기가 흥미로워서 일부 번역했다. 원문 방송국은 지상파, 위성, 케이블 텔레비전을 통해서 프로그램을 전달하고 있다. Akamai로는 이러한 서비스의 IP 전개를 한층 촉진하고 싶다. 첫째 라이브 배급 워크...
번역 - Actor에 의한 병행 처리 애플리케이션 아키텍처 November 9, 2019
번역 - Network Testing Taming the Beast January 17, 2020
번역 - Web 서비스의 서버 구성과 목적 January 7, 2020
서버 네트워크 관련 오픈소스 라이브러리 March 6, 2020
Informer - 텔레그램 대규모 모니터링 봇 matrix - 탈중앙화 방식의 오픈소스 실시간 커뮤니케이션 네트워크 Matterbridge - 다양한 채팅프로토콜들의 브릿지 라이브러리 (일어) 프로젝트 커뮤니케이션 툴 『Rocket.chat』&bot
스타벅스를 통해서 소프트웨어 확장성 배우기 November 15, 2020
스트림 처리를 위한 큐잉시스템 선택법 March 23, 2020
오픈소스 QUIC 라이브러리 리스트 October 6, 2020
온라인 게임에서는 서로의 위치가 멀리 떨어져 있어도 왜 빠르게 동기화할 수 있을까? 어떻게 통신하고 있을까? October 5, 2023
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback February 19, 2017
C++ Korea와 함께하는 제3회 마이크로소프트 멜팅팟 세미나 에서 ‘잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback’ 라는 이름으로 했던 내 강연의 자료이다. 슬라이드쉐어 github github에는 문서와 예제 코드도 같이 ...
직렬화 라이브러리 link 모음 May 2, 2020
최신 Windows SDK의 IOCP GetQueuedCompletionStatus, CreateIoCompletionPort 함수의 인자 타입 변경점 October 17, 2019
GetQueuedCompletionStatus 이전 사용 코드 //CompletionKey를 받을 포인터 변수 stClientInfo* pClientInfo = NULL; //함수 호출 성공 여부 BOOL bSuccess = TRUE; //Overlapped I/O작업에서 전송된 ...
패킷과 프레임의 차이 May 2, 2018
출처 네트워크를 통해 전송되는 데이터는 패킷이나 프레임이라는 단위로 분할되어 회선 위를 왕래한다. 같은 것을 가리키면서 패킷 이라고하거나, 프레임이라고도 하지만 엄밀하게는 다른 것이다. 인터넷 기술 표준화를 추진하는 단체 IETF(Internet Engineering Task ...
프로그래머가 알아야할 지연(레이턴시) 수치 February 7, 2021
Node.js (5)
Debugging Node.js Performance Issues in Production March 25, 2017
아래 강연의 내용의 일부를 정리 Debugging Node.js Performance Issues in Production 느리게 되는 이유 single thread CPU intensive code Slow I/O Event Loop saturation R...
Node 7.6 에서 async/await를 기본으로 지원 March 13, 2017
Node.js 7.6 이 출시 되었다. async/await 지원이 기본적으로 유효하게 되어 낮은 메모리 디바이스에서의 성능이 개선되었다. Node 7.6의 async/await 지원은 Chromium의 JavaScript 엔진인 V8를 버전 5.5로 업데이트한 데 따른 것이다....
Node.js - TCP Socket April 17, 2019
간단한 hello world Class: net.Server 이벤트 'listening': server.listen()를 호출 후 서버가 바인드 되었을 때 발생. 'connection': 새로운 연결이 만들어지면 발생. 'close': 서버가 끊어지면 발생. 'error': 에러...
Node.js - UDP Socket April 18, 2019
데이터 수신 dgram.createSocket(type, [callback]) type 에는 udp4, udp6, unix_dgram 지정 가능. 콜백은 message 이벤트가 발생했을 때의 내용을 기술. function (msg, rinfo) { } 버퍼(msg)와 송...
네이티브 모듈의 ABI 호환성 문제 대처 April 5, 2017
2017년 3월 13일(미국)에 열렸던 ‘Node.js VM Summit’ 에서 Node의 네이티브 모듈의 ABI 호환성 문제에 대해서 회의를 하였다. 회의 동영상 Node의 네이티브 모듈 문제 Node의 네이티브 모듈은 C/C++로 만들었고 V8과 NAN API(Applicat...
OS (58)
AppImage 패키지 December 17, 2018
Linux 배포본 중에서 AppImage 형식으로 배포되는 것이 있다. 설치 방법은 실행 권한을 부여하고, 실행만 하면 되기 때문에 매우 간단하다. 이 패키지 배포 형식이 보급되면 좀 더 Linux에서 앱 설치 및 사용이 쉬워질 것이다. 다운로드 한 파일(예를 들어 exa...
CentOS에서 프로그램의 코어 덤프 파일을 남기는 장소 February 11, 2020
참조 어떤 이유로 프로그램이 오류로 비정상 종료하는 경우 기본적으로 프로세스의 현재 디렉토리에 core.PID 형태로 덤프를 남긴다. CentOS에서는 기본적으로 코어 덤프를 남기지 않게 설정 되어 있다. 코어 덤프를 남기고 싶다면 아래처럼 수정해야 한다. vi /etc/sy...
Homebrew 1.9.0에서 Linux/WSL을 실험적으로 지원 January 24, 2019
출처 macOS용 패키지 관리자 “Homebrew」의 최신판인 Homebrew 1.9.0 이 1월 9일에 공개 되었다. 본 버전에서는 Linux 및 Windows10의 “Windows Subsystem for Linux (WSL)”가 베타 버전으로 지원되고 있다. “Homebr...
IDC Japan의 일본의 서버 OS 점유률 October 3, 2018
IDC Japan에 의하면 일본에서 서버 OS 점유률은 Windows Server 52%, Linux 24.8%. 클라우드에 의해 Linux가 높은 성장을 하고 있다고 한다. Windows Server는 대기업의 프라이베트 클라우드나 클라우드 벤더 등의 대 규모 데이터 센터용으로 ...
Linux - CentOS 방화벽 July 8, 2021
Linux - Linux TCP/IP parameter August 17, 2021
Linux - Linux 개발자를 위한 서버 튜닝 August 15, 2021
Linux - Linux 디렉토리 구성 August 10, 2021
Linux - PATH에 대해서 April 8, 2020
출처 명령 검색 PATH의 확인 방법 $ echo $PATH로 확인 가능하다. $ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin 경로는 :로 구분되고, /usr/local/bin, /usr/...
Linux - QR 코드를 생성하는 명령어 January 9, 2021
Linux - WSL2 스냅샷 만들기 August 18, 2021
<a href="https://jacking75.github.io/OS_windows_winget/" title="Linux - Windows 10에서 명령어 한방으로 앱을 설치 ~ CUI 앱 관리 도구 "winget"이 v1.0으로">Linux - Windows 10에서 명령어 한방으로 앱을 설치 ~ CUI 앱 관리 도구 "winget"이 v1.0으로
July 6, 2021
</a>
Linux - iptables의 NAT 테이블(DNAT, SNAT 등)을 사용한 트래픽 제어하기 August 15, 2021
Linux - tmux를 최소한으로 입문하여 사용하기 January 10, 2021
Linux - vnstat을 사용하여 linux 서버의 traffic을 손쉽게 확인 August 4, 2021
Linux - 네트워크 모니터링 명령어 20개 August 23, 2021
Linux - 덤프 생성 툴 ProcDump August 6, 2021
Linux - 자주 사용하는 명령어 February 17, 2020
출처 기본 cd <path> #path로 이동 cd - #이동 전의 path로 이동 pwd #작업 디렉토리의 패스를 표시 ls #현재 디렉토리의 내용 표시 mv <originalPath> <newPath> #파일 이동, 이름 변경 cp <...
Linux How To February 3, 2020
네트워크 특정 port에 접속한 네트워크 정보 보기 32452 port에 접속한 네트워크 정보를 보고 싶은 경우 netstat -nap | grep :32452 파일 디렉토리 이름 변경 mv 옵션... 원본 대상 mv 옵션... 원본... 디렉토리 mv 옵션... 디렉토리 ...
Linux TCP 서버와 관련된 커널 파라메터 튜닝 July 16, 2020
출처 커널 파라메터 설명은 아래 링크에서 참고 linux/Documentation/sysctl/ 예를 들어 net 계열의 파라메터 설명을 보고 싶다는 아래에서 확인한다. linux/Documentation/sysctl/net.txt TCP 서버용 tuning 기본 # 항구...
Linux kernel 5.4의 새로운 기능 November 26, 2020
Linux, Windows에서 시간 동기화 설정 · 확인하기 August 24, 2021
LinuxBrew January 21, 2019
특징 macOS의 Homebrew를 리눅스로 이식한 것 http://linuxbrew.sh/ root 권한이 필요 없다. home dir 에 설치 할 수 있다. 배포 package manager 에 의존하지 않는다 패키지 검색은 http://braumeist...
LinuxBrew 설치하기 (CentOS, WSL) July 4, 2019
Linux (CentOS)에 Homebrew on Linux (Linuxbrew)를 설치하기 전에 출처: https://qiita.com/libra_lt/items/548fcbdfbcf992cba4ed CentOS Linux release 7.6.1810 (Core) Linux...
Linux에서의 최대 스레드 수 October 4, 2018
Linux에서 스레드의 최대 수를 변경하고 싶다면 커널의 파라메터를 조정하면 된다. kernel.threads-max와 kernel.pid_max, vm.max_map_count 수를 늘리면 된다. 예) sysctl -w kernel.threads-max=600000 sysctl...
VirtualBox 6.1의 새로운 기능 November 17, 2020
WSL 글 정리 및 관련 글 링크 모음 March 4, 2020
WSL 관련 글을 정리한 것과 볼만한 글 링크를 정리한 것이다. jacking75/wsl_docs 괜찮은 내용이라면 스타 부탁한다~ ^^ (스타가 많으면 꾸준히 업데이트 할 확률이 높아진다)
WSL2 와 타 가상 머신 소프트웨어가 공존 하는 방법 March 18, 2021
Windows - Hyper-V 와 다른 가상 머신 환경 공존 January 23, 2022
Windows - RAMMap 소개 November 17, 2019
Windows - Windows Terminal 글 모음 September 28, 2021
작년에 번역 및 정리했던 Windows Terminal 글들이다. 01. 설치 및 기본 사용 02. 설정 03. 단축키 04. Cascadia Code 폰트 05. Windows Terminal 부팅 옵션 Windows Terminal - 시작 시에 지정...
Windows - Windows 터미널 툴 Rlogin November 22, 2020
Windows - Windows에서 메모리를 사용한다는 것은 April 21, 2020
몇년 전에 번역했던 글이다
Windows - Windows의 프로세스와 스레드 April 28, 2020
몇년 전에 번역했던 글이다
Windows - 메모리 현황 확인 April 7, 2020
몇년 전에 번역했던 글이다
Windows - 번역 Announcing Windows Server vNext Preview Build 20201 September 17, 2020
Windows - 번역) Windows 10과 Windows Server 2016에 있는 네트워크 고속화 기능 September 20, 2020
Windows - 태스크 매니져의 화면 갱신 정지와 수동으로 갱신하기 January 22, 2022
Windows 11에 SSH 서버를 실행해서 공개키 인증을 사용하기 November 21, 2022
Windows Server 2019에서 NTP 클라이언트를 설정으로 시간 동기화 하기 January 7, 2023
Windows Terminal 이 마침내 OS의 기본 터미널로 Windows 11 2022 Update 에서 December 1, 2022
Windows 시간 동기화 설정(명령 프롬프트로) April 5, 2023
Windows 에서 Ctrl-L을 사용하여 클립보드 백업 유무에 관계없이 줄 삭제하기 September 22, 2024
Windows 에서 rsync 이용하기(cwRsync) November 8, 2020
Windows 원격 데스크톱을 사용하여 Rocky Linux 9 에 접속하는 방법 December 30, 2023
Windows10에 Git 설치하기 March 19, 2021
Windows11 - Dev Drive 사용하기 February 12, 2024
Windows에서 명령 프롬프트 응답을 직접 클립보드에 넣기 April 25, 2023
Windows에서의 DTrace January 2, 2021
Windows의 이벤트 로그를 Linux로 전송하기 January 5, 2021
procs - 새로운 프로세스 표시 검색 툴 소개 October 7, 2020
tar.bz2, tar.gz 파일 압축 풀기 명령어 February 6, 2019
tar.bz2 파일 압축 풀기 tar -xvf test.tar.bz2 tar.bz2 압축 내용 보기 tar -tvf test.tar.bz2 tar.gz 파일 압축 풀기 tar -xvzf test.tar.gz
windows - NTP와 시간 동기화 서비스 August 26, 2021
리눅스의 /bin, /usr/bin, /usr/sbin, /usr/local/bin의 차이는? October 29, 2020
번역 - 가상 머신 총 정리 January 3, 2020
새로운 NTP 클라이언트 및 서버, chrony August 27, 2021
NTP 이기종간 동기화(Linux, Windows)
선점형 스케쥴링(Preemptive Scheduling)과 협조적 스케줄링(Cooperative Scheduling) 비교 April 10, 2020
출처 선점형 스케줄링 모델과 협조적 스케줄링 모델은 여러 작업이 프로세서나 하드웨어 스레드 같은 컴퓨팅 리소스를 공유하도록 해주는 두 가지 일반적인 방법이다. 선점형 스케줄링 및 협조적 스케줄링 선점형 스케줄링은 지정된 시간 동안 모든 작업이 번갈아 가면서 컴퓨팅 리소스에 대한...
원격의 Linux를 Windows로 조작(GUI편) November 12, 2020
PHP (1)
PHP - PHP7.4의 FFI에서 C 언어 사용하기 September 30, 2021
Programming (4)
Pull request의 이상적인 크기와 그 이유 January 8, 2023
대규모 소스 코드 이해하기 January 9, 2023
멀티 스레드 코드에서 자주 보이는 11가지 문제 해결하기 January 1, 2022
프로그래머 경력 20년이 내가 생각한 코드 리뷰 요청 전 셀프 체크리스트 January 10, 2023
Python (1)
Python - struct 모듈을 사용하여 Binary 읽고/쓰기 February 19, 2020
출처 struct 모듈 struct 모듈은 pack, unpack, calcsize 등의 기능이 있으며, 이것들을 사용하여 정수, 부동 소수점 숫자, 문자열(을 encode 메소드에서 인코딩 한 것)을 bytes 객체로 변환하거나 반대로 bytes 객체에서 이것을 빼낸다. by...
Rider (6)
Rider - Breadcrumbs October 23, 2021
Rider - Heap Allocations Viewer를 도입하여 할당이 발생하는 코드에 밑줄 표시 October 22, 2021
Rider - IL Viewer October 30, 2021
Rider - macOS 및 Linux에서 성능 프로파일링 및 코드 검사 October 26, 2021
Rider - 우분투에서 snap으로 dotnet sdk 설치 시 설정 October 28, 2021
Rider - 편집하고 계속 October 25, 2021
Rust (16)
Rust - CLion + IntelliJ Rust 시작하기 November 11, 2019
Rust - GUI의 Windows 표시하기 December 2, 2019
출처 기본적으로 conrod_glium/examples/hello_world.rs 를 참고로 만들었다. 다만 이 샘플 코드는 여러가지 처리가 들어 있어 단순히 Window를 표시하는 것 이상의 일을 하고 있어서 Window를 표시만 하는 최소한의 코드를 모색하였다. 1. Pro...
Rust - HashMap - 구조체의 메소드를 value로 사용하기 April 28, 2020
1 아래 코드는 페이스북의 한국 러스트 사용자 그룹에서 내가 올린 질문에 김지현님이 올린 답글이다 Permalink to the playground use std::collections::HashMap; pub struct MyType { /* ... */ } impl My...
Rust - Microsoft의 사례 April 15, 2020
Rust - Vec 요소의 end 위치의 슬라이스를 함수의 인자로 넘기고 함수에서 len으로 크기 알아보기 April 28, 2020
Permalink to the playground fn main() { let xs: [u8; 5] = [1, 2, 3, 4, 5]; test(&xs[5..]); } fn test(data: &[u8]) { println!("size: {}"...
Rust - Windows 10에 Rust 설치 November 10, 2019
Rust - Windows 10에서 Rust 설치 시 VC Build Tools 설치하기 November 10, 2019
Rust - Windows에서 scoop로 Rust 설치하기 April 24, 2020
출처 Scoop 설치 설치 방법은 아래의 구글링에서 나온 글을 참고한다. https://www.google.com/search?q=scoop+%EC%84%A4%EC%B9%98&rlz=1C1NHXL_koKR713KR713&oq=scoop+%EC%84%A4%EC%B9%...
Rust - bytes Read, Write April 1, 2020
출처 Read 와 Write let mut bytes: &[u8] = &[1, 2, 3, 4, 5, 6]; let mut buf = [0;3]; bytes.read_exact(&mut buf).unwrap(); println!("read: {:?}, res...
Rust - conrod을 이용한 GUI 프로그래밍 December 6, 2019
출처 conrod는 piston라는 게임 엔진을 개발 중인 곳에서 만들고 있는 Rust 정품의 GUI 라이브러리이다. widget 구성과 관리, widget에 대한 이벤트의 전파 등 기본적인 기능을 담당할 수 있다. 그러나 실제의 렌더링이나 OS에서 행사의 수취는 conrod는 ...
Rust - 게이머를 위한 채팅 앱 Discord에서 Rust를 사용한 사례 April 16, 2020
Rust - 메모리를 덤프해서 slice와 Vec를 이해한다 April 20, 2020
출처 사전 준비 메모리 상에서 어떻게 되어 있는지 표현 되어 있는가를 확인하기 위해 아래 함수를 이용한다. 인수 x를 *const T로 캐스트하고, 생 포인터에서 std::mem::size_of_val(x)로 얻은 바이트 길이를 읽는다. fn as_raw_bytes<'a, ...
Rust - 설치 및 빌드하기 November 7, 2019
Rust - 오픈 소스 리스트 March 23, 2020
Rust - 편리한 매크로 소개 April 2, 2020
출처 Rust의 표준 매크로는 하나의 파일에 모두 정리하고 있다. 문서에서 볼 수 있다. https://doc.rust-lang.org/src/std/macros.rs.html 일부 매크로는 컴파일러 매직이기도 하고, 보고있는 것만으로도 꽤 재미있다. Rust의 편리한 매크...
Windows에 Rust 설치하기 February 25, 2019
Rust를 Windows에서 사용할 때 C++ 컴파일러가 별도로 필요하므로 먼저 VisualStudio Build Tools를 설치한다.(Visual Studio를 설치하면 된다) Rustup 설치 Rustup 사이트에 가서 rustup‑init.exe 링크를 클릭해서 다운로드 ...
Server (16)
ASP.NET Core 기본 실습 May 4, 2024
문서: https://docs.google.com/presentation/d/e/2PACX-1vQMWp7xa2ihTYvrytkMPSGSLOaKZq2qQgL4yCa7RXiBKkBfpqc4Y_LBDpWLaeJXoctfSn0ASPbQQfVz/pub?start=false&loop=...
CEDEC 2021 HTTP/2 사용으로 어셋 다운로드 시간 대폭 감속 November 2, 2022
CEDEC2021 네트워크 프로그래밍을 전혀 몰라도 알수 있는 온라인 멀티플레이 제작 강좌 August 5, 2022
Fluent-bit를 사용하여 실 시간으로 게임서버의 로그 남기기 October 3, 2021
Forza Horizon 5의 서버 개발 사례 October 5, 2022
Link! Like! 러브라이브! 게임 서버 기술 스택 December 31, 2023
LinkedIn, 마이크로서비스 통합에 프로토콜 버퍼를 도입하여 대기시간 최대 60% 단축 November 22, 2023
Riot Games at the edge. Launching VALORANT with AWS Outposts June 17, 2022
Slack의 실시간 메시징 아키텍처 November 7, 2023
The Online Tech of Respawn's Titanfall November 20, 2023
오래전에 번역했던 것입니다.
Transactional outbox 패턴 June 27, 2022
WebSocket 프로그래밍 정리 December 1, 2023
asio (non-Boost) 사용하기 December 12, 2023
닌텐도 플랫폼용 범용 게임서버 September 11, 2022
대규모 MMORPG 설계 정책 및 인프라 알기 January 23, 2023
AWS re:Invent 2022 세션인 ‘Building a successful Korean MMORPG with KakaoGames’ 의 강연 요약 특히 고성능 게임 서버를 위해 EC2의 최적화 옵션에 대한 이야기가 흥미로움
서버 부하 테스트 2023 트렌드 December 24, 2023
Tech (56)
10년 전 '무어의 법칙이 끝났다'고 말하던 시절부터 현재까지 서버 진화의 기술적 모색을 되돌아본다 October 15, 2023
3 종류의 가상화 기술 September 14, 2023
A Fast, Minimal Memory, Consistent Hash Algorithm 소개 April 14, 2022
AI 이미지 생성의 새로운 시대! 'Stability Matrix'로 최신 이미지 생성을 경험 December 27, 2023
ChatGPT에서 기억해두면 유용한 Markdown 표기법 5가지 May 12, 2024
Cloudflare에서 Kafka 운영에서 배운 것 ~ QCon 런던에서 October 29, 2023
Draw.io (diagrams.net)에서 만든 다이어그램을 iframe 태그로 블로그 등에 삽입하기 November 24, 2022
EditorConfig - C# March 3, 2022
EditorConfig - C++ March 4, 2022
EditorConfig에 대해서 March 1, 2022
Excel상에서 WebAssembly판 Python을 실행 가능하게 하는 애드온 Anaconda Code September 11, 2024
FASTER 라이브러리 소개 April 12, 2023
Git for Windows에서 여러 인증 정보를 다룰 때 Tips October 22, 2024
GitHub Copilot - Visual Studio의 빠른 정보에서 Copilot을 사용하여 C++ 심볼 이해하기 November 2, 2024
GitHub Copilot 명령어 July 11, 2024
GitHub Copilot 사용합시다 July 13, 2023
비주얼스튜디오 사용한다면(C++, C#) GitHub Copilot 강력하게 추천합니다. 아직 초창기라 엄청나게 뛰어난 AI는 아니지만 생산성, 편리성에 크게 도움이 됩니다. 사람마다 다르게 느끼겠지만 저는 아무리 낮게 보더라도 비주얼어시스트 발전형 정도는 된다고 봅니다. 월 ...
<a href="https://jacking75.github.io/tech-ai_20240822/" title="GitHub Copilot 통합으로 향상된 "Visual Studio 2022 버전 17.10"의 Git 도구 기능">GitHub Copilot 통합으로 향상된 "Visual Studio 2022 버전 17.10"의 Git 도구 기능
August 22, 2024
</a>
GitHub Copilot의 Prompt Crafting 의식하기 January 17, 2024
GitHub Copilot의 기능을 보다 편리하게 활용하는 방법. 조작 방법이나 프로그래밍 등의 활용 예 November 14, 2024
GitHub Copilot의 기능을 최대한 활용하기 위한 팁을 GitHub에서 소개 May 3, 2024
IDE에서 GitHub Copilot 사용하기 팁, 요령 및 모범 사례 April 30, 2024
KillerCoda로 Kubernetes 학습하기 October 15, 2024
Mermaid로 개발 문서 만들기 September 10, 2023
Microsoft PowerToys에 추가된 7개의 새로운 기능 August 23, 2023
OpenAI API의 QuickStart turorial 따라해보기 April 18, 2023
PDF를 원하는 언어로 번역하는 방법 December 27, 2022
Rclone을 사용하여 S3에서 Google 드라이브로 파일 전송 December 11, 2023
SkipList 설명 October 19, 2024
StableDiffusion에서 현실적인 인물 이미지를 생성하기 위한 주문 (프롬프트) 팁 모음 April 17, 2023
TOTP 완전 이해하기 October 2, 2023
UE4에 Sentry를 넣어 오류 모니터링을 간편하게 December 31, 2022
ULID에 대해서 September 27, 2021
Visual Studio에서 C++로 코파일럿 채팅을 사용하기 위한 빠른 팁 May 7, 2024
Visual Studio의 GitHub Copilot으로 코드 품질 개선하기 June 12, 2024
When the hot loop’s done. Four quick tips for high throughput May 1, 2022
Windows Sysinternals에 들어가 있는 툴 리스트 August 15, 2022
Windows에서 Stable diffusion WEB UI(AUTOMATIC1111 fork)를 실행하기 April 17, 2023
djb2 해시 알고리즘 해설 및 구현 October 8, 2024
<a href="https://jacking75.github.io/tech_20220204/" title="json 데이터를 다른 형식으로 변환 할 때 "transform.tools'라는 사이트를 추천">json 데이터를 다른 형식으로 변환 할 때 "transform.tools'라는 사이트를 추천
February 4, 2022
</a>
openai-cookbook을 VS Code에서 WSL의 Ubuntu에서 실행하기 April 19, 2023
고부하 환경에서 Fluentd를 안정적으로 운용하기 위한 3가지 관점 June 14, 2022
날짜 + 난수로 64비트 길이의 ID 생성 November 27, 2023
내가 신입사원 때 저지른 실수 10가지와 그 해결 방안 October 30, 2024
다양한 rate limit 알고리즘 March 26, 2021
다양한 배포, 테스트 전략 소개 December 15, 2022
다양한 유니크ID 생성 방법 September 26, 2021
<a href="https://jacking75.github.io/tech_0421/" title="대규모 언어 모델 "LLaMA"를 Windows PC에서 실행하기">대규모 언어 모델 "LLaMA"를 Windows PC에서 실행하기
April 21, 2023
</a>
모두가 알고 있어야할 수치 by Jeff Dean May 5, 2023
무차별 대입 공격 시 최대 암호 해독 시간 표 분석 February 26, 2022
오픈소스 분산 폴더 동기화 툴 Syncthing February 22, 2022
<a href="https://jacking75.github.io/tech_1007/" title="인텔 CPU에서 기밀 정보가 유출되는 "Downfall" 취약성, Microsoft가 경감책 해제 방법을 안내">인텔 CPU에서 기밀 정보가 유출되는 "Downfall" 취약성, Microsoft가 경감책 해제 방법을 안내
October 7, 2023
</a>
일회용 비밀번호 생성기를 만들기 November 10, 2023
초보 프로그래머를 위한 변수, 함수 이름 만드는 방법 December 16, 2022
프로그래밍 언어를 곧바로 시험할 수 있는 「플레이그라운드」 정리 (2024년) June 1, 2024
하이엔드 게이밍 PC에서 「Stable Diffusion」을 실행하면 굉장하다! 고해상도 이미지를 몇 초 만에 생성 January 24, 2023
한 걸음 앞서가는 버전 관리 asdf의 활용법 December 14, 2023
Tool (5)
WindTerm(터미널 프로그램) 소개 January 2, 2023
Windows 11에 대응한 Winaero Tweaker v1.40 숨겨진 기능 스티커도 활성화 가능 November 27, 2022
무료 화면 확대・프레젠테이션 보조 툴 ZoomIt November 11, 2022
알아두면 업무에 도움이 되는 유용한 도구 17선 September 19, 2024
<a href="https://jacking75.github.io/Tool_0506/" title="파일 복사 툴 "FastCopy"가 v5.0에서 특정 SSD 환경에서 20%~30%의 고속화를 실현">파일 복사 툴 "FastCopy"가 v5.0에서 특정 SSD 환경에서 20%~30%의 고속화를 실현
May 6, 2023
</a>
Unity (12)
Microsoft, Visual Studio Code의 Unity 확장 기능 발표, 이용 방법은? October 14, 2023
UPM(Unity Package Manager)을 통해 NuGet 패키지를 처리할 수 있는 UnityNuGet October 18, 2022
Unity - Nuget 패키지를 사용하기 December 16, 2019
Unity - PackageManager용 자작 라이브러리를 만드는 방법 December 13, 2019
Unity - Unity 프로젝트를 Git으로 관리 December 5, 2019
Unity 2020.2a 에서 사용할 수 있는 C# 8.0의 기능 January 4, 2021
Unity 2021.2에서 System.Text.Json을 사용하는 방법 October 26, 2022
Unity Technologies의 온라인 대전 FPS 게임 구현을 조사해 보았다 January 19, 2023
Unity 커스텀 패키지 작성 November 3, 2020
Unity용 HTTP/2(gRPC) Client, YetAnotherHttpHandler 공개 October 25, 2023
Unity의 불필요한 에셋 삭제 툴 April 3, 2024
게임 실행 시에 커맨드 라인 인수를 받을 수 있는 UnityCommandLineParser 소개 December 3, 2022
Visual Studio (91)
Microsoft 공식 GitHub 리포지토리를 Web판 Visual Studio Code로 여는 브라우저 확장 December 6, 2022
Rust - VS Code의 Remote Container로 Rust를 시작하기 February 21, 2020
출처 VS Code의 Remote Container 기능을 사용하여 최대한 빨리 Rust을 시작하려는 사람들에게 아래의 docker-compose.yaml 를 준비했다! docker-compose.yaml version: '3' services: rust: ...
VS - 복수의 Visual Studio를 색으로 구분하기 쉽게 하는 확장 기능 December 9, 2022
VS Code - C# Polyglot Notebooks October 16, 2023
<a href="https://jacking75.github.io/VS_code_20220121/" title="VS Code - GitHub에 설정 가능한 "VS Code에서 열기" 배지 사용하기">VS Code - GitHub에 설정 가능한 "VS Code에서 열기" 배지 사용하기
January 21, 2022
</a>
VS Code - Markdown All in One February 2, 2022
VS Code - Markdown에 목차를 자동 작성하는 방법 December 17, 2022
VS Code - Markdown을 PDF로 변환하는 방법 December 7, 2022
VS Code - MySQL Shell for VS Code의 기능 소개 December 10, 2022
VS Code - Remote Container에서 여러 개의 컨테이너를 기동하고 작업을 전환 January 8, 2021
VS Code - VS Code Server 사용 방법 December 8, 2022
VS Code - VSCode로 Linux 서버에 SSH 연결 및 개발 July 28, 2024
VS Code - VSCode에서 시퀀스 다이어그램 클래스 다이어그램 플로우 차트를 빨리 쓰고 싶다면 Mermaid Graphical Editor June 7, 2024
VS Code - Visual Studio Code 에서 원격 개발이 간편하게 ~ 원격 터널 기능 제공 개시 January 2, 2023
VS Code - code-server 구축 순서 December 19, 2022
VS Code - code-server를 사용하여 Windows에서 간단한 Linux에서 개발 환경을 얻는 방법 December 18, 2022
VS Code - 소스 코드 조각을 세련된 이미지로 만드는 Visual Studio Code 확장 Polacode November 30, 2022
VS Code - 원격 서버의 파일을 편집 January 27, 2022
VS2017 에 포함되어 있는 C++ 컴파일러 버전 매크로 March 20, 2017
VS2017 에 포함되어 있는 C++ 컴파일러의 버전 매크로는 _MSC_VER 1910 참고로 VS 2015는 1900. MSVC 런타임은 2015와 바이너리 호환. 그리고 VS 2017를 설치할 때 옵션 선택에 의해 VS 2015.3의 MSVC도 별도 추가할 수 ...
VSCode - markdown preview enhanced는 최고의 노트라고 생각한다 January 7, 2021
<a href="https://jacking75.github.io/VS_code_web_ide_coder/" title="VSCode - 브라우저에서 VS code를 사용할 수 있는 클라우드 IDE "Coder"">VSCode - 브라우저에서 VS code를 사용할 수 있는 클라우드 IDE "Coder"
January 6, 2021
</a>
Visual C++ - ConcurrencyRuntime의 Asynchronous Agents 소개 July 27, 2021
Visual C++ - 리팩터링 도구 July 12, 2024
Visual C++ - 컴파일러에 의한 링크 시 최적화(Link Time Optimization) December 17, 2020
Visual C++ Debugging - Exception Settings December 8, 2020
Visual C++ Debugging - Run To Click December 9, 2020
Visual C++ Debugging - Set next statement (다음 문 설정) December 15, 2020
Visual C++ Debugging - Show Threads in source December 15, 2020
Visual C++ Debugging - Step Into a Specific Function December 15, 2020
Visual C++ Debugging - 명령줄 인수 및 환경 변수 사용하기 December 6, 2020
Visual C++ Debugging - 스레드 중지 및 재개 December 9, 2020
Visual C++ Debugging - 커서 위치까지 실행 December 11, 2020
Visual C++ Debugging - 함수 반환 값 보기 December 14, 2020
Visual Studio - C++ 개발 관련 link 모음 May 16, 2020
Visual Studio - C++ 라이브러리 프로젝트 시작하기 September 4, 2017
Visual Studio 2017의 세번째 업데이트 버전이 얼마전에 나왔다. Visual Studio 15.3 이다(이후 또 이버전의 패치 버전이 나와서 지금은 15.3.1 이다). 기존의 Visual Studio 버전 정책과 다르게 메이저 업그레이드도 아닌데 UI 변경이 꽤...
Visual Studio - C++ 솔루션 로딩과 빌드 고속화 September 29, 2017
MSDN에 있는 글 의 번역 입니다. C++ 솔루션 로딩 고속화 C++ 프로젝트를 향해서 “신속한 프로젝트 로딩”이라는 시험적인 기능이 도입되었다. C++ 프로젝트를 처음 열었을 때의 로딩 시간을 단축하는 것으로 2번째 이후에는 더 짧아진다. 이 시험 기능을 사용하는 경우는 아래...
Visual Studio - C++ 코드 분석 시 C++ 코어 가이드 적용하기 August 18, 2017
C++ 표준 위원회에서 C++ 코딩 규칙을 만들어서 깃허브에 공유했는데 이것이 C++ 코어 가이드 이다. VS2017 에서는 코드 분석 기능을 사용할 때 C++ 코드가 C++ 코어 가이드 룰에 맞게 코딩 되었는지 분석할 수 있다. 방법은 아래 그림처럼 설정한다.
Visual Studio - Find All References (모든 참조 검색) August 14, 2017
코드 중의 변수나 함수가 다른 코드에서 어떻게 참조 되고 있는지 알고 싶을 때 ‘모든 참조 검색’을 사용한다. 단축키는 Shift + F12 이다. VS 2017에서는 이전과 다르게 검색 결과에 마우스를 올리면 해당 코드를 미리 볼 수 있다. 코드 미리 보기는 C++은 아직 되...
Visual Studio - Go To All (모두로 이동) August 16, 2017
검색 하기 원하는 단어를 선택 후 [Ctrl]+[T] 키를 누르면 아래와 같은 창에 검색 결과가 나온다. 그리고 만약 검색 단어가 타입으로 사용된 것만 찾고 싶다면 ‘t 검색어’를 입력한다. 또 멤버 변수로 사용된 것만 검색하고 싶다면 ‘m 검색어’를 입력한다. 아래 그림에서...
Visual Studio - Go To 관련 키보드 단축키 September 25, 2017
VS에서 코딩 혹은 코드를 분석할 때 Go To 관련 단축키를 기억하고 있어서 편리하다. Go To 관련 키보드 단축키
Visual Studio - JSON, XML 데이터 붙여 넣기로 클래스 만들기 November 20, 2017
소스 코드에 JSON, XML 포맷의 데이터를 붙여 넣기를 할 때 붙여 넣을 데이터 구조에 맞는 클래스를 생성할 수 있다. 이 기능은 C#에서만 사용할 수 있다. 어떻게 사용하는지 아래 그림을 참고하기 바란다. 출처: Did you know – You can automat...
Visual Studio - Lightweight Solution Load August 28, 2017
Lightweight Solution Load를 활성화 하면 프로젝트 지연 읽기를 할 수 있다. (프로젝트 로딩 시 전체 솔루션이 로딩 다 되지 않아도 활성화 되면서 순차적으로 솔루션을 로딩한다. 즉 모든 솔루션이 로딩 될 때까지 대기하지 않을 수 있다) 이 기능은 솔루션에는 수 ...
Visual Studio - Nuget 패키징 포맷이 packages.config 뿐만이 아닌 PackageReference도 사용 가능 November 10, 2017
Nuget으로 라이브러리를 설치하면 기존까지는 packages.config 파일이 만들어지면 이 파일에 관련 정보가 들어가 있었다. 그러나 VS2017부터는 .NetCore에서 사용 하는 방식처럼 PackageReference도 사용할 수 있다. PackageReference를 사...
Visual Studio - Productivity Power Tools November 24, 2017
이전 버전의 Productivity Power Tools는 복수의 확장 기능을 모은 패키지로 제공되고 있었지만 VS 2017용 Productivity Power Tools에서는 아래의 기능이 개별 확장 기능으로서 VS Marketplace에서 배포된다(VS 2017의 [도구]-[확...
Visual Studio - Structure Guidelines September 20, 2017
Visual Studio 2017 에서 추가된 기능이다. 한국어로는 ‘구조 안내선 표시’ 라고 한다. 이 기능은 코드 블록 구조에 맞추어 에디터에 세로 선이 표시된다. 이 세로 선에 커서를 맞추면 그 블록의 모든 부모 블록을 나타내는 힌트가 팝업 표시된다. (본인만의 문제인지 ...
Visual Studio - VC++ 의 디버그 모드 실행이 느린 경우 빠르게 하기 November 13, 2017
VC++에서 디버그 모드로 실행할 경우 프로그램 실행 속도가 엄청나게 느려질 수 있다. (특히 PC 온라인 게임 클라이언트) 이런 경우 컴파일러 옵션을 조정해서 실행 속도를 올릴 수 있다. 디버그 모드에서는 최적화 옵션이 off로 되어 있는데 이것을 on으로 한다. 그런데 최적화...
Visual Studio - VS2017의 성능 강화 July 24, 2017
프로젝트의 읽기를 경량화 하고, 로딩 시간을 단축: 100 종류등 많은 프로젝트가 포함 되어 있는 솔루션에서는 모든 파일이나 프로젝트가 동시에 사용되지 않는다. VS 2017에서는 모든 프로젝트를 읽기 전까지 기다리지 않고 편집과 디버깅을 시작할 수 있다. 확장 기능의...
Visual Studio - Visual Studio 2019 v16.8의 터미널의 새로운 기능 March 21, 2021
Visual Studio - Visual Studio에서 버전 관리할 필요가 없는 파일을 정의한 .gitignore October 15, 2018
출처 ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## ## Get latest from https://github.com...
Visual Studio - cpplint 사용하기 March 28, 2017
cpplint ? cpplint는 python으로 만든 C++ 소스 코드가 Google C++Style Guide를 지키고 있는지 검사하는 툴이다. cpplint 설치 python 2.7에서 pip로 설치한다. Visual Studio에 외부 툴로 cppl...
Visual Studio - editorconfig 사용하기 November 27, 2017
VS 2017에서는 프로젝트 마다 혹은 프로젝트의 특정 폴더마다 에디터 설정을 바꾸기 원한다면 .editorconfig 파일을 사용한다. VS 2015에서는 이와 동일한 기능을 사용하려면 플러그인을 사용해야 했으나 2017에서는 기본 기능으로 들어왔다. .editorconfig ...
Visual Studio - 개행 코드 설정 방법 February 14, 2020
.editorconfig 파일을 만들면 쉽게 할 수 있다. .editorconfig 파일 [*] end_of_line = lf charset = utf-8-bom end_of_line 에서 개행 코드를 LF 지정으로 한다. Visual Studio는 Bom 있는 UTF-8로 ...
Visual Studio - 괄호를 잊었을 때를 위한 편리한 확장 기능을 Microsoft 직원이 공개 August 12, 2023
Visual Studio - 구성 요소 추가하기 July 31, 2017
VS를 설치 후 추가로 구성 요소를 설치하고 싶다면 아래와 같이 하면 된다. (추가 구성 요소 예로는 MFC 라이브러리 추가 하기 등) VS 실행 후 새 프로젝트 선택 후 아래 창에서 왼쪽 아래의 ‘Visual Studio 설치 관리자 열기’를 선택한다. 설치하고 싶은 요소...
Visual Studio - 글 링크 모음 March 11, 2020
Visual Studio - 더 편리해진 시작 페이지 August 3, 2017
시작 페이지는 VS를 시작하면 첫 화면에 나오는 페이지다. 이 페이지의 유용성 향상은 VS 2015에서 시작되었고 VS 2017에서 더 향상 되었다. 최근에 사용한 항목이 페이지 왼쪽에 크게 표시 페이지 중앙부에서는 VSTS와 GitHub 등의 저장소에서 코드 가져 오기 ...
Visual Studio - 동일 파일 탭을 복수로 열기 January 23, 2024
Visual Studio - 디버깅 기능 모음 December 28, 2017
Visual Studio의 디버깅 기능을 정리하는 글이다. 앞으로 이 글에 계속 업데이트 한다. 7 More Lesser-known Debugging Tactics for Visual Studio
Visual Studio - 디버깅 모드에서 역어셈블리 코드 보기 November 3, 2017
VC++ 에서는 디버깅 모드에서도 역어셈블리 코드를 볼 수 있다. 메뉴에서 “Debug” -> “Windows” -> “Disassembly”를 선택한다. 역어셈블리 코드 창이 나타난다. 이 화면을 보면 코드 바이트는 표시되지 않고 있다. 코드 바이트를 보고 싶다...
Visual Studio - 리팩토링 제안 October 10, 2017
VS2017에서는 리팩토링 기능이 강화되었다. 내가 만든 코드를 더 좋은 코드로 바꿀 수 있도록 새로운 코드를 제안해준다. 이 기능은 C#과 Visual Basic 에서 사용할 수 있다. 출처: http://codezine.jp/article/detail/9861?...
Visual Studio - 모든 프로젝트의 디렉토리 설정 October 16, 2017
VS2008까지는 ‘도구’ – ‘옵션’ 메뉴를 통해서 VC++ 디렉토리를 설정하였다. 이렇게 설정한 정보는 모든 VC++ 프로젝트에 적용된다. 그러나 VS2010에서는 각 프로젝트 별로 VC++ 디렉토리를 설정한다. 각 프로젝트 마다 독립적으로 설정을 할 수 있어서 편한...
Visual Studio - 새로운 솔루션을 만들 때 생성되는 기본 위치 변경하기 March 13, 2020
Visual Studio - 설치 중인 확장 프로그램 May 2, 2019
viasfora url: https://viasfora.com/ 여러 기능이 있지만 가장 큰 기능은 ‘Rainbow Braces’ 이다. 이 기능을 사용하면 괄호를 중첩할 때 색을 다르게 표시하므로 중첩된 괄호를 구분하기 쉽다. 동작을 보고 싶다면 여기...
Visual Studio - 성능 관리 August 10, 2017
VS 2017의 부팅 속도 및 솔루션 로드, 코드 편집에 악 영향을 미치는 확장 기능의 감시 기능의 도입되었다. (본인도 이전에 확장 기능 설치 후 VS의 시작이 엄청 느려져서 확장 기능을 하나씩 삭제하면서 문제 있은 확장 기능을 찾았다) 성능이 낮은 확장에 대한 통지가 온다. ...
Visual Studio - 솔루션 탐색기에 있는 폴더 중 이 폴더 안의 파일만 표시하기 August 25, 2017
Visual Studio - 업데이트 등에서 에러가 발생했을 때의 대처 방법 September 13, 2017
Open an elevated command prompt. Run: %ProgramFiles(x86)%\Microsoft Visual Studio\Installer\resources\app\layout\InstallCleanup.exe -i 위 조...
Visual Studio - 인텔리센스 필터링(IntelliSense filtering) September 22, 2017
IntelliSense는 카테고리 마다 일련의 값을 압축함으로써 새로운 API를 재 빠르게 참조할 수 있는 필터링 기능이다. 이 기능을 사용하면 필요한 변수를 많은 타입 속에서 찾아낼 필요가 없어진다. 아래 스크린 샷은 필터를 사용하여 C++ 코드 파일의 IntelliSense의 ...
Visual Studio - 일괄 빌드 November 30, 2020
Visual Studio - 일치한 부분 강조 표시(Match highlighting) October 20, 2017
VS2017 에서는 C++은 미 지원. 결과를 빨리 얻기 위해서 카멜 케이스 매칭(한 묶음으로 한 합성어의 각 대문자를 입력하여 보완) 등을 할 경우 아이템이 어느 부분에서 일치하는지 판단하기 힘들다. C#, VB, JavaScript, TypeScript의 IntelliSens...
Visual Studio - 자주 사용하는 단축키 March 30, 2017
문자 검색/치환 Ctrl+F: 문자 검색 Ctrl+H:문자의 치환 직사각형 선택 Alt 키를 누른 상태에서 마우스로 원하는 직사각형 모양의 범위를 만든다. 자동 인덴트(indent) Ctrl+K, Ctrl+D: 파일 전체의 인덴트 조정 Ctrl+K, Ctrl...
Visual Studio - 참조 어셈블리와 NuGet 패키지의 타입의 using/Imports를 추가 October 23, 2017
인식되지 않는 타입이 입력된 경우 참조 어셈블리와 NuGet.org를 검색하여 using/Imports를 추가하도록 간단한 수정을 제안한다. 이 기능은 default로는 무효로 되어 있다. 유효화 하려면 [Tools]-[Options]-[Text Editor]-[C#] 또는 [B...
Visual Studio - 커스텀 템플릿 만들기 November 6, 2017
게임 개발에 사용할 프로젝트가 틀이 잡혔다면 다음에도 이와 비슷하게 프로젝트를 만들어서 사용하기 위해 커스텀 템플릿을 만들어서 사용하면 좋다. 먼저 커스텀 프로젝트를 만들 프로젝트는 기본적인 것들만 있도록 정리한다. 이후 아래와 같이 템플릿을 만든다.
Visual Studio - 클래스나 함수 정의 간에 구분선을 표시하는 방법 December 1, 2020
Visual Studio - 툴 박스에 코드 보관하기 April 14, 2017
VS의 툴박스에 특정 코드를 보관하고, 이 코드를 선택하여 코딩 시 삽입할 수 있다. 툴박스에 보관하기 바라는 코드를 마우스로 선택 후 툴박스로 드래그 한다. 위에서 드래그한 코드가 툴박스에 들어가 있는 것을 볼 수 있다. 추가한 코드를 마우스 오른쪽 클릭하면 삭제, 수정 ...
Visual Studio - 파일 인코딩 형식을 지정해서 저장하는 방법 September 18, 2017
VS2017 에서는 VS2015 때와 비교해서 파일 인코딩 형식을 바꾸어서 저장하는 방법이 조금 바뀌었다. 하는 방법은 아래 그림을 참고 한다.
Visual Studio - 폴더(디렉토리) 선택으로 열기 July 27, 2017
VS 2017 이전에는 VS 솔루션 파일이 소스 파일은 VS에서 사용할 수 없었다. VS에서 사용하려면 새로 솔루션을 만든 후 수동으로 소스 파일들을 추가해야 했다. 그러나 VS 2017의 새로운 기능으로 폴더 선택 열기만으로 솔루션 파일이 없는 소스 파일들을 사용할 수 있다. ...
Visual Studio - 확장 툴 Code alignment October 25, 2017
Test.dsdsds = 10; Test.ds = 10; 이런 코드가 있을 때 아래처럼 = 중심으로 코드를 정렬하고 싶을 때가 있을 것이다. Test.dsdsds = 10; Test.ds = 10; 이런 것을 Visual Studio의 확장 툴인 ‘Code alignm...
Visual Studio 2019 버전 16.6의 새로운 Git 기능 November 27, 2020
Visual Studio 2019에서 자동 코드 포맷 November 23, 2020
Visual Studio 2022 17.4 의 새로운 생산성 향상 기능과 로그 타임 스탬프, 오디오 큐 등을 구현 January 4, 2023
Visual Studio C++ - Edit and Continue December 3, 2020
Visual Studio C++ - 디버그,릴리즈 정보 파일 생성 December 7, 2020
Visual Studio C++ - 빌드 고속화 방법 정리 December 4, 2020
Visual Studio Code - C++ 관련 link 모음 May 16, 2020
Visual Studio Code - 관련 link 모음 May 16, 2020
Visual Studio 디버깅 관련 link 모음 May 16, 2020
Visual Studio 에 드디어 차분 표시(Diff) 구현 January 5, 2023
Visual Studio 제거하기 March 15, 2017
MS가 만든 Visual Studio Uninstaller를 사용하여 제거하는 것이 좋다. 설치 파일은 아래 링크에서 얻을 수 있다. 다운로드 사용법 다운로드 -> 압축 해제 -> Setup.ForcedUninstall.exe 실행 -> 질문에 Y 답변 콘솔 ...
Visual Studio 확장 개발 관련 link 모음 May 16, 2020
Visual Studio 확장앱(VS Add-on) 관련 link 모음 May 16, 2020
Visual Studio의 동작을 빠르게 하는 방법 November 24, 2020
WSL (11)
WSL - GUI 설정 앱을 추가 2024년 5월 개선 August 9, 2024
WSL - Ubuntu(WSL2)에 PHP8 설치 September 22, 2021
WSL - WSL2의 Ubuntu 또는 일부 스토리지 사용량을 줄이는 방법 April 24, 2023
WSL - WSL에서 프로그램 설치에 Homebrew 사용하기 December 30, 2022
WSL - WSL의 이미지 (ext4.vhdx)가 비대화 되었을 때의 대처 November 26, 2022
WSL - Windows 10에서 우분투 22.04 PC에 원격 액세스 September 28, 2022
WSL - Windows Server의 WSL에서 Docker 컨테이너 동작시키기 December 28, 2022
WSL - Windows Subsystem for Linux v2.0.0 다양한 테스트 기능 추가 October 10, 2023
WSL - windows11의 wsl2 초기 설정 요약 April 29, 2023
Windows - UBUNTU on WSL2를 초기화(Reset) 하기 February 8, 2022
Windows - Windows 앱에서 WSL2의 파일을 읽고 쓰기 December 8, 2021
docker (12)
docker - Docker Playground를 이용하여 웹브라우져만으로 Docker 학습하기 November 12, 2022
docker - PHP 개발 효율화! VSCode + Docker에서 Xdebug를 사용해 보자 September 23, 2021
docker - SonarQube를 Docker에서 실행하여 Node.js 프로젝트를 스캔하기(정적분석) December 29, 2022
docker - Windows 11에 Rancher Desktop을 설치하고 VSCode에서 Docker 사용하기 April 23, 2024
docker - Windows PC에서 Docker Desktop을 이용하지 않고 Docker 사용하기 March 27, 2022
docker - Windows에서 Docker 환경을 바꿨다 (Docker Desktop → Rancher Desktop) April 23, 2023
docker - docker-compose에서 OS 시작 시에 컨테이너를 자동 시작하는 방법 December 16, 2021
docker - docker로 파일 서버 구축 December 26, 2022
docker - 경량 VM 관리자 Multipass 사용하기(Docker 포함) September 22, 2022
docker - 언제든지 다시 만들 수 있는 로컬 DB(mysql) 만들기 October 23, 2022
docker - 코드 공유를 위한 Docker Desktop 모범 사례 September 22, 2022
docker - 코드 공유를 위한 Docker Desktop 모범 사례 September 1, 2022
etc (7)
GitHub Awards January 31, 2017
개요 Github 계정을 갖고 있다면 “GitHub Awards” 라는 Web 서비스를 사용할 수 있다. 자신의 레포지토리에 붙여진 “스타”의 수를 기준으로 전 세계 GitHub 사용자 중 자신의 “랭킹 순위”를 알 수 있다. http://github-awards.com...
GitHub의 markdown 문법의 코드 블럭에서 문법 하이라트 가능한 언어 리스트 August 23, 2017
Github의 markdown 에서 코드를 기술할 때 ``` ``` 라는 블럭으로 코드를 감싼다. 여기에 더해서 코드 블럭에 있는 코드의 문법 하이라이트 기능을 사용하고 싶다면 해당 언어 키워드를 적으면 된다. swift의 경우는 아래와 같다. ```Swift ``` ...
Microsoft MVP가 되었습니다 April 3, 2017
Microsoft MVP 몇 년 전에 2009,2010,2011년 3년 연속으로 Visual C++ 부분 MVP로 선정된 적이 있습니다. 그러나 2012년부터는 MVP 신청을 하지 않았습니다. 이유는 당시에는 MVP 자격 조건이 MS 제품만을 다루고, MS가 운영하는 포럼에 답...
editorconfig 파일 May 16, 2018
이것으로 프로젝트 디렉토리에 .editorconfig 파일을 준비해 두면 설정이 적용된다. (Visual Studio, Atom 등 유명 에디터에서 지원하고 있다) 즉 git의 관리 대상으로 하면 프로젝트에서 통일 시킬 수 있다. .editorconfig 파일의 예 # Edit...
본인이 집필한 C++ 책 리스트 February 2, 2017
본인이 집필한 C++ 책 리스트. 모두 e-Book 이다. eBook 모던 C++ : C++14의 핵심 기능을 중심으로 (한빛미디어) 2015.03.31 eBook 당신의 프로그래밍에 디버깅 더하기 : Visual C++ 디버깅 기초에서 고급까...
이 블로그의 rss 피드 주소 December 15, 2016
나처럼 Feedly 서비스를 사용 중이라면 피드 추가에 이 블로그 url을 입력하면 된다. 이 블로그 주소로 rss 리더에 등록 되지 않는다면 아래의 주소를 사용해 보기 바란다. https://jacking75.github.io/feed.xml
티스토리 블로그에서 이사 December 14, 2016
네이버 블로그 -> 티스토리 블로그를 걸쳐서 이번에는 깃허브로 왔다. 티스토리에 있는 블로그 주소는 http://jacking.tistory.com/ 이다.
threading (7)
Cache Coherence July 19, 2017
QPI(퀵패스 인터커넥트) 출처: http://www.slideshare.net/kumagi/ss-40688480
Lockless Programming Considerations for Xbox 360 and Microsoft Windows July 17, 2017
Lockless Programming Considerations for Xbox 360 and Microsoft Windows 라는 글의 결론 플랫폼 별 동작 차이 InterlockedXxx 함수에서 CPU에 의한 읽기/쓰기 순서 변경을 방지할 수 있는 것은 Windows로...
cache coherence August 3, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
lock-free 알고리즘 - 순차일관성 June 16, 2017
순차일관성(sequential consitency)이란? 순차일관성은 컴퓨터 시스템에 관한 메모리 일관성 모델의 하나이며 정의를 Wikipedia에서 인용하면 “어떤 실행 결과도 모든 프로세서가 어떤 순서로 차례적으로 실행한 결과와 동일하며, 또한 각각의 프로세서의 처리 순서가 프...
데이터 경합(data race)와 경합상태(race condition)는 다르다 August 2, 2020
몇 년전에 웹에 공개된 글을 보고 정리했던 글이다.
병렬프로그래밍 - SMP(Symmetrical Multi Processing) 와 AMP(Asymmetrical multi processing) April 24, 2017
참고 http://monoist.atmarkit.co.jp/mn/articles/0812/18/news123_2.html
병렬프로그래밍 - 호모지니어스 CPU와 헤테로지니어스 CPU May 8, 2017
참고 http://monoist.atmarkit.co.jp/mn/articles/0812/18/news123_2.html
강연 (2)
C++ Korea 8회 세미나 March 21, 2021
C++ Korea 8회 세미나는 온라인으로 열렸다. 나는 이번에 POCO 라이브러리를 사용한 채팅 서버 개발 이라는 제목으로 발표 하였다. 영상 - 유튜브 발표 자료 질문답
클라이언트 게임 개발자를 위한 소켓 프로그래밍 기초에서 활용까지 January 24, 2021
온라인으로 열렸던 [.NET Conf 2021 x Seoul] 중에서 제가 발표한 영상입니다. 문서 닷넷데브에 가면 더 많은 .NET 관련 강연 영상을 볼 수 있습니다.
모임 (22)
.NET Conf 2019 Seoul September 25, 2019
세미나 소개 및 신처 10월05일입니다. 저는 마지막 시간인 16시 10분 - 18시 00분 (110분) : SuperSocket을 이용하여 .NET Core 플랫폼에서 고성능 TCP Socket 서버 만들기 입니다. 실습 세션으로 SuperSocket에 대해서 핵심적인 부분을 ...
2017년 03월 ‘온라인 서버 제작자 모임’ 정기 세미나 March 26, 2017
한국 MS의 멜팅팟 프로그램 지원을 받고 온라인 서버 제작자 모임 에서 3월 정기 모임을 합니다. 날짜: 3월 30일 (목) 19시 30분 ~ 21시 30분 장소: 토즈 강남점 내용 최흥배: 해외 강연 해설 ‘여기까지 할수 있다! Visual Studio 2015-...
2017년 04월 ‘온라인 서버 제작자 모임’ 정기 세미나 April 20, 2017
한국 MS의 멜팅팟 프로그램 지원을 받고 ‘온라인 서버 제작자 모임’에서 4월 정기 모임을 합니다. 날짜: 4월 26일(수요일) 19시 30분 ~ 21시 30분 장소: 토즈 강남점 내용 Visual Studio 2017 Linux development with C++ (최...
Boost보다 쉽고 빠른 POCO C++ 라이브러리로 채팅 서버 개발하기(9/16) September 1, 2017
9월 16일 토요일에 ‘POCO 네트워크 프로그래밍’을 주제로 강연을 합니다. 실습도 같이 하기 때문에 오전 10시~18시까지 합니다. POCO를 사용한 네트워크 프로그래밍을 빨리 배우기 원하는 분들에게 좋을 것 같습니다. 그리고 네트워크 프로그래밍을 잘 모르는 분들을 위해 관련 ...
C#으로 대규모 모바일 게임 서버 만들기- ASP.NET Web API와 NoSQL January 25, 2018
작년에 할 예정이었던 강의이었지만 수강자 부족으로 열리지 못했습니다. (작년에 하반기 예정했던 강의가 수강자 부족으로 모두 열리지 못했습니다) 제가 Next에서의 계약이 끝나서 구직 중이라 지금 잠깐 시간이 날 때 강의를 하려고 합니다. 유료 강의는 진행하기 쉽지 않은 것 같아서...
C#으로 대규모 모바일 게임 서버 만들기- ASP.NET Web API와 NoSQL(8월31일) August 9, 2017
8월 31일에 2년만에 이전에 했던 ‘C#으로 대규모 모바일 게임 서버 만들기’라는 제목으로 세미나를 진행합니다. 시간의 흐름에 따라서 당연하지만 이전에 했던 것과 내용에 변경이 있습니다. 이전에는 WCF를 게임 서버 프레임워크로 사용했다면 이번에는 ASP.NET Web AP...
C#으로 대규모 모바일 게임 서버 만들기- ASP.NET Web API와 NoSQL(8월31일) August 1, 2017
8월 31일에 2년만에 이전에 했던 ‘C#으로 대규모 모바일 게임 서버 만들기’라는 제목으로 세미나를 진행합니다. 시간의 흐름에 따라서 당연하지만 이전에 했던 것과 내용에 변경이 있습니다. 이전에는 WCF를 게임 서버 프레임워크로 사용했다면 이번에는 ASP.NET Web AP...
C++ Korea 2월 미니 세미나 February 15, 2020
세미나 소개 강연 자료 C++를 이용한 Redis 프로그래밍 라이트닝 토크: IOCP 학습을 위한 단계별 실습 소개
C++ Korea 제6회 세미나에서 강연을 합니다. September 23, 2019
세미나 소개 및 신처 9월29일입니다. 저는 마지막 시간인 15시 50분 - 17시 00분 (70분) : 세션 5 입니다. 세션 5 : 채팅 서버 개발로 알아보는 C++의 기능들 IOCP를 사용한 채팅서버를 재료로 하여, IOCP 간단 소개 후 네트워크 라이브러리와 채팅 서버를...
NDC 2018 go로 네트워크 프로그래밍 하기 강연 자료 April 26, 2018
NDC 2018. 4/24일에 강연한 ‘ go로 네트워크 프로그래밍 하기’의 강연 자료입니다. https://github.com/jacking75/conf_ndc_2018 25분짜리 강연이고, 초급자 대상이라 초급 레벨을 넘은 사람에게는 도움 안됩니다. go 공부로는 2년 전부...
강의 - IOCP를 이용한 비동기 IO 네트워크 프로그래밍 November 23, 2018
일시: 2018년 12월 6일(목) 15시~18시(3시간) 주제: IOCP를 이용한 비동기 IO 네트워크 프로그래밍 유료: 토즈에서 공간을 대여하므로 공간 비용을 내야 합니다. Windows에서 IOCP를 사용하여 서버 프로그램을 만드는 방법을 설명합니다. 3시간이라는 시간이 길...
네트워크&게임 서버 프로그래밍 강의를 계획 하고 있습니다. December 17, 2017
제게는 큰 기술은 아니지만 다른 사람에게는 필요한 기술은 가능하면 공유하려고 합니다. 그래서 2018년 1월부터 네트워크와 게임서버 프로그래밍(프로그래밍 언어는 C++, C#) 중심으로 강의를 할 예정입니다. 교육 기관에서 하는 것이 아니고 개인적으로 하는 것이라서 강의비를 받지...
네트워크&게임 서버 프로그래밍 배우기 - 1 December 20, 2017
온오프믹스에 모임 개설했습니다. 신청 에서 하시면 됩니다.
네트워크&게임 서버 프로그래밍 배우기 - 2 January 9, 2018
온오프믹스를 통해서 참가 신청 받고 있습니다. 신청하기 이 모임에 대한 설명
네트워크&게임 서버 프로그래밍 배우기 - 3 January 22, 2018
온오프믹스를 통해서 참가 신청 받고 있습니다. 신청하기 이 모임에 대한 설명
네트워크&게임 서버 프로그래밍 배우기 - 4 February 9, 2018
온오프믹스를 통해서 참가 신청 받고 있습니다. 신청하기 3회와 같은 내용으로 채팅 서버 실습을 합니다. 3회에 참석하지 못한 분들은 참석해서 모르는 부분 질문 해주세요. 이 모임에 대한 설명
네트워크&게임 서버 프로그래밍 배우기 - 5 February 26, 2018
온오프믹스를 통해서 참가 신청 받고 있습니다. 신청하기 5회에는 IOCP에 대해서 설명하고, echo 서버를 만들어볼 예정입니다. 이 모임에 대한 설명
네트워크&게임 서버 프로그래밍 배우기 - 6 March 22, 2018
온오프믹스를 통해서 참가 신청 받고 있습니다. 신청하기 6회에서는 IOCP 코드 분석 및 실습입니다. 이 모임에 대한 설명
네트워크&게임 서버 프로그래밍 배우기 - 7 April 8, 2018
신청 시간: 4월 15일 (일) 10시 00분 ~ 12시 00분 장소: 투썸플레이스 낙성대역점 이론 공부는 어느 정도 했기 때문에 토즈와 같은 장소를 빌리지 않고 카페에서 모여서 각자 코딩을 하면서 막히는 부분이 있으면 저에게 질문하거나, 참석한 분들과 상의하면서 네트워크 라이...
모임 - (비정기)실용 Modern C++ 스터디 April 18, 2023
4월 27일 19:15~20:00 온라인 주제: C++ 20 module: #include 에서 import로 신청
모임 - 게임 서버 개발자 학습 및 취업 멘토링 January 1, 2023
안녕하세요 신입 온라인 게임 서버 프로그래머가 되기 위한 분들을 대상으로 무엇을, 어떻게 공부해야 하는지 취업 준비는 어떻게 해야 하는지 등을 주제로 온라인으로 멘토링을 하려고 합니다. 1명이라도 신청자가 있으면 1월 5일 22:30분에 시작합니다. 진행 시간은 1시...
스터디 - 신입 게임 서버 프로그래머 학습 모임 February 18, 2019
신입 게임 서버 프로그래머를 목표로 하는 분을 도와 드리려고 하다가 이왕 하는 것 좀 더 많은 분들을 도와 드리면 좋을 것 같아서 모임을 만들기로 했습니다. 게임 서버 프로그래머가 되기 위해서 어떤 것을 공부해야 할지 잘 모르는 분들에게 제가 어떻게 공부하고 어떻게 포토폴리오를 만...
번역 (21)
(일본)임베디드 개발자가에 인기 있는 언어와 OS February 7, 2017
일본의 ‘fabcross for 엔지니어’ 라는 곳에서 제조업에서 임베디드 관련 프로그래밍을 하는 엔지니어를 대상으로 한 설문 조사에서 업무에서 자주 사용하는 언어는 C (36 %) C++ (32.5 %), Java (23.5 %), Visual Basic (21...
Amazon S3의 대규모 장애는 인위적 실수가 원인 March 6, 2017
미국 Amazon.com의 클라우드 사업 Amazon Web Services(AWS)는 “Amazon Simple Storage Service(S3)”서비스에서 발생한 대규모 장애에 관한 조사 보고를 현지 시간 2017년 3월 2일 공개하면서 인위적 실수가 원인이었음을 밝혔다. ...
C 언어의 현대화를 목표로 하는 C2 March 25, 2018
원문 C2는 부트 로더, 커널, 드라이버, 시스템 레벨의 도구와 같은 저 레벨 프로그램에 적합한 C 언어의 진화를 목표로 하는 새로운 프로그래밍 언어이다. C2의 기본 이념은 C 언어의 좋은 부분을 유지하면서 40년 이상을 거친 옛 언어 부분을 버리는 것에 있다고 작자 Bas ...
C/C++에 죽음을 July 20, 2017
역자주: 제목이 자극적이라서 보았는데 핵심은 Rust 사용하자는 글이다. 그런데 아직은 Rust의 개발 환경은 덜 만들어져서 시기 상조라고 생각된다. 프로그래밍 언어 C는 역겹다. 물론 훌륭함 것도 있다. 우리가 사는 세계의 대부분은 C 위에 만들어졌다. 그리고 대부분의 컴퓨터 ...
CTO에게 중요한 3가지 스킬 April 12, 2018
원문 읽는 것: 나는 언제나 날듯이 빠르게 읽어 왔다. 이것은 좋은 일이기도 했다. 왜냐하면 이제 읽어야 할 필요가 있기 때문이다. 기계 학습 논문과 Github의 README, API 문서, 그리고 테크니컬 튜터리얼. 야심적인 설계 문서와 고객의 요청서. e메일과 Slack의 ...
FASTER에 대해서 November 18, 2018
원문 KVS 라이브러리 내장 KVS로 사용이 가능 프로세스간 스토리지 공유는 상정하지 않는 듯? 메모리 이상의 DB 크기를 설정 가능(메모리 + 파일 읽기 및 쓰기) LiteDB와 다소 영역이 겹칠 수도(최종 목표는 다르지...
Google에서 3DCG를 위한 압축 라이브러리 「Draco」를 GitHub에 공개 February 8, 2017
https://github.com/google/draco Chrome Media팀이 개발한 압축 라이브러리로 ZIP 형식보다 효율적으로 데이터 압축을 실행할 수 있는 오픈 소스이다. 압축한 Mesh 파일의 크기 100MB 일 때 ZIP으로는 30MB 이지만, Draco에서는 10...
ISO 드래프트 종류 September 4, 2017
새로운 C++ 표준이 만들어 질 때 공개되는 문서에 ISO 드래프트 라는 단어가 나오는데 이 ISO 드래프트 종류에 대한 간단한 설명이다. 발행까지 6 단계이다. Proposal stage 만들고 있는 규격이 정말 필요한지 확인. Prepar...
LLVM 이란? March 27, 2018
원문 LLVM 프로젝트는 모듈러와 재이용 가능한 컴파일러와 툴 체인 기술의 집합이다. 이 이름에도 불구하고 LLVM은 기존 VM과는 거의 관계가 없다. LLVM이라는 이름은 머리 글자를 딴 것이 아니라 프로젝트 이름이다. LLVM은 모던하고 SSA 베이스한 임의의 프로그래밍 언...
Microsoft가 클라우드 게이밍 서비스 PlayFab을 인수하여 Azure에 통합 January 31, 2018
원문 Microsoft가 PlayFab를 인수했다. 이것은 개발자들에게 간단한 백 엔드 서비스를 제공하고 타이틀의 기동을 재빨리 할 수 있도록 하는 서비스이다. Microsoft의 Azure 게임 그룹에 통합될 예정이다. 시애틀에 본거지를 둔 이 회사는 투자자로부터 약 1300...
WCF와 ASP.NET Core의 성능 비교 April 14, 2018
원문 Microsoft는 ASP.NET Core 개발에 많은 시간과 개발 능력을 지출했다. 그 결과, 새로운 기능을 가진 오픈 플랫폼이 탄생하고, 큰 개발자 커뮤니티와의 오픈된 노력에서 혜택을 받아왔다. ASP.NET Core는 WCF(Windows Communication Fo...
번역 - CPU에 관한 이야기 May 31, 2020
3,4년 전쯤에 번역했던 것을 공유한다
여성 게이머가 가장 좋아하는 장르 February 10, 2017
해외 컨설팅 기업 Quantic Foundry는 27만명 이상의 세계 게이머를 대상으로 조사 하여 “여성 게이머들이 좋아하는 게임 장르” 라는 리서치 결과를 보고했다. Quantic Foundry의 보고에 따르면 27만명 이상의 샘플 중 여성 게이머는 18.5% 정도이고, 조사 ...
영어로 기술 문의를 할 때의 영작문 Tips January 5, 2018
첫 번째: 자신이 하고 싶은 것과 문제를 간결하게 설명한다 영어는 짧고 알기 쉽게 간단하게 설명하는 것이 매우 중요하다. 나는 가급적 직접 만든 템플릿에 맞추어 자신의 하려고 하는 것과 발생한 문제를 설명하도록 한다. I tried to $자신의 하고 싶은 일 however $일...
초보 프로그래머를 위한 9가지 조언 March 8, 2017
항상 하나의 일에 집중한다 나는 새로운 것을 배울 때는 언제든지 할 일을 분해하고 임한다. 프로그래밍을 할 때 작업에 따라서는 복잡하게 구조화하여 생각하는 것이 있을 것이다. 1개의 태스크를 소화하기 위해서도 다양한 방법이 있고 선택하는 것만으로 방황한다. 다만 무엇...
프로그래밍 어록 - Microsoft에서(또는 다른 곳에서) 일하기 위한 10가지 힌트 May 11, 2017
Omar Shahine 프로세스는 사고의 대용이 되지 않는다. 사무실에만 있지 않는다. 자신의 제품을 사용한다(당신의 고객이 사용하도록). 뭔가가 고장 나고 있으면 불평만 하지 않고 고친다. 행동은 불평보다 웅변이다. 어려운 문제를 쉽게 보이도록 한다. 간단한...
프로그래밍 어록 - egoless programming 10계명 May 11, 2017
Gerald Marvin Weinberg의 “The Psychology of Computer Programming” 에서 자신이 잘못을 저지른다는 것을 이해하고 받아들이기. 자신과 자신의 코드는 별개이다. 아무리 “가라데”를 배워도 언제든지 당신보다 더 잘 아는 사...
프로그래밍 어록 - 소프트웨어 프로젝트 실패의 10가지 징후 May 11, 2017
http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=a76eab63-70f0-48b4-8b75-66c366a651cd 첫번째 버전에서 너무 많은 것을 하려고 한다. 확립되지 않은 기술에 크게 의존하고 있다. 조직의 주 수입...
프로그래밍 어록 - 안드레 테일러의 10년간의 소프트웨어 개발에서 배운 10가지 May 11, 2017
http://www.globalnerdy.com/2007/03/22/andres-taylor-top-ten-things-ten-years-of-professional-software-development-has-taught-me/ 에서 객체 지향은 생각보다 어렵다. 소프...
함수의 적절한 길이는? 마틴 파울러씨는 길이보다 의도와 구현 분리 그리고 좋은 함수 이름이 중요하다고 지적 February 22, 2017
FunctionLength 내 경력에서 함수의 길이는 어느 정도여야지? 라는 논란을 자주 들었다. 이것은 더 중요한 물음으로 대체할 수 있다. 그것은 어느 정도 길이의 코드가 되면 그것을 함수로 삼아야 하느냐는 것이다. 몇 가지 가이드 라인에서는 한 화면에 잡히지 않는다면, 이...
해외 게임 업계의 아웃소싱 May 15, 2017
여러 인기 작품에 관련있지만 아무도 모르는 게임 회사 Blizzard Entertainment의 인기 작품 “오버 워치”를 조사하고 있을 때 어떤 게임 업체 사이트에 맞닥뜨렸다. 회사 이름은 SuperGenius로 사이트의 톱 페이지에는 “오버 워치”의 친숙한 아트 워크가 큼직하게...
사례 (12)
CEDEC 2017 모두의 골프에서의 멀티 플레이 대전 소개 December 29, 2019
CEDEC 2017 뱅드림에서 포톤 채용사례 December 30, 2019
Call of Duty가 기계학습을 사용하여 플레이어의 전투를 개인화 하는 방법 March 18, 2020
Girl AX에서의 실시간 통신 처리의 효율적인 구현 January 1, 2020
PUBG’s architecture (with focus on back end infra) on AWS August 31, 2020
그랑 블루 판타지를 뒷받침하는 인프라 기술 July 5, 2017
일본의 데브서밋 컨퍼런스에서 그랑 블루 판타지에 대해서 특징 스마트 폰 RPG 브라우저 게임 협력 플레이, 멀티 플레이 시스템 규모 등록 유저 수 1400만명 월간 300억 PV 100만 query/sec 8만 req/sec 트래픽 12Gbps...
로맨싱사가RS의 서버 아키텍처 September 27, 2020
마인크래프트 시리즈의 멀티플레이 서버 아키텍쳐 September 12, 2020
몬스터 스트라이크의 부하 대책(일부 정리) December 18, 2019
번역 - PiggPARTY에서 실시간 통신 시스템 January 6, 2020
일본 소셜 게임 회사 gumi의 서버 사이드 기술 스택 August 20, 2018
출처
확장 가능하며 운용하기 쉬운 WebSocket 서버 설계의 과제와 연구 December 21, 2020
</div>