본문 바로가기

전체 글288

게임 서버 프로그래밍 - 멀티 스레딩 2 / 스레드 주의사항, 뮤텍스 5. 스레드를 다룰 때 주의 사항경쟁 / 데이터 레이스두 스레드가 데이터에 접근해서 그 데이터 상태를 예측할 수 없게 하는 것 스레드 2개가 값 하나를 번갈아 가면서 접근하는 경우 x = 1;// Thread At1 = x + 3;x = t1;// Thread Bt2 = x + 5;x = t2;x is ?이와 같을때 절차지향적으로 생각한다면 x가 9가 되는 것을 기대하지만 실상은 스레드의 순서를 알 방법이 없기 때문에 x = 1;// Thread At1 = x + 3; // x is 1x = t1; // x = 4// Thread Bt2 = x + 5; // x is 1x = t2; // x = 6x is 4??이와같이 스레드 순서가 꼬이게 된다면 이해할 수 없는 결과를 맞이하게 된다.그림으로 보는 갱신.. 2026. 9. 14.
AI 정보 정리 (2026.09.14) - 데스크톱 AI, 실시간 음성, 비용을 줄이는 기술 AI 도구를 고를 때 모델 이름만 봐서는 차이를 알기 어렵다. 작업 중 얼마나 쉽게 꺼내 쓸 수 있는지, 응답을 기다리는 동안 무엇을 할 수 있는지, 계속 사용했을 때 비용은 어떤지도 중요하다. 이번에는 데스크톱 앱부터 음성 대화, API 최적화, 로컬 모델까지 살펴본다.1. Windows용 Gemini - 작업하던 화면에서 바로 부르는 AIGoogle은 9월 10일 Windows용 Gemini 앱을 출시했다. Windows 10과 11을 대상으로 전 세계에 제공되며, Alt + Space를 누르면 작업 중인 화면 위로 Gemini를 열 수 있다.문서를 쓰다가 요약을 부탁하거나 발표 자료 제목을 떠올리는 식으로 사용할 수 있다. 앱 안에서는 Gmail과 Google Drive의 정보를 활용한 작업, 이미.. 2026. 9. 14.
게임업계 동향 정리 (2026.09.14) - 엔진 업데이트, 신작 일정, 넥토리얼 채용 변화 1. Unity 6.6 - 웹 빌드와 성능 분석에서 달라진 점Unity는 9월 1일 Unity 6.6을 공개했다. 이번 버전은 다음 6.7이 나올 때까지 지원되는 Supported release다. 장기 지원 버전과 지원 기간이 같다는 뜻은 아니다. 공식 지원 안내에서는 Unity 6.3 LTS를 2027년 12월까지 지원한다고 설명한다.기능 중에서는 웹 빌드의 WebGPU 지원이 눈에 띈다. Unity는 6.6에서 WebGPU를 실제 서비스에 사용할 수 있는 그래픽스 API로 안내하며, 웹에서도 컴퓨트 셰이더와 GPU 스키닝, VFX Graph 등을 사용할 수 있다고 설명한다. 기본값은 WebGL 2이며 WebGPU는 설정에서 선택해야 한다.성능을 확인하는 도구도 바뀌었다. Frame Debugger에.. 2026. 9. 14.
개발 동향 정리 (2026.09.14) - Roblox RDC26, Vercel Sandbox, Pizza Bot, Xcode 27 9월 둘째 주 마지막에는 게임 제작 도구와 에이전트 실행 환경 쪽 발표가 이어졌다. Roblox는 Studio 안의 제작·테스트·관찰 흐름을 크게 넓혔고, Vercel과 AWS는 에이전트를 오래 실행하고 관리하는 기반을 손봤다. 모바일 배포와 협업 API에서도 바로 확인할 만한 변화가 나왔다.1. Roblox RDC26 - 제작부터 배포 이후 수정까지 한 흐름으로Roblox는 9월 11일 RDC26에서 발표한 크리에이터 도구 로드맵을 공개했다. 단일 기능보다 눈에 띄는 부분은 게임을 만들고 공개하는 전체 과정이 Studio와 Creator Hub 안에서 더 촘촘하게 연결된다는 점이다.2026년 말에는 비공개 상태에서 최대 10명의 연령 확인 친구를 초대하는 초기 테스트, 플레이어 지원 요청 관리, 클라이.. 2026. 9. 14.
게임 서버 프로그래밍 - 멀티 스레딩 1 1. 프로그램과 프로세스프로그램코드와 데이터로 구성된 명령어 모음이 들어 있는 데이터 덩어리 프로세스프로그램을 실행하여 명령어가 한 줄씩 실행되며 활동하는 상태 프로그램의 코드와 데이터는 로딩되어 프로세스 메모리로 불러들이게 된다. 프로세스 메모리에는 힙과 스택도 공존한다. 스택에는 현재 실행 중인 함수들의 호출 기록과 사용중인 로컬 변수들이 들어 있다. 프로그램은 저장 저장소에 존재하며, 프로세스는 RAM에 존재한다.같은 프로그램을 여러 개 동시에 실행할 수 있는데, 이와 같이 프로세스가 여러 개 실행되고 있는 것을 멀티 프로세싱이라 한다. 2. 스레드스레드명령어를 한 줄씩 실행하는 기본 단위스레드는 한 프로세스 한에 여러 개가 있다한 프로세스 안에 있는 스레드는 프로세스 안에 있는 메모리 공간을 공유.. 2026. 9. 13.
개발 동향 정리 (2026.09.13) - Copilot 리뷰, Kotlin ADK, GitHub Actions, Chrome 개발 도구 관련 소식은 며칠만 지나도 새로운 기능과 방식이 쌓인다. 2026년 9월 13일 기준, 최근 발표 중 코드 리뷰와 에이전트 운영, CI/CD, 웹 개발 방식에 직접 닿는 내용을 정리해본다.1. GitHub Copilot code review - 리뷰 후 수정 확인까지GitHub는 9월 11일 Copilot code review의 분석과 자동 해결 기능을 업데이트했다. 이전에는 AI가 리뷰 코멘트를 남기는 데 초점이 맞춰졌다면, 이제는 후속 커밋이 지적 사항을 해결했는지 다시 분석하고 코멘트의 해결 상태를 자동으로 갱신한다.수정 내용을 설명하는 커밋 메시지 생성, 셸 도구를 이용한 검증, 여러 분석 결과를 종합하는 리뷰 방식도 추가됐다. 코드만 읽고 의견을 내는 단계를 넘어, 수정과 실행 결과를.. 2026. 9. 13.
AI 정보 정리 (2026.09.13) - 대답하는 AI에서 일을 맡는 AI로 AI 관련 소식은 조금만 안 봐도 새로운 모델과 서비스가 쌓인다. 이름만 외워서는 뭐가 달라졌는지 알기 어려워, 최근 발표 중 개발과 실제 사용에 연결되는 내용을 정리해본다.1. Cursor Projects - 코드 한 조각보다 프로젝트 단위의 작업Cursor는 9월 10일 Projects를 발표했다. 기능 개발, 마이그레이션, 앱 제작처럼 한 번의 대화로 끝나기 어려운 작업을 계속 이어가는 기능이다.구조가 흥미롭다. 사용자는 조정 역할을 하는 coordinator agent와 대화하고, 이 에이전트가 실제 구현을 맡는 다른 에이전트들에게 일을 나눠준다. 프로젝트는 클라우드 컴퓨터에서 돌아가며, 조사한 내용과 테스트 방법 등을 공유 파일로 남긴다. Slack이나 PR을 지켜보거나 정해진 일정에 따라 반복.. 2026. 9. 13.
그래픽스 공부 1 - 렌더링 파이프라인 원문 작성일: 2026-09-07파이프라인이란?여러 명령어가 중첩되어서 프로그램이나 하나의 작업을 실행하게 도와주는 과정(연산의 집합)렌더링 파이프라인(레스터라이제이션)레이트레이싱 파이프라인레스터라이제이션 파이프라인메쉬 셰이더 파이프라인시대가 변해도 달라지지 않은 공부1. 업데이트 되는 그래픽스 라이프러리2. 3차원 데이터를 어떻게 2차원 데이터로 변환할 수 있는가?3. 위의 과정에서 어떤 알고리즘과 어떤 수학적 로직이 사용되는지Input Assembler 파이프라인3차원 모델 하나를 3차원 세상에 나타내기 위해서 가장 먼제 해야 하는 것은?모델은 점 = vertex로 이루어져 있고 점이 모여 폴리곤 = 점들의 집합이 된다.게임에서는 주로 삼각형을 가지고 3D 폴리곤을 정의하고, 이 정점 데이터들을 운반.. 2026. 9. 12.
레트로의 유니티 성능 최적화 - C# 스크립트 최적화 원문 작성일: 2026-08-23문자열 조합을 최적화하기문자열을 표시하는 string은 불변 클래스이다. 한 번 생성되면 문자열 값은 수정할 수 없으며, 문자열을 변경하는 모든 연산은 새로운 문자열 인스턴스를 생성한다.이 특성으로 인해서 문자열을 반복적으로 덧붙이는 코드는 의도하지 않은 메모리 할당과 GC를 유발한다.string text = "A: " + testNumA + " B: " + testNumB;위의 코드에서 문자열을 여러 번 이어 붙이는게 아닌 하나의 string.Concat() 호출로 변환한다.string text = string.Concat("A: ", testNumA, " B: ", testNumB);하나의 표현식 내부에서 수행되는 문자열 결합은 중간 임시 문자열을 여러 개 생성하지 않.. 2026. 9. 12.
레트로의 유니티 성능 최적화 - 프로젝트 설정 최적화 원문 작성일: 2026-08-23그래픽스 관련 설정Auto Graphics API Project Setting => Player => Other settings => Rendering사용가능한 모든 그래픽스 API에 대한 코드와 셰이더가 빌드에 포함된다. 해당 옵션을 활성화 할 시 ㅊ빌드 크기가 증가한다. 상황에 따라서 Auto 세팅이 아닌 직접 Graphics APIs에서 사용할 그래픽스를 직접 지정하는 방식을 추천한다.현재 사진의 유니티 버전에서는 따로 Auto Graphics API가 없고, 각 플렛폼마다 지정을 할 수 있게 되어 있다.멀티 스레드 렌더링 설정 Project Setting => Player => Other settings => Rendering Multithreaded Rend.. 2026. 9. 12.
레트로의 유니티 성능 최적화 - 메모리 구조의 이해 4 원문 작성일: 2026-08-19관리되는 힙 동작 방식관리되는 힙과 세그먼트new 키워드로 만든 인스턴스, C# 타입 유니티 컴포넌트를 생성시 해당 객체들은 관리되는 힙 영역에 할당된다. 관리되는 힙은 페이지 단위를 직접 다루지 않고 세그먼트라고 부르는 더 큰 단위를 사용한다. 세그먼트는 블록이라고 불리기도 한다.하나의 세그먼트는 연속된 여러 개의 페이지로 구성되며 하나의 세그먼트에는 하나 이상의 오브젝트가 할당될 수 있다.유니티에서 관리되는 힙은 여러 대의 세그먼트로 이루어진다.새 할당 발생관리되는 힙에서 새로운 할당이 발생하는 GC는 다음 순서로 할당할 수 있는 공간을 찾는다.기존 세그먼트 내부에서 연속된 빈 공간을 검색충분한 공간이 있으면 해당 공간을 사용공간이 부족하거나 조각화가 많이 존재할시 .. 2026. 9. 12.
레트로의 유니티 성능 최적화 - 메모리 구조의 이해 3 원문 작성일: 2026-08-13관리되는 메모리관리되는 메모리란스크립팅 백엔드의 가상 머신에 의해 관리되는 메모리C#코드의 메모리 할당은 .NET아래에서 돌아가기에 해당 부분에 포함된다. 정확하게는 .NET 표준을 구현한 Mono, IL2CPP 런타임 위에서 돌아간다. C# 코드의 메모리 할당이 모두 관리되는 메모리는 아니다. 클래스 인스턴스, 배열, 문자열 같은 것들은 관리되는 메모리가 맞지만, NativeArry, Marshal.AllocHGlobal, stackalloc 등 명시적 네이티브, 언매니지드 할당은 C#으로 작성해도 GC 대상이 아니며, 직접 Dispose()해야 한다.관리되는 메모리는 아래의 영역들로 구성된다.관리되는 힙C# 스크립팅 스택네이티브 VM 메모리관리되는 힙C#에서 발생하.. 2026. 9. 12.
레트로의 유니티 성능 최적화 - 메모리 구조의 이해 2 원문 작성일: 2026-08-11유니티의 메모리 구조가상 메모리 할당 분포아래는 유니티 앱이 가상 메모리 상에서 차지하는 할당을 크게 5가지 유형으로 나눈것이다.바이너리유니티 네이티브 메모리유니티 관리되는 메모리그래픽스네이티브 플러그인바이너리앱 실행 파일이라고 불린다.앱 실행에 필수적인 코드와 라이브러리를 포함하는 파일이다. 변경될 수 없는 읽기 전용 정적 코드이며 클린 메모리에 해당한다.유니티 네이티브 메모리유니티 엔진의 CPP구현에 의해서 발생하는 할당이다. C# 그래픽 객체를 로드시 유니티 내부에서 CPP 그래픽 객체를 생성한다. 이때 생성되는 CPP 객체 할당이 유니티 네이티브 메모리 할당에 해당한다. 더티 메모리에 속한다.유니티 관리되는 메모리 Managed MemoryC#을 포함하는 .NET .. 2026. 9. 12.
레트로의 유니티 성능 최적화 - 메모리 구조의 이해 1 원문 작성일: 2026-08-10IOS 메모리 구조와 동작 원리물리 메모리프로그램이 실행 중에 실제로 접근하는 데이터가 로드되는 공간. 하드웨어적 요소임.가상 메모리물리 메모리의 사용량은 애플리케이션이 인지하는 메모리 사용량과 다르다.물리 메모리 할당량 != 애플리케이션의 가상 메모리 할당량애플리케이션은 물리 메모리와 직접 상호작용을 하지 않으며, 애플리케이션의 메모리 할당은 가상 메모리에서 이루어 진다. 즉, 애플리케이션 수준에서는 물리 메모리에 직접 접근할 수 없다.이러한 가상 메모리를 사용하는 구조에서 프로그래머들은 물리 메모리를 핸들링 할 필요가 없으며, 운영체제는 물리 메모리를 최적화 하여 관리한다.1. 페이지와 페이지 프레임가상 메모리는 페이지 = Page 단위로 나누어 관리된다. 일반적으로 .. 2026. 9. 12.
레트로의 유니티 성능 최적화 - 프레임 디버거 원문 작성일: 2026-08-09프레임 디버거앱을 일시 정지한 상태에서 현재 프레임을 구성하는 유니티 랜더링 이벤트를 순서대로 보여주는 도구렌더링 순서 시각화렌더링 최적화 단서 찾기렌더링 배치 분석그래픽 버그 분석상단Window => Analysis => Frame Debugger로 열 수 있다창을 연 뒤에는 원하는 플레이어를 연결할 수 있다. 이때 개발자 모드가 활성화된 빌드만 연결이 가능하다.연결된 상태에서 Enable을 누를시 플레이어가 일시정지되면서 해당 프레임을 그리는 과정에 사용된 렌더링 이벤트들을 프레임 디버거에 표시해준다.프레임 디버거 창의 구성은 아래와 같다이벤트 스크러버현재 프레임에서 발생한 렌더링 이벤트를 앞뒤로 이동하며 확인가능이벤트 계층 구조현재 프레임을 구성하는 렌더링 이벤트들이.. 2026. 9. 12.
레트로의 유니티 성능 최적화 - 배처 원문 작성일: 2026-08-08렌더링 병목대중적으로 많은 드로우콜이 병목의 원인으로 꼽지만, 현대의 GPU는 충분이 강력하기 때문에 이는 크게 문제가 되지 않는다.일반적으로 더 큰 비용은 렌더 파이프 라인 상태 변경에 있다.일반적으로 연산 자체보다 연산 준비에 비용이 더 크기 때문이다. 렌더 파이프라인 상태 전환은 CPU, GPU 모두에게 비용이 든다.CPU 부담유니티에서 드로우 직전 다른 셰이더 패스를 사용할시 내부적으로 그래픽스 드라이버에 새로운 상태를 설정하라는 명령이 들어간다. 이 과정에서 API 호출 오버헤드가 발생하여 GPU로 전송해야 하는 버퍼가 늘어난다.GPU 부담새로운 렌더 파이프라인 상태를 위하여 기존 파이프라인을 멈추고 재구성하는 과정이 필요하다. 이때 GPU 파이프라인에 지연이 .. 2026. 9. 12.
레트로의 유니티 성능 최적화 - 그래픽스 명령어 원문 작성일: 2026-08-05그래픽스 명령어그래픽스 명렁어란?GPU가 렌더링과 관련된 작업을 수행하도록 지시하는것. 보통 그래픽스 드라이버 API를 통해 실행, GPU로 업로드 된다.여러 그래픽스 API들이 사용하는 명령어들- Draw Call도형을 그리도록 요청Clearing프레임 버퍼를 초기화블렌딩 설정알파 블렌딩 방식등을 설정하여 색상 조합 방식을 지정버퍼 설정 및 텍스처 설정버퍼와 텍스처를 GPU에 전달, 상태 설정렌더 파이프라인 상태 설정 = Set Render Pipeline State드로우 콜을 발행하기 전에 적용할 파이프라인 상태를 지정CPU에서 생성된 그래픽스 명령어는 명령어 버퍼 = Command Buffer에 담겨 GPU로 전송된다.그래픽스 명렁어를 어떤 순서로 실행하는 가에 따라.. 2026. 9. 12.
레트로의 유니티 성능 최적화 - 병목 지점 찾기 원문 작성일: 2026-08-04병목 스레드 찾기전체 스레드가 모두 동시에 병목이 되는 경우는 매우 드물다. 그렇기에 프로파일러로 어떤 스레드에서 병목이 발생하는지 파악하는 것이 중요하다.이때 첫 단계로 CPU 프로파일러에서 멩니 스레드가 다른 스레드 작업 완료를 대기하고 있는지를 확인해야 한다. 이때 아래의 대기 마커를 확인할 필요가 있다.메인 스레드에서 확인되는 주요 대기 마커Gfx.WaitForPresentOnGfxThread렌더 스레드 병목 또는 GPU 병목WaitForJobGroupID잡 워커 스레드 병목WaitForJobGroupID는 직접 확인하려 했는데 확인이 되지 않는다. WaitForJobGroupID — "A Sync Fence on a JobHandle was triggered. .. 2026. 9. 12.
개발 Flow에 대한 이야기 원문 작성일: 2026-07-10개발을 할때 보통 설계를 머리든, 실제 기록이든 하고 진행하게 된다. 이때 개발을 하다가 다음과 같은 양자 택일에 대해서 생각했다.설계를 할때부터 최대한 생각하는 시간을 가져서 최대한 최적화된 코드를 한번에 내는것우선 작동하는 매커니즘으로 작동을 확인한 뒤, 최적화를 진행하여 완성본을 내는 방식이때 서로 장단점이 있다고 생각한다.설계를 완성도를 우선시 할때장점1. 재작업 최소화이미 코드 단계에서 필요 없는 코드를 덜어내었기 때문에, 이후 작업에서 해당 부분이 병목을 일으킬 가능성이 낮아진다.2. 코드 일관성작업자가 짜는 코드 스타일이 반영되서 작성될 것이기 때문에 타 스크립트들과 비슷한 형태가 될 것이고, 이는 코드 리뷰시 좀더 원활하게 할 수 있도록 도움을 준다.단점1... 2026. 9. 12.
레트로의 유니티 성능 최적화 - 프로파일러 차트 보기 원문 작성일: 2026-07-08CPU 모듈 차트에는 메인 스레드 CPU 사용량이 시간의 흐름에 따라 그래프로 표시되며, 아래의 두 가지 지점에 주목한다. 스파이크(Spike) CPU 사용량이 짧은 시간 동안 급격히 증가한 지점 프레임 예산 초과 지점 목표 프레임 시간을 초과한 구간스파이크스파이크는 차트에서 그래프가 급격히 올라가는 구간을 의미함. 해당 프레임에서 CPU 부하가 순간적으로 많이 증가 했음을 나타냄해당 구간들은 게임 화면이 잠시 멈추거나 히칭이 발생할 수 있다. 히칭 프레임이 흔들리는 현상특히, 프레임 예산을 초과하는 스파이크는 반드시 원인을 확인해야 한다.평균 CPU 사용 시간프로파일러 UI를 확인하면 가로 방향으로 선이 보인다. 각 기준선은 아래와 같은 프레임 타임을 의미한다.. 2026. 9. 12.
서버 개발시 사용되는 HTTP Status Code 원문 작성일: 2026-07-07HTTP Status Code란?서버가 응답(Response)할 때 돌려주는 3자리 숫자로, 요청이 어떻게 처리되었는지를 나타내는 상태 값이다. "HTTP 상태 코드" 혹은 "HTTP Response Status Code"라고 부른다.상태 코드는 첫 자리 숫자를 기준으로 아래의 5가지 범주로 나뉜다. 범위 이름 의미 1xx Informational 정보 (요청을 받았고 처리 중) 2xx Success 성공 3xx Redirection 리다이렉트 (추가 동작 필요) 4xx Client Error 클라이언트 에러 5xx Server Error 서버 에러4xx — 클라이언트 에러 (Client Error)요청한 쪽(클라이언트)에 문제가 있을 때 .. 2026. 9. 12.
레트로의 유니티 성능 최적화 - 프로파일러 기반 지식들 원문 작성일: 2026-07-06프로파일링 = profiling이란?프로그램의 다양한 수치를 수집하고 분석하는 과정유니티의 프로파일러이다 해당 창을 통하여 개발자들은 자신이 만든 게임의 어떠한 부분들이 성능에 부하를 받고 있는지 확인할 수 있다.해당 창은 아래의 4가지 구성으로 이루어져 있다.프로파일러 컨트롤프로파일링 대상을 선택하고 프라포일링을 시작하거나 중지하는 등의 상호작용이 가능프로파일러 모듈프로파일링이 가능한 모듈의 목록이 표시됨프레임 차트현재 활성화된 각 프로파일러 모듈의 차트가 이 영역에 그려짐모듈 세부 정보 창현재 선택한 프로파일러 모듈에 기록된 상세 정보가 표시됨프로파일러 부착프로파일링을 수행하기 위해서는 프로파일러를 원하는 대상에 부착하는 과정을 거쳐야 한다.이때 빌드된 유니티 플레이어.. 2026. 9. 12.
유니티 Custom Update Manager에 대한 이야기 원문 작성일: 2026-07-05유니티의 패턴중에는 이러한 패턴이 있다https://docs.unity3d.com/6000.4/Documentation/Manual/events-per-frame-optimization.html이를 이해하기 위해서는 게임 엔진에 대한 지식이 필요하다보통 게임 엔진의 경우 cpp 언어로 작성이 주로 되고, opengl, drectX, vulcan 등 그래픽스 api를 사용하여 제작된다. 이러한 엔진들이 하는것은 무엇인가?둠은 맞는 예시는 아니다만, 보통 게임 엔진들은 아래와 같은 형태를 띈다초기화 (윈도우 생성, 리소스 로드 ...)while (게임이 실행 중){ 입력 처리 (Input) - 키보드/마우스/패드 상태 갱신 (Update) -.. 2026. 9. 12.
레트로의 유니티 성능 최적화 - 최적화 준비하기 원문 작성일: 2026-07-04최적화 사전 준비게임 최적화란?전반적인 성능과 안정성을 향상 시키는것최적화 작업을 진행하기전 이하 항목을 먼저 결정해야함플렛폼과 지원 사양 결정지표와 목표결정왜 최선을 목표로 하지 않는가?최적화를 아무리 해도 개선을 할 여지가 계속 생기기 때문에또한, 목표없이 최적화를 진행할시 중요한 부분을 놓치고 사소한 부분을 고친다고 개발 자원을 낭비할 수 있음타깃 하드웨어 결정하기권장 사양, 최소 사양 기기로 나뉜다권장 사양개발자가 의도한 게임의 그래픽스 품질을 사용자 경험으 저하없이 즐길 수 있는 사양하지만 하이엔드 기기를 말하지는 않음최소 사양그래픽스 품질은 낮아지짖만 필수적인 게임 플레이는 가능한 사양이러한 기기들을 기준으로 성능 지표를 측정하고 목표수치를 설정, 최적화를 진행.. 2026. 9. 12.
레트로의 유니티 성능 최적화 - 스레드 원문 작성일: 2026-07-09스레드유니티는 다중 코어를 활용하는 멀티 스레드 엔진이다. CPU 프로파일러의 타임라인 뷰를 사용하면 여러 스레드가 동시에 실행되는 것을 확인할 수 있다.CPU 프로파일러의 하이어라키 뷰에서는 드롭다운 메뉴로 스레드 목록을 확인, 선택 후 해당 스레드의 실행 내용을 확인할 수 있다.CPU 성능 문제는 모든 스레드에서 동시 병목이 되는 일을 거의 없고, 대부분 하나의 스레드에서 집중적으로 발생한다. ㄸ환 하나의 스레드에서 발생한 지원은 다른 스레드에 영향을 주어 대기 시간을 늘리는 구조가 된다. 그렇기에 성능 분석의 첫 단계는 어떤 스레드가 병목 상태인지 식별하는 것이다.유니티의 주요 스레드는 아래와 같다.- 메인 스레드게임 로직과 엔진 루프, 대부분의 C# 스크립트가 실행.. 2026. 9. 12.
OAuth란 무엇인가? 최근 네트워크를 다루어야 하는 일을 하게 되었다. 다만, 현재 내 기술 스택으로는 야매 네트워크를 만드는 정도이기에 짜잘하게 기술을 파먹어 보려 한다. 그중 게임 로그인에서 자주 사용하고 구현할일이 있었던 OAuth = Open Authorization를 잠시 정리해보려 한다 https://ksh-coding.tistory.com/62 Spring Security + JWT를 이용한 자체 Login & OAuth2 Login(구글, 네이버, 카카오) API 구현 (5) - OAuth란? / OAuth본격적으로, OAuth2 로그인을 구현하기 전에, OAuth가 무엇인지 알아보고자 합니다. 1. OAuth(Open Authorization)란? OAuth의 사전적 정의는 다음과 같습니다. OAuth는 인터.. 2026. 5. 25.
sql 기본 문법 정리 drop table if exists testtbl;create table testtbl( id int auto_increment, name varchar(10), in_date date);테이블 생성 select id, name, in_date from testtbljoin 연결 테이블 a on a column = b columnwhere 조건group by 그룹 기준 columnorder by 정렬 기준 desc/asclimit 제한수;테이블 조회 SELECT review_id, score, CASE WHEN score >= 90 THEN 'A' WHEN score >= 80 THEN 'B' WHEN score >= 70 THEN 'C'.. 2025. 12. 11.
데이터베이스 (2025 11 17) drop procedure if exists errorProc;delimiter $$create procedure errorProc()begin declare continue handler for 1146 select '테이블이 없음' as '메시지'; select * from noTable;end $$delimiter ;call errorProc();프로시저를 사용하여 error 핸들링도 가능하다 drop procedure if exists errorProc2;delimiter $$create procedure errorProc2()begin declare continue handler for sqlexception begin show errors; select '오류 발생' .. 2025. 11. 17.
컴퓨터 구조 - 기억장치(2025 11 17) 주기억장치 블록(K개의 단어들로 구성됨) = 하나의 캐시 라인에 적재함 b의 한 줄을 캐시 라인이라 칭한다이때 태그라는 것이 있는데, 각 캐시 라인을 식별하는 용도로 사용된다 블록주기억장치로부터 동시에 인출되는 정보들의 그룹주기억장치 용량 = 2^n 단어, 블록 = K 단어 -> 블록의 수 = 2^n / K라인캐시에서 각 블록이 저장되는 장소태그라인에 적재된 블록을 구분해주는 정보5.3 사상방식각 주기억장치 블록이 어느 캐시라인에 적재될 것인지를 결정해 주는 방식으로서, 캐시 내부 조직을 결정직접 사상완전 연관 사상세트 연관 사상1) 직접 사상각 주기억장치 블록이 지정된 하나의 캐시 라인으로만 적재됨주기억장치 주소 형식태그 필드라인에 적재되어 있는 블록의 번호라인 번호캐시의 m = 2^i 개의 라인들 중.. 2025. 11. 17.
데이터베이스 (2025 11 12) use cookdb;select U.userID, U.userName, sum(price * amount) as '총구매액', case when (sum(price * amount) >= 1500) then '최우수고객' when (sum(price * amount) >= 1000) then '우수고객' when (sum(price * amount) >= 1) then '일반고객' else '유령고객' end as '고객등급'from buytbl as B right outer join usertbl U on B.userID = U.userIDgroup by U.userID, U.userNameorder by sum(price * amount) desc;select 안쪽 속성에.. 2025. 11. 12.