애드소프트 기술블로그

개발·서버 운영 실무 기록

애드소프트 박재호입니다. IIS·ASP.NET·Docker·메일서버를 직접 운영하며 겪은 문제와 해결 과정을 기록합니다.

최신 글

트레이 상주 앱 마무리 — 단일 인스턴스, 설정 즉시 적용, 한/영 전환, 70MB 단일 exe

창 없이 트레이에 상주하는 WPF 앱을 배포 가능한 상태로 마무리했다. Mutex와 이벤트로 만든 단일 인스턴스, 다시 시작 없이 바뀌는 단축키·테마·언어, 범위 외였던 영어 화면을 하루 안에 넣은 문구 표 구조, 155MB에서 70MB로 줄인 단일 exe와 그 대가까지 정리하며 연재를 마친다.

아직 없는 동기화를 위해 스키마부터 — GUID, UpdatedAt, 소프트 삭제와 JSON 가져오기

1차는 한 PC 전용이지만 2차 여러 PC 동기화를 대비해 Id는 GUID, 모든 엔티티에 UpdatedAt, 삭제는 소프트 삭제로 정했다. 이 결정이 JSON 가져오기의 충돌 처리(더 최신인 쪽 유지)로 바로 쓰인 과정과, 고정 GUID 샘플, VACUUM INTO 백업, EF Core에서 만난 함정을 정리했다.

어느 창에서든 단축키로 뜨는 WPF 검색 팝업 — RegisterHotKey, 포커스 복원, 첫 호출 82ms

어느 프로그램 위에서든 Ctrl+Shift+Space로 검색 팝업을 띄우고, Enter로 복사한 뒤 원래 창으로 포커스를 돌려주는 구조. 메시지 전용 창으로 받는 전역 단축키, 커서가 있는 모니터와 DPI, 미리 렌더링으로 줄인 첫 호출 시간, 클립보드 재시도, 마우스 클릭이 안 먹던 결함까지 정리했다.

Play 스토어 비공개 테스트까지 — Unity Android AAB, 서명 키, 버전 코드, 디버그 기호

Unity 6 게임을 Play 스토어 비공개 테스트에 올리기까지의 기록. 빌드 설정을 강제하는 에디터 스크립트, 저장소 밖 서명 키와 환경변수, 한 번 쓰면 다시 못 쓰는 버전 코드, 네이티브 디버그 기호, -version 인자 충돌, 광고 ID 선언과 개인정보처리방침, 결과 이미지 공유까지 정리했다. 연재 마지막 글이다.

판정은 방장 폰 한 대만 한다 — 여러 폰에서 게임 15개를 공정하게 돌린 방법

서버 없이 같은 Wi-Fi의 폰끼리 게임 15개를 돌리면서 정한 규칙들. 판정은 방장 폰만 하는 호스트 권위, 게임마다 같은 모양의 메시지 4종과 규약 버전 1→12, 지난 턴 입력을 버리는 turnSeq, 늦게 들어온 폰의 elapsed 따라잡기, 통신 지연을 봐주는 유예 시간, 토큰으로 같은 자리에 돌아오는 재접속까지.