JK강재신 / Unity · XR
← 프로젝트 목록

쓰리디아이 / 2015

소부대 마일즈 훈련 준비 SW

훈련 준비와 실시간 상황 가시화

WPF / WinForms데이터 관리GPS
프로젝트 연도 / 기록 당시 상태2015
개발팀 · 리소스 인력 제외2인 · 팀원
사용 기술WPF · Winform · C#

OVERVIEW

프로젝트와 나의 역할

훈련자 데이터 관리, 장비 상태 연동, GPS 기반 2D 상황도 동기화를 담당했습니다.

원문에서 상세 공개가 제한된 프로젝트입니다. 기존에 공개된 담당 범위만 정리했으며 내부 구현을 재구현하지 않았습니다.

  • MySQL 및 CSV 파일 형태의 데이터 관리 기능 작업
  • 실제 마일즈 장비와의 네트워크 연동으로 마일즈 장비 상태 관리 및 훈련 준비 기능 작업
  • 실제 훈련 GPS 좌표 데이터를 기반으로 2D 위성지도 이미지와 좌표 동기화 작업 진행
  • 실제 마일즈 장비와의 데이터 연동으로 실시간 훈련 상황 가시화 작업 진행

ENGINEERING NOTES

기능별 구현과 문제 해결

담당 기능의 배경부터 구현 방식과 선택한 범위까지 정리했습니다.

01

훈련자 데이터와 장비 상태 관리

배경과 과제

훈련 준비 과정에서 훈련자 데이터와 실제 장비 상태를 함께 관리해야 했습니다.

내가 구현한 방식

MySQL·파일 기반 데이터 관리와 장비의 Bluetooth·Wi-Fi 네트워크 연동을 담당했습니다. 한·영 데이터 구분도 작업 범위에 포함됩니다.

선택의 이유와 범위

훈련자 데이터, 한·영 구분, 장비 상태를 연결하는 관리 기능입니다. 아래 예제는 합성 장비 식별자를 사용한 상태 만료 처리만 설명합니다.

2026 / RECONSTRUCTED EXAMPLE

하트비트로 장비 상태 표시하기

합성 장비 ID와 마지막 수신 시간으로 온라인 상태를 판단합니다.

  1. 합성 장비 신호
  2. 최근 시각 저장
  3. 타임아웃 비교
  4. 상태 표시

설명용 개념도 · 실제 제품 화면이나 전체 시스템 설계도가 아닙니다.

사용 방법과 적용 범위

단조 증가하는 초 단위 시간을 Heartbeat와 IsOnline에 전달합니다.

실제 장비 통신·개인정보·GPS 데이터는 사용하지 않는 일반 상태 모델입니다.

예제 코드 펼치기포트폴리오용 재구성 코드 · 실제 업무 소스 아님
// 2026 portfolio reconstruction. Generic fictional training data only; no device or military protocol.
using System;
using System.Collections.Generic;
namespace PortfolioExamples
{
    public sealed class TrainingRoster
    {
        readonly Dictionary<string,double> seen=new Dictionary<string,double>();
        public void Heartbeat(string device, double monotonicSeconds)
        {
            if(string.IsNullOrWhiteSpace(device)||double.IsNaN(monotonicSeconds)||double.IsInfinity(monotonicSeconds))throw new ArgumentException();
            if(seen.TryGetValue(device,out double previous)&&monotonicSeconds<previous)return;
            seen[device]=monotonicSeconds;
        }
        public bool IsOnline(string device,double now,double timeout)
            => timeout>=0 && seen.TryGetValue(device,out double last) && now>=last && now-last<=timeout;
    }
}
02

GPS 기반 2D 훈련 상황도

배경과 과제

실제 훈련 위치와 장비 데이터를 2D 위성지도 위에서 확인해야 했습니다.

내가 구현한 방식

WinForms·MapWinGIS 기반 GPS 좌표 표시와 실시간 상황 가시화 연동을 담당했습니다.

선택의 이유와 범위

장비 보안에 해당하는 상세 데이터 구조와 내부 코드는 공개하지 않습니다.

2026 / RECONSTRUCTED EXAMPLE

하트비트로 장비 상태 표시하기

합성 장비 ID와 마지막 수신 시간으로 온라인 상태를 판단합니다.

  1. 합성 장비 신호
  2. 최근 시각 저장
  3. 타임아웃 비교
  4. 상태 표시

설명용 개념도 · 실제 제품 화면이나 전체 시스템 설계도가 아닙니다.

사용 방법과 적용 범위

단조 증가하는 초 단위 시간을 Heartbeat와 IsOnline에 전달합니다.

실제 장비 통신·개인정보·GPS 데이터는 사용하지 않는 일반 상태 모델입니다.

예제 코드 펼치기포트폴리오용 재구성 코드 · 실제 업무 소스 아님
// 2026 portfolio reconstruction. Generic fictional training data only; no device or military protocol.
using System;
using System.Collections.Generic;
namespace PortfolioExamples
{
    public sealed class TrainingRoster
    {
        readonly Dictionary<string,double> seen=new Dictionary<string,double>();
        public void Heartbeat(string device, double monotonicSeconds)
        {
            if(string.IsNullOrWhiteSpace(device)||double.IsNaN(monotonicSeconds)||double.IsInfinity(monotonicSeconds))throw new ArgumentException();
            if(seen.TryGetValue(device,out double previous)&&monotonicSeconds<previous)return;
            seen[device]=monotonicSeconds;
        }
        public bool IsOnline(string device,double now,double timeout)
            => timeout>=0 && seen.TryGetValue(device,out double last) && now>=last && now-last<=timeout;
    }
}

CODE & VALIDATION

코드와 검증 범위

기존 코드 발췌와 2026년 포트폴리오용 재구성 코드를 구분해 제공합니다. 재구성 코드는 실제 제품 소스가 아니며, 일반 원리를 설명하기 위해 새로 작성했습니다.

Unity 6000.0.23f1 컴파일 및 Editor 검증 56개 통과. 실제 장비 연동과 제품 통합은 검증 범위에 포함하지 않습니다.

예제별 사용법과 검증 내용 ↗
다른 프로젝트 살펴보기 ↗