윈도우에서 특정 프로그램의 네트워크 상태를 확인하기 위해 사용할 수 있는 몇 가지 명령어가 있습니다. 
대표적으로 netstat 명령어가 많이 사용되며, tasklist와 findstr을 조합하여 특정 프로그램에 대한 정보를 확인할 수 있습니다.

netstat:

네트워크 연결 상태를 확인할 수 있는 기본 명령어입니다.
특정 프로그램의 네트워크 연결을 확인하려면 -b 옵션을 사용하여 실행 중인 각 연결의 실행 파일을 표시할 수 있습니다. 이 명령은 관리자 권한으로 실행해야 합니다.
netstat -anob

tasklist:

현재 실행 중인 프로세스 목록을 확인할 수 있습니다.
특정 프로그램의 PID(Process ID)를 찾을 때 유용합니다.

tasklist | findstr [프로그램 이름]

netstat과 findstr 조합:

특정 프로그램의 네트워크 연결 상태를 PID를 통해 필터링할 수 있습니다.
먼저 프로그램의 PID를 찾습니다:

tasklist | findstr [프로그램 이름]

그런 다음 해당 PID로 네트워크 상태를 필터링합니다:

netstat -ano | findstr [PID]
예를 들어, 특정 프로그램(예: redis-server.exe)의 네트워크 상태를 확인하려면 다음과 같은 단계를 따릅니다:

redis-server.exe의 PID를 찾습니다:

tasklist | findstr redis-server.exe
찾은 PID를 사용하여 네트워크 상태를 확인합니다(예를 들어, PID가 1234라면):

netstat -ano | findstr 1234
이 명령어들을 통해 특정 프로그램의 네트워크 연결 상태를 쉽게 확인할 수 있습니다.

ex)
예로써 개발되어진 프로그램은 다음의 네트웍 통신을 할수 있다.
mdiwebrowser.exe
1. 21111 포트로 정보분배 데이타를 수신한다.
2. 6379 포트로 REDIS서버에 송수신을 한다.
3. 8080 포트로 HTTP Request & Response를 한다.

B210145_BK@DESKTOP-QNNUCER MINGW64 ~
$ tasklist | findstr mdiweb
mdiwebrowser.exe             42720 Console                    3     52,844 K

B210145_BK@DESKTOP-QNNUCER MINGW64 ~
$ netstat -ano | findstr 42720
  TCP    127.0.0.1:21111        0.0.0.0:0              LISTENING       42720
  TCP    127.0.0.1:64279        127.0.0.1:6379         ESTABLISHED     42720
  TCP    127.0.0.1:64285        127.0.0.1:6379         ESTABLISHED     42720

B210145_BK@DESKTOP-QNNUCER MINGW64 ~
$


8080포트가 나오지 않는 이유는?

command)
>msbuild mdiwebrowser.sln /p:Configuration=Release

 

만약 Visual Studio를 사용하지 않고 명령줄에서 빌드하려면, MSBuild를 사용할 수 있습니다. MSBuild는 Visual Studio와 함께 설치되며, 명령줄에서 프로젝트를 빌드할 수 있는 도구입니다.

MSBuild 명령 실행:

  • 다음 명령어를 입력하여 솔루션을 빌드합니다: 
  • msbuild mdiwebrowser.sln
  • 기본적으로 MSBuild는 Release 또는 Debug 모드로 빌드할 수 있으며, 모드를 지정하려면 다음과 같이 명령어를 수정합니다:
    msbuild mdiwebrowser.sln /p:Configuration=Release
    또는
    msbuild mdiwebrowser.sln /p:Configuration=Debug

이 방법으로 프로젝트를 빌드하면, 결과물은 솔루션의 설정에 따라 bin\Release 또는 bin\Debug 폴더에 생성됩니다.

REIDS서버
REDIS클라이언트 - 접속상태

 

  TCP    0.0.0.0:6379           0.0.0.0:0              LISTENING
  TCP    127.0.0.1:6379         127.0.0.1:64279        ESTABLISHED
  TCP    127.0.0.1:6379         127.0.0.1:64285        ESTABLISHED
  TCP    127.0.0.1:64279        127.0.0.1:6379         ESTABLISHED
  TCP    127.0.0.1:64285        127.0.0.1:6379         ESTABLISHED
  TCP    [::]:6379              [::]:0                 LISTENING

 

> netstat -an | grep 6379 명령의 출력 결과를 해석하면 다음과 같습니다:

이 TCP 연결 정보를 해석하면 다음과 같습니다:

  1. 0.0.0.0:6379가 0.0.0.0:0에 대해 LISTENING 상태에 있음:
    • 이 행은 서버가 모든 네트워크 인터페이스에서 6379 포트를 듣고 있음을 나타냅니다.
    • 0.0.0.0는 모든 IPv4 주소를 의미합니다.
  2. 127.0.0.1:6379가 127.0.0.1:64279에 대해 ESTABLISHED 상태에 있음:
    • 이 행은 로컬 호스트(127.0.0.1)에서 6379 포트와 로컬 호스트에서 64279 포트 사이에 확립된 연결이 있음을 나타냅니다.
    • 즉, 이 연결은 같은 컴퓨터 내에서 이루어졌습니다.
  3. 127.0.0.1:6379가 127.0.0.1:64285에 대해 ESTABLISHED 상태에 있음:
    • 이 행도 유사하게 로컬 호스트에서 6379 포트와 로컬 호스트에서 64285 포트 사이에 확립된 연결이 있음을 나타냅니다.
  4. 127.0.0.1:64279가 127.0.0.1:6379에 대해 ESTABLISHED 상태에 있음:
    • 이 행은 위의 두 번째 행과 쌍을 이룹니다. 64279 포트에서 6379 포트로의 연결이 확립됨을 나타냅니다.
  5. 127.0.0.1:64285가 127.0.0.1:6379에 대해 ESTABLISHED 상태에 있음:
    • 이 행은 위의 세 번째 행과 쌍을 이룹니다. 64285 포트에서 6379 포트로의 연결이 확립됨을 나타냅니다.
  6. [::]:6379가 [::]:0에 대해 LISTENING 상태에 있음:
    • 이 행은 서버가 모든 IPv6 인터페이스에서 6379 포트를 듣고 있음을 나타냅니다.
    • [::]는 모든 IPv6 주소를 의미합니다.

요약하면, 이 정보는 서버가 6379 포트를 통해 여러 연결을 처리하고 있으며, 이 포트는 IPv4 및 IPv6 주소 모두에서 LISTENING 상태에 있습니다. 로컬 호스트에서 몇몇 확립된 연결(ESTABLISHED)이 존재합니다. 6379 포트는 일반적으로 Redis 서버가 사용하는 포트입니다.

SetVisibleCore 메서드는 Windows Forms에서 컨트롤의 가시성을 설정할 때 사용되는 메서드입니다. 이를 재정의(override)하면 컨트롤이 표시되거나 숨겨질 때 실행되는 기본 동작을 사용자 정의할 수 있습니다.

기본 정의

SetVisibleCore는 System.Windows.Forms.Control 클래스에 다음과 같이 정의되어 있습니다:

protected override void SetVisibleCore(bool value)

여기서 value는 컨트롤을 보이게 할지(true) 숨기게 할지(false)를 나타내는 부울 값입니다.

기본 동작

기본적으로 SetVisibleCore 메서드는 Visible 속성을 설정하고, 컨트롤의 기본 가시성 변경 작업을 처리합니다. 예를 들어, 컨트롤이 처음 생성될 때 보이도록 설정하거나, 가시성을 변경할 때 적절한 이벤트를 발생시키는 등의 작업이 포함됩니다.

사용자 정의

파생 클래스에서 SetVisibleCore를 재정의하여 특정 조건에 따라 컨트롤의 가시성을 제어할 수 있습니다. 다음은 SetVisibleCore를 재정의하여 특정 조건에 따라 컨트롤을 보이게 또는 숨기게 하는 예제입니다:

public class MyCustomControl : Form
{
     bool allowshowdisplay = false;
#if(true)
    protected override void SetVisibleCore(bool value)
    {
        base.SetVisibleCore(allowshowdisplay ? value : allowshowdisplay);
    }
#endif
#if(false)
    protected override void SetVisibleCore(bool value)
    {
        // 특정 조건을 만족할 때만 컨트롤을 표시
        if (ShouldControlBeVisible())
        {
Console.WriteLine("Show");
            base.SetVisibleCore(value);
        }
        else
        {
Console.WriteLine("Hide");
            base.SetVisibleCore(false);
        }
    }
#endif
    private bool ShouldControlBeVisible()
    {
        // 사용자 정의 조건 로직
        //return DateTime.Now.Second % 2 == 0; // 예: 현재 초가 짝수일 때만 보이도록
        return false;
    }
}
public class Program
{
    public static void Main()
    {
        Application.Run(new MyCustomControl());
    }
}

$ find ./ -name "*.cs" | xargs grep "Data Source"

grep 명령어 실행 시 "No such file or directory" 메시지를 피하려면, 다음과 같은 방법을 사용할 수 있습니다.
grep 명령어 실행 시 "No such file or directory" 메시지를 피하려면, 다음과 같은 방법을 사용할 수 있습니다.

B210145_BK@DESKTOP-QNNUCER MINGW64 ~/Downloads/EXTURE_3_0_APM_BASIC
$ find ./ -name "*.cs" | xargs grep "Data Source"
./APM/APM/APMMain.cs:            APMSQLite.GetInstance.Conn = new SQLiteConnection("Data Source=:memory:;Version=3;");
./APM/APM/APMMainForm.cs:            APMSQLite.GetInstance.Conn = new SQLiteConnection("Data Source=:memory:;Version=3;");
grep: ./APM/Screen/Live-Charts-master/Examples/UWP/CartesianChart/Basic: No such file or directory
grep: Bars/BasicColumn.xaml.cs: No such file or directory
grep: ./APM/Screen/Live-Charts-master/Examples/UWP/CartesianChart/Basic: No such file or directory
grep: Bars/BasicRowExample.xaml.cs: No such file or directory
grep: ./APM/Screen/Live-Charts-master/Examples/UWP/CartesianChart/Basic: No such file or directory
grep: Stacked: No such file or directory
grep: Bar/BasicStackedColumnExample.xaml.cs: No such file or directory
grep: ./APM/Screen/Live-Charts-master/Examples/UWP/CartesianChart/Basic: No such file or directory
grep: Stacked: No such file or directory
grep: Bar/BasicStackedRowPercentageExample.xaml.cs: No such file or directory
grep: ./APM/Screen/Live-Charts-master/Examples/UWP/CartesianChart/Chart: No such file or directory
grep: to: No such file or directory
grep: Image/ChartToImageSample.xaml.cs: No such file or directory
grep: ./APM/Screen/Live-Charts-master/Examples/UWP/CartesianChart/Customized: No such file or directory
grep: Series/CustomizedLineSeries.xaml.cs: No such file or directory

1. 오류 메시지 무시하기: grep 명령어의 표준 오류를 /dev/null로 리디렉션하여 오류 메시지를 무시할 수 있습니다.

find ./ -name "*.cs" | xargs grep "Data Source" 2>/dev/null

2. 존재하는 파일만 찾기: find 명령어로 실제 존재하는 파일만 대상으로 하여 grep을 실행하도록 합니다. -exec 옵션을 사용하면 find 명령어가 각각의 파일에 대해 grep을 실행하게 할 수 있습니다.

find ./ -name "*.cs" -exec grep "Data Source" {} +

 

정보분배수신/SQLite DB저장(file)/(동기식)HttpListener Interface/
정보분배수신/SQLite DB저장(file)/(동기식)HttpListener Interface/
정보분배수신/SQLite DB저장(file)/(동기식)HttpListener Interface/

비고)
키워드를 사용하지 않고 HTTP 서버를 구현하는 방법을 보여드리겠습니다. 
이 경우, HttpListener를 사용하여 비동기 방식이 아닌 동기 방식으로 요청을 처리합니다. 
동기 방식은 코드가 요청을 처리하는 동안 다른 작업을 수행할 수 없으므로 서버의 응답 속도가 느려질 수 있습니다.


NuGet으로 Package를 설치시에, 최신버젼으로 빌드하시면 됩니다.
./packages/Newtonsoft.Json.13.0.3/lib/net45/Newtonsoft.Json.dll
./packages/Stub.Systehttp://m.Data.SQLite.Core.NetFramework.1.0.118.0/build/net45/x64/SQLite.Interop.dll
./packages/Stub.Systehttp://m.Data.SQLite.Core.NetFramework.1.0.118.0/lib/net45/System.Data.SQLite.dll

1. 전체도식을 그려본다

 


- HTTP 인터페이스를 위한 8080포트 Listen
xterm@DESKTOP-VVAIF4D MINGW64 ~/Downloads/tmp/exture_3_0_ticker/mdiwebrowser

$ netstat -an | grep 8080
  TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING
  TCP    [::]:8080              [::]:0                 LISTENING
  TCP    [::1]:8080             [::1]:50463            CLOSE_WAIT
  TCP    [::1]:8080             [::1]:50493            ESTABLISHED
  TCP    [::1]:8080             [::1]:50496            ESTABLISHED
  TCP    [::1]:50463            [::1]:8080             FIN_WAIT_2
  TCP    [::1]:50493            [::1]:8080             ESTABLISHED
  TCP    [::1]:50496            [::1]:8080             ESTABLISHED

- 정보분배 TCP데이타를 받기위한 21111포트 Listen
xterm@DESKTOP-VVAIF4D MINGW64 ~/Downloads/tmp/exture_3_0_ticker/mdiwebrowser
$ netstat -an | grep 2111
  TCP    127.0.0.1:21111        0.0.0.0:0              LISTENING


2. 거래소정보분배 TCP데이타 수신및 저장(SQLite)

3. SQLite Browser에서 나타내봅니다.(상용)

3. 거래소정보분배 TCP데이타 인터페이스(HTTP통신) - 동기식(한번에 하나의 resquest를 처리한다.)

3.1 - Text 표시
3.2 - Json 표시

(의견)증권정보데이타를 클라이언트에 주는게,받는게 효과적(?)

1. 클라이언트에서 데이타를 받는게 효과적일까(?) - 실시간적으로

1.1 서버입장에서는 REDIS서버에 클라이언트가 가져갈 데이타를 쌓아놓기만 하면 된다.
1.2 요즘은, 클라이언트에게 담당하는 부분을 늘리는게 일반적이다.

2. 클라이언트에게 데이타를 주는게 효과적일까(?)  - 실시간적으로

2.1 서버입장에서는 클라이언트에 실시간으로 데이타를 주는입장이다. 조금 복잡할것 같다.
2.2 서버에서 모두 처리하기에는 조금 부담스럽다.

 

Windows OS에서 버퍼 캐시는 메모리 관리의 중요한 부분으로, 디스크 I/O 성능을 최적화하는 데 핵심적인 역할을 합니다. 버퍼 캐시의 주요 역할은 다음과 같습니다:

  1. 디스크 I/O 성능 향상:
    • 자주 접근하는 데이터나 파일 시스템 메타데이터를 메모리에 캐싱하여 디스크 접근을 줄입니다. 이를 통해 디스크에서 직접 데이터를 읽는 시간을 절약할 수 있습니다.
  2. 읽기 성능 개선:
    • 한 번 읽은 데이터를 메모리에 저장하여 동일한 데이터에 대한 후속 읽기 작업이 더 빠르게 수행될 수 있도록 합니다.
  3. 쓰기 성능 최적화:
    • 쓰기 작업을 먼저 메모리에 저장한 후, 일정 주기나 조건이 만족될 때 디스크에 기록합니다. 이를 통해 디스크에 대한 빈번한 쓰기 작업을 줄이고, 시스템의 전반적인 성능을 향상시킵니다.
  4. 메모리 사용의 효율성:
    • 사용하지 않는 메모리를 캐시로 활용하여 시스템의 효율성을 높입니다. 사용 중인 메모리가 부족할 경우, 캐시된 데이터를 삭제하거나 축소하여 더 중요한 작업에 메모리를 할당할 수 있습니다.
  5. 데이터 일관성 유지:
    • 데이터를 디스크에 기록하기 전에 메모리에 캐싱하여 데이터의 일관성을 유지하고, 시스템 크래시나 전원 장애 시 데이터 손실을 방지하는 메커니즘을 제공합니다.

버퍼 캐시는 이러한 기능을 통해 전체적인 시스템 성능을 향상시키고, 사용자 경험을 개선하는 중요한 역할을 합니다.


  • PowerShell을 CMD에서 실행하는 방법: CMD를 열고 PowerShell 명령어를 실행하여 시스템의 버퍼 캐시를 확인할 수 있습니다.
  • PowerShell 명령어: 버퍼 캐시 및 메모리 상태를 확인하기 위해 Get-WmiObject를 사용할 수 있습니다.

 

 

Windows OS에서 버퍼 캐시 상태를 CMD(Command Prompt)에서 확인하는 명령어는 Get-Process 및 Get-WmiObject를 활용하여 PowerShell을 통해 확인할 수 있습니다. Windows CMD 자체에서는 이러한 정보를 직접적으로 제공하지 않기 때문에 PowerShell을 사용해야 합니다.



powershell "Get-WmiObject -Class Win32_PerfFormattedData_PerfOS_Memory"
PS C:\Users\B210145_BK> powershell "Get-WmiObject -Class Win32_PerfFormattedData_PerfOS_Memory"


__GENUS                              : 2
__CLASS                              : Win32_PerfFormattedData_PerfOS_Memory
__SUPERCLASS                         : Win32_PerfFormattedData
__DYNASTY                            : CIM_StatisticalInformation
__RELPATH                            : Win32_PerfFormattedData_PerfOS_Memory=@
__PROPERTY_COUNT                     : 45
__DERIVATION                         : {Win32_PerfFormattedData, Win32_Perf, CIM_StatisticalInformation}
__SERVER                             : DESKTOP-QNNUCER
__NAMESPACE                          : root\cimv2
__PATH                               : \\DESKTOP-QNNUCER\root\cimv2:Win32_PerfFormattedData_PerfOS_Memory=@
AvailableBytes                       : 2399301632
AvailableKBytes                      : 2343068
AvailableMBytes                      : 2288

CacheBytes                           : 186159104
CacheBytes                           : 186159104
CacheBytes                           : 186159104
CacheBytes                           : 186159104
CacheBytes                           : 186159104
CacheBytes                           : 186159104

CacheBytesPeak                       : 322740224
CacheFaultsPersec                    : 0
Caption                              :
CommitLimit                          : 15726735360
CommittedBytes                       : 7436763136
DemandZeroFaultsPersec               : 11
Description                          :
FreeAndZeroPageListBytes             : 3473408
FreeSystemPageTableEntries           : 12448459
Frequency_Object                     :
Frequency_PerfTime                   :
Frequency_Sys100NS                   :
LongTermAverageStandbyCacheLifetimes : 14400
ModifiedPageListBytes                : 52383744
Name                                 :
PageFaultsPersec                     : 15
PageReadsPersec                      : 0
PagesInputPersec                     : 0
PagesOutputPersec                    : 0
PagesPersec                          : 0
PageWritesPersec                     : 0
PercentCommittedBytesInUse           : 47
PoolNonpagedAllocs                   : 0
PoolNonpagedBytes                    : 425037824
PoolPagedAllocs                      : 0
PoolPagedBytes                       : 436318208
PoolPagedResidentBytes               : 391467008
StandbyCacheCoreBytes                : 162533376
StandbyCacheNormalPriorityBytes      : 1496104960
StandbyCacheReserveBytes             : 737189888
SystemCacheResidentBytes             : 186159104
SystemCodeResidentBytes              : 8192
SystemCodeTotalBytes                 : 8192
SystemDriverResidentBytes            : 7569408
SystemDriverTotalBytes               : 34660352
Timestamp_Object                     :
Timestamp_PerfTime                   :
Timestamp_Sys100NS                   :
TransitionFaultsPersec               : 3
TransitionPagesRePurposedPersec      : 0
WriteCopiesPersec                    : 0
PSComputerName                       : DESKTOP-QNNUCER

+ Recent posts