전체 글 516

[C#서버] Akka.net과 Actor모델 Part.2

1. Dispatcher ( 액터 메시지 처리 스레드 관리 )액터를 사용할 때, 메시지가 액터에 도달하는 과정은 매우 중요합니다. 여기서 핵심 역할을 하는 것이 바로 Dispatcher입니다. Dispatcher는 액터의 메일박스에서 메시지를 꺼내어 액터가 실제로 작업을 수행하는 OnReceive() 메서드로 전달하는 중개자입니다. 쉽게 말해, 액터와 스레드 사이의 연결 고리라고 할 수 있습니다.이 Dispatcher는 액터가 메시지를 처리하는 데 필요한 스레드를 관리합니다. 여러 액터가 동시에 메시지를 수신하고 처리할 수 있도록 도와줍니다. 예를 들어, 사용자가 UI에서 여러 작업을 동시에 수행하는 경우, Dispatcher는 각각의 액터가 독립적으로 메시지를 처리할 수 있게 합니다. 이를 통해 사용자..

[C#서버] Akka.net과 Actor모델 Part.1

1. Akka.net이란?.NET 플랫폼에서 사용할 수 있는 오픈 소스 프레임워크로, Actor 모델을 구현하여 병렬성과 분산 시스템을 쉽게 구축할 수 있도록 도와줍니다.2. Actor모델 이란?Actor 모델은 큰 프로젝트에서 여러 작업을 동시에 처리하거나, 많은 사용자가 동시에 접속하는 시스템을 만들 때 매우 유용한 패턴입니다. 이 모델을 이해하기 위해 먼저, 우리가 흔히 사용하는 객체 지향 프로그래밍(OOP)과 비교해볼게요.객체 지향 프로그래밍에서는 메서드를 호출하고, 객체의 상태를 변경하는 것이 기본입니다. 그러나 동시성 문제를 처리하려면 여러 스레드가 공유하는 메모리와 이를 관리하는 락(lock)이라는 장치를 사용해야 합니다. 하지만 락은 복잡할 뿐만 아니라, 잘못 사용하면 시스템이 멈추거나 성..

[C#] Func 람다식 Expression오류(cs0834)

우선 Func 람다 형식은 표현식(Expression)람다와 문(Statement)람다 2가지가 존재한다. 표현식(Expression) 람다: 하나의 표현식으로만 구성된 람다입니다. 이 경우 return 키워드를 사용하지 않고, 람다의 결과는 그 표현식 자체가 됩니다.Func square = x => x * x; // 표현식 람다문(Statement) 람다: 중괄호 {}를 사용하여 여러 문으로 구성된 람다입니다. 이 경우 return 키워드를 사용할 수 있습니다.Func square = x =>{ int result = x * x; return result; // 문 람다에서는 return 사용 가능}; C#에서 CS0834 오류는 "A lambda expression with a statem..

VisualStudio/C# 2024.09.11

[Unity][개념] UniTask VS 코루틴

UniTask는 기존의 코루틴보다 더 나은 비동기 처리를 가능하게 해주는 강력한 라이브러리입니다. 구체적인 장점과 사용 예시를 통해 UniTask의 유용성을 알아보겠습니다.UniTask를 사용하게 된 이유:코루틴의 예외 처리 제한: 코루틴은 try-catch로 예외 처리를 할 수 없어서 안정성이 떨어집니다.코루틴의 리턴 타입 제한: 코루틴은 리턴 타입이 없어 실행 결과를 리턴하려면 콜백을 사용해야 합니다. 이로 인해 복잡한 콜백 지옥이 발생할 수 있습니다.Task의 성능 문제: C#의 async Task는 힙 할당으로 인해 가비지 생성이 많아 잦은 호출이 어렵습니다. 하지만 UniTask는 struct 기반이어서 가비지 생성 문제가 없습니다.선형적인 코드 흐름: UniTask를 사용하면 콜백 없이 선형적..

Unity 2024.09.10

[Unity] JobSystem(2) NativeContainer와 TransformAccessArray

Job System과 Native Collections 특징Native collections는 성능 최적화와 메모리 관리 효율성을 위해 제공하는 데이터 구조입니다. 네이티브 메모리라고 불리는 공유 메모리 타입에 저장됩니다.  메모리 관리되지 않는 포인터가 들어 있습니다. Job System과 함께 사용하면 잡이 복사본으로 작업하는 것이 아닌 메인 스레드와 공유되는 데이터에 액세스 할 수 있습니다.주요 특징과 이점:멀티스레드 안전성: Native Collections은 Job System과 함께 사용할 때 쓰레드 안전성을 보장합니다. 일반적으로 C#의 List나 Array 같은 컬렉션은 쓰레드 안전하지 않아 멀티스레딩 작업에서 문제가 발생할 수 있습니다. 반면, Native Collections은 멀티스레..

Unity 2024.09.06

[Unity] JobSystem(1) 특징과 인터페이스 종류

JobSystem 생성 배경https://usingsystem.tistory.com/539 [Unity] DOTS 시스템과 Unity JobSystem, Burst, ECS 개념DOTS의 주요 목표와 적용 요약oop로 인해 메모리가 무분별하게 퍼져있는 메모리를 일관성 있게 메모리에 쌓아서 cpu가 캐시 l1, l2, l3에 캐시적중(캐시 적중 시 메모리를 정말 빠르게 읽을 수 있다.)usingsystem.tistory.com Unity의 Job System은 게임 엔진의 성능을 극대화하기 위해 설계된 멀티스레딩 프레임워크로, 작업을 작게 나누어 여러 스레드에서 동시에 처리하여 CPU 리소스를 효율적으로 활용하고 게임의 퍼포먼스를 크게 향상시킵니다. Job System의 주요 개념 및 동작 방식Job (작..

Unity 2024.09.06

[Unity] Unity 메모리 및 GC 최적화 ( 정리중 )

메모리 및 GC 최적화 GC(가비지 컬렉션)의 영향 줄이기 Unity는 Boehm-Demers-Weiser 가비지 컬렉터를 사용하며, 이 컬렉터는 프로그램 코드의 실행을 중단하고 작업이 완료될 때만 일반 실행을 재개합니다.힙의 불필요한 할당은 GC 스파이크를 유발할 수 있으므로 유의해야 합니다.— 문자열: C#에서 문자열은 값 유형이 아닌 레퍼런스 유형입니다. 다시 말해서 모든 새 문자열은 일시적으로만 사용되더라도 관리되는 힙에 할당됩니다. 따라서 불필요한 문자열의 생성 또는 조작을 줄여야 합니다. JSON, XML 같은 문자열 기반 데이터 파일은 파싱하지 않는 것이 좋습니다. 대신 데이터를 ScriptableObjects에 저장하거나 MessagePack 또는 Protobuf 같은 포맷으로 저장하세요...

Unity 2024.08.30

[Unity] ECS 예제 목록

Unity ECS 예제 SampleEntityComponentSystemSamples - 기초 및 고급 DOTS 기능을 모두 소개하는 다양한 샘플https://github.com/Unity-Technologies/EntityComponentSystemSamples/tree/master GitHub - Unity-Technologies/EntityComponentSystemSamplesContribute to Unity-Technologies/EntityComponentSystemSamples development by creating an account on GitHub.github.com DOTS 알아보기 - Unity DOTS 교육과정https://learn.unity.com/tutorial/660f..

Unity 2024.08.30

[Unity] DOTS 시스템과 Unity JobSystem, Burst, ECS 개념

DOTS (Data Oriented Technology Stack)란?DOTS는 Unity에서 제공하는 데이터 지향 기술 스택으로, 기존의 객체 지향 프로그래밍(OOP) 방식 대신 데이터 지향 디자인(DOD)을 채택하여 메모리 사용성을 향상시키고, 성능을 극대화하는 것을 목표로 합니다. DOTS는 엔티티와 네이티브 컬렉션을 사용하여 런타임이나 가비지 컬렉터에 의해 관리되지 않는 메모리를 직접 다루며, CPU와 메모리 간의 접근 효율성을 높입니다. DOTS의 주요 목표:메모리 최적화:일관된 메모리 배치: OOP 방식에서는 객체와 데이터가 메모리에 산발적으로 배치되어 있어 캐시 적중률이 낮아집니다. 반면, DOTS는 데이터와 로직을 분리하고, 컴포넌트 데이터를 연속된 메모리 블록에 저장합니다. 이를 통해 C..

Unity 2024.08.30

[프로그래머스/C++]Lv.3 아이템 줍기(BFS, 달팽이알고리즘)

https://school.programmers.co.kr/learn/courses/30/lessons/87694 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr소스코드배열을 2배해줘야 하는 게 핵심인 것 같다.배열을 그냥 했을 경우 1이 겹치는 문제가 있어서 해결하기 어려움이 있다.소스코드#include #include #include #include class Pos{public: Pos(int y, int x) : Y(y), X(x) { }public: int Y; int X;};bool CanGo(int minX, int minY, int maxX, i..

[프로그래머스/C++]Lv.2 게임 맵 최단거리(BFS)

https://school.programmers.co.kr/learn/courses/30/lessons/1844 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr소스코드#include#include using namespace std;class Position{public: Position() : PosY(0), PosX(0) { } Position(int _posY, int _posX) { this->PosX = _posX; this->PosY = _posY; }public: int PosY; int PosX;};int BFS(vector> maps){ c..

카테고리 없음 2024.07.18

[프로그래머스/C++]Lv3 네트워크 BFS

https://school.programmers.co.kr/learn/courses/30/lessons/43162 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr소스코드#include #include #include #include using namespace std;vector> board;vector> board;bool BFS(int start, vector& visited){ queue q; q.push(start); visited[start] = true; while (q.empty() == false) { int now = q.front(); q..

[OpenGL] Light Sources 종류 및 예제

Simple Light  Ambient Light (앰비언트 광원)설명: 앰비언트 라이트는 어디에나 있는 빛으로, 난반사를 통해 모든 방향에서 같은 정도의 낮은 밝기를 가진다. 특별한 광원이 없더라도 간접 조명으로 공간을 채운다.사용 예: 기본적인 환경 조명.Point Light Sources (점 광원)설명: 중심점 P0에서 모든 방향으로 동일하게 빛을 방출하는 광원으로, 특정 지점에서 빛을 방출하여 전구와 유사하다.사용Parallel Light Sources (평행 광원)설명: 광원이 매우 멀리 있어서 빛이 평행하게 들어오는 것을 가정하는 광원으로, 태양광을 모델링할 때 사용된다.사용 예: 태양광. Real Light Spot Lights (스팟 광원)설명: 특정 지점에서 원추형으로 빛을 방출하는 조..

OpenGL 2024.07.01

[OpenGL] Shading과 illumination model

그래픽스 프로그램에서는 광학 시뮬레이션을 통해 색상의 자연스러운 변화를 나타냅니다. 이 과정에서 중요한 요소는 광원과 물체 표면의 상호작용입니다. 이를 통해 더욱 현실감 있는 장면을 렌더링할 수 있습니다.쉐이딩 (Shading)먼저, 광원(light source)에서 나오는 빛이 타겟 오브젝트에 부딪힐 때, 물체 표면의 재질(material)을 시뮬레이션해야 합니다. 재질은 금속처럼 반사성이 강한 것부터 천처럼 빛을 흡수하거나 산란시키는 것까지 다양합니다. 쉐이더(shader)는 이러한 물체 표면의 광학적 특성을 시뮬레이션하여 자연현상인 그림자, 굴절 등을 처리합니다.즉 쉐이딩은 광원이 물체 표면에 닿아 반사, 흡수, 산란되는 과정을 시뮬레이션합니다. 이를 통해 물체의 색상과 밝기가 결정됩니다. 광원 (..

OpenGL 2024.07.01

[AI] Huggingface모델 다운받아 Ollama에 올려서 RAG와 Memory사용하기

사용할 모델은 야놀자의 eeve 모델을 사용하여 진행함HuggingFace Hub 설치pip install huggingface-hub 모델 다운로드https://huggingface.co/heegyu/EEVE-Korean-Instruct-10.8B-v1.0-GGUF heegyu/EEVE-Korean-Instruct-10.8B-v1.0-GGUF · Hugging FaceUsage requirements # GPU model CMAKE_ARGS="-DLLAMA_CUBLAS=on" FORCE_CMAKE=1 pip install llama-cpp-python --force-reinstall --upgrade --no-cache-dir --verbose # CPU CMAKE_ARGS="-DLLAMA_CUBLAS..

AI 2024.06.27

[AI] Ollama 다운로드 및 모델 다운 방법

Ollama 는 로컬 환경(내 PC)에서 대규모 언어 모델인 LLM을 실행할 수 있도록 설계된 도구로 Mistral, Llama 3 등 다양한 오픈소스 LLM을 지원합니다. 또 한 Hugging face에서 다운 받은 GGUF 모델을 Ollama에 올려서 사용할 수 있습니다. Ollama 다운경로 https://ollama.com/download Download Ollama on macOSDownload Ollama on macOSollama.com 올라마 설치 후 확인 cmd에 ollama 입력ollama올라마에서 모델 명 복사현재 Ollama에 다운 받은 모든 모델 출력ollama list모델 다운 받기xxxx에 모델 명을 넣으면 된다.run - 모델 다운받고 실행pull - 모델만 다운로드ollam..

AI 2024.06.27

[Unity] 상태(State)패턴 예제

https://unity.com/kr/how-to/develop-modular-flexible-codebase-state-programming-pattern 스테이트 프로그래밍 패턴으로 모듈형 및 유연한 코드베이스를 개발하는 방법 | Unity상태 프로그래밍 패턴이 깔끔하고 체계적이며 가독성 있는 코드베이스를 구축하고 유지하는 데 어떻게 도움이 되는지 알아보세요.unity.com간단한 상태 패턴using UnityEngine;public class CubeController : MonoBehaviour{ public enum State { Idle, Walk, } State _state; Vector3 _target; void Start() ..

Unity 2024.06.24

[Unreal5] Trace(추적시스템)와 충돌

https://docs.unrealengine.com/4.27/ko/InteractiveExperiences/Tracing/Overview/ 트레이스 개요언리얼 엔진 4 의 트레이스 시스템 개요입니다.docs.unrealengine.com TraceTrace는 주로 레이캐스팅(raycasting)와 비슷하다. 게임이나 애니메이션에서 주어진 선상의 객체와의 충돌을 감지하는 데 사용됩니다. 레이캐스팅은 특정 방향으로 레이(선)를 발사하여 그 선상에서 충돌하는 객체를 찾아내는 방법입니다. Sphere Trace by ChannelSphere Trace by Channel은 구 형태의 레이캐스팅을 수행하여 특정 채널에서 충돌을 감지합니다. 여기서 채널(Channel)은 충돌을 감지할 때의 특정 규칙을 정의한 것..

Unreal 2024.06.11

[Unreal5] 캐릭터 회전

CharacterUse Controller Desired Rotation이 옵션이 활성화되면, 캐릭터는 컨트롤러의 회전값을 따르게 됩니다. 즉, 컨트롤러가 바라보는 방향으로 캐릭터가 회전합니다.용도: 주로 FPS(First-Person Shooter) 게임이나, 컨트롤러가 캐릭터의 시점을 직접 제어하는 게임에서 사용됩니다.특징:컨트롤러의 회전 값(Yaw)을 캐릭터에 직접 반영합니다.캐릭터가 이동할 때 항상 컨트롤러가 바라보는 방향을 유지합니다.주로 마우스나 조이스틱의 방향으로 캐릭터가 회전하는 경우에 유용합니다.Orient Rotation to Movement이 옵션이 활성화되면, 캐릭터는 이동 방향에 따라 회전합니다. 즉, 캐릭터가 움직이는 방향으로 회전하게 됩니다.용도: 주로 TPS(Third-Per..

Unreal 2024.06.11