다른 포스팅에서 타이머의 정밀도 문제로 FPS(Frames Per Second)를 구하면 정확하지 않다고 이야기를 했었습니다. (참고 : [.NET] 게임 루프(Game Loop)를 구현할 때는 'Environment.TickCount'를 사용하면 안 된다. ) 스톱워치(Stopwatch)를 이용한 정밀 타이머를 만들어 보고, 이것을 이용하여 둘의 차이가 얼마나 나는지 알아봅시다. 1. 타이머 구현 스톱워치 타이머를 구현하려면 1) 무한 루프를 돌리고 2) 우리가 원하는 간격에 이벤트를 보내는 3) 비동기 쓰래드를 만들어야 합니다. 구현은 아래와 같이 합니다. public async Task Start() { bool bLoop = true; long nLastTime = 0; Stopwatch sw =..
언제부터인가 비주얼 스튜디오에 핫 리로드(Hot-Reload) 라는 것이 생겼습니다. 소스 코드를 수정하면 바로 화면을 갱신하여 보여주는 기능입니다. 보통 ASP.NET와 WPF에서 사용하는 기능인데.... 이게 저장하면 바로 새로고침을 해버려서 참 불편한 기능입니다. 물론 순수하게 UI만 수정하는 경우에는 쓸만합니다. 옵션의 위치 도구 > 옵션 > 프로젝트 및 솔루션 > ASP.NET Core 에서 - CSS 핫 다시 로드 - 자동 빌드 및 새로 고침 옵션 을 원하는 대로 수정하시면 됩니다. '자동 빌드 및 새로 고침 옵션'을 보면 저장만 해도 지 혼자 빌드한다는걸 알 수 있습니다;;;; 전 마음 편하게 없음으로 바꿨습니다 ㅋ 마무리 WPF에서는 엄청 유용한데(거긴 자동 빌드를 안 하니까...) ASP..
.NET으로 사운드 파일을 재생하려면 보통 'SoundPlayer'를 사용합니다. 근데 이놈은 한 번에 하나의 파일만 재생이 가능합니다. 여러 파일을 재생하려면 'DirectX SDK', 'Windows Media Player SDK', 'NAudio' 같은 외부 라이브러리를 이용하거나 'WinAPI'를 이용해야 합니다. 이 포스팅에서는 'WinAPI'의 'mciSendString'를 이용하여 재생하겠습니다. 1. 'SoundPlayer'를 사용해 보자 'SoundPlayer'를 사용하여 파일을 재생해봅시다. 아래와 같이 개체를 초기화하고 private SoundPlayer _soundPlayer1; this._soundPlayer1 = new SoundPlayer(); this._soundPlayer1..
Environment.TickCount를 써서 게임 루프(Game Loop)를 만들었는데 계산한 FPS와 다르게 나옵니다??? 1. 'Environment.TickCount'의 문제원인을 찾던 중 발견한 내용MS Docs - <a href="https://docs.microsoft.com/ko-kr/dotnet/api/system.environment.tickcount?view=net-6..
'CentOS'는 최소 설치를 하면 네트워크가 비활성화 되어 있습니다. 이것을 활성화해야 원격 접속이 되니 어떻게 하는지 알아봅시다. 1. 이더넷 이름 찾기 최소 설치를 하고 아래 명령어를 날려봅시다. # ip addr show 두 번째가 인터넷과 연결된 이더넷의 이름입니다. 할당된 IP가 없는 걸 확인 할 수 있습니다. 이 이름을 기억해 둡시다. 2. 이더넷 활성화하기 아래 명령으로 사용할 이더넷 설정파일을 vi로 열어줍니다. # vi /etc/sysconfig/network-scripts/ifcfg-[장치 이름] 제 이더넷 이름은 'ens192'이니 아래와 같습니다. # vi /etc/sysconfig/network-scripts/ifcfg-ens192 vi가 열리면 아래와 같이 되어 있을 텐데 (아..
이전 포스팅에서 JWT(JSON Web Token)를 발급하고 인증하기 위한 처리를 했습니다. 이 포스팅에서는 이전 포스팅에서 만든 인증 처리를 연결하는 작업을 합니다. 연관글 영역 이 시리즈는 'ASP.NET Core 6'에서는 인증 처리를 이런 식으로 하는구나~~~ 라는 걸 알려주기 위한 목적이라 설계가 난잡합니다. 0. 구조 이 프로젝트에서는 'SQLite + Entity Framework'를 사용합니다. 이렇게 구성하면 DB를 사용하지 않을 때는 'InMemory'를 사용하여 메모리DB를 사용할 수 있어 이식성이 좋아서입니다. 연결정보를 받으면 코드 퍼스트(Code First) 방식으로 DB에 연결하여 테이블을 생성하고 데이터를 관리하게 됩니다. 누겟에서 Microsoft.EntityFramewo..
'OAuth2'는 인증방식을 표준화해둔 프로토콜입니다. 이것 밑에 토큰을 발급하고 인증하기 위한 시스템을 만들어 넣어야 하는데.... Json으로 토큰을 발급하고 인증하기 위한 방법의 하나가 'JWT(Json Web Tokens) 인증'입니다. 다른 프로젝트에서는 'IdentityServer4'를 이용하여 'JWT'을 발급하고 인증하는 것을 했었는데 이 포스팅에서는 직접 'JWT'를 발급하고 사용하는 방법을 다룹니다. 1부는 JWT를 발급하고 확인하는 것을 구현하고 2부에서는 이렇게 만든 JWT 사용하는 방법을 다룹니다. 연관글 영역 0. 프로젝트 생성 및 구성 프로젝트를 'ASP.NET Core'로 생성합니다. 'ASP.NET Core'에서 인증처리를 다음과 같은 구조를 가집니다. 미들웨어를 주입하면 ..
예전에 쓰던 SPA 프레임워크를 새로 만들면서 백엔드는 'ASP.NET Core 6', 프론트엔드 개발 중에는 'NPM'을 이용하기로 해서 'Node.js'를 사용하기로 했습니다. 그렇다면 'NPM'을 올려야 하는데.... 올리는 김에 'NPM Task Runner'를 올리기로 했습니다. 'NPM Task Runner'는 선택 사항이지만 있으면 'NPM 패키지 관리를 UI로 할 수 있습니다. [ASP.NET Core 6] ASP.NET에 NPM 세팅하기 (feat. Task Runner) [ASP.NET Core 6] ASP.NET MVC + NPM (feat. webpack, sass) *이 프로젝트는 Visual Studio 2022로 되어 있습니다.* 0. 시작 전에 필요한 것 'Node.js'는 ..
유니티뿐만 아니라 UI/UX관련 작업을 하다 보면 UI쓰레드가 아닌 곳에서 작업하다가 문제가 생기는 경우가 종종 있습니다. 얼마 전 서버에서 온 데이터를 UI 뿌리는 테스트를 하고 있었는데 UI가 갱신되지 않는 현상이 일어났습니다. * 테스트에 사용된 버전 : Unity 2020.3.25f1 연관글 영역 1. 다른 쓰레드 이런 경우 원래는 에러가 나야 하지만 유니티도 그렇고 다른 플랫폼도 그렇고..... 에러가 안 나는 경우가 있긴 합니다. ㅎㅎㅎㅎ 결국 올 게 왔구나 하면서 검색을 하는데.... 뭐지? 증상을 격은 사람들은 많은데 해결에 대한 내용이 없지;;;; C#은 쓰레드에 액션만 던져주면 간단하게 해결이 가능합니다. 참고 : [WPF] 다른 스레드에서 UI쓰레드 접근하기 - Dispatcher.I..
이유는 모르겠지만 가끔 서버로 쓰는 컴퓨터가 제멋대로 재부팅을 하는데..... 가끔 아이피가 변경되는 사고(?)가 있어 포스팅합니다. ESXi의 아이피 고정하는 방법을 찾아보면 직접 콘솔에 붙어 작업하는 것만 나오는데요..... Web UI에서도 변경이 가능합니다. 1. 메뉴 찾기 메뉴를 찾는 게 좀 복잡하긴 합니다. 탐색기 > 네트워킹 또는 탐색기 > 네트워킹 VM Network > 추가 네트워크 에서 'Management Network'를 클릭합니다. 'vSwitch 토폴로지'에 보면 'VMkernel 포트'가 있는데 이것이 지금 ESXi가 사용하고 있는 네트워크 정보입니다. 클릭해서 들어가고 작업 > 설정 편집 을 눌러 줍니다. 2. 수정 여기를 설정하려는 값으로 수정하고 저장하면 됩니다. 마무리 ..