목록전체 글 (82)
지직전기
WPF에서 UI를 갱신할 때 Dispatcher를 어떻게 사용해야 할까? WPF로 프로그램을 처음 개발하다보니 UI 스레드와 백그라운드 스레드의 역할 차이, 그리고 데이터를 전달하는 과정을 제대로 이해하지 못해 무분별하게 혼용 사용하여 리팩토링 간 고생했던 기억이 있습니다. 새로 만들던 프로그램의 요구사항이 한번에 지도에 50000+ 개가 넘는 항적을 UI로 표시할 수 있도록 만드는게 목표였기 때문에 성능 개선에 좀 더 관심을 갖기 위해 아래 내용을 찾아보고 정리해보았습니다. 처음에는 단순하게 백그라운드에서 데이터를 받으면 Dispatcher를 통해 UI를 바로 업데이트하면 되지 않을까 하며 무분별한 Invoke와 BeginInvoke를 남발했는데 그로 인해 성능 저하가 발생하고(매 프레임간 버벅거림 발..
MVVM + DDD 패턴은 무엇일까?WPF로 프로그램을 개발하다 보면 자연스럽게 MVVM 패턴을 사용하게 된다.여기에 규모가 커지고 비즈니스 로직이 복잡해지면 단순 MVVM 구조만으로는 관리가 어려워진다.이때 많이 같이 사용하는 것이 DDD(Domain-Driven Design)이다.두 패턴은 서로 다른 문제를 해결하지만, 함께 사용하면 구조가 명확해지고 유지보수가 훨씬 쉬워진다.MVVM과 DDD의 역할 차이먼저 두 패턴의 역할부터 정리해보면 다음과 같다.(내용이 길어 접은 글로 대체) MVVM 패턴이란? - UI 구조를 분리하는 패턴더보기MVVM(Model–View–ViewModel)은 UI(화면)와 비즈니스 로직을 분리하기 위한 아키텍처 패턴이다. 쉽게 말해 화면(View), 화면을 제어하는 중간 관..
안녕하세요.이번에 읽어본 『한 걸음 앞선 개발자가 지금 꼭 알아야 할 클로드 코드』에 대해 리뷰를 적어보려합니다.올해 목표였던 책 3권 읽기를 이제야 시작하게 되었는데, 벌써 10월이 다 되어가네요..😂그래도 시작이 반이니, 올해가 가기 전 목표치까지 리뷰를 채워보도록 열심히 달려보겠습니다! 책을 읽게된 이유현재 회사에서 1년정도 근무하면서 C++ / MFC 기반으로 프로그램 개발을 하고 있었습니다.그러다 신규 프로젝트를 맡게되었는데 리더를 맡으신 차장님께서 MFC보다 라이브러리도 많고 레퍼런스할 자료들도 많은C# / WPF를 이용해 개발하는 방향으로 적극적으로 밀어붙이셨습니다.문제는 개발 기간이 길지 않아 C#을 새로 배우면서 적용하기가 빠듯했고 Copilot 등 AI 도구를 적극적으로 활용하길 권장..
문제 발생프로그램을 다중 실행하거나, 지도에 표시되는 오브젝트(Shapefile 등)의 개수가 많아질수록지도 이동이나 확대/축소 시 전시 화면이 뚝뚝 끊기는 현상이 발생. - 기존 3ms 내외였던 전시 주기가 최대 200~300ms까지 지연 - 마우스 반응도 느려지고, 전체적인 사용자 경험(UX) 저하 원인 분석OpenGL을 이용해 맵에 지형 및 오브젝트 등 항목데이터를 실시간으로 렌더링하고 있는데 렌더링하는 함수(RenderScene()) 내부에서 ShapeFile 도형 정보(라인, 폴리곤) 등의 정보를 매 프레임마다 초기화 후 다시 렌더링하는 방식(Immediate Mode)으로 동작. 즉, 매 프레임마다 동일한 도형을 반복적으로 매번 그리게 되어 특히 지도 이동, 확대/축소 명령 시 병목현상이 일어..
문제 발생프로그램의 항적관리 기능 중 삭제 명령 시 기존 항적이 삭제되고 항적번호가 1 증가한 새로운 항적이 생성되어야하는데 간헐적으로 기존 항적이 삭제되지않고 남아있음. 원인 분석1. 프로그램에서 항적이 전시되려면 타 체계에서 보낸 항적 정보가 담긴 메세지 구조체를 받아 우리 서버를 거쳐 Client로 보내는 방식2. 메세지는 100ms 간격으로 들어오고 주기적으로 들어오는 메세지 정보를 받아 항적 정보(위치, 항적번호 등)를 업데이트하며 삭제가 아닌 메세지 정보가 끊기면 미상 항적으로 60초간 전시했다 삭제되는 방식3. 타 체계에서 A라는 메세지를 보내다가 삭제 명령이 들어오면 B라는 메세지를 보내주는데 A가 출발한 상태에서 삭제메세지가 들어와 B라는 메세지를 보내주지만 이미 출발한 A라는 메세지는 ..
2024년을 돌아보며 2024년은 저에게 수많은 도전과 용기가 필요했던 한 해였습니다.10년간 복무했던 군을 떠나 새로운 시작을 다짐하며 개발자가 되기 위한 국비교육에 참여했고, 자소서와 이력서를 준비하며 본격적인 취업 활동에 나섰습니다. 취업 후에는 새로운 분야를 배우고 실무와 과제를 익히며 하루하루를 바쁘게 보내왔습니다.그 과정에서 전역 전에 충분히 준비하지 못했던 스스로에 대한 아쉬움과 '과연 개발자가 될 수 있을까?' 하는 확신의 부족으로 많은 고민과 갈등도 있었지만 꾸준히 나아가다보니 취업도 되고 현재는 회사에 잘 적응하여 다행히 목표했던 직업 전환에 성공 할 수있지 않았나 생각합니다. 2024년 성과작년 초에 블로그를 개설하며 2024년 Plan을 만들었던 적이 있습니다.요약해보면1. 자격증..
send()와 recv()는 1:1 매핑일까?socket을 이용한 통신프로그램을 짜다보면 send()와 recv() 함수는 각각 데이터 송수신을 담당하는 중요한 역할을 하지만, 흔히 생각하는 것처럼 이 두 함수가 1:1로 매핑되지는 않습니다. send()를 호출하면 즉시 대응하는 recv()가 실행될 것이라고 예상할 수 있지만, 네트워크 상태, 소켓 버퍼 크기, 패킷 크기 등의 다양한 요소가 데이터 송수신의 흐름에 영향을 미칩니다.아래 예시코드는 채팅서버에서 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'라는 긴 채팅메세지를 for문을 통해 한글자씩 보내도록 만든 코드입니다.#include "stdafx.h"#include #pragma commen..
소켓 프로그래밍 강의를 듣고 공부 내용을 정리해봤습니다.순서는 ①소켓프로그래밍 이론을 먼저 공부하고 ②Echo서버/Client를 구축해본다음 ③채팅서버를 만들고 최종적으로 ④IOCP모델을 기반으로 성능 개량까지 진행해볼 예정입니다. 개발 및 테스트 환경Windows 10Visual Studio 2022 CommunityWireshark(패킷분석도구)PC 2대와 인터넷 공유기(유선 인터넷 연결설정) 소켓(Socket)이란?소켓은 프로그램이 네트워크에서 데이터를 송수신할 수 있도록 네트워크 환경에 연결할 수 있게 만들어진 연결부입니다.소켓은 OS 커널에 구현되어 있는 프로토콜 요소에 대한 추상화된 인터페이스로,장치 파일의 일종으로 이해할 수 있으며 일반 파일에 대한 개념이 대부분 적용됩니다. 소켓 API..