Home
Default
Cancel

👋 Welcome, I’m HyeonJun.


📝 Recent Post

.NET 10 런타임 개선사항 요약

.NET 10 런타임 개선사항 요약 .NET8 이후로 개선사항을 잘 모르기도하고.. 팀원들한테 변경점 정도는 공유하면서 업데이트 하자고 말씀드리고 싶어서 요약.. 1. 코드 구문 분석 개선(관련 이슈) 1.1 Flog Grpah 기반 분석 JIT가 코드를 분석할 때 기존의 Lexcial Ordering(어휘 순서)기반 분석에...

태초마을로 돌아가자 - 게임서버 스터디 발표(1)

태초마을로 돌아가자 - 게임서버 스터디 발표(1) . 게임서버 스터디에서 발표했던 PPT 저연차, 비전공자 또는 현업 개발자를 대상으로 제작하였다. 컴퓨터 구조에서 배울만한 내용이 대부분이고 회로부터 시작해 CPU가 어떻게 돌아가고 어셈블리가 무엇인지 Bottom - Top으로 소개하는 발표. 주제 선정 스터디에 저연...

AWS SAA 자격증 취득 후기 (게임 개발자 관점)

AWS SAA 자격증 취득 후기 (게임 개발자 관점) 본 포스팅에서 자잘한 시험 정보에 대해서 설명하지 않습니다. 1. 서론 게임 서버 개발자는 웹 개발을 하는 일반 IT 백엔드 개발자들과 결이 많이 다르다. 주관적으로, 웹 개발자는 이미 잘 만들어진 컴포넌트를 어떻게 조합해서 서버를 만드는지 아키텍팅 대해 집중하는 느낌이고 게임 서버 개발자...

윈도우즈 환경에서 GUI를 지원하는 Linux 도커 컨테이너 띄우기

윈도우즈 환경에서 GUI를 지원하는 Linux 도커 컨테이너 띄우기 본 포스팅에서 자잘한 설치환경 에러에 대해서 설명하지는 않습니다. 사전 조건 > Windows 10 버전 2004 이상 또는 Windows 11 설치치 1. WSL2 설치 명령 프롬프트 창을 관리자 권한으로 연다. wsl --install 을 통해 WS...

대규모 시스템 설계 기초 리뷰

[Book Review] 대규모 시스템 설계 기초 가상 면접 사례로 배우는 대규모 시스템 설계 기초 독후감. 책 내용을 요약하는 포스팅은 아닙니다. 읽으면서 들었던 생각들을 주저리 정리하는 글에 가까움. (미래에 부끄러워서 지울수 있음) 개인적으로 이 책은 신입이나 취준생 보다는 조금 더 연차가 있을때 읽는게 좋다고 생각한다. 저연차 때...

Mimalloc (미말록)

Mimalloc: Free List Sharding in Action 논문 요약 미말록(Mimalloc) 이란? 마이크로소프트에서 개발한 성능 좋은 Memory Allocator. 다른 최신 Memory Allocator은 할당시간/메모리사용량/스레드 스케일링의 성능향상이 주된 목표이지만, mimalloc은 메모리 참조 지역성을 향상시키는데 포커...

Dynamic PGO (Dynamic Profile Guided Optimization, 동적 프로필 기반 최적화)

(.NET 6 기준으로 작성한 포스팅입니다.) (23-11-09: .NET 7 기준 최신정보 업데이트 하였습니다.) 서론 이전 포스팅에서 설명한 PGO는 런타임에 적용할 수는 없는 최적화다. 빌드(컴파일/링크) 시에만 진행할 수 있는 최적화이므로 JIT에서는 사용이 불가능했다. 하지만, .NET Core 3.0부터 계층 컴파일(Tiered Com...

PGO (Profile Guided Optimization, 프로필 기반 최적화)

(2023/11/05 업데이트) PGO (Profile Guided Optimization, 프로필 기반 최적화) 프로파일링 옵션을 추가한 프로그램을 실행하면 프로필이라는 일종의 사용 통계 데이터가 남는다. 이 프로필 파일을 통해 다음 컴파일 시에 최적화를 해주는 기능. 네이티브 코드(C or C++)에서만 가능하고, 관리코드(C# 등)와 네이티...

GC DATAS (Dynamic Adaptation To Application Sizes, 동적 힙 갯수 조절)

DATAS (Dynamic Adaptation To Application Sizes, 동적 힙 갯수 조절) 힙 메모리 사용량에 따라 힙 갯수를 줄이고 늘릴 수 있는 기능. .NET8 에서 추가된 기능. 내용이 길어져서 별도 포스트로 나누었다. 원본은 이 포스트에서 확인가능. 디테일한 내용은 추후 포스팅을 통해 설명할 예정이며 지금도 개발중...

.NET 8 변경점

.NET 8 변경점 .NET 8 변경사항 에서 관심있는 부분 정리. [제네릭] GetEnumerator 개선 foreach 같은 구문에서 사용하는 제네릭의 GetEnumerator()가 개선되었다. 기존 코드는 다음과 같이 별다른 조건체크 없이 매번 열거자를 새로 생성하도록 되어있다. IEnumerator<T> IEnumerab...

.NET GC 정리(2)

.NET GC 정리(2) 인터넷 여기저기 흩어져있는 GC 관련정보 정리 2탄. 틀린게 있다면 말해주세요. GCHeapAffinize SGC (Server GC)는 논리 코어갯수만큼의 힙을 가지고 있고 멀티코어에서는 병렬처리가 가능하기때문에 WGC (WorkStation GC) 보다 처리량이 월등하다. Heap Affinize는 힙과 코어를...

.NET GC 정리(1)

.NET GC 정리(1) 인터넷 여기저기 흩어져있는 GC 관련정보 정리 1탄. 틀린게 있다면 말해주세요. 누구나 아는 내용 다음은 누구나 아는 내용이고 .NET 버전이 달라져도 동일한 내용 (.NET 7까지는..) CLR이 제공하는 메모리 수집 기능 GC C#, ASP.NET 등 .NET 환경에서 개발한 프로그램은 CL...

몬테카를로 트리 탐색 - Monte-carlo Tree Search (MCTS)

[인공지능] MCTS 알파고에서도 사용된 탐색 알고리즘으로, 시뮬레이션을 통해 가능성이 높은 선택을 하며 탐색하는 알고리즘. 4가지 과정을 통해 진행된다. 선택(Selection) : 현재 주어진 트리에서 트리 정책(Tree Policy, 최선의 자식 노드를 선택하는 정책)에 따라 결정되는 최선의 ...

기계학습 - Machine Learning

[인공지능] 기계학습 컴퓨터가 스스로 학습할 수 있는 알고리즘과 기술을 개발하는 인공지능의 한 분야. 개발자가 직접 작성하는 기존의 프로그래밍은 많은 규칙을 직접 만들기에는 한계가 있다. (e.g. 스팸 메세지 필터링, 자율 주행 자동차) 기계학습은 다음과 같이 나누어진다. ...

역 강화학습 - Inverse Reinforcement Learning

[인공지능] 역강화학습 모방학습을 먼저 보고 오시면 좋습니다 ! 참고자료: [IRL 논문 1][http://ai.stanford.edu/~ang/papers/icml00-irl.pdf]1 , IRL 논문 22, RLkorea 논문 리뷰, PR-029 리뷰 영상 역강화학습이란 에이전트의 보상(Reward...

모방학습 - Imitation Learning

[인공지능] 모방학습 모방학습이란 전문가의 행동을 모방하며 학습하는 알고리즘. 모방학습에는 행동 복제(Behavioral Cloning)와 역강화학습(IRL, Inverse Reinforcement Learning)이 있다. 행동 복제(Behavioral Cloning) 전문가의 행동 데이터셋 (St ...

강화학습 - Reinforcement Learning(6)

[인공지능] 딥살사와 폴리시 그레이디언트 딥살사 (Deep SALSA) 기존에 살사 알고리즘으로 해결하기 어려운 문제를 심층신경망을 통해 해결하는 알고리즘. 문제 해결을 위해 MDP를 정하고 학습을 위해, 다음 수식과 같이 예측, 정답을 찾아내고 \[예측 : Q(S_t, A_t)\] \[정답 : R_{t+1...

강화학습 - Reinforcement Learning(5)

[인공지능] 인공신경망(Artificial Neural Network)과 강화학습 기존 강화학습의 한계 몬테카를로, 살사, 큐러닝은 모델 프리(Model-Free) 알고리즘으로 환경에 대한 모델 없이 샘플링을 통해 학습함으로써 다이내믹 프로그래밍의 한계 중 환경에 대한 완벽한 정보가 필요함을 해결하였다. 하지만 계산 복...

강화학습 - Reinforcement Learning(4)

[인공지능] 큐 러닝 (Q-Learning)과 전통적 강화학습 강화학습의 예측과 제어 강화학습은 환경의 모델없이 환경과의 상호 작용을 통해 최적 정책을 학습한다. 상호작용을 통해 정책에 대한 참 가치함수를 학습하는 것을 예측이라고 하며 예측과 함께 정책을 발전 시켜 최적 정책을 학습하는 것을 제어라고 한다. 몬...

강화학습 - Reinforcement Learning(3)

[인공지능] 다이내믹 프로그래밍 순차적 행동 결정 문제 풀이법 순차적 행동 결정 문제를 MDP로 정의 가치함수를 벨만 방정식을 통해 반복 계산 최적 가치함수 / 최적 정책 찾기 벨만 ...

강화학습 - MDP

[인공지능] Markov Decision Process, MDP 순차적 행동 결정 문제에 대해 정의하는 방법. MDP의 구성 요소 상태 : 시간 t 에서 상태 s 일 때, 확률변수 St = s 라고 정의한다. 행동 : 시간 t 에서 행동 a 일...

강화학습 - Reinforcement Learning(2)

[인공지능] Model Free & Q-Learning Dynamic Programming 강화학습의 토대가 되는 동적 프로그래밍(Dynamic Programming)은 학습이 아니라 전체 큰 문제를 작은 문제로 나누어 풀 수 있도록 계획하여 연산을 빠르게 하는 것. 정책 반복...

강화학습 - Reinforcement Learning(1)

[인공지능] 가치 함수 & 벨만 방정식 < 2019-10-09 내용 개정 > 그림 출처 - David Silver 교수님의 RL course 강의 내용](http://www0.cs.ucl.ac.uk/staff/d.silver/web/Teaching.html) 강화학습의 목적은 에이전트...

벡터(Vector)

벡터(Vector) 벡터는 크기(magnitude)와 방향(direction) 정보를 담고있다. 스칼라(Scalar)는 크기만 담고 있다. 단위벡터(Unit Vector) : 크기가 1인 벡터, 정규화(Normalize)를 통해 벡터를 단위벡터로 만든다. \(|\vec u| = \sqrt{u_x^2 + u_y^2 + u_z^2} \\...

행렬(Matrix)

벡터(Vector) 벡터는 크기(magnitude)와 방향(direction) 정보를 담고있다. 스칼라(Scalar)는 크기만 담고 있다. 행렬(Matrix) 정방행렬(Square Matrix) : \(N \times N\) 인 행렬. 전치행렬(Transpose Matrix) : 행과 열을 바꾼 행렬. \(A= ...

템플릿 패턴(Template Pattern)

[디자인 패턴] 템플릿 게임 프로그래밍 패턴 더 빠르고 깔끔한 게임 코드를 구현하는 13가지 디자인 패턴을 참고하여 작성하였습니다. 템플릿 패턴은 공통적인 메소드를 차례대로 실행하도록 기반클래스에서 정의하고 메소드의 구현은 각 파생클래스에서 담당하는 기법이다. 구현 아래 내용은 템플릿 패턴을 구현하기 위한 예시를 보여준다. 디자인 패턴은 코드가...

팩토리 패턴(Factory Pattern)

[디자인 패턴] 팩토리 게임 프로그래밍 패턴 더 빠르고 깔끔한 게임 코드를 구현하는 13가지 디자인 패턴을 참고하여 작성하였습니다. 팩토리 패턴은 팩토리 메소드 패턴과 추상 팩토리 패턴 2가지 기법으로 나누어진다. 팩토리 메소드 패턴은 객체 생성을 담당하는 메소드를 만드는 기법 어떤 객체를 생성할지는 매개변수로 전달한다. ...

싱글턴 패턴(Singleton Pattern)

[디자인 패턴] 싱글턴 게임 프로그래밍 패턴 더 빠르고 깔끔한 게임 코드를 구현하는 13가지 디자인 패턴을 참고하여 작성하였습니다. 싱글턴 패턴은 오직 한 개의 객체(Instance)만 갖도록 보장하며, 어디서든 접근할 수 있는 전역 접근점을 제공하는 기법이다. 구현 아래 내용은 싱글턴 패턴을 구현하기 위한 예시를 보여준다. 디자인 패턴은 코드...

관찰자 패턴(Observer Pattern)

[디자인 패턴] 관찰자 게임 프로그래밍 패턴 더 빠르고 깔끔한 게임 코드를 구현하는 13가지 디자인 패턴을 참고하여 작성하였습니다. 이미지 출처 객체 상태를 계속해서 판단하는 관찰자(Observer) 클래스와. 관찰을 당하는 객체를 나타내는 대상(Subject) 클래스로 이루어진다. 구현 아래 내용은 관찰자 패턴을 구현하기 위한 예시를 보...

분산과 표준편차(Variance & Standard Deviation)

[20.01.11 updated] 다음과 같은 수열이 있을 때, [[-10, 0, 10, 20, 30]] 평균 [average = \frac{-10 + 0 + 10 + 20 + 30}5 = \frac{50}5 = 10] 편차 평균과 각 숫자(변량)의 차이를 나타낸 값. 편차의 합은 항상 0 이다. \(deviation = number...

다각형 면적 구하기

[20.01.08 updated] 헤론의 공식 삼각형의 길이가 각 $a,b,c$ 일 때, 면적을 $S$ 라 하면 $p$ 를 다음과 같이 정의하고 면적을 구할 수 있다. \(p = \frac{a+b+c}2\) [S = \sqrt{p(p-a)(p-b)(p-c)}]

내적과 외적(Dot Product & Cross Product)

[20.01.08 updated] 벡터 $A$와 $B$에 관하여, 내적 (Dot Product, Inner Product, Scalar Product) [{A}\cdot{B} = \sum_{k=1}^n(A_k B_k) =|A||B|cos\theta] 외적 (Cross Product, Outer Product, Vector Product) [...

Docker Toolbox pre-create check Error

도커 툴박스 설치 에러 해결법 Windows(10 home, 8, 7 ver)에서 도커를 사용하기 위해 설치하는 Docker Toolbox 에서 다음과 같은 에러가 발생시 시도해 볼 수 있는 것들을 정리해 보았습니다. Running pre-create checks... Error with pre-create c...

문자열 자르기

[C++] string 클래스 함수 (find, substr, erase) 를 통해 자르기 자르고 싶은 문자열에서 구분자(delimiter)를 find함수를 통해 찾고 옮겨 담는 형식으로 구현하였습니다. 인터넷 상에 문자열 나누기 코드는 여러 종류가 있으니 취향에 맞게 골라서 사용하시면 됩니다. 제가 짠 코드의 경우, string 라이브러리만 사용...

l-value, r-value, 람다 함수

[C++] l-value 와 r-value c++ 은 value category 를 나누어, lvalue 와 rvalue 로 나눈다. lvalue는 값을 위한 공간(주소)이 존재하고 rvalue는 값을 위한 공간(주소)이 존재하지 않는다(정확히는 메모리에 존재하지만 주소가 없어 어디인지는 알 수 없는). int main() { int i; i =...

스마트 포인터/메모리 풀 (Smart Pointer/Memory Pool)

[C++] 스마트포인터 (Smart Pointer) c++ 에서 new 키워드를 통해 동적 할당한 메모리는 반드시 delete를 사용하여 해제해야한다. 만약 해제 하지 않으면 메모리 누수(memory leak)가 발생하게 되는데 스마트 포인터에서는 이러한 실수를 방지하기 위해 사용이 끝난 메모리를 자동으로 해제해주는 것 외에 다양한 기능을 제공한다....

벡터/리스트/데크

[C++] 벡터/리스트/데크 STL 시퀀스 컨테이너(sequence container) 시퀀스 컨테이너 (Sequence Container) : 인덱스에 따라 원소를 순서대로 보관하는 컨테이너로써 vector, list, deque 등이 있다. 차례대로 원소를 추가/제거 하는 push, pop과 첫/마지막 원소를 참조하...

셋/맵

[C++] 셋/맵 STL 연관 컨테이너(associative container) 연관 컨테이너 (Associative Contatiner) : 키(key) - 값(value) 구조를 가지는 컨테이너로써 set, map, hash 등이 있다. 특정 키 값을 가지는 데이터가 존재하는지만 확인하고 싶을 경우 set을 사용하고...

C# 프로그래밍 기법

C# 프로그래밍 기법 이 포스팅은 Effective C# 을 읽고 내용을 정리하기 위한 스터디용 포스팅입니다. 실제 내용과 다를 수 있으니 본 책을 직접 구매하셔서 읽는 것을 추천합니다. (update 20.04.15) 지역 변수 선언시 var을 사용할 것 길어진 타입명을 정확히 기술하는 것보다, var 을 사용하고 변수...

닷넷(.NET)

닷넷 프레임워크 MS에서 발표한 프로세스 가상 머신, 프레임워크가 설치된 환경에서 닷넷 프레임워크 기반 응용프로그램을 실행시킨다. 닷넷 프레임워크에는 가상 머신 역할을 하는 CLR(Common language Runtime) 구성요소가 있다. CLR 구성요소가 로드되어 실행되고 EXE/DLL 에 함께 저장되어있는 닷넷 코드를 실행한다. C# 컴파...

컴파일/런 타임 (Compile/Run Time)

벡터(Vector) 컴파일타임(Compiletime) 컴파일이란? 개발자가 작성한 소스코드를 기계가 이해하기 위해서는 아래와 같은 컴파일 과정이 필요하다. 컴파일 과정에서 소스 코드를 전처리하고 컴파일러에 의해 기계가 이해할 수 있는 저 수준 언어로 작성된 목적 파일로 변경한 후, 목적 파일들을 링커가 하나의 실행 파일로 만들어 주게된다. ...

트리(Tree)

트리 (Tree) 노드(Node)와 간선(Edge)으로 이루어진 계층형 비순환 그래프. 1개의 루트 노드, 각 노드는 0개 이상의 자식 노드를 갖고있다. 루트 노드 : 부모가 없는 노드 단말 노드 : 자식이 없는 노드 내부 노드 : 단말 노드를 제외한 노드 형제: 같은 부모를 가지는 노드 크기(Size) : 자신과 자식 노드의 수 계층(...

행렬 변환(Matrix Transform)

[그래픽스] 행렬 변환 컴퓨터 그래픽스에서는 물체에게 변환(이동, 회전, 크기)을 하기위해 행렬 구조를 사용한다. 이유는 행렬의 곱셈 특성때문에 일련의 변환을 한 번에 수행할 수 있어 연산량을 줄여줄 수 있다. 단, 여러가지 변환 행렬을 적용할 때 반드시 크기 - 회전 - 이동 의 순서로 곱해주어야 한다. 행렬은 교환법칙이 성립하지 않기 때문에 행...

가비지 컬렉션(Garbage Collection)

가비지 컬렉션 메모리 관리 기법. 동적 할당 메모리 중 사용하지 않는 메모리를 자동으로 찾아내 해제하는 기능. 추적 기반 가비지 컬렉션 (Tracing Garbage Collection) 특정한 타이밍에 현재 할당된 모든 메모리를 조사하여 접근 불가능한 메모리를 해제. JVM / .NET Framework 의 가상머신 또는 Python /...

TCP/UDP

TCP/UDP 네트워크의 전송 계층(OSI-5계층)에서 데이터 전송을 제어하기 위한 프로토콜(규약)로써 TCP와 UDP를 사용한다. TCP 연결형 서비스(두 호스트가 연결되어 있음, 신뢰성 보장)로 가상 회선 방식(패킷 전송을 위한 논리적 경로를 배정)을 제공한다. 양끝 호스트에서 동시에 통신이 가능한 전이중(Full Duplex) ...

OSI 7 계층 (OSI 7 Layer)

OSI 7 계층 네트워크 통신이 일어나는 과정을 7단계로 나눈 모형으로 네트워킹 기능을 설명하는 개념. 7계층 - 응용(Application) 사용자와 직접적으로 상호작용하는 응용프로그램 단계. e.g. 크롬, 오피스, 스카이프 6계층 - 표현(Presentation) 응용프로그램 또는 네트워크에서 사용하는 데이터 표현 방식을 다룬다. e...

렌더링 파이프라인(Rendering Pipeline)

[그래픽스] 렌더링 파이프라인 정점(Vertex) : 좌표(x, y, z), 법선(nx, ny, nz), 텍스처 좌표(u, v), 색상(color) 정보 등을 담을 수 있다. 버텍스가 모여 폴리곤(Polygon)이 되고, 폴리곤이 모여 메쉬(Mesh)가 된다. 메쉬를 그릴 때, 중복 되는 정점이 많으므로 정점의 인덱스 버퍼를 가지고 ...

객체 지향 프로그래밍(Object Oriented Programming)

객체 지향 프로그래밍 프로그램의 모든 것을 객체(Object)로 취급하는 프로그래밍 패러다임. 구성요소 클래스(Class) 공통되는 속성과 기능을 정의한 것. 사용자 정의 데이터 형. 객체(Object) 클래스의 인스턴스(메모리에 할당된). 고유의 속성을 가지며 클래스에서 정의한 기능을 수행할 수...

네트워크 용어 정리

[20.01.08 updated] 동기/비동기 동기식 : 작업을 요청한 뒤 완료 여부를 확인할 때까지 대기한 후, 요청받은 곳의 작업이 완료되면 요청한 쪽의 작업을 종료하는 것. e.g. 클라이언트 A가 서버 B에게 부품 재고의 수를 변경 요청한 후, 서버 B는 변경을 완료하고 다시 A에게 완료했음을 알린다. A는 변경이 ...

좌-우측값 레퍼런스(l-value r-value reference)

좌-우측값 레퍼런스(l-rvalue reference) int a = 10; C++ 에서는 위에서 변수 a와 같이 좌측에서 사용되는 주소를 가지고 데이터를 보관하는 값을 좌측값(lvalue), 임시로 사용하며 주소를 가지지 않는 10 과 같은 값을 우측값(rvalue)이라고 한다. int& ref_a = a; int& ref_10...

Pagination is unavailable. Please ensure Jekyll pagination is configured.