REQUEST)
windows10 제어판에서 전원및 절전에서 추가전원 설정에서 고급전원관리옵션설정에서
프로세서전원관리에서 최대프로세서 상태를 100% 에서 80%로 줄이면, 미니 데스크탑의 팬소음을 줄일수 있나요?

  1. CPU 클럭 제한
    • 최대 프로세서 상태를 80%로 설정하면 CPU가 최고 속도로 작동하지 않고, 일정 수준에서 성능이 제한됩니다.
    • 이로 인해 CPU 발열이 줄어들고, 쿨링 팬이 고속으로 작동할 필요가 적어져 팬 소음이 감소할 수 있습니다.
  2. 전력 소비 감소
    • CPU가 100% 성능을 유지하려면 더 많은 전력을 소비하고, 이에 따라 발열이 증가합니다.
    • 80%로 제한하면 전력 소비가 줄어들면서 발열도 줄고, 팬 속도가 낮아질 가능성이 큽니다.
  3. 팬 소음 감소
    • CPU 온도가 낮아지면 팬이 천천히 돌거나, 심한 경우에는 아예 작동을 멈추는 경우도 있습니다.
    • 특히, 작은 크기의 미니 데스크탑은 발열 관리가 어려워 팬이 자주 빠르게 돌지만, CPU 제한을 걸면 소음이 확실히 줄어듭니다.

🔹 주의할 점

성능 저하 가능성

  • CPU 성능이 제한되므로, 고성능이 필요한 작업(예: 게임, 영상 편집, AI 모델 실행 등)에서 속도가 느려질 수 있습니다.
  • 단순 웹서핑이나 문서 작업 등은 큰 차이가 없을 가능성이 큽니다.

노트북에서는 배터리 절약 효과도 있음

  • 노트북의 경우, 이 설정을 적용하면 배터리 사용 시간이 증가하는 장점도 있습니다.

설정 후 온도 확인 추천

  • CPU 온도가 실제로 얼마나 낮아지는지 HWMonitor 같은 프로그램으로 확인해 보면 좋습니다.


Information)


https://www.genmachinepc.com/download-ren-series/

Ren 7 Series)Ren 7 Series)Ren 7 Series)Ren 7 Series)Ren 7 Series)Ren 7 Series)Ren 7 Series)Ren 7 Series)

GenMachine AMD 라이젠 7 4800H 미니 PC - 16GB 램 + 512GB SSD, DDR4 최대, 와이파이 6(2.4Gbps), RTL8852, 일상 사용을 위한 컴팩트 데스크탑 게이밍 PC, 통합 그래픽

Ex)
GenMachine Mini PC Ren4000 4500U AMD Ryzen5 4500U GPU DDR4 3200MHz RAM WiFi6 NUC

Especially)

Driver to significantly improve fan noise issues
 
~50도이하: 1단 무소음급
~60도이하: 2단 적당히 조용한소음
60도이상~: 3단 꽤 거슬리는소음 <<여기부터 고통의 시작
80도이상~: 4단 이륙

단계였었는데 패치후에는,

~70도이하: 1단 무소음급
70도이상~: 2단 적당히 조용한소음

대부분 2단 소음까지만 남 (어쩌다 3단소음 들릴때가 간혹있음)
하지만 당연히 풍량이 매우 약해졌으므로 발열도 미쳐서 70~80도 자주넘기고 스로틀링 팍팍 걸려주심
근데 어차피 소음때문에 성능제한하고 쓸거면 그냥 패치하고 온도제한 80~85도정도 걸어두는게
성능 소음에서 모든면에서 훨씬 나아보임
참고로 젠머신보드에 AN2P 쿨러로도 테스트해봤는데 잘됨.
보드도 거의 같으니 AN2P에서도 잘될거같긴한데 해보진 않아서 장담은 못함

안에 설명 파일도 있는거 같은데 뭔가 복잡해보임
테스트결과 단순히 바이오스를 덮어씌우거나 윈도 재설치하는 것만으로는
팬속이 원래대로 복구되지 않음

주의! 이 툴은 젠머신 ren4000 5000 7000 전용임 (4500u 4700u 5625u 5700u 5600h 5800u 5800h 7530u 7730u 등)
7840hs는 해당없음.

체크썸 확인결과 ren4000 5000 7000 모두 동일한 파일

https://www.genmachinepc.com/download/tools-ren/

Tools - Ren - GenMachine
Driver to significantly improve fan noise issues

http://www.genmachinepc.com

 

다운받고 압축풀면 확장자없는 근본없는 파일이 나오는데
이게 자동압축풀림 파일이라 뒤에 .exe 확장자를 붙여주고,
C:\ 위치에 옮겨두고,
cmd 관리자나 파워쉘 관리자 권한으로 cd\로 위치로 가서 파일 실행,
그럼 알아서 투닥투닥 재부팅되고 팬속

 적용됨. 끝

 

readme.txt
0.00MB

Windows 11과 Windows 10의 차이는 주로 UI, 보안, 성능 최적화 등의 소프트웨어적인 부분이 크지만, 하드웨어 성능 및 운용 안정성에도 영향을 미칠 수 있는 몇 가지 변화가 있습니다.


Windows 11이 하드웨어에 미치는 영향 및 개선점

1️⃣ CPU 및 메모리 효율성 향상 → 전력 소비 감소 및 발열 관리 개선

  • Windows 11은 CPU 코어 스케줄링을 개선하여 작업을 더 효율적으로 배분합니다.
  • Intel 12세대 이상 (Alder Lake) 및 AMD Ryzen 5000 이상에서 효율적인 스레드 배분이 이루어져 성능과 전력 소비가 최적화됨.
  • 결과적으로 노트북에서는 배터리 수명이 늘어나고, 데스크탑에서는 발열과 소음이 줄어드는 효과를 기대할 수 있음.

📌 예시:

  • Intel의 하이브리드 아키텍처(Performance Core + Efficient Core)를 활용한 스케줄링 최적화 → 성능 코어와 효율 코어의 배분이 더 효율적으로 동작.
  • Windows 10에서는 모든 코어가 비효율적으로 동작할 가능성이 있지만, Windows 11에서는 작업을 적절히 배분하여 전력 소모가 줄고 CPU 발열이 감소함.

2️⃣ 스토리지 (SSD) 성능 향상 → 부팅 속도 및 로딩 시간 단축

  • Windows 11은 NVMe SSD 및 DirectStorage API를 적극 활용하도록 설계됨.
  • DirectStorage 기술은 CPU 부하를 줄이고 GPU가 직접 데이터를 처리할 수 있도록 지원 → 게임 및 앱 로딩 속도 대폭 향상.
  • Windows 10에서도 일부 지원되지만, Windows 11에서 최적화가 더 잘 되어 있음.

📌 예시:

  • 게임 로딩 속도 개선: DirectStorage를 지원하는 게임(예: 포르자 호라이즌 5, 마인크래프트 RTX)에서 로딩 속도가 30~40% 단축됨.
  • 부팅 속도 개선: NVMe SSD 사용 시, Windows 11에서의 부팅 속도가 Windows 10보다 평균적으로 5~10% 빠름.

3️⃣ RAM 사용 최적화 → 백그라운드 프로세스 부담 감소

  • Windows 11에서는 Foreground Performance Priority 기능이 적용됨.
  • 즉, 현재 사용 중인 앱에 더 많은 리소스를 할당하고, 백그라운드 앱은 최소한의 리소스를 사용하도록 조정됨.
  • 덕분에 RAM 사용량이 줄어들어 시스템이 보다 안정적으로 동작함.

📌 예시:

  • 동일한 8GB RAM 환경에서, Windows 10은 약 4~5GB 사용, Windows 11은 3.5~4GB로 조금 더 가벼운 동작을 보임.
  • 특히 멀티태스킹(여러 개의 창을 동시에 띄우는 작업)에서 성능이 향상됨.

4️⃣ 그래픽 성능 최적화 → 게임 및 멀티미디어 성능 개선

  • Windows 11은 AutoHDR 및 개선된 GPU 스케줄링 기능을 제공하여 게임 및 영상 재생 품질이 향상됨.
  • Windows 10에서는 HDR이 지원되지 않는 게임도 Windows 11에서는 AutoHDR로 자동 업스케일이 가능.
  • 또한, 최신 DirectX 12 Ultimate을 기본 지원하여 RTX 기능, VRS(Variable Rate Shading) 등 GPU 성능을 극대화하는 기능을 활용 가능.

📌 예시:

  • DirectX 12 Ultimate이 적용된 게임(예: Cyberpunk 2077, MS Flight Simulator)에서 프레임 향상 효과
  • Windows 10 대비 AutoHDR이 활성화된 게임에서 색감 개선 및 휘도 향상

5️⃣ 배터리 최적화 → 노트북 사용자에게 유리

  • Windows 11은 전력 관리 알고리즘을 개선하여 배터리 소모량을 줄임.
  • 배터리 수명이 최대 10~15% 증가할 수 있음.
  • CPU와 RAM, SSD 사용량이 줄어들면서 저발열 설계가 강화됨.

📌 예시:

  • 동일한 하드웨어에서 Windows 10 대비 Windows 11에서 1~2시간 배터리 수명 증가 확인됨.

하드웨어 업그레이드 없이도 Windows 11로 성능 향상을 기대할 수 있는가?

가능한 부분이 있음.

  • 최신 CPU 및 SSD를 사용할 경우 Windows 11에서 더 효율적으로 동작함.
  • DirectStorage, AutoHDR, 전력 최적화 등의 기능으로 체감 성능이 Windows 10보다 나아질 수 있음.
  • 하지만 Windows 10에서 이미 최적화가 잘 되어 있다면 체감 차이가 크지는 않을 수도 있음.

💡 결론: Windows 11이 하드웨어에 미치는 주요 영향

✔ CPU 및 전력 효율 최적화 → 발열 및 소음 감소 🚀
✔ SSD & NVMe 성능 향상 → 부팅 및 로딩 속도 개선 ⚡
✔ RAM 사용 최적화 → 시스템 안정성 향상 🖥
✔ GPU 성능 개선 → 게임 및 멀티미디어 성능 향상 🎮
✔ 배터리 최적화 → 노트북 사용 시간 증가 🔋


❓ 업그레이드 추천 여부

  • 최신 하드웨어 사용 중이라면 → Windows 11로 업그레이드하는 것이 유리함.
  • 구형 하드웨어(특히 TPM 2.0이 없는 경우) → Windows 10 유지하는 것이 좋음.
  • 게임을 자주 한다면? → DirectStorage와 AutoHDR을 활용할 수 있어 Windows 11이 유리함.
  • 노트북 사용자라면? → 배터리 절약 효과로 인해 Windows 11이 더 유용할 가능성이 높음.

💡 Windows 10에서도 만족스러운 성능이라면 급하게 Windows 11로 업그레이드할 필요는 없지만, 최신 하드웨어를 활용한다면 Windows 11이 더 나은 선택이 될 수 있음. 😊

 

실시간 데이타를 3가지의 클라이언트에서 수신받는 케이스
1. WPF(Windows Presentation Foundation)는 마이크로소프트에서 제공하는 데스크톱 GUI 프레임워크로, 윈도우 기반 응용 프로그램의 사용자 인터페이스를 표시

2. FORM
3. WEB.BROWSER

 

 

dotnet new wpf -o WinFoundReceiver dotnet new winforms -o WinFrmReceiver
 

 

Tools - Ren

Driver to significantly improve fan noise issues

 

~50도이하: 1단 무소음급
~60도이하: 2단 적당히 조용한소음
60도이상~: 3단 꽤 거슬리는소음 <<여기부터 고통의 시작
80도이상~: 4단 이륙

단계였었는데 패치후에는,

~70도이하: 1단 무소음급
70도이상~: 2단 적당히 조용한소음

대부분 2단 소음까지만 남 (어쩌다 3단소음 들릴때가 간혹있음)
하지만 당연히 풍량이 매우 약해졌으므로 발열도 미쳐서 70~80도 자주넘기고 스로틀링 팍팍 걸려주심
근데 어차피 소음때문에 성능제한하고 쓸거면 그냥 패치하고 온도제한 80~85도정도 걸어두는게
성능 소음에서 모든면에서 훨씬 나아보임
참고로 젠머신보드에 AN2P 쿨러로도 테스트해봤는데 잘됨.
보드도 거의 같으니 AN2P에서도 잘될거같긴한데 해보진 않아서 장담은 못함

안에 설명 파일도 있는거 같은데 뭔가 복잡해보임
테스트결과 단순히 바이오스를 덮어씌우거나 윈도 재설치하는 것만으로는
팬속이 원래대로 복구되지 않음

주의! 이 툴은 젠머신 ren4000 5000 7000 전용임 (4500u 4700u 5625u 5700u 5600h 5800u 5800h 7530u 7730u 등)
7840hs는 해당없음.

체크썸 확인결과 ren4000 5000 7000 모두 동일한 파일

https://www.genmachinepc.com/download/tools-ren/

 

 

다운받고 압축풀면 확장자없는 근본없는 파일이 나오는데
이게 자동압축풀림 파일이라 뒤에 .exe 확장자를 붙여주고,
C:\ 위치에 옮겨두고,
cmd 관리자나 파워쉘 관리자 권한으로 cd\로 위치로 가서 파일 실행,
그럼 알아서 투닥투닥 재부팅되고 팬속 적용됨. 끝

 

BLPOP과 BRPOP은 Redis의 blocking list operations으로, 특정 리스트에서 데이터가 들어올 때까지 기다리는 명령어입니다. 하지만 두 명령어 사이에는 중요한 차이가 있습니다.


🔹 BLPOP (Blocking Left Pop)   (우리가 원하는것)

  • 왼쪽(head)에서 요소를 꺼냅니다.
  • 데이터가 없으면 지정된 시간(초) 동안 블로킹(대기)합니다.
  • 여러 개의 리스트를 지정하면 먼저 데이터가 들어온 리스트에서 값을 꺼냅니다.

📌 사용 예제:

 
BLPOP mylist 10
  • mylist의 왼쪽(head) 에서 데이터를 가져오며, 없으면 10초 동안 대기합니다.

🔹 BRPOP (Blocking Right Pop)

  • 오른쪽(tail)에서 요소를 꺼냅니다.
  • BLPOP과 동일하게 데이터가 없으면 지정된 시간 동안 대기합니다.
  • 여러 개의 리스트를 지정하면 먼저 데이터가 들어온 리스트에서 값을 꺼냅니다.

📌 사용 예제:

 
BRPOP mylist 10
  • mylist의 오른쪽(tail) 에서 데이터를 가져오며, 없으면 10초 동안 대기합니다.

✅ BLPOP vs. BRPOP 차이 정리

명령어데이터 꺼내는 방향FIFO/LIFO
BLPOP 왼쪽(Head) FIFO (First In, First Out)
BRPOP 오른쪽(Tail) LIFO (Last In, First Out)
  • BLPOP은 큐(FIFO) 방식과 유사
  • BRPOP은 스택(LIFO) 방식과 유사

🛠 실전 예제 (Python)

Redis의 BLPOP과 BRPOP을 Python에서 실행하는 예제입니다.

BLPOP 예제 (왼쪽에서 꺼내기)

 
import redis r = redis.Redis(host='localhost', port=6379, decode_responses=True) # 리스트에 데이터 추가 (왼쪽) r.lpush("mylist", "A", "B", "C") # 리스트: ["C", "B", "A"] # 왼쪽에서 꺼내기 (Blocking) print(r.blpop("mylist", timeout=5)) # 결과: ('mylist', 'C')

BRPOP 예제 (오른쪽에서 꺼내기)

 
# 리스트에 데이터 추가 (오른쪽) r.rpush("mylist", "X", "Y", "Z") # 리스트: ["X", "Y", "Z"] # 오른쪽에서 꺼내기 (Blocking) print(r.brpop("mylist", timeout=5)) # 결과: ('mylist', 'Z')

🔥 BLPOP, BRPOP 사용 시 주의할 점

  1. 리스트가 비어 있으면 블로킹되므로, timeout을 설정하는 것이 좋습니다.
  2. 멀티 리스트 지원: 여러 개의 리스트를 지정하면 가장 먼저 데이터가 들어온 리스트에서 값을 꺼냅니다.
     
    BLPOP list1 list2 list3 10
    • list1, list2, list3 중 가장 먼저 데이터가 들어온 리스트에서 값을 꺼냄
  3. 비동기 처리: BLPOP과 BRPOP은 블로킹 호출이므로, 비동기 처리가 필요한 경우 BRPOPLPUSH나 XREADGROUP을 고려하세요.

🚀 언제 BLPOP과 BRPOP을 사용할까?

시나리오추천 명령어
작업을 순차적으로 처리하는 큐가 필요할 때 BLPOP (FIFO)
최근 들어온 데이터부터 처리할 때 BRPOP (LIFO)
작업 처리를 분산하거나, 대기 시간이 없는 즉시 응답이 필요할 때 XREADGROUP (Redis Streams 활용)

요약:

  • FIFO 방식이 필요하면 BLPOP 사용
  • LIFO 방식이 필요하면 BRPOP 사용
  • Blocking(대기) 방식으로 비동기 처리를 원할 때 유용함

자연스럽게 좌우 이동하면서 일정 시간이 지나면 블록이 아래로 이동하도록 하는 방법을 설명해드릴게요.

1. 기본 구조

  • map[20,20] 배열을 사용하여 게임 맵을 구성
  • -1을 좌우 및 하단에 배치하여 경계를 설정
  • 색깔은 1~10 범위에서 랜덤 설정
  • 일정 시간이 지나면 블록이 아래로 이동

2. 좌우 이동 및 중력 처리

(1) 타이머 사용

WinForms의 Timer 컨트롤을 활용하여 좌우 이동 및 중력 적용을 분리하여 처리할 수 있습니다.

  • 좌우 이동 → 사용자의 방향키 입력 시 즉시 실행
  • 아래 이동(중력 적용) → Timer를 이용해 일정 주기로 실행

(2) 변수 및 로직

 
private int[,] map = new int[20, 20]; // 게임 맵 private int playerX = 10; // 플레이어 위치 (초기 X 좌표) private int playerY = 0; // 플레이어 위치 (초기 Y 좌표) private Timer gravityTimer; private int gravityInterval = 1000; // 중력 적용 주기 (1초)

(3) 중력 타이머 설정

 
gravityTimer = new Timer(); gravityTimer.Interval = gravityInterval; gravityTimer.Tick += GravityMove; gravityTimer.Start();

(4) 좌우 이동 처리

 
protected override void OnKeyDown(KeyEventArgs e) { if (e.KeyCode == Keys.Left) { if (playerX > 0 && map[playerY, playerX - 1] != -1) // 왼쪽 이동 가능하면 { playerX--; Invalidate(); // 화면 다시 그리기 } } else if (e.KeyCode == Keys.Right) { if (playerX < 19 && map[playerY, playerX + 1] != -1) // 오른쪽 이동 가능하면 { playerX++; Invalidate(); } } }

(5) 중력 적용 함수

 
private void GravityMove(object sender, EventArgs e) { if (playerY < 19 && map[playerY + 1, playerX] == 0) // 아래 이동 가능하면 { playerY++; Invalidate(); } }

3. 부드러운 이동을 위한 개선

(1) 애니메이션 적용

키를 한 번 누르면 즉시 이동하는 방식보다, 누르고 있으면 연속 이동이 되도록 하면 부드러워집니다. 이를 위해 KeyDown과 KeyUp 이벤트를 함께 사용하면 됩니다.

 
private bool movingLeft = false; private bool movingRight = false; private Timer moveTimer; public Form1() { InitializeComponent(); moveTimer = new Timer(); moveTimer.Interval = 100; // 연속 이동 속도 moveTimer.Tick += MovePlayer; } protected override void OnKeyDown(KeyEventArgs e) { if (e.KeyCode == Keys.Left) { movingLeft = true; moveTimer.Start(); } else if (e.KeyCode == Keys.Right) { movingRight = true; moveTimer.Start(); } } protected override void OnKeyUp(KeyEventArgs e) { if (e.KeyCode == Keys.Left) movingLeft = false; if (e.KeyCode == Keys.Right) movingRight = false; if (!movingLeft && !movingRight) moveTimer.Stop(); } private void MovePlayer(object sender, EventArgs e) { if (movingLeft && playerX > 0 && map[playerY, playerX - 1] != -1) { playerX--; } else if (movingRight && playerX < 19 && map[playerY, playerX + 1] != -1) { playerX++; } Invalidate(); }

4. 최종 정리

✅ Timer를 사용하여 일정 시간마다 블록이 아래로 이동
✅ KeyDown 및 KeyUp을 사용하여 자연스럽게 좌우 이동
✅ moveTimer를 사용하여 키를 누르고 있을 때 부드럽게 이동

이렇게 하면 좌우 이동과 중력을 자연스럽게 적용할 수 있습니다.
추가로 블록 충돌 처리, 쌓이기 등의 기능도 필요하면 확장하면 됩니다. 

 

Form1.cs
0.00MB

'헥사' 카테고리의 다른 글

Systehttp://m.Drawing.Color[] colorindex = new Systehttp://m.Drawing.Color[]  (0) 2023.11.29
MM_DRAW()  (0) 2023.11.29
헥사 개발코드관련  (0) 2021.04.27

하나의 서버에서 결과데이타를 두군데의; 매체로 전달(REDIS.QUEUE.NAME을 두가지로)

1. SQLite.Memory.File.Table

C:\Users\xterm\Downloads\ComparisonEstate\EstateStatisticsNodeSearch\RedisTickServer 디렉터리

2025-02-23  오전 09:39       509,194,240 database_all_total.db
2025-02-26  오전 08:46        14,909,440 naver_attach_estate_info_file.db

2. REDIS.ESTATE.Server

3. REDIS.QUEUE.KEY.NAME

QCD:11270016379255255255255 QCK:11270016379255255255255
.NET WPF Program Node.Server.WebBrowser
#if(true)
private void recvWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    if (e.Error != null)
    {
MessageBox.Show("Error: " + e.Error.Message);
    }
    else if (e.Result != null)
    {
if (e.Result is string error)
{
    MessageBox.Show("Error: " + error);
}
else
{
    RealEstateData realEstateData = e.Result as RealEstateData;

    // CapitalGain을 숫자로 변환하여 내림차순 정렬을 위한 준비
    realEstateData.CapitalGain = ConvertWon(realEstateData.CapitalGain);  // 이 부분은 필요에 따라 조정
    realEstateData.TransactionAmount = ConvertWon(realEstateData.TransactionAmount);  // 이 부분은 필요에 따라 조정

    // 실제 데이터를 변환하여 저장
    RealEstateData201 realEstateDisplayData = MapToDisplayData(realEstateData);

    if (realEstateDisplayData != null)
    {
// Add to the list first (this is still useful if needed later)
allRealEstateData201.Add(realEstateDisplayData);

#if(true)
// UI 스레드에서 DataGrid에 추가
Dispatcher.Invoke(() =>
{
    if(realEstateDisplayData.DescendingNumber == "1000")
    {
____realEstateDisplayData = realEstateDisplayData;
    }
    if(realEstateDisplayData.DescendingNumber == "1001")
    {
myDataGrid.Items.Insert(0, realEstateDisplayData);
myDataGrid.Items.Insert(0, ____realEstateDisplayData);
    }
    else
    {
myDataGrid.Items.Insert(0, realEstateDisplayData); // 새 데이터가 항상 첫 번째 행에 추가됨
    }
    BlinkPanel(redPanel, Colors.Gray, Colors.Red);
    myDataGrid.SelectedIndex = 0;
});
#endif
#if(false)
// UI 스레드에서 DataGrid에 하나씩 추가
Dispatcher.Invoke(() =>
{
    // 데이터 추가
    if(realEstateDisplayData.DescendingNumber == "1000")
    {
//myDataGrid.Items.Add(realEstateDisplayData);  // ItemsSource를 전체 다시 설정하지 않고 하나씩 추가
//myDataGrid.Items.Add(realEstateDisplayData);  // ItemsSource를 전체 다시 설정하지 않고 하나씩 추가
____realEstateDisplayData = realEstateDisplayData;
    }
    else if(realEstateDisplayData.DescendingNumber == "1001")
    {
myDataGrid.Items.Add(realEstateDisplayData);  // ItemsSource를 전체 다시 설정하지 않고 하나씩 추가
myDataGrid.Items.Add(____realEstateDisplayData);  // ItemsSource를 전체 다시 설정하지 않고 하나씩 추가
    }
    else
    {
myDataGrid.Items.Add(realEstateDisplayData);  // ItemsSource를 전체 다시 설정하지 않고 하나씩 추가
    }

    // 회색 → 빨간색으로 변경
    BlinkPanel(redPanel, Colors.Gray, Colors.Red);
});
#endif
    }
}
    }

    // Optionally, restart the background worker to continue receiving data
    _recvWorker.RunWorkerAsync();
}
#endif

 

1. Request 는 브라우져에서, Response는 .Net WPF Program 에서
2. Request 는 브라우져에서, Response도 브라우져에서(feat. Node.Js)

 

Query Request)
- Web Browser

Query Response)
- SQLite & Json formatted Data & Send To REDIS



Query Response Data Display)
- Wpf Program


요구사항)
1. 백그라운드 프로세스가 동작하고 있다는 표시(패널사각형 LightGray->DarkBlue)
2. 데이타를 받아서 출력동작을 하고 있다는 표시 (패널사각형 LightGray->DarkRed)

MainWindow.xaml.cs
0.01MB
MainWindow.xaml
0.00MB

Windows 프롬프트에서 dotnet new 명령어를 사용하여 .NET 프로젝트를 생성할 수 있는 이유는 .NET SDK의 아키텍처와 동작 방식 덕분입니다. 이를 이해하기 위해 다음과 같은 개념들을 살펴보겠습니다.


1. .NET SDK와 CLI(Command-Line Interface)

.NET SDK는 개발자가 .NET 애플리케이션을 빌드, 실행 및 배포할 수 있도록 도와주는 소프트웨어 개발 키트입니다.
이 SDK에는 dotnet CLI(명령줄 인터페이스)가 포함되어 있으며, 이를 통해 다양한 명령어(dotnet new, dotnet build, dotnet run 등)를 실행할 수 있습니다.

  • dotnet new는 프로젝트 템플릿을 기반으로 새 프로젝트를 생성하는 명령어입니다.
  • 프로젝트 템플릿은 .NET SDK에 기본적으로 포함되어 있으며, 필요에 따라 추가 다운로드도 가능합니다.

2. dotnet new 명령어의 동작 방식

(1) 프로젝트 템플릿 검색 및 로딩

  • 사용자가 dotnet new 명령어를 실행하면, .NET SDK는 로컬에 설치된 프로젝트 템플릿을 조회합니다.
  • 템플릿은 .NET SDK의 dotnet new --list 명령어를 통해 확인할 수 있습니다.
  • 사용자가 지정한 템플릿(console, winforms, wpf)을 기반으로 프로젝트를 생성합니다.

(2) 프로젝트 폴더 및 파일 생성

  • dotnet new console -o MMM1을 실행하면:
    • MMM1 폴더가 생성됨
    • 해당 폴더 안에 기본적인 콘솔 프로젝트 파일(Program.cs, .csproj 등)이 자동으로 생성됨
  • dotnet new winforms -o MMM2의 경우:
    • MMM2 폴더가 생성됨
    • Windows Forms 관련 .csproj 설정과 Form1.cs 등의 GUI 요소가 포함됨
  • dotnet new wpf -o MMM3도 비슷한 방식으로 동작하며, WPF 프로젝트 관련 XAML 파일이 포함됨

3. 프로젝트 템플릿 구조

.NET SDK는 다양한 프로젝트 템플릿을 제공하며, 이를 통해 여러 종류의 애플리케이션을 쉽게 생성할 수 있습니다.

명령어설명
dotnet new console 콘솔 애플리케이션
dotnet new winforms Windows Forms 기반 GUI 애플리케이션
dotnet new wpf WPF 기반 GUI 애플리케이션
dotnet new web ASP.NET Core 웹 애플리케이션
dotnet new classlib 클래스 라이브러리 프로젝트

각 템플릿은 미리 정의된 프로젝트 구조를 가지고 있으며, .csproj 설정에 따라 적절한 SDK와 Framework를 자동으로 설정해 줍니다.


4. 아키텍처적 배경

dotnet new 명령어가 다양한 프로젝트를 생성할 수 있는 이유는 .NET SDK의 확장성과 템플릿 시스템 덕분입니다.

(1) .NET Core 및 .NET 5+의 공통 SDK 기반

  • 예전에는 .NET Framework, .NET Core, Mono 등이 별도로 존재했지만, 현재는 .NET 5부터 단일 SDK로 통합됨
  • 즉, 동일한 dotnet 명령어로 다양한 플랫폼(.NET Core, .NET Framework, Xamarin, Blazor 등)의 프로젝트를 생성 가능

(2) 템플릿 엔진과 확장 가능성

  • dotnet new는 템플릿 엔진(Microsoft.TemplateEngine)을 사용하여 프로젝트를 생성
  • 개발자가 직접 새로운 템플릿을 만들어 등록할 수도 있음 (dotnet new install 사용)

(3) Cross-Platform 지원

  • Windows, Linux, macOS 어디서든 동일한 .NET SDK와 dotnet CLI 사용 가능
  • 그러나 winforms나 wpf는 Windows 전용이므로, Linux/macOS에서는 생성이 불가능하거나 실행할 수 없음

5. 정리

  • dotnet new 명령어는 .NET SDK의 일부로 포함된 CLI 기능이며, 프로젝트 템플릿을 기반으로 새로운 프로젝트를 생성함
  • .NET SDK는 다양한 템플릿을 지원하며, 확장도 가능함
  • dotnet CLI를 통해 프로젝트 생성뿐만 아니라 빌드, 실행, 배포 등의 작업을 수행할 수 있음

 

Ratio of Actual Transaction Price to Asking Price for Apartment Sales by Region(2019~2024)

 

index.html
0.02MB

저널 파일(Journal File)은 컴퓨터 시스템에서 변경 사항을 기록하는 로그 파일의 일종으로, 주로 데이터베이스, 파일 시스템, 애플리케이션에서 사용됩니다.

1. 주요 역할

  • 데이터 무결성 유지: 시스템 충돌, 전원 장애 등의 상황에서도 데이터가 손실되지 않도록 변경 사항을 기록함.
  • 복구 기능 제공: 장애 발생 시 저널 파일을 이용해 데이터베이스나 파일 시스템을 일관된 상태로 복구 가능.
  • 추적 및 감사 로그: 변경 내역을 기록하여 시스템 운영 및 문제 해결에 활용.

2. 주요 용도

  • 데이터베이스: SQLite, MySQL, PostgreSQL 등에서는 트랜잭션 로그 또는 저널 파일을 활용해 데이터 일관성을 유지.
  • 파일 시스템: NTFS, ext4 등 저널링 파일 시스템에서는 파일 변경 사항을 기록하여 갑작스러운 오류 발생 시 복구를 지원.
  • 응용 프로그램: 일부 소프트웨어는 실행 중 변경 내용을 기록하여 예기치 않은 종료 후 복원 기능 제공.

3. 데이터베이스에서의 저널 파일 예시 (SQLite)

SQLite에서는 WAL (Write-Ahead Logging) 또는 Rollback Journal 방식의 저널 파일을 사용하여 데이터 변경 사항을 저장함.

  • 파일명-journal: 롤백 저널 방식 사용 시 생성됨.
  • 파일명-wal: WAL 모드 사용 시 생성됨.

✅ 요약

저널 파일은 시스템의 변경 사항을 기록하여 장애 발생 시 데이터를 보호하고 복구하는 중요한 역할을 합니다. 특히 데이터베이스와 파일 시스템에서 널리 사용됩니다.

 

REQUEST)
isam 파일과 Journal File 은 어떤 차이가 있나요?

 

ChatGPT의 말:

ISAM(Indexed Sequential Access Method) 파일과 Journal File은 각각 다른 목적과 방식으로 데이터 저장 및 관리에 사용됩니다.

1. ISAM 파일 vs. Journal File 개요

구분ISAM 파일Journal 파일
주요 목적 데이터 저장 및 검색 (빠른 인덱스 기반 조회) 변경 사항을 기록하여 데이터 복구 및 무결성 유지
사용처 데이터베이스, 파일 시스템 데이터베이스, 파일 시스템, 애플리케이션
주요 기능 - 인덱스를 활용한 빠른 데이터 조회
- 순차 및 랜덤 접근 지원
- 변경된 데이터를 기록
- 장애 발생 시 복구 및 롤백 지원
데이터 저장 방식 정적인 데이터 저장 및 인덱싱 트랜잭션의 변경 사항을 로그 형태로 기록
파일 생성 방식 데이터 파일(.ISD), 인덱스 파일(.ISM) 트랜잭션 발생 시 자동 생성 (예: db.journal, db-wal)

2. ISAM 파일이란?

**ISAM(Indexed Sequential Access Method)**은 데이터베이스 및 파일 시스템에서 인덱스 기반으로 데이터를 검색하고 저장하는 방법입니다.
주로 빠른 조회 성능이 중요한 경우 사용됩니다.

ISAM 파일의 특징

  • 데이터 파일(.ISD)과 인덱스 파일(.ISM)로 구성됨.
  • 인덱스를 활용하여 빠른 검색과 정렬된 데이터 조회 가능.
  • 순차 검색(Sequential Access)과 랜덤 검색(Random Access) 모두 지원.
  • MySQL의 MyISAM 스토리지 엔진이 대표적인 예.

ISAM 파일 사용 예

  • MySQL MyISAM 엔진: *.MYD(데이터), *.MYI(인덱스) 파일 사용.
  • IBM DB2, VSAM 등에서도 유사한 방식 사용.

3. Journal 파일이란?

Journal 파일은 시스템에서 변경된 데이터를 기록하여 장애 발생 시 복구 및 무결성 유지에 초점을 맞춘 파일입니다.

Journal 파일의 특징

  • 트랜잭션 로그 형식으로 데이터 변경 사항 기록.
  • 장애 발생 시, Redo (복구) 또는 Undo (롤백) 가능.
  • 파일 시스템(NTFS, ext4) 및 데이터베이스(SQLite, PostgreSQL)에서 사용됨.

Journal 파일 사용 예

  • 데이터베이스
    • SQLite: *.journal, *-wal 파일 사용.
    • PostgreSQL: pg_wal(Write-Ahead Logging).
  • 파일 시스템
    • NTFS, ext4 파일 시스템의 저널링 기능.

4. 주요 차이점 정리

구분ISAM 파일Journal 파일
기능 인덱스를 활용한 빠른 데이터 조회 트랜잭션 변경 사항을 기록하여 복구 가능
목적 검색 성능 최적화 데이터 일관성 및 복구
파일 구성 데이터 파일 + 인덱스 파일 변경 사항을 기록하는 로그 파일
장애 복구 데이터 손실 시 별도 복구 필요 장애 발생 시 복구 가능

✅ 결론

  • ISAM 파일데이터 조회 성능을 높이기 위한 구조이며,
  • Journal 파일데이터 변경 사항을 기록하여 복구를 지원하는 역할을 합니다.

즉, ISAM은 "빠른 검색"에 초점, Journal 파일은 "데이터 보호 및 복구"에 초점을 맞춘 개념입니다.

 

국토교통부실거래가 + 네이버매매호가를 조합한 통계

지역별 아파트 매매호가대비 실거래가 비율
>Ratio of Actual Transaction Price to Asking Price for Apartment Sales by Region(2019~2024)

현재 네이버매매호가 대비, 과거 실거래가(최대매매가격)을 비교했을때의 비율을 알고싶어서 작성해보았습니다.

 

app.js
0.01MB
index.html
0.02MB

 

호가 대비 실거래가 비율

        string sql = $@"
SELECT A.ComplexName, 
       A.AreaSquareMeters,  -- 전용면적(㎡)
       MAX(A.TransactionAmount) AS MaxTransactionAmount,  -- 실거래가 최대값
       MAX(CAST(B.MAXPRICE AS REAL)) AS MaxMarketPrice,  -- 최대 호가 값
       MAX(A.TransactionAmount) / MAX(CAST(B.MAXPRICE AS REAL)) * 100 AS RealToMarketRatio,  -- 실거래가 대비 호가 비율
       B.COMPLEXNAME, 
       B.LNBRMNNM, 
       B.LNBRSLNO
FROM REALESTATEAPTALL A
JOIN (
    SELECT COMPLEXNAME, LNBRMNNM, LNBRSLNO, MAX(MAXPRICE) AS MAXPRICE
    FROM ESTATENAVERALLINFOATTACH
    WHERE CORTARADDRESS LIKE '{cityCountryText}%' AND REALESTATETYPECODE <> 'OPST'
    GROUP BY COMPLEXNAME, LNBRMNNM, LNBRSLNO
) B
ON A.ComplexName = B.COMPLEXNAME 
AND A.MainNumber = B.LNBRMNNM 
AND A.SubNumber = B.LNBRSLNO
WHERE A.CityCounty LIKE '{cityCountryNM}%'
AND B.MAXPRICE IS NOT NULL AND B.MAXPRICE != ''  -- 빈 값 및 NULL 처리
GROUP BY A.ComplexName, A.AreaSquareMeters, B.COMPLEXNAME, B.LNBRMNNM, B.LNBRSLNO
ORDER BY RealToMarketRatio DESC, A.AreaSquareMeters DESC  -- 실거래가 최대값 기준으로 정렬

 

 

Program.cs
0.02MB

1. 가격 변동 및 트렌드 분석

1.1. 매매가 변동률 (연도별 평균 매매가 변화율)

 
SELECT strftime('%Y', ContractYearMonth) AS Year, AVG(TransactionAmount) AS AvgPrice FROM REALESTATEAPTALL GROUP BY Year ORDER BY Year;

1.2. 호가 대비 실거래가 비율

 
SELECT A.ComplexName, AVG(A.TransactionAmount) / AVG(CAST(B.MAXPRICE AS REAL)) * 100 AS RealToMarketRatio FROM REALESTATEAPTALL A JOIN ESTATENAVERALLINFOATTACH B ON A.CityCounty = B.CORTARADDRESS AND A.MainNumber = B.LNBRMNNM AND A.SubNumber = B.LNBRSLNO GROUP BY A.ComplexName;

1.3. 최대-최소 가격 범위 (단지별로)

 
SELECT A.ComplexName, MAX(A.TransactionAmount) - MIN(A.TransactionAmount) AS PriceRange FROM REALESTATEAPTALL A GROUP BY A.ComplexName;

🏢 2. 아파트별 상세 분석

2.1. 단지별 거래량

 
SELECT ComplexName, COUNT(*) AS TransactionCount FROM REALESTATEAPTALL GROUP BY ComplexName ORDER BY TransactionCount DESC;

2.2. 평형대별 평균가

 
SELECT ROUND(AreaSquareMeters / 3.3) AS Pyeong, AVG(TransactionAmount) AS AvgPrice FROM REALESTATEAPTALL GROUP BY Pyeong ORDER BY Pyeong;

2.3. 신축 vs 구축 가격 차이

 
SELECT CASE WHEN ConstructionYear >= 2015 THEN '신축' ELSE '구축' END AS BuildingAge, AVG(TransactionAmount) AS AvgPrice FROM REALESTATEAPTALL GROUP BY BuildingAge;

📈 3. 투자 가치 및 수익률 분석

3.1. 매매-전세 갭

 
SELECT A.ComplexName, AVG(A.TransactionAmount) - AVG(CAST(B.MAXLEASEPRICE AS REAL)) AS GapPrice FROM REALESTATEAPTALL A JOIN ESTATENAVERALLINFOATTACH B ON A.CityCounty = B.CORTARADDRESS AND A.MainNumber = B.LNBRMNNM AND A.SubNumber = B.LNBRSLNO GROUP BY A.ComplexName;

3.2. 전세가율

 
SELECT A.ComplexName, AVG(CAST(B.MAXLEASEPRICE AS REAL)) / AVG(CAST(B.MAXPRICE AS REAL)) * 100 AS LeaseRatio FROM ESTATENAVERALLINFOATTACH B JOIN REALESTATEAPTALL A ON A.CityCounty = B.CORTARADDRESS AND A.MainNumber = B.LNBRMNNM AND A.SubNumber = B.LNBRSLNO GROUP BY A.ComplexName;

📌 4. 지역별 비교 분석

4.1. 지역별 시세 격차

 
SELECT CityCounty, AVG(TransactionAmount) AS AvgPrice FROM REALESTATEAPTALL GROUP BY CityCounty ORDER BY AvgPrice DESC;

4.2. 인기 지역 분석 (거래량 많은 순)

 
SELECT CityCounty, COUNT(*) AS TransactionCount FROM REALESTATEAPTALL GROUP BY CityCounty ORDER BY TransactionCount DESC;

📊 5. 특이사항 및 추가 분석

5.1. 급매 vs 일반 매물 (평균 이하 가격 비율)

 
WITH AvgPrice AS ( SELECT ComplexName, AVG(TransactionAmount) AS AvgTransPrice FROM REALESTATEAPTALL GROUP BY ComplexName ) SELECT A.ComplexName, SUM(CASE WHEN A.TransactionAmount < B.AvgTransPrice THEN 1 ELSE 0 END) * 100.0 / COUNT(*) AS BelowAvgRatio FROM REALESTATEAPTALL A JOIN AvgPrice B ON A.ComplexName = B.ComplexName GROUP BY A.ComplexName;

5.2. 공시지가 대비 매매가
공시지가 테이블이 없다면 가정하고 작성한 쿼리입니다.

 
SELECT A.ComplexName, AVG(A.TransactionAmount) / AVG(B.OfficialPrice) * 100 AS PriceToOfficialRatio FROM REALESTATEAPTALL A JOIN OFFICIALPRICES B ON A.CityCounty = B.CityCounty AND A.MainNumber = B.MainNumber AND A.SubNumber = B.SubNumber GROUP BY A.ComplexName;

'기획 > 기획및 컨텐츠' 카테고리의 다른 글

호가 대비 실거래가 비율  (0) 2025.03.06
부동산통계(특이사항 및 추가 분석)  (1) 2025.03.06

국토교통부의 실거래가 매매현황(2019~2024) 데이터와 네이버부동산의 아파트 리스트 및 호가 데이터를 주소와 지번을 기준으로 매칭해 사용할 수 있는 통계 항목들은 다음과 같습니다.


📊 1. 가격 변동 및 트렌드 분석

  1. 매매가 변동률:
    • 연도별, 분기별 매매가 상승 또는 하락 비율.
  2. 호가 대비 실거래가 비율:
    • 실거래가 / 매매호가 평균 비율 분석.
  3. 최대-최소 가격 범위:
    • 동일 단지 내 연도별 최대-최소 매매가 및 호가 차이.
  4. 평균 매매가 및 호가 추이:
    • 연도별 평균 매매가, 매매호가, 전세호가 변화 추이.
  5. 시세 대비 실거래가 차이:
    • 특정 시점의 호가와 실거래가 비교.

🏢 2. 아파트별 상세 분석

  1. 단지별 거래량:
    • 연도별, 월별 매매 거래 횟수.
  2. 평형대별 평균가:
    • 전용면적별 평균 매매가, 매매호가, 전세호가.
  3. 신축 vs 구축 가격 차이:
    • 준공 연도 기준으로 구분한 매매가 차이.

📈 3. 투자 가치 및 수익률 분석

  1. 연평균 상승률:
    • 매매가의 연평균 상승률 및 호가 상승률.
  2. 매매-전세 갭:
    • 매매가와 전세가의 차이를 통해 갭 투자 가능성 분석.
  3. 전세가율:
    • (전세호가 / 매매호가) × 100% 비율.
  4. 투자 회수 기간:
    • 매매가 대비 연간 임대 수익을 통한 투자 회수 기간.

📌 4. 지역별 비교 분석

  1. 지역별 시세 격차:
    • 시군구 또는 행정동별 평균 매매가 및 호가 비교.
  2. 인기 지역 분석:
    • 거래량 및 호가가 높은 지역 순위.
  3. 주변 개발 호재 영향:
    • 특정 지역 개발 이슈 전후 매매가 비교.

📊 5. 특이사항 및 추가 분석

  1. 급매 vs 일반 매물:
    • 평균보다 낮은 호가로 나온 매물 비율 및 실거래가 비교.
  2. 거래 비수기 분석:
    • 거래량이 급감하는 시기 및 가격 변화 패턴.
  3. 공시지가 대비 매매가:
    • 공시지가 대비 매매가의 비율.

'기획 > 기획및 컨텐츠' 카테고리의 다른 글

호가 대비 실거래가 비율  (0) 2025.03.06
가격 변동 및 트렌드 분석(SQLite.SQL)  (0) 2025.03.06

부동산.크롤링.국토교통부.실거래가.통계.조회조건추가(금액대별)
부동산.크롤링.국토교통부.실거래가.통계.조회조건추가(금액대별)
부동산.크롤링.국토교통부.실거래가.통계.조회조건추가(금액대별)

조회조건추가)
1. 지역
2. 조회조건
3. 건수
4. 금액대별

 

 

index.html
0.03MB

 

 



1) SQLite 테이블을 메모리기반으로 SQL을 실행할경우

void LoadDatabaseIntoMemory(string filePath, SQLiteConnection memoryConn)
{
    using (var fileConn = new SQLiteConnection($"Data Source={filePath};Version=3;"))
    {
fileConn.Open();
fileConn.BackupDatabase(memoryConn, "main", "main", -1, null, 0);
    }
}
        workingDirectory = Directory.GetCurrentDirectory();

        DESCENDING_DB = Path.Combine(workingDirectory, @"descending_in_base_all.db");
        ANESTATE_DB = Path.Combine(workingDirectory, @"database_all_total.db");
        ESTATENAVER_DB = Path.Combine(workingDirectory, @"naver_attach_estate_info_file.db");

        // 메모리 기반 SQLite 연결 생성
        memoryConn1 = new SQLiteConnection("Data Source=:memory:;Version=3;");
        memoryConn2 = new SQLiteConnection("Data Source=:memory:;Version=3;");
        memoryConn3 = new SQLiteConnection("Data Source=:memory:;Version=3;");

        memoryConn1.Open();
        memoryConn2.Open();
        memoryConn3.Open();

        try
        {
            // 파일 DB 데이터를 메모리 DB로 복사
            LoadDatabaseIntoMemory(DESCENDING_DB, memoryConn1);
            LoadDatabaseIntoMemory(ANESTATE_DB, memoryConn2);
            LoadDatabaseIntoMemory(ESTATENAVER_DB, memoryConn3);

            // 메모리 DB로 사용
            APMSQLite.GetInstance.FetchDescendingConn = memoryConn1;
            APMSQLite.GetInstance.FetchEstateConn = memoryConn2;
            APMSQLite.GetInstance.FetchNaverAttachConn = memoryConn3;

            // 메모리 DB에 테이블이 정상적으로 로드되었는지 확인
            Console.WriteLine("\n===== Memory DB Loaded Tables =====");
            PrintTables(memoryConn1, "Descending DB");
            PrintTables(memoryConn2, "Estate DB");
            PrintTables(memoryConn3, "Naver Attach DB");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }

수행시간)

시작: 2025-02-27 10:03:55.089
종료: 2025-02-27 10:04:02.441

  1. 초 차이 계산
    • 10:04:02.441 - 10:03:55.089
    • 02.441초 - 55.089초 = 7.352초
따라서, 두 타임스탬프의 차이는 7.352초입니다.

 

2) SQLite 테이블을 파일기반으로 SQL을 실행할경우

string workingDirectory = Directory.GetCurrentDirectory();

        string DESCENDING_DB = Path.Combine(workingDirectory, @"descending_in_base_all.db");
        string ANESTATE_DB = Path.Combine(workingDirectory, @"database_all_total.db");
        string ESTATENAVER_DB = Path.Combine(workingDirectory, @"naver_attach_estate_info_file.db");
        
        APMSQLite.GetInstance.FetchDescendingConn = new SQLiteConnection($"Data Source={DESCENDING_DB};Version=3;");
        APMSQLite.GetInstance.FetchDescendingConn.Open();
        
        APMSQLite.GetInstance.FetchEstateConn = new SQLiteConnection($"Data Source={ANESTATE_DB};Version=3;");
        APMSQLite.GetInstance.FetchEstateConn.Open();
        
        APMSQLite.GetInstance.FetchNaverAttachConn = new SQLiteConnection($"Data Source={ESTATENAVER_DB};Version=3;");
        APMSQLite.GetInstance.FetchNaverAttachConn.Open();

수행시간

시작: 2025-02-27 10:04:54.994
종료: 2025-02-27 10:05:28.504

  1. 초 차이 계산
    • 10:05:28.504 - 10:04:54.994
    • 분 차이: 10:05 - 10:04 = 1분 (60초)
    • 초 차이: 28.504초 - 54.994초 = -26.490초
    • 1분(60초)을 고려하면, 60 - 26.490 = 33.510초
따라서, 두 타임스탬프의 차이는 33.510초입니다.


결론)
테이블의 데이타를 메모리에 올려서 실행하는것이 파일기반으로 실행하는것보다 5배정도 빠르다.
테이블의 데이타를 메모리에 올려서 실행하는것이 파일기반으로 실행하는것보다 5배정도 빠르다.

 



index.html
0.03MB

+ Recent posts