디벨로켓 Unity 게임 클라이언트 개발자 8개월 과정 후기
·
ETC
배경을 이야기 하자면 나는 비전공자 웹/앱 프론트엔드 개발자 출신이고, 게임 개발자로 커리어 전환을 준비하던 중 디벨로켓의 온라인 부트캠프 과정을 발견해 지원하게 됐다. 실무에 필요한 커리큘럼들 위주로 갖추어져 있었고, 무엇보다 온라인이라는 부분이 매력적이었다.나의 경우에는 이미 C#을 제법 학습해둔 상태였기에 기초부터 시작하는 건 원치 않았지만, 그렇다고 다른 과정이라고 해서 개강, 수료 더 빨리 끝나거나 메리트 있는게 아니었기 때문에 심사숙고 끝에 디벨로켓으로 빠르게 결정했다. 커리큘럼기본적으로 모든 학습은 강의 → 과제 구조로 이루어진다.처음 상담 때는 과제가 제법 많고 어렵다고 했지만 솔직히 그렇게 엄청나게 무거운 편은 아니다.이 정도는 당연히 해야하고, 이 이상 추가로 학습을 해야 한다고 생각..
Node.js : GameJob Notifier - Firebase Function & Discord WebHook
·
Javascript (React, Next)
프로젝트 배경처음에는 GameJob 공고를 놓치지 않기 위해 C# WPF 데스크톱 앱(트레이 상주 + 알림)으로 운영했다.기능 자체는 잘 동작했지만, 실제 사용에서는 몇 가지 불편이 분명했다.알림을 받으려면 앱이 켜진 PC가 항상 켜져 있어야 함외부에서 모바일로 확인하기가 번거로움OS/실행 환경에 의존적인 관리 포인트가 늘어남그래서 “앱을 켜두지 않아도”, “데스크톱/모바일 어디서나” 알림을 받을 수 있는 방식으로 구조를 바꿨다.핵심 아이디어는 서버리스 폴링 + Discord Webhook 조합이다.Firebase Functions(2nd gen)가 5분마다 자동 실행Firestore에 이전 상태를 저장해 변경 감지신규 공고(Added)만 Discord로 전송결과적으로 클라이언트 앱 없이도, Discor..
C# : GameJob 신규 공고 알람 앱 - WPF(MVVM), HttpClient, SQLite, Windows Toast
·
C#
https://github.com/Ellug/GameJobNotifier 1. 프로젝트 배경채용 사이트를 수시로 확인하는 반복 작업을 줄이기 위해, GameJob 공고를 주기적으로 수집하고 새로운 공고가 등록되면 즉시 알림을 주는 데스크톱 앱을 만들었다.단순히 “목록 보여주기”가 아니라, 로컬에 상태를 저장하고 이전 상태와 비교해 변화(신규/비노출/복원) 를 감지하는 구조로 설계했다. 2. 사용 기술 스택Language: C#Runtime: .NET 10 (net10.0-windows)UI: WPF + MVVM (CommunityToolkit.Mvvm)Hosting/DI: Microsoft.Extensions.HostingData: SQLite (Microsoft.Data.Sqlite)Crawling:..
C# : Chzzk(치지직) VOD / Clip 다운로더
·
C#
CHZZK VOD/CLIP 다운로더 개발기 (C# WinForms)치지직 VOD와 CLIP을 로컬로 저장하고, VOD 구간 채팅까지 함께 보관하는 도구를 개발했다.목표는 단순 다운로드 기능이 아니라, 응답 구조 변경에 덜 깨지는 안정성과 유지보수 가능한 코드 구조를 확보하는 것이었다. 몇년전 트위치에서는 다시보기 영상을 구간 다운로드, 클립 다운, 영상 채팅 로그 수집 등이 가능한 앱들이 있었다.하지만 어느순간 하나둘씩 사용할 수 없게되었고, 치지직에는 유사 앱이 거의 존재하지 않게 됐다.그나마 풀려있는 치지직 다운로더는 광고 떡칠이라 불편해서 못 쓸 지경이었다. 그래서 다음 기능을 하나의 앱으로 통합했다.VOD/CLIP 모드 전환해상도 선택 + 구간 다운로드VOD 채팅 저장(JSON/SRT/TXT)ff..
Unity : 마샬링(Marshalling) 과 메모리 풀링(Memory Pooling)
·
Unity
마샬링(Marshalling) 이란? C#과 같은 Managed 환경은 가비지 컬렉터(GC)가 메모리를 관리하며, 데이터가 메모리에 배치되는 방식의 런타임에 의해 유동적으로 결정될 수 있다. 반면 C/C++ 같은 Unmanaged 환경은 개발자가 직접 메모리를 제어하며, 메모리 레이아웃이 고정되어 있다. 이런 서로 다른 두 환경에서 데이터를 교환하려면 번역 과정이 필요하게 된다.예를 들어 C#의 string 타입은 내부적으로 UTF-16 인코딩을 사용하는 객체지만, C++ 에서는 const char* (UTF-8 또는 ASCII) 형태의 포인터 배열로 돼있다.이때 C#의 문자열을 C++이 이해할 수 있는 메모리 구조로 복사하고 변환해 주는 작업이 마샬링이다. Blittable 타입과 Non-Blittab..
Unity : C#과 Unity에서의 암묵적 Boolean 값 변환 => if (gameObject) 가능??
·
Unity
JS, Phyton 같은 타 언어에서는 암묵적 Bool 변환을 지원한다.if 조건문에 넣은 값에 따라 true나 false로 평가되는 방식으로 말이다. 하지만 C#은 엄격한 타입 안정성을 지향하기에 반드시 명시적으로 bool 타입을 사용하지 않으면 컴파일 에러가 발생한다. 하지만 Unity 환경에서는 특이하게도 if (gameObject) 나 if (transform) 과 같이 객체 자체를 조건문에 넣어도 정상 작동이 되는 것을 볼 수 있다.위에서 말한 C#의 기본적인 정책과 상충하는 것으로 보이는 이 현상에 대해 간략하게 정리해보자. Unity 에서의 내부 구현C# 언어 자체에서는 지원하지 않는 문법을 유니티가 쓸 수 있는 이유는, C#의 연산자 오버로딩(Operator Overloading)을 활용..
Unity : 같은 PC에서 클라이언트 여러개 실행시 멈추는 현상 (Firestore)
·
Unity
현상Unity 프로젝트에서 Firebase Cloud Firestore를 사용할 때, 한 컴퓨터에서 클라이언트를 여러개 동시에 실행하면 완전히 멈춰버리거나 크래시가 발생하는 문제가 있었다. 원인 분석사실 크게 기술적인 원인 분석을 한 부분은 없었다.그런데도 왜 Firestore 라고 확신했냐면, Firebase Auth 도입 직후까지는 정상적으로 멀티 클라이언트 실행이 가능했던 프로젝트가 Firestore 도입 시점부터 바로 이런 현상이 발생했기 때문이다...물리적으로 다른 원인이 있을 수 없었다. 하지만 Firestore가 원인이라고 해도 이해가 가질 않았다.웹 에서 Firestore를 사용했던 경험으로는 하나의 컴퓨터에서 여러개의 브라우저, 여러개의 계정을 통해 Firestore에 아무리 접근해도 ..
Unity : 관리자 콘솔 구현 및 프리징 현상 개선
·
Unity
Unity DevConsole 프리징 개선 기록 : 반복 에러 콜랩스 + Flush 예산화 1) DevConsole의 기존 작동방식과 핵심 기술 이 DevConsole은 유니티 로그를 받아서 콘솔 UI에 텍스트로 뿌리는 구조다.핵심 흐름은 아래와 같았다.Application.logMessageReceivedThreaded 콜백으로 로그를 수신한다.유니티는 싱글쓰레드이기에 백그라운드 상의 멀티 쓰레드의 로그를 모두 수집하면 데드락 위험이 있어 lock 키워드를 통해 pending 버퍼에 로그를 쌓는 방식으로 데드락을 방지했다.콘솔이 열리면 버퍼에 쌓인 로그를 실제 콘솔 UI에 출력하는 lines 리스트에 옮긴다.lines 전체를 StringBuilder에 합쳐서 출력한다.추가로, “연속 중복(바로 직전 로..
Unity : Firebase 등록 및 Auth로 (이메일/소셜) 로그인 구현
·
Unity
Firebase애플리케이션 개발 시 백엔드 인프라 구축의 번거로움을 최소화하는 BaaS(Backend as a Service) 플랫폼이다.서버 코드 작성 및 인프라 관리 부담을 줄여 개발 효율성을 극대화하는 것을 목적으로 한다.즉, 우리는 Firebase를 이용해 간단한 인증부터 DB, API까지 여러 방면으로 서버 개발 없이 빠르게 활용할 수 있다. Firebase 등록 방법1. Firebase 검색 후 Firebase - Google 페이지로 들어간다2. Get started in console 3. 새 Firebase 프로젝트 만들기 클릭해서 프로젝트 만들기 4. 프로젝트 생성 프로젝트 이름을 지정하고 그 뒤에 Gemini 애널리틱스 사용 여부를 묻는데 그냥 둘다 사용 안 해도 된다.애널리틱스는 서..
Unity Network : Photon Pun2 - PhotonView, IPunObservable, RPC
·
Unity
PhotonViewPhoton 네트워크에서 동기화 단위의 기준점네트워크 상에서 하나의 오브젝트를 식별하는 IDRPC, 변수 동기화, Ownership 판단의 기준PhotonView가 없는 오브젝트는 네트워크에 존재하지 않는다역할설명네트워크 IDViewID로 객체 식별소유권 관리Owner / IsMineRPC 송신View 기준 호출변수 동기화Observe 대상 지정 PhotonView pv;pv.IsMine // 내가 소유한 오브젝트인가pv.Owner // 소유 Playerpv.Owner.ActorNumber // pv의 인덱스처럼 1000씩 증가하는 고유 값pv.ViewID // 네트워크 고유 IDpv.RPC(함수명, RpcTarget.Others, 함수 파라미터); IPunObserv..