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 : 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..
Unity Network : Photon Pun 2 - Lobby / Room
·
Unity
Photon PUN2 : Lobby / Room Photon 네트워크의 전체 흐름 요약Photon PUN2에서 클라이언트는 다음과 같은 흐름으로 네트워크에 참여한다.Photon Server Connect → Lobby → Room → InGameLobby: 방 목록을 조회하고, 방을 고르는 대기 공간Room: 실제로 플레이어들이 모여 동기화된 게임을 진행하는 공간LobbyLobby는 말 그대로 방 목록을 관리하는 대기 공간이다.현재 열려 있는 Room 목록을 서버로부터 전달받는다플레이어는 여기서새로운 Room을 생성하거나기존 Room에 참가한다Lobby에 들어갔다고 해서 다른 플레이어와 동기화가 되는 것은 아니다.Lobby는 매칭을 위한 공간일 뿐이다.동기화X 없음게임 로직X 실행 불가Room 목록O 조..
Unity : Photon PUN2, Voice 2 로 실시간 멀티 플레이, 음성채팅 적용하기
·
카테고리 없음
Photon PUN2 와 Voice2로 멀티플레이, 음성채팅을 적용하기 위한 유닛 테스트다.거두 절미하고 과정을 빠르게 설명 Asset Store 에서 Photon PUN 2, Photon Voice 2 Free 버전을 다운 받는다.유니티 공식 에셋 스토어에서 검색해서 다운 받으면 된다. Photon 프로젝트 및 AppId 설정https://dashboard.photonengine.com/ko-kr해당 사이트에 접속해 회원가입 / 로그인 진행Dashboard (관리화면) 으로 이동새 어플리케이션 만들기로 Voice와 Pun을 생성해준다. 각각 창에 보이는 AppID를 사용해야한다. 유니티에서 세팅유니티 프로젝트에서 두 에셋을 다운로드 후 임포트 한다.Window 탭에 있는 Photon Unity Netw..
네트워크 : OSI, TCP/IP, Client-Server, P2P
·
Unity
OSI 7계층OSI 7계층은 네트워크를 역할별로 나눈 개념적 모델이다.실제로는 TCP/IP 기반을 많이 사용하지만, 문제 발생시 어디 계층의 문제인지 나눠서 판단하기에 유용하다. 7Application게임 로직 메시지 (로그인, 이동, 공격, 채팅)6Presentation직렬화/역직렬화 (JSON, Protobuf, BitStream)5Session세션 유지, 재접속, 룸 개념4TransportTCP / UDP 선택3NetworkIP 기반 라우팅 (보통 의식할 일 거의 없음)2Data LinkNIC, LAN 환경1Physical케이블, 무선 신호1계층 : 물리 계층 (Physical Layer)네트워크 데이터가 전기적, 전자적 연결에 의해 전송되는 물리적 계층0과 1의 on off의 디지털 데이터를 전송..