분류 전체보기

프로그래밍/OS

[OS] 운영체제 #1 - 운영체제란 무엇인가?

운영체제란 무엇인가?운영체제는 컴퓨터 프로그램이 하드웨어 자원을 이용할 수 있도록 하는 특수 소프트웨어 계층이다. 이는 컴퓨터 하드웨어와 사용자 응용 프로그램 사이에서 중개자 역할을 하며, 소프트웨어가 하드웨어와 일관되고 효율적으로 상호 작용할 수 있도록 한다. 운영 체제는 메모리 관리, 입력 및 출력 장치 처리와 같은 물리적인 인터페이스와 이를 추상화한 소프트웨어적인 인터페이스를 제공한다. 인기있는 운영 체제의 예로는 Windows, macOS, Linux 및 Android가 있다. 컴퓨터 게임을 하는 상황을 가정해보자. 키보드와 마우스를 통해 게임 캐릭터를 움직여주고 화면을 통해 출력되는 게임 화면을 본다. 내부적으로는 메모리에 게임 데이터가 적재된다. 게임을 플레이하다 저장 버튼을 누르면 디스크에 ..

프로그래밍/C#

[C#] Nullable 타입

C# Nullable 타입 소프트웨어 개발 세계에서 null 참조는 꽤나 골치아픈 문제로, 개발자들 사이에서 악명 높은 "NullReferenceException"으로 이어질 수 있다. 지속적으로 발전하고 있는 C# 언어는 이러한 문제를 해결하기 위해 안전성과 개발자의 생산성을 향상시키는 강력한 기능들을 도입하고 있다. C#의 최신 버전에서 주목할 만한 발전 중 하나는 nullability 기능의 도입 및 강화이다. 이번에는 C#에서 nullability의 중요성을 다루며, 코드 안전성과 명확성을 어떻게 향상시키는지 실용적인 예시와 함께 살펴본다. Nullable을 활용해 Non-Nullable 타입을 Nullable로 만들기 C#에서 타입 시스템은 변수가 null 값을 가질 수 있는지를 구분하는 데 큰..

프로그래밍/C#

[C#] 불변성 처리

C# 불변성 처리 소프트웨어 개발이 발전하는 과정 속에서, 불변성의 원칙은 견고하고 thread-safe한 애플리케이션을 만드는 기초로 자리잡았다. 불변성은 객체가 생성된 후 변경되지 않는 능력을 의미한다. 이 개념은 비록 간단해 보일지라도, 특히 동시성과 멀티 스레드 프로그래밍의 영역에서 많은 이점을 가져다 준다. 이 글에서는 불변성을 위한 C#의 새로운 기능들, 그리고 readonly 및 const와 같은 다른 C# 구문과의 차이점을 알아볼 것이다. 불변성의 장점 불변성의 주된 매력은 그 단순성과 예측 가능성에 있다. 한 번 초기화되면, 불변 객체는 그 상태가 변경되지 않을 것이라는 보장을 제공하여, 특히 여러 스레드가 동시에 데이터에 접근하는 환경에서 상태 관리와 관련된 다양한 버그의 가능성을 없앤..

프로그래밍/C#

[C#] 비동기 프로그래밍

C# 비동기 프로그래밍 C#의 async와 await 키워드는 비동기 작업을 다루는 과정을 간소화하여 비동기 코드를 더 읽기 쉽고 유지보수하기 쉽게 만드는 데 사용된다. 비동기 프로그래밍은 시간이 많이 걸리는 작업(예: I/O 작업, 웹 요청, 데이터베이스 트랜잭션 등)을 메인 스레드를 차단하지 않고 실행할 수 있게 해주므로, 사용자 인터페이스의 반응성을 유지하고 서버 측 응용 프로그램의 확장성을 향상시키는 데 필수적이다. async와 await async 키워드는 메소드, 람다 표현식 또는 익명 메소드를 비동기적으로 표시하는 데 사용된다. async 메소드는 호출자의 스레드를 차단하지 않고 잠재적으로 오래 걸리는 작업을 수행하는 편리한 방법을 제공한다. async 메소드는 await 표현식에 도달할 때..

AI

[AI] [ChatGPT] ChatGPT와 오목 두기

ChatGPT와 오목 두기 Chat GPT는 텍스트 기반의 데이터를 이해하고 인간과 같은 자연스러운 대답을 만들어준다. 물론 이 과정은 무수히 많은 데이터를 통계적으로 처리하여 이루어질 것이다. Chat GPT를 너무나도 잘 쓰고 있는 입장에서 문득 들었던 의문이 있다. 과연 오목과 같은 특수적인 상황에서도 적절한 의사결정을 할 수 있을까? 이 의문을 해소하기 위해 Chat GPT와 오목을 둘 수 있는 환경을 개발해볼 계획이다. 개발 계획 1. ChatGPT API 이용 2. ChatGPT Function Calling을 통해 게임과의 인터페이스 개발 3. 게임 개발 4. 테스트 ChatGPT API 개발을 위해 ChatGPT를 이용하기 위해서는 직접 ChatGPT API를 코드를 통해 호출해야한다. C..

프로그래밍/알고리즘

[Algorithm] 힙

힙 (Heap) 힙(Heap)은 완전 이진트리인 특별한 트리를 기반으로 한 자료구조이다. 힙에는 최대힙과 최소힙이 있는데, 최대힙은 최대값을 다루는데 특화되어 있고 최소힙은 최소값을 다루는데 특화되어 있다. 각 힙은 일련의 원소들이 주어졌을 때 최대 or 최소 원소를 빠르게 조회, 삭제할 수 있다. 또한 각 힙 모두 임의의 원소를 빠르게 삽입할 수 있다. 최대, 최소 원소를 다루는 특수적인 상황에 있어 효율적이고, 의외로 최대 최소 원소를 활용해야 하는 상황이 많이 발생하기 때문에 굉장히 중요한 자료구조에 속한다. (우선순위큐도 힙으로 제작된다.) 힙에서 제공하는 연산들을 배열과 비교해보자. 값 삽입 배열 : O(1) 힙 : O(log N) 최대값 or 최소값 삭제 배열 : O(N) 힙 : O(logN)..

게임 엔진/Unity

[Unity] C# Event 컨벤션 정리

Event Convention C#의 이벤트 관련 컨벤션은 꽤나 복잡하다. 개발하는 조직에 따라서도 많이 달라질 수 있으므로 네이밍 컨벤션의 경우에는 현재 속한 조직에 맞게 적용하는것이 바람직할 것이다. 다만, 유니티에서 이벤트와 연관된 개념들이 어떻게 분리되어야 하는지, 어떤 그룹으로 구분되어야 하는지에 대해서는 정리해둘 필요가 있다. 구분 기준을 명확하게 정해두었다면 조직에 따라 네이밍 기준이 달라지더라도 개발에 있어서 컨벤션을 통한 생산성을 극대화시킬 수 있을 것이다. 다음은 MS에서 제공하는 이벤트 네이밍 컨벤션이다. https://learn.microsoft.com/en-us/dotnet/standard/design-guidelines/names-of-type-members#names-of-ev..

게임 개발

[게임 개발] [Path to the Veil] 개발일지 #3 - 카드 시스템

카드 시스템 플레이어가 카드를 사용하는 모든 행동과, 시스템이 카드를 다루는 모든 동작들에 대한 내용을 카드 시스템으로 정리한다. 카드를 다루기 위해 알아야하는 모든 개념들과 동작 원리에 대한 내용을 다룬다. 카드 더미 카드 더미는 손 카드 더미(Hand Cards Pile), 뽑을 카드 더미(Draw Cards Pile), 버려진 카드 더미(Discarded Cards Pile), 제외된 카드 더미(Excluded Cards Pile)로 구성된다. 다음 이미지는 왼쪽에 뽑을 카드 더미, 가운데에 손 카드 더미, 오른쪽에 제외된 카드 더미와 버려진 카드 더미를 나타낸다. 카드 행동 및 동작 카드 뽑기(Draw)는 뽑을 카드 더미에서 카드를 손 카드로 가져오는 행동 및 동작을 의미한다. 카드 뽑기 과정에서..

프로그래밍/C++

[C++] Multithreaded Data Synchronization 총정리

Multithreading에 대해 컴퓨터에는 CPU라는 연산 장치가 존재한다. CPU의 코어에서는 명령 집합들을 빠른 속도로 처리하는데 이 처리되는 단위를 Thread라 부른다. 현대의 CPU는 여러 개의 코어들로 구성되어 있고, 여러 스레드가 동시에 여러 명령 집합들을 수행할 수 있다. 여러 개의 스레드를 동시에 사용한다면, 하나의 스레드만 사용하는 것보다 훨씬 CPU를 효율적으로 활용할 수 있다. 이처럼 두 개 이상의 스레드를 통해 동시에 실행하는 것을 멀티스레딩이라 부른다. 스레드에 대해 자주 혼동하는 것 중 하나가 있다. 처리되는 단위를 스레드라 부르는데, 이것이 스레드를 코어 개수만큼만 생성해야 한다는 의미는 아니다. 스레드는 1000개 10000개까지도 생성시킬 수 있다. 다만, 코어의 개수가..

생활

[생활] 컴퓨터 조립

보호되어 있는 글입니다.

프로그래밍/C++

[C++] C++에서 Partial Class 구현 방법

Partial Class란? C#에서 Partial Class는 단일 클래스를 여러 소스 코드 파일에 나눠서 정의할 수 있는 기능이다. Partial Class의 각 부분은 동일한 클래스 정의에 기여하며 컴파일러는 컴파일 중에 해당 부분을 단일 클래스로 병합한다. Partial 클래스는 주로 구현 세부 사항을 분리하고 코드베이스를 보다 체계적이고 유지 관리하기 쉽게 유지하는 데 사용된다. 특히 코드 생성 도구나 여러 개발자가 관련된 시나리오에서 더욱 그렇다. 코드 생성 부분 클래스는 일반적으로 코드 생성 도구(예: Entity Framework)와 함께 사용되어 자동 생성 코드를 사용자 지정 코드와 분리한다. 이러한 분리를 통해 개발자는 생성된 코드에 영향을 주지 않고 사용자 지정 코드를 수정할 수 있다..

프로그래밍/C++

[C++] C++에서 Interface 구현 방법

인터페이스란? Java나 C#과 같은 언어들을 보면 Interface라는 강력한 개념이 존재한다. 인터페이스는 객체에 대한 명세서만 나타내고 구체적인 구현은 각 파생 객체에서 작업하도록 한다. 명세서에는 메서드, 프로퍼티, 이벤트와 같은 것들이 포함될 수 있다. 겉으로만 보면 별로 대단할 것 없어 보이는 개념이지만, 인터페이스를 잘 활용한다면 객체지향 개발에 있어서 신세계를 경험할 수 있다. C++을 이용한 인터페이스 구현 C++은 언어 차원에서 인터페이스를 명시적으로 지원하지는 않는다. 하지만 C++ 자체에서 갖고 있는 개념인 추상 클래스와 순수 가상함수를 조합하여 인터페이스를 구현할 수 있다. class IPrintable { public: virtual void Print() = 0; // Pure..

프로그래밍/C++

[C++] Casting 총정리

C++ Casting C++에는 여러가지 캐스팅 방법들이 존재한다. C Style Casting C에서 계승받은 전통적인 캐스팅 방법으로 여러 캐스팅 작업을 복합적으로 사용한다. 편리할 수 있지만 덜 명확하고 예상치 못한 동작이 발생할 수 있다. 잠재적인 문제를 숨길 수 있으므로 최신 C++ 코드에서는 권장되지 않는다. double numDouble = (double)42; 최신 C++에서는 가능하면 static_cast, dynamic_cast, const_cast와 같은 보다 구체적인 형변환 연산자를 사용하는 것이 일반적으로 권장된다. 이러한 연산자는 더 나은 유형 안전성을 제공하고 코드를 보다 명확하게 구분할 수 있도록 해주기 때문이다. 그러나 하위 수준 작업에 reinterpret_cast를 사용..

게임 엔진/Unreal

[Unreal] [DateTime] 시간 관리 구조체

DateTime DateTime은 언리얼에서 시간을 관리하기 위해 사용하는 구조체이다. 다음과 같이 현재 시간에 대한 정보를 얻을 수 있다. FDateTime CurrentTimestamp = FDateTime::Now(); 얻은 타임스탬프를 초로 환산하고 싶은 경우 다음과 같이 한다. FDateTime CurrentTimestamp = FDateTime::Now(); FDateTime UnixEpochTime = FDateTime(1970, 1, 1); double TotalMilliseconds = (CurrentTimestamp - UnixEpochTime).GetTotalMilliseconds(); 두 타임스탬프를 비교하고 싶은 경우 둘 다 초로 환산하여 비교하면 된다. 타임스탬프를 직접 비교하는..

시행착오

Chat GPT를 이용하면 게임을 만들 수 있는가?

Chat GPT를 이용한 게임개발 Chat GPT를 이용하여 게임을 만들 수 있는지 테스트해보자. 게임은 5 x 5 그리드 월드에서 각 플레이어들이 두 개의 캐릭터에게 턴제로 명령을 주어서 서로를 죽이는 것을 목표로 진행된다. 이 게임에 대해 Chat GPT를 설명하려면 구체적인 텍스트 기획이 갖춰져야 할 것이다. 이를 대화를 통해 학습시키고 학습이 어느정도 완료된 시점에서 코드를 요구해볼 것이다. Algorfati Let's play game I made! Chat GPT Sure, I'd be happy to play your game! What kind of game did you make? Please tell me the rules and how to play. Algorfati Here is ..

게임 엔진/Unreal

[Unreal] [Networking] Http Module 사용 및 API Handler 개발

Unreal HTTP Request HttpModule은 언리얼에서 Rest API를 편하게 이용할 수 있도록 설계될 모듈이다. 현재 프로젝트의 MyExample.Build.cs 파일에서 다음 모듈들을 포함시켜준다. PrivateDependencyModuleNames.AddRange( new string[] { "HTTP", "JsonUtilities", "Json" }); Header // Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "GameFramework/GameModeBase.h" #include "Runtime/Online/HTTP/Public/Http.h" #inclu..

게임 엔진/Unreal

[Unreal] [Networking] TCP Socket을 이용한 Client 개발

TCP Socket을 구현하는 방법들 TCP Socket은 네트워크 레벨에서의 기능을 담당한다. Connect, Read, Write, Disconnect 등등과 같은 기능들이 있을 것이다. 다만 이 소켓을 이용한 함수들을 이용하는데에는 필연적으로 직면하게 되는 문제가 있다. 네트워크 레벨을 통해서 데이터를 주고받아야 하기 때문에, 네트워크 레벨에서 버퍼에 데이터가 모두 준비되지 않았을 경우, 이 상황을 어떻게 처리해야할까? 이러한 문제에 대해 여러가지 방법으로 대응이 가능하다. 다음과 방법들이 있다. 1. Blocking I/O TCP 소켓의에서 Blocking I/O는 가장 간단하고 일반적으로 사용되는 접근 방식이다. Blocking I/O를 이용하여 Socket의 기능을 이용하는 경우 어플리케이션은..

AI

[AI] [OpenAI] API Key 받는법

기본 개념 우리들이 흔히 사용하는 ChatGPT는 언어 모델을 기반으로 한 텍스트 생성 AI 서비스이고, OpenAI에서 제공하는 여러 서비스들 중 하나이다. OpenAI 에서는 ChatGPT 외에도 여러 서비스들을 제공해주고 있다. ex) 이미지 생성, 오디오 생성, TTS 보통 ChatGPT 3.5는 무료이기 때문에 일반인들도 많이 사용하지만, 4.0 부터는 유료이기 때문에 따로 결제를 해서 사용해야한다. 여기서 ChatGPT 4.0을 결제했으니 ChatGPT API도 무료로 사용할 수 있어야 하는 것 아닌가? 라고 헷갈려하는 경우가 많은데, ChatGPT 4.0 결제는 OpenAI 에서 제공하는 서비스를 구독한 것이므로 서비스 이용은 자유롭게 할 수 있겠지만 API를 무료로 사용할 수는 없다. 즉,..

게임 엔진/Unity

[Unity] 유니티 설계 경험 기록

유니티 설계 경험유니티를 이용하면서 내가 경험한 내용을 정리한 글이다. 이 글은 유니티를 개발하는 과정 속에서 지속적으로 업데이트 될 예정이다. 핵심 개념다음 개념들은 알고 시작하는 것이 좋다. 유니티 버전단위 문서유니티 버전에 따른 매뉴얼이다. 이 문서를 통해 대부분의 유니티 관련한 이용방법을 숙지할 수 있다.https://docs.unity3d.com/2021.2/Documentation/Manual/index.html Unity - Manual:  Unity User Manual 2021.2Use the Unity Editor to create 2D and 3D games, apps and experiences. Download the Editor at unity3d.com. Th..

Back End

[AWS] AWS 기본 개념

AWS Amazon Web Services(AWS)는 전 세계적으로 분포한 데이터 센터에서 굉장히 다양한 서비스들을 제공하는 클라우드 플랫폼이다. 특히 스타트업처럼 빠르게 서비스를 개발해서 출시까지 해봐야 하는 상황에서 AWS는 필수적이다. 먼저 AWS에서 가장 핵심적인 개념들을 알아보자. AWS 기본 설계 구조 AWS를 이용한 가장 단순한 서비스 구조도이다. 1. 인스턴스 (EC2) 인스턴스는 AWS 에서의 하나의 가상 서버를 의미한다. 즉 하나의 가상화된 컴퓨팅 환경으로 RAM이나 코어와 같은 하드웨어 스펙을 설정할 수 있고, 어떤 OS를 설치할 것인지도 정할 수 있다. (인스턴스는 AWS에서의 가장 핵심적인 개념이며 이것들이 모인 집합을 클라우드라 부른다.) 만약 우리가 서버 개발을 통해 어떤 프로..

Back End

[AWS] AWS에 Dot Net ASP 배포

AWS .Net ASP 배포 AWS에 .Net ASP 웹서버를 배포해보자. 1. AWS 계정을 생성한다. 처음 계정을 생성한다면 1년간은 프리티어를 이용할 수 있다. 다만 프리티어 인스턴스들은 굉장히 사양이 낮기 때문에(t2 micro, 1 core, 1 GB RAM) 결국 돈을 내고 좀 더 좋은 사양을 이용해야할 수도 있다. 2. AWS 웹 서비스 페이지에서 서비스 > IAM 에서 자격증명을 생성한다. https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/id_root-user.html#id_root-user_manage_add-key AWS 계정 루트 사용자 - AWS Identity and Access Management 액세스 키를 삭제하는 대신에 비활..

게임 엔진/Unreal

[Unreal] [Example] Editor에 Asset 생성 및 저장

Create Asset to Editor Unreal 에디터에 c++을 이용하여 원하는 에셋을 생성하는 예제이다. Target Asset Data Asset을 이용하기 위해서 먼저 사용하고자 하는 데이터 형태를 c++로 작성한다. #include "CoreMinimal.h" #include "Engine/DataAsset.h" #include "MyPrimaryDataAsset.generated.h" UCLASS() class TESTPROJECT_API UMyPrimaryDataAsset : public UPrimaryDataAsset { GENERATED_BODY() public: UPROPERTY(EditAnywhere) FString ItemName; UPROPERTY(EditAnywhere) U..

게임 엔진/Unity

[Google Play] 구글 플레이 결제 시스템(IAP) 세팅

Google Play IAP 백엔드 설정 Google Play Console을 이용하여 안드로이드 앱에 결제 시스템(IAP)을 붙일 수 있다. 하지만 대부분의 서비스는 이러한 결제 정보를 따로 관리하는 백엔드 시스템을 구축해야한다. 이 작업이 왜 필요할까? 예를 들어 어떤 게임 유저가 결제를 통해 얻은 아이템이 있다고 해보자. 게임을 하다가 실수로 게임 앱을 지웠다가 다시 깔면 어떻게 될까? 따로 백엔드 서버거 없는 클라이언트 게임 앱의 경우, 결제 데이터가 남아있지 않을 것이다. 그러므로 백엔드 서버가 이러한 게임 데이터에 대한 내용을 모두 기록하고 있도록 하고, 다시 앱을 설치할 때 그 데이터를 로드하도록 해야한다. 하지만 이렇게 백엔드를 구축할 때 반드시 해주어야 하는 작업이, 어떤 클라이언트로부터..

게임 엔진/Unity

[Google Play] 구글 플레이 게임 서비스 세팅

Google Play Game Service Google Play에 게임 앱을 올리고 모바일에서 Google Play에 로그인까지 가능하도록 해보자. 먼저 Google Play Console에 앱을 올리는 방법에 대해 알아둘 필요가 있다. 다음 링크를 참고하자. 이 링크를 통해 개발자 계정 등록과 Google Play Console의 기본적인 세팅까지 작업해야한다. (게임 앱으로 등록해야하기 때문에 앱 게시까지는 할 필요없음) https://algorfati.tistory.com/90 Google Play Console Google Play에 앱을 출시하기 위해서는 Google Play Console을 이용하여야 한다. Google Play Console 페이지 링크 play.google.com/cons..

AlgorFati
'분류 전체보기' 카테고리의 글 목록