왜 쿠버네티스인가? : 개발자의 고민저는 꽤 오랜 시간 C# 기반 장비 제어 소프트웨어를 개발해 왔습니다.과거에는 단일 장비에 설치형 프로그램만 배포하면 끝이었지만,최근에는 수십대의 장비 상태를 실시간으로 모니터링하고,빈번하게 하는 업데이트를 설비 다운 없이 배포해야 하는 상황에 직면했습니다. 기존의 방식으로는 유지보수의 한계가 명확했고, 결국 팀에서는 컨테이너 환경의 도입을 결정했습니다.하지만 막상 처음 접해보는 환경에 막막함이 앞섰습니다. 컨테이너 개념돠 낯선데, 파드니 디플로이먼트니 하는 용어들은 공부해야 하는 짐처럼 느껴졌습니다.이론서들은 너무 딱딱했고, 실습 위주의 책들은 큰 그림을 그려주지 못했습니다. 그림으로 잡히는 '큰 틀'이 책의 가장 큰 장점은 제목 그대로 '그림' 입니다. 텍스트로만..
분류 전체보기
저는 현업에 있으면서 늘 새로운 도구와 기술이 나오면 한 번씩은 써보는 것을 즐기고 있습니다.최근 AI 기반 개발 도구들이 급격히 발전하면서, IDE만 잘 다루면 되는 시대는 끝나간다는 생각을 자주 하게 됩니다. 그런 의미에서 클로드 코드는 단순한 코드 보조 도구를 넘어,개발 워크플로우 전체를 혁신할 수 있다는 점에서 매우 흥미로웠습니다. 책은 총 4주차 까지 월화수목금 하루씩 내용을 읽을 수 있게 구분해 둬서 좋았고 저는 아직 2주차 까지 읽었는데 이때까지의 느낀 점과 책의 내용을 정리했습니다. | 1주차 : 설치부터 첫 실습까지 책의 첫 주차는 클로드 코드를 설치하고 실행하는 기본 과정부터 시작합니다.설치 과정은 생각보다 간간했고, 명령어 기반 인터페이스는 개발자인 저에게 친숙했습니다.특히, 내장..
이번 포스팅은 C# Winform에서 DataGirdView 도구에 자동으로 행 번호를 넣는 방법에 대해 알아보겠습니다.| DataGridView 기존 열 생성Form에 DataGridView를 생성하고 Col1, Col2, Col3이라는 열을 생성했습니다.기존에는 데이터를 늘려도 앞에 행 번호가 없는 것을 확인할 수 있습니다. | DataGridView에 행 번호 추가하기 DataGridView 속성에서 이벤트 항목의 RowPostPaint를 설정합니다.RowPostPaint 이벤트는 각 행이 그려질 때마다 호출되는 이벤트입니다.더블 클릭하면 이벤트가 자동으로 만들어지니까 활용해 보세요! 그리고 만들어진 RowPostPaint 이벤트 메서드에 코드를 작성합니다. private void dataGrid..
프로젝트를 진행하거나 레거시 코드를 보다 보면 Action과 event 키워드를 많이 사용하는 것을 볼 수 있습니다. 이번 포스팅은 Action과 event의 개념적 차이와 예시를 통해 정리하겠습니다.| 기본 개념 이해기본적으로 Action과 event는 모두 메서드의 실행을 전달하는 역할입니다.하지만 구조와 사용 방식에 차이가 있습니다. ✅ Action이란?Action은 C#에서 제공하는 내장 델리게이트(Delegate) 타입입니다.메서드를 참조하여 실행할 수 있는 포인터 역할을 하며, 반환값이 없는 메서드(=void 메서드)를 참조합니다. public delegate void Action(T obj); // 기본 정의 (System.Action) Action은 최대 16개의 매개변수를 받을 수 있으..
이번 포스팅은 C#에서 사용하는 CancellationToken과 CancellationTokenSource를하나로 묶어 처리하는 기능인 CreateLinkedTokenSource에 대해 작성하였습니다. 📌 CancellationToken과 CancellationTokenSource란?먼저 앞서 비동기 프로그래밍 게시글에서 작성했던 내용이지만 용어 정리를 먼저 하겠습니다.CancellationTokenSource: 취소 요청을 보낼 수 있는 주체입니다. .Cancel()을 호출하면 이와 연결된 CancellationToken에 취소 신호가 전달됩니다.CancellationToken: 취소 요청을 수신하고 감지하는 객체입니다. Task나 메서드에서 이 토큰을 받아들여야 작업 취소를 감지할 수 있습니다...
저는 C#을 주력 언어로 사용하며 "객체지향"은 이론이 아닌 매일 부딪히고 있는 단어였습니다. 특히 장비 제어, 영상 분석, 통신 모듈 등 다양한 컴포넌트를 다루다 보면 코드의 복잡도는 눈덩이처럼 불어났습니다.그리고 그 복잡도를 어떻게 다루느냐에 따라 프로젝트의 생명력, 유지보수의 기간이 달라지곤 했습니다.그런 의미에서 "객체지향시스템 디자인 원칙"은 단순히 객체지향을 설명하는 교과서가 아니라,복잡도와 싸우는 개발자에게 보내는 실전형 지침서라 부르고 싶네요ㅎㅎ 책은 JAVA로 예시 코드와 설명을 진행하였으나, C#과 크게 다르지 않아 읽는데 불편함은 없었습니다.1장. 모든 게 복잡도 관리다 – 현실을 꿰뚫는 도입첫 장부터 강렬했습니다. “소프트웨어 개발은 결국 복잡도를 관리하는 일”이라는 선언은 그간 ..
이번 포스팅은 기존 프로젝트를 리팩토링 하면서 알게 된Task.ContinueWith 메서드를 분석하기 위해 작성했습니다. | 코드 예제먼저 같은 기능을 async/await 방식과 Task.ContinueWith 방식으로 구현했습니다. | async/await 방식public async Task GetDataAsync(){ var data = await Task.Run(() => { Thread.Sleep(1000); // 긴 작업 return "완료됨"; }); return $"결과: {data}";} | ContinueWith 방식public Task GetDataWithContinueAsync(){ return Task.Run(() => {..
C#을 사용하여 프로젝트를 진행하면 List 컬렉션을 자주 사용합니다.그중 특정 조건에 맞는 첫 번째 요소나 마지막 요소를 가져올 때First, FirstOrDefault, Last, LastOrDefault 같은 LINQ 확장 메서드를 활용할 수 있습니다.이 메서드들은 비슷해 보이지만 동작 방식에서 중요한 차이가 있으며,잘못 사용할 경우 런타임 예외로 이어질 수도 있습니다.이 글에서는 각 메서드의 차이점과 사용 예제를 통해 안전하게 활용하는 방법을 소개하겠습니다. | First vs FirstOrDefault| FirstFirst()는 조건에 맞는 첫 번째 요소를 반환합니다.만약 컬렉션이 비어 있거나 조건에 맞는 요소가 없다면 예외를 발생시킵니다. ex) First() 사용과 예외 발생 var num..