김환
안녕하세요 👋
README.md
Hi there, I'm Kim, Hwan 👋
안녕하세요 ㅎㅎ
게시글
- Windows 11에서 시작 프로그램이 늦게 실행되는 이유와 WaitForIdleState
예전에 레지스트리 Run 키에 프로그램을 자동 실행으로 등록해 두었는데, 로그인하고 바탕화면이 다 떴는데도 프로그램이 바로 실행되지 않고 1~2분, 길게는 몇 분 뒤에야 실행되는 증상이 있었다.
- 브라우저에서 바로 쓰는 화면 공유 서비스
화면을 잠깐 공유해야 하는 상황은 자주 생긴다.
- INotifyPropertyChanged(INPC)를 구현하지 않는 소스 바인딩에 따른 메모리 릭
WPF 데이터 바인딩은 값의 변경을 어떻게 감지하느냐에 따라 내부 동작이 크게 달라진다.
- .Net WPF 에서 간단하게 Http 웹서버 실행하기
.Net8 WPF 윈도우 응용프로그램에서 Http 웹서버 기능을 제공하기 위해 여러가지 간단한 Http 구현체를 사용할 수 있다.
- 목성과 오리온성운 어포컬 촬영
아파트 베란다에서 아이폰을 이용해 목성과 오리온성운을 촬영해보았다.
- APC 단상 UPS 고장 관련하여 A/S 신청 방법
최근에 구매한지 약 22 개월 정도 된 APC 단상 UPS에서 배터리 교체 경고가 계속 발생하여 보증 A/S 처리를 진행하였다.APC 사의 단상 무정전 전원 장치(UPS) 고장으로 인한 A/S의 경우 슈나이더 일렉트릭코리아에서는 처리하고 있지 않다.따라서 APC 단상 UPS 관련 A/S의 경우 아래 업체에 문의 후 A/S 신청을 해야 한다.
- Proxmox LXC 컨테이너의 디스크 용량 늘리기
Proxmox에서 동작중인 LXC 컨테이너의 디스크 용량이 부족한 경우 Proxmox Shell에서 아래 명령어로 디스크 용량 변경이 가능하다.명령어: pct resize <vmid> <disk> <size>나의 경우 107 vmid 에 대해서 32G 용량으로 변경하기 위해 아래 명령어를 입력했다.
- Intel Iris Xe 그래픽카드에서 WPF 렌더링 성능 문제
11세대 인텔 모바일용 CPU의 내장 그래픽인 Intel Iris Xe 그래픽카드 사용 시 WPF 에서 렌더링 성능이 나오지 않는 문제가 있다.기본적으로 화면에 컨트롤들을 렌더링하는 동작에서도 GPU 사용률이 80
- 아반떼AD 엔진&미션 마운트 교체 DIY
이번에는 소음&진동을 개선하기 위해 엔진&미션 마운트를 교체를 하려고 한다.. 첫 출고때와는 다르게 현재는 시동을 걸어놓고 가만히 있어도 몸으로 진동이 느껴지는 상태인데 마운트 교체 작업 후 개선되길 기대한다.
- 아반떼AD 4p 브레이크 패드 교체 DIY
저번에 이어서 이번에는 브레이크 패드 교체를 해보려고 한다. 오래전에 장착했던 사제 4p 인증 브레이크인데 인터넷에서 호환되는 패드를 구매했다.
- 아반떼AD 활대링크 교체 DIY
현재 아반떼AD 가솔린 2016년식 차량을 2015년 말에 출고하여 지금까지 약 15만키로 정도를 타고 있다. 연식이 오래됨에 따라서 여러가지 잡소리가 많이 나기 시작했는데 이번 기회에 DIY로 가능한 부분은 직접 교체를 해보려고 하는데 그 첫 번째로 활대링크 교체 작업을 해보았다.
- Windows PE(Portable Executable) File Format - 4
PE 파일에는 어떤 라이브러리에서 어떤 함수를 사용하고 있는지에 대한 정보를 가지고 있는데 이 정보를 IAT(Import Address Table) 라고 한다.
- Windows PE(Portable Executable) File Format - 3
NT 헤더 다음에 등장하는 Section 헤더들에 대해서 알아본다.Section 헤더의 구조체는 아래와 같다.
- Windows PE(Portable Executable) File Format - 2
DOS Stub 다음에 나오는 NT 헤더에 대해서 알아본다.NT 헤더의 구조체는 아래와 같다.
- Windows PE(Portable Executable) File Format - 1
윈도우에서 일반적으로 실행 가능한 파일 (EXE, DLL) 들은 PE(Portable Executable) 구조를 가지고 있는데 해당 구조에 대해서 알아본다.
- WPF Freezable을 이용한 DataContext 상속 트릭
WPF 에서 Attached Property 를 정의하여 사용하는 중 XAML 에서 해당 속성을 사용 시 바인딩이 적용되지 않는 문제를 발견했다.문제가 되는 코드의 일부는 아래와 같다.
- Windows 드라이버 개발을 위해 EWDK 사용하기
윈도우 드라이버를 개발하려면 MS에서 제공하고 있는 드라이버 개발 도구들을 설치해야 한다.
- OAuth2 Proof Key for Code Exchange
Proof Key for Code Exchange(RFC7636) 는 OAuth2 (RFC6749) Authorization Code Grant Flow 중 인가 코드를 발급하는 과정에서 인가 코드를 가로채는 공격을 막기 위한 방법을 설명하고 있다. 어떻게 공격을 막을 수 있는지 알아보자.
- .NET Framework 환경에서 HttpClient Class를 잘 사용하는 방법
최근에 .Net Framework 4.5+ 환경에서 HttpClient 클래스의 연결에 대해서 어떻게 관리하고 조정하는지 알아야 할 필요가 생겨서 관련 자료를 찾아 정리한다.
- 사용자 수에 따른 규모 확장성
수백만 사용자를 지원하는 시스템을 설계하는 방법은 도전적인 과제이다. 우선 한 명의 사용자를 지원하는 시스템 설계부터 시작하여 수백만 사용자를 지원하는 시스템 설계하고 더 나아가 수백만 사용자를 지원하는 시스템을 설계해보자.
- Flutter 상태 관리하기: InheritedWidget
앞에서 여러 하위 위젯에서 공통적인 상태 관리를 위해서 상위의 StatefulWidget을 만들고 하위에서 상태 객체를 얻거나 상위 위젯에서 상태를 전달 받아서 구현하는 방법을 알아보았다. 그런데 하위 위젯들에서 공통으로 사용하는 상태를 가지는 InheritedWidget 을 따로 만들어서 구현을 할 수도 있다.InheritedWidget도 이름에서 볼 수 있듯이 하나의 위젯인데 build() 함수가 존재하지 않는 위젯이라는 것이 다른 일반적인 위젯과의
- Git에서 지워진 커밋을 복구하는 방법
작업중에 Rebase, Reset 또는 기타 이유로 인하여 커밋이 사라지는 경우가 있다. 이 때 reflog 명령어를 이용하여 지워진 커밋의 복구를 할 수 있다.
- Flutter 상태 관리하기: StatefulWidget
플러터에서 상태 관리를 위해서 여러가지 방법을 사용할 수 있는데 계층 구조를 이루는 위젯 트리에서 하위의 여러 위젯들의 공통으로 이용하는 상태가 존재한다면 상위 위젯에서 상태를 관리하고 하위 위젯은 상위 위젯에서 관리하는 상태를 이용하는 방식으로 코드를 작성하는 게 구조적으로 좋을 수 있다.
- Flutter 상태 관리 개요
플러터 앱을 개발하다 보면 여러 화면에서 여러 상태를 공유해야 할 때가 있다. 이러한 상태 공유를 위해 고려할 수 있는 여러가지 방법에 대해 알아본다.위 그림은 플러터에서 UI를 구성하는 방법에 대한 한 줄의 표현이다. 플러터는 선언적으로 UI를 구성하게 되는데, 위젯의 build 함수 내에서 어떠한 상태를 반영해여 UI를 빌드하게 된다.이러한 선언적 스타일의 UI 프로그래밍은 기존 명령형 프로그래밍을 이용한 UI 와 비교하여 많은 이점이 있는데, UI
- Flutter 아키텍처 개요 4편: 렌더링 및 레이아웃
위젯의 트리 구조를 실제 화면에 그려지는 픽셀로 변환하기 위해 플러터가 수행하는 렌더링 파이프라인에 대해 설명한다.
- Flutter 아키텍처 개요 3편: 위젯
위에서 말하는 불변한 선언이라는 의미가 무엇인지는 아래의 Widget 클래스의 코드를 보면 알 수 있다.
- 플러터의 가비지 컬렉터
플러터에서는 Dart 를 개발 언어로 사용하고 런타임으로도 사용한다. 이 글에서는 Dart 런타임의 Garbage Collector 에 대해서 알아본다.
- Flutter 아키텍처 개요 2편: 반응형 유저 인터페이스
플러터는 페이스북이 리액트를 만들며 다시 생각한 디자인 원칙에 영감을 받아 만들어졌는데, 플러터에서 반응형 유저 인터페이스 제공을 위해 어떤 식으로 동작하는지 알아본다.
- Flutter 아키텍처 개요 1편: 레이어 모델
플러터 공식 사이트에서 설명하고 있는 플러터 아키텍처 개요에 대해서 읽어보고 정리해본다.
- Flutter의 위젯 소개
플러터의 화면에 보여지는 모든 UI 요소는 위젯으로 구성이 된다. 위젯은 자신의 상태(State)를 기반으로 화면에 그려지며, 해당 상태가 변경되면 기존 상태와 비교하여 화면에서 새로 그려야 하는 부분을 산출하여 해당 부분만 화면을 다시 그린다. 이런 방식으로 화면을 갱신되므로 성능상에 이점이 크다.
- Flutter 개발 환경 구성하기
윈도우에서 인텔리제이 IDE를 이용한 플러터 개발 환경을 구성하는 방법을 알아본다.
- WebRTC를 활용한 웹 기반의 영상채팅 서비스 개발
WebRTC 기술을 통해서 웹 기반의 영상채팅 서비스 개발을 위한 기본적인 지식을 정리한다.
- Visual Studio 2022 새로 설치 후 Nuget 패키지 소스 설정하기
VS2022를 컴퓨터 포맷 후 새로 설치하였는데 Nuget 패키지 소스에 대한 주소가 비어있어 기존 패키지들을 복구하지 못하는 문제가 발생하였다.소스 주소를 추가하여 문제를 해결하는 방법을 알아본다.
- Nginx Location Context에서 악마같이 동작하는 if 디렉티브
이번에 Nginx 설정에서 If 디렉티브를 이용하여 여러 설정을 해보다가 location 컨텍스트 안에서 이상하게 동작하는 부분을 발견하여 if 디렉티브의 동작에 대해서 자세히 알아본다.이 게시글의 내용은 다음의 Nginx 위키/Doc 내용을 기반으로 작성한다.If is EvilHow nginx "location if" worksIf Directive
- 도커를 이용한 cloudflare-ddns 적용하기
유동 아이피 + 개인 도메인에 대해서 클라우드 플레어 API를 이용한 DDNS 를 설정하는 방법을 알아본다.
- Proxmox 내부에 가상 사설망 구축
현재 집에서 운영하고 있는 Proxmox 서버의 대부분의 서비스는 외부에서 직접 IP를 이용하여 접근이 불가능하도록 가상 사설망에서 동작을 하고 있다.이러한 네트워크 구성을 만들기 위해 어떤 작업을 어떻게 해야 했는지 정리한다.
- 리눅스에서 APC UPS와의 상호작용을 위한 데몬 설치
집에서 운영 중인 서버가 간헐적인 정전이나 기타 이유로 인하여 전원이 나가는 경우가 간간히 발생했었다.그런 문제를 해결하기 위하여 이번에 APC의 UPS를 구매하게 되었는데, 리눅스 시스템에서 해당 UPS와 상호작용을 위하여 설정하는 방법을 정리한다. (데비안 계열의 리눅스 기준으로 설명한다)
- 2022년 12월 .NET Framework 보안 업데이트 후 WPF에서 XPS 렌더링이 되지 않는 문제
2022년 12월 .NET Framework 의 보안 업데이트가 발표되었는데, 해당 업데이트를 진행하면 WPF 앱에서 XPS 문서의 렌더링이 정상적으로 되지 않는 문제가 발생하여 해결 방법을 정리한다.
- Elasticsearch, Logstash, Kibana 를 우분투 22.04 에 설치하는 방법
도커를 이용한 설치가 아닌 우분투 자체에 ELK-Stack 을 설치하는 방법을 정리한다.깨끗한 우분투 서버 22.04에 ELK-Stack을 설치한다고 가정하여 작성한다.
- HTTPS와 SSL
서버와 클라이언트가 안전하게 통신을 하기 위해서 암호화 기술을 이용한다.HTTP는 HTML 문서를 전송하기 위한 프로콜인데 HTML 문서를 안전하게 전송하기 위해서 SSL 위에서 동작하는 프로토콜을 HTTPS라고 부른다. (S 는 Over Secure Socket Layer의 약자)여기서 말하는 Secure Socket Layer 를 줄여서 SSL 이라고 말한다.
- 대칭키와 비대칭키 암호화 기술
대칭키와 비대칭키에 대한 기초적인 지식을 정리한다.
- Proxmox에 설치한 Linux의 Disk 용량 확장
잘 작동하던 Jenkins 서버가 동작하지 않아 확인을 해보니 사용 가능한 용량이 남아있지 않아 서비스가 동작하지 않는 상태였다.아래와 같은 작업을 통하여 용량을 늘려 해결하였다.Proxmox에 리눅스를 설치 시 logical volume 으로 설치를 하였고 lsblk로 확인 시 아래와 같이 확인이 된다.명령어:
- ShootGame 개발 중 문제해결 과정 정리
은 웹으로 재미있는 무언가를 만들어보고 싶은 욕구로 만들게 된 간단한 멀티플레이 탑뷰 2D 슈팅게임입니다.게임을 구현하기 위해 고민했던 부분을 정리하고자 글을 작성합니다.
- 네트워크 기초
네트워크에 대한 기초적인 용어와 상식을 알아봅니다.
- 도커
도커를 이용한 컨테이너 기반의 가상화 기술을 사용하기 위해 정리한 내용입니다.
- Hwan'Story 블로그 서비스 개발 내역
지금까지 개발한 내용, 앞으로 개발해야 할 것들 정리.
- VisitCounter
visit-counter 프로젝트는 특정 페이지의 방문자의 수를 집계하고 싶어서 만들게 된 프로젝트입니다.
- 가상머신
실제 시스템에서 가상의 시스템을 에뮬레이션하여 실행하는 소프트웨어.일반적으로 실제 시스템을 “Host”, 가상 시스템을 “Guest” 라고 표현
- HTTP 사용자 인증 방식
비연결성/무상태의 특성을 지니는 HTTP 에서 SSH, FTP와 같은 연결지향형 통신의 흉내를 위하여 HTTP는 여러가지 기술을 도입함.쿠키, 세션 등을 이용하여 서버가 상태를 가지도록 함.
- ScreenRecorder
컴퓨터 화면과 기본 오디오 재생 장치의 오디오를 녹화하는 기능을 가진 녹화 프로그램 입니다.