Microsoft MVP성태의 닷넷 이야기
.NET Framework: 386. C# 버전의 한글 형태소 분석기 [링크 복사], [링크+제목 복사],
조회: 44931
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
(연관된 글이 1개 있습니다.)

C# 버전의 한글 형태소 분석기


이 글의 프로젝트는 github에 공개되어 있습니다.

NHanNanum: https://github.com/stjeong/NHanNanum
SSH: git@github.com:stjeong/csharp-book-samples.git




아래의 글을 보았습니다. ^^

형태소 분석기 사용하기
; http://naggingmachine.tistory.com/822

웹 문서 파싱하여 단어만 추출해보자
; http://naggingmachine.tistory.com/823

이 글을 통해서 한글 형태소 분석기가 있다는 것을 알게 되었는데요.

HanNanum
; http://kldp.net/projects/hannanum/

위의 글에 따르면 원본은 C 버전이고, Java 버전으로 포팅된 것으로 보이는데 아쉽게도 .NET 버전은 없습니다. 그래서, ^^ Java 버전을 기반으로 다시 C#으로 포팅해 보았습니다.

우선, 자바 버전의 폴더 구조는 다음과 같습니다.

\JHanNanum\src
              \kr   (jhannanum 소스 코드)
              \org  (json)

자바 소스코드를 하나씩 변환하는 것은 시간이 너무 걸릴 것 같고, 그래서 Visual Studio 2003/2005의 JLCA(Java Language Conversion Assistant) 도움을 받아 초벌(?) 번역을 먼저 수행한 다음 컴파일을 하면서 오류나는 부분마다 C#에 맞게 수정하는 식으로 번역해 보았습니다.

물론, 소스코드가 100% 만족스럽게 변환되지는 않지만 형태소 분석기 같은 유의 프로그램은 플랫폼 종속적인 API의 비율이 높진 않으므로 어느 정도는 잘 변환됩니다.

한 가지 문제라면, 해당 프로젝트가 한글 형태소 분석기이다 보니 소스코드에 한글이 많이 포함되어 있는데요. 그런데, .java 파일들이 저장된 형태가 "BOM 없이 UTF-8"로 저장되어 있는 탓에 JLCA 변환기가 자동으로 인식하지 못합니다. 이 때문에 변환 전에 모든 .java 파일을 "BOM을 가진 UTF-8"로 변환해 줘야 합니다. (그렇게 하지 않은 경우 JLCA에서 엄청난 변환 오류가 발생합니다.)

인코딩 변환 후 JLCA로 직접 변환해 보면 다음과 같은 결과가 나옵니다.

nhan_nanum_1.png

총 469개의 오류가 발생했는데 그 정도면 굉장히 양호한 수준입니다. ^^ (이 중에서 /demo 폴더 제거하면 300개 정도로 줄어듭니다.)

변환하다 보면 사소한 문법 차이는 금방 수정할 수 있는데, 자바에서 제공되는 컬렉션이 닷넷에 제공되지 않는 경우가 있어 난감합니다. 아래는 제가 변환한 규칙입니다.

ArrayList ==> List
LinkedBlockingQueue.cs ==> http://code.ohloh.net/search?s=LinkedBlockingQueue
HashMap<K, V> ==> Dictionary

그리고, 자바의 LinkedList에서 제공되는 add 메소드는 .NET LinkedList에서는 addLast에 대응된다는 정도!

그런 식으로 지루하게 컴파일 오류가 없어질 때까지 변환해도, 실제로 잘 동작한다는 보장은 하지 못합니다. ^^; 이번 경우가 그러했는데, 자바 프로젝트를 eclipse로, 변환된 C# 소스코드를 Visual Studio로 함께 디버깅하면서 원인을 찾아 수정할 수 있었습니다. (따라서, 웬만하면 자바도 좀 알아야 변환을 정상적으로 할 수 있습니다.)




이 글에 첨부된 파일은 "HanNanum"을 C#으로 포팅한 NHanNanum 프로젝트와 그것을 사용하는 예제 프로젝트인 DemoApp 콘솔 응용 프로그램이 포함되어 있습니다.

테스트 삼아서 "웹 문서 파싱하여 단어만 추출해보자" 글에 포함된 예제 텍스트를 sample.txt로 만들어 놓고,

인터넷(Internet, 누리망, 문화어: 인터네트)은 전 세계의 컴퓨터가 서로 연결되어 TCP/IP(Transmission Control Protocol/Internet Protocol)라는 통신 프로토콜을 이용해 정보를 주고받는 컴퓨터 네트워크이다. 인터넷이란 이름은 1973년 TCP/IP의 기본 아이디어를 생각해 낸 빈튼 서프와 밥 간이 '네트워크의 네트워크'를 지향하며 모든 컴퓨터를 하나의 통신망 안에 연결(Inter Network)하고자 하는 의도에서 이를 줄여 인터넷(Internet)이라고 처음 명명하였던 데 어원을 두고 있다. 이후 인터넷은 "정보의 바다"라고 불리면서 전 세계의 컴퓨터가 서로 연결되어 TCP/IP를 이용해 정보를 주고 받게 되었다.[1] 복수의 통신망을 집합시킨 광역 통신망을 뜻하는 일반명사를 '인터네트워크'(internetwork)라고 하는데, 미국 국방성의 아파넷은 이러한 인터네트워크를 본격적으로 구축한 최초의 사례였다. 아파넷은 당초에는 연구용으로만 쓰였으나 참여 기관이 늘어나면서 다양한 목적으로 아파넷을 쓰고자 하는 요구가 많아졌다. 또한, 컴퓨터의 종류가 다양해지면서 프로토콜을 재정비할 필요성이 부각되었다. 1983년, 미국 국방성은 군사용 네트워크 기능을 밀넷(MILNET, Military Network)으로 분리시키고, 아파넷은 민간용 네트워크가 되었다. 또한, 초창기에 사용하던 NCP(Network Control Program)보다 데이터 전송 속도 및 안정성이 향상된 TCP/IP를 공식 프로토콜로 도입했다. 이로 인해 현대적인 컴퓨터 네트워크의 기본 구조가 갖춰졌으며, 이 때를 즈음하여 '인터넷'은 단순히 일반명사 '인터네트워크'의 약어가 아닌 고유명사 취급을 받기 시작했다.[2] 'internetwork'의 약어인 'internet'과 구별하기 위해 고유명사 인터넷은 'Internet' 또는 'INTERNET' 등으로 표기한다. 인터넷은 LAN 등 소규모 통신망을 상호 접속하는 형태에서 점차 발전하여 전 세계를 망라하는 거대한 통신망의 집합체가 되었다. 인터넷에는 PC 통신처럼 모든 서비스를 제공하는 중심이 되는 호스트 컴퓨터도 없고 이를 관리하는 조직도 없다. 인터넷을 대표하는 조직으로 ISOC(Internet Society)가 있지만 인터넷을 총괄 관리하는 기구는 아니다. 그러나 인터넷을 총괄적으로 관리하지는 않지만 인터넷상의 어떤 컴퓨터 또는 통신망에 이상이 발생하더라도 통신망 전체에는 영향을 주지 않도록 실제의 관리와 접속은 세계 각지에서 분산적으로 행해진다.[3] 대중적인 월드 와이드 웹은 하이퍼텍스트 전송 프로토콜(HTTP)과 함께 사용되고, HTTP로 되어 있는 웹 페이지를 보기 위한 웹 브라우저로는 마이크로소프트의 인터넷 익스플로러, 모질라 재단의 모질라 파이어폭스 등을 이용한다. 인터넷은 표준 인터넷 프로토콜 집합(TCP/IP)을 사용해 전 세계 수십억 명의 사용자들에게 제공되는 지구 전체의 컴퓨터 네크워크 시스템이다. 인터넷은 개인, 학교, 기업, 정부 네트워크 등을 한정적 지역에서 전체 영역으로 유선, 무선, 광케이블 기술 등을 통해 연결하여 구성한 네트워크들의 네트워크이다. 인터넷은 하이퍼텍스트 마크업 언어(HTML)나 전자 우편을 지원하는 기반 기술 등을 통해 광대한 범위의 정보 자원과 서비스들을 운반한다. 인터넷에 의해 전화, 음악, 영화, 텔레비전 등의 기존 커뮤니케이션 미디어들은 재구현되고 재정의되었으며, 음성 인터넷 프로토콜 VoIP(Voice over Internet Protocol)와 인터넷 프로토콜 텔레비전 IPTV(Internet Protocol Television) 등과 같은 새로운 서비스들도 생겨나게 되었다.[4] 신문이나 도서 등의 출판물들도 웹사이트 기술에 맞춰 새롭게 구현되었는데, 블로그나 RSS 등과 같은 형태로 독자들에게 서비스되었다. 인터넷에 의해 사람들의 소통방식도 인스턴스 메시지, 인터넷 포럼, SNS 등으로 진화해 나갔다. 아웃렛이나 소규모 상인, 도매상의 영역에서도 온라인 쇼핑몰이 거대한 변화를 가져왔다. 인터넷을 통한 기업 간 거래와 금융서비스 등에 의해 전체 유통체계도 영향을 받게 되었다.[5] 인터넷의 유래는 1960~1970년대 미국 국방부 산하의 고등 연구국(Advanced Research Projects Agency, ARPA)의 연구용 네트워크가 시초이며, 군사용 네트워크는 밀네트(MILNET)로 발전되었다. 동서냉전이 한창이던 때 미국 국방부 고등계획국에서는 핵전쟁 등의 상황에서도 살아남을 수 있는 네트워크를 연구하였다. 연구결과 기존의 회선 교환(circuit switching)방식보다는 패킷 교환(packet switching)방식이 매우 견고하고 생존성이 높았다. 최초의 2 노드간의 상호연결은 1969년 10월 29일 UCLA와 SRI연구소간에 연결되었다. 이 통신망을 ARPANET이라고 하였으며 현재의 인터넷망의 시초이다.[6] 현재와 같이 TCP/IP 기반의 네트워크가 된 것은 1983년 1월 1일 ARPANET이 NCP 패킷 송출을 중단한 것이 기점이다. ARPANET과 별도로 1986년 미국과학재단(National Science Foundation)은 5곳의 슈퍼컴퓨터 센터를 연결하여 NSFnet을 만들었는데, 1980년대 말에 이르러 ARPANET이 흡수통합되면서 대학, 연구소, 정부기관, 기업 등 세계 모든 곳을 연결하는 국제 통신망으로 발전하게 되었다. 인터넷의 상업적 이용이 허용되고, 인터넷을 보다 편리하게 사용할 수 있는 브라우저로서 1993년 모자이크(Mosaic)가 출시되면서 사용자가 폭발적으로 증가하였다. 현재는 전 세계 146개국 5,000여 컴퓨터 네트워크와 900만대 이상의 호스트 컴퓨터가 연결되어 있다. 대한민국에서는 1993년에 인터넷 접속 서비스를 실시 하였으며 1990년대 후반부터 PC와 초고속 인터넷이 빠르게 보급되었고 이후 국민 대부분이 초고속 인터넷을 이용하였는데, 김대중 정부는 과감한 초고속 인터넷망 투자로, 미국이나 일본보다 앞선 인터넷 문화를 만들었다.[7] 김대중 정부는 1998년 6월에 초고속 인터넷 서비스를 시작했고, 4년 만에 대한민국은 초고속 인터넷 가입자가 1000만 명을 넘어섰었다.[8] 2002년 2월에 전세계 인터넷 이용자의 수는 5억 4420만 명에 이르렀는데, 북미 지역이 1억 8123만 명으로 가장 많았고, 그 다음이 유럽 지역으로 1억 7135만 명에 달했으며, 중동과 아프리카 지역은 이용률이 매우 낮았다. 2001년에 대한민국의 인구 100명당 인터넷 이용자의 수는 51명으로 세계 5위 수준이었는데, 2000년에는 세계 6위였으나 미국과 캐나다를 추월하고 싱가포르에는 추월 당해서 5위가 되었고, 이에 아이슬란드(68명), 싱가포르(61명), 노르웨이(60명), 스웨덴(52명) 등은 인구 100명당 인터넷 이용자의 수가 대한민국보다 많았고 미국(50명), 일본(45명) 등은 대한민국보다 적었다. 2003년 6월에 대한민국의 인터넷 이용자수는 2861만 1000명이고, 2006년 12월에 초고속 인터넷 서비스 가입자는 1401만 1419명이었다.[9]


다음과 같이 예제 소스코드를 구성해서 돌려 보면,

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using HtmlAgilityPack.Samples;
using kr.ac.kaist.swrc.jhannanum.comm;
using kr.ac.kaist.swrc.jhannanum.hannanum;

namespace DemoApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Workflow workflow = WorkflowFactory.getPredefinedWorkflow(WorkflowFactory.WORKFLOW_NOUN_EXTRACTOR);

            try
            {
                /* Activate the work flow in the thread mode */
                workflow.activateWorkflow(true);

                string document = File.ReadAllText("sample.txt");

                StringBuilder sb = new StringBuilder();

                /* Analysis using the work flow */
                workflow.analyze(document);

                LinkedList<Sentence> resultList = workflow.getResultOfDocument(new Sentence(0, 0, false));
                foreach (Sentence s in resultList)
                {
                    Eojeol[] eojeolArray = s.Eojeols;
                    for (int i = 0; i < eojeolArray.Length; i++)
                    {
                        if (eojeolArray[i].length > 0)
                        {
                            String[] morphemes = eojeolArray[i].Morphemes;
                            for (int j = 0; j < morphemes.Length; j++)
                            {
                                sb.Append(morphemes[j]);
                                sb.Append(", ");
                            }
                        }
                    }
                }

                File.WriteAllText("sample.output.txt", sb.ToString());
                
                workflow.close();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                return;
            }

            workflow.close();
        }
    }
}

sample.output.txt에 포함된 출력 결과는 다음과 같습니다.

인터넷(Internet,, 누리, 망, 문화, 인터네트, 전, 세계, 컴퓨터, 연결, TCP, IP, Transmission, Control, Protocol, Internet, Protocol, 통신, 프로토콜, 이용, 정보, 컴퓨터, 네트워크, 인터넷, 이름, 1973, 년, TCP, IP, 기본, 아이디어, 생각, 빈튼, 서프, 밥, 간, 네트워크, 네트워크, 지향, 컴퓨터, 하나, 통신망, 안, 연결(Inter, Network)하고, 의도, 이, 인터넷(Internet), 명명, 데, 어원, 이후, 인터넷, 정보, 바, 전, 세계, 컴퓨터, 연결, TCP, IP, 이용, 정보, 1, 복수, 통신망, 집합, 광역, 통신망, 뜻, 일반명사, 인터네트, 워크, internetwork, 미국, 국방성, 아파넷, 인터네트, 워크, 본격, 적, 구축, 최초, 사례, 아파넷, 당초, 연구용, 참여, 기관, 다양, 목적, 아파넷, 요구, 컴퓨터, 종류, 다양, 프로토콜, 재정비, 필요성, 부각, 1983, 년, 미국, 국방성, 군사용, 네트워크, 기능, 밀넷(MILNET,, Military, Network, 분리, 아파넷, 민간, 용, 네트워크, 초창기, 사용, NCP, Network, Control, Program, 데이터, 전송, 속, 안정성, 향상, TCP, IP, 공식, 프로토콜, 도입, 이, 현대, 적, 컴퓨터, 네트워크, 기본, 구조, 때, 즈음, 인터넷, 일반명사, 인터네트, 워크, 약어, 고유명사, 취급, 시작, 2, internetwork, 약어, internet, 구별, 고유명사, 인터넷, Internet, INTERNET, 등, 표기, 인터넷, LAN, 등, 소규모, 통신망, 접속, 형태, 발전, 전, 세계, 망라, 거대, 한, 통신망, 집합체, 인터넷, PC, 통신, 서비스, 제공, 중심, 호스트, 컴퓨터, 이, 관리, 조직, 인터넷, 대표, 조직, ISOC, Internet, Society, 인터넷, 총괄, 관리, 기구, 인터넷, 총괄, 적, 관리, 인터넷상, 컴퓨터, 통신망, 이상, 발생, 통신망, 전체, 영향, 실제, 관리, 접속, 세계, 각지, 분산, 적, 3, 대중, 적, 월드, 와이드, 웹, 하이퍼, 텍스트, 전송, 프로토콜(HTTP), 사용, HTTP, 웹, 페이지, 웹, 브라우저, 마이크로소프트, 인터넷, 익스플로러, 재단, 파이어, 폭스, 등, 이용, 인터넷, 표준, 인터넷, 프로토콜, 집합(TCP/IP), 사용, 전, 세계, 수십억, 명, 사용자, 들, 제공, 지구, 전체, 컴퓨터, 네크워크, 시스템, 인터넷, 개, 학교, 기업, 정부, 네트워크, 등, 한정, 적, 지역, 전체, 영역, 유, 무선, 광케이블, 기술, 등, 연결, 구성, 한, 네트워크, 들, 네트워크, 인터넷, 하이퍼, 텍스트, 마크업, 언어(HTML), 전자, 우편, 지원, 기반, 기술, 등, 광대, 한, 범위, 정보, 자원, 서비스, 들, 운반, 인터넷, 전화, 음악, 영화, 텔레비전, 등, 기존, 커뮤니케이션, 미디어, 들, 재구현, 재정의, 음성, 인터넷, 프로토콜, VoIP, Voice, over, Internet, Protocol, 인터넷, 프로토콜, 텔레비전, IPTV, Internet, Protocol, Television, 등, 서비스, 들, 4, 신문, 도, 등, 출판물, 들, 웹사이트, 기술, 구현, 블로그, RSS, 등, 형태, 독자, 들, 서비스, 인터넷, 사람, 소통, 방식, 인스턴스, 메, 인터넷, 포럼, SNS, 등, 진화, 아웃렛, 소규모, 상, 도매상, 영역, 온라인, 쇼핑, 몰, 거대, 변화, 인터넷, 기업, 거래, 금융서비스, 등, 전체, 유통체계, 영향, 5, 인터넷, 유래, 1960, 1970, 년대, 미국, 국방부, 산하, 고등, 연구국(Advanced, Research, Projects, Agency, ARPA, 연구용, 네트워크, 시초, 군사용, 네트워크, 밀네트(MILNET), 발전, 동서냉전, 한창, 때, 미국, 국방부, 고등, 계획국, 핵전쟁, 등, 상황, 수, 네트워크, 연구, 연구결과, 기존, 회선, 교환(circuit, switching, 방식, 패킷, 교환(packet, switching, 방식, 견고, 생존성, 최초, 2, 노드, 간, 상호, 연결, 1969, 년, 10, 월, 29, UCLA, SRI, 연구소, 간, 연결, 통신망, ARPANET, 현재, 인터넷망, 시초, 6, 현재, TCP, IP, 기반, 네트워크, 것, 1983, 년, 1, 월, 1, ARPANET, NCP, 패킷, 송출, 중단, 것, 기점, ARPANET, 별도, 1986, 년, 미국과학재단(National, Science, Foundation, 5, 곳, 슈퍼컴퓨터, 센터, 연결, NSFnet, 1980, 년대, 말, ARPANET, 흡수통합, 대학, 연구소, 정부기관, 기업, 등, 세계, 곳, 연결, 국제, 통신망, 발전, 인터넷, 상업, 적, 이용, 허용, 인터넷, 편리, 사용, 수, 브라우저, 1993, 년, 모자이크(Mosaic), 출시, 사용자, 폭발, 적, 증가, 현재, 전, 세계, 146개국, 5,000, 컴퓨터, 네트워크, 900, 만, 대, 이상, 호스트, 컴퓨터, 연결, 대한, 민국, 1993, 년, 인터넷, 접속, 서비스, 실시, 1990, 년대, 후반, PC, 초고속, 인터넷, 보급, 이후, 국민, 대부분, 초고속, 인터넷, 이용, 김대중, 정부, 과감, 초고속, 인터넷망, 투자, 미국, 일, 본, 인터넷, 문화, 7, 김대중, 정부, 1998, 년, 6, 월, 초고속, 인터넷, 서비스, 시작, 4, 년, 만, 대한, 민국, 초고속, 인터넷, 가입자, 1000, 명, 8, 2002, 년, 2, 월, 전세계, 인터넷, 이용자, 수, 5, 억, 4420, 명, 북미, 지역, 1, 억, 8123, 명, 다음, 유럽, 지역, 1, 억, 7135, 명, 중동, 아프리카, 지역, 이용률, 2001, 년, 대한, 민국, 인구, 100, 명, 인터넷, 이용자, 수, 51, 명, 세계, 5, 위, 수준, 2000, 년, 세계, 6, 위, 미국, 캐나다, 추월, 싱가포르, 추월, 5, 위, 이, 아이슬란드(68명),, 싱가포르(61명),, 노르웨이(60명),, 스웨덴(52명), 등, 인구, 100, 명, 인터넷, 이용자, 수, 대한, 민국, 미국(50명),, 일본(45명), 등, 대한, 민국, 2003, 년, 6, 월, 대한, 민국, 인터넷, 이용자수, 2861, 1000, 명, 2006, 년, 12, 월, 초고속, 인터넷, 서비스, 가입자, 1401, 1419, 명, 9,


보시는 바와 같이 결과가 아주 똑같지는 않습니다.

예제: TCP/IP(Transmission Control Protocol/Internet Protocol)라는 통신 프로토콜을 

자바의 변환 결과: TCPIPTransmission, Control, ProtocolInternet, Protocol, 통신, 프로토콜
C#의 변환 결과:   TCP, IP, Transmission, Control, Protocol, Internet, Protocol, 통신, 프로토콜

그래도 자바의 결과와 비교했을 때 오히려 좋은 결과를 보여주고 있는 것 같아서 굳이 ^^ 차이점을 수정할 필요는 없을 듯 싶습니다.




위의 형태소 분석기와 지난번에 소개했던 HtmlAgilityPack을 이용하면,

Html Agility Pack 소개 - 웹 문서에서 텍스트만 분리하는 방법
; https://www.sysnet.pe.kr/2/0/1494

"웹 문서 파싱하여 단어만 추출해보자" 글에서 소개했던 목적의 응용 프로그램을 C#으로 만드는 것은 그리 어렵지 않을 것입니다.

좀 더 나아가서, 트위터 등의 SNS와 연결한다면 개인의 성향을 나타내는 워드 클라우드(Word Cloud) 프로그램을 만들 수도 있겠고.




[파이썬의 경우]

KoNLPy
* Hannanum (Kaist 말뭉치를 이용해 구축)
* Kkma (세종 말뭉치를 이용해 구축)
* Twitter (KoNLPy v0.4.5부터 Okt로 변경)
* Komoran (현재 파이썬 버전에서 동작 안 함)
* MeCab (리눅스만 지원, 세종 말뭉치를 이용해 구축)

말뭉치
* kolaw: 한국 법률 말뭉치, constitution.txt
* kobill: 대한민국 국회 의안 말뭉치, 파일 ID는 의안 번호를 의미, 1809890.txt
* 세종 말뭉치: 국립국악원에서 모아놓은 국어 말뭉치
* Kaist 말뭉치: 카이스트에서 만듦

SoNLPy - 고유명사
Khaiii - 카카오에서 만든 형태소 분석기

from konlpy.corpus import kolaw
from konlpy.tag import Kkma, Hannanum, Okt
import os

msg = """
...[생략]...
"""

kkma = Kkma()
print(kkma.sentences(msg))
print(kkma.morphs(msg))
print(kkma.nouns(msg))
print(kkma.pos(msg))

h = Hannanum()
print(h.analyze(msg))  # 문장
print(h.morphs(msg))  # 형태소
print(h.nouns(msg))  # 명사
print(h.pos(msg))  # 품사

# twitter = Twitter()
twitter = Okt()
print(twitter.morphs(msg))  # 형태소
print(twitter.nouns(msg))  # 명사
print(twitter.pos(msg))  # 품사




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 8/15/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2013-10-23 05시19분
[이상식] 멋지군요!
[guest]

1  2  3  4  5  6  7  8  9  10  [11]  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13667정성태7/7/20246623닷넷: 2273. C# - 리눅스 환경에서의 Hyper-V Socket 연동 (AF_VSOCK)파일 다운로드1
13666정성태7/7/20247700Linux: 74. C++ - Vsock 예제 (Hyper-V Socket 연동)파일 다운로드1
13665정성태7/6/20247884Linux: 73. Linux 측의 socat을 이용한 Hyper-V 호스트와의 vsock 테스트파일 다운로드1
13663정성태7/5/20247482닷넷: 2272. C# - Hyper-V Socket 통신(AF_HYPERV, AF_VSOCK)의 VMID Wildcards 유형파일 다운로드1
13662정성태7/4/20247491닷넷: 2271. C# - WSL 2 VM의 VM ID를 알아내는 방법 - Host Compute System API파일 다운로드1
13661정성태7/3/20247413Linux: 72. g++ - 다른 버전의 GLIBC로 소스코드 빌드
13660정성태7/3/20247523오류 유형: 912. Visual C++ - Linux 프로젝트 빌드 오류
13659정성태7/1/20247864개발 환경 구성: 715. Windows - WSL 2 환경의 Docker Desktop 네트워크
13658정성태6/28/20248243개발 환경 구성: 714. WSL 2 인스턴스와 호스트 측의 Hyper-V에 운영 중인 VM과 네트워크 연결을 하는 방법 - 두 번째 이야기
13657정성태6/27/20247918닷넷: 2270. C# - Hyper-V Socket 통신(AF_HYPERV, AF_VSOCK)을 위한 EndPoint 사용자 정의
13656정성태6/27/20248098Windows: 264. WSL 2 VM의 swap 파일 위치
13655정성태6/24/20247858닷넷: 2269. C# - Win32 Resource 포맷 해석파일 다운로드1
13654정성태6/24/20247788오류 유형: 911. shutdown - The entered computer name is not valid or remote shutdown is not supported on the target computer.
13653정성태6/22/20247937닷넷: 2268. C# 코드에서 MAKEINTREOURCE 매크로 처리
13652정성태6/21/20249250닷넷: 2267. C# - Linux 환경에서 (Reflection 없이) DLL AssemblyFileVersion 구하는 방법파일 다운로드2
13651정성태6/19/20248488닷넷: 2266. C# - (Reflection 없이) DLL AssemblyFileVersion 구하는 방법파일 다운로드1
13650정성태6/18/20248410개발 환경 구성: 713. "WSL --debug-shell"로 살펴보는 WSL 2 VM의 리눅스 환경
13649정성태6/18/20247968오류 유형: 910. windbg - !py 확장 명령어 실행 시 "failed to find python interpreter" (2)
13648정성태6/17/20248289오류 유형: 909. C# - DynamicMethod 사용 시 System.TypeAccessException
13647정성태6/16/20249345개발 환경 구성: 712. Windows - WSL 2의 네트워크 통신 방법 - 세 번째 이야기 (같은 IP를 공유하는 WSL 2 인스턴스) [1]
13646정성태6/14/20247765오류 유형: 908. Process Explorer - "Error configuring dump resources: The system cannot find the file specified."
13645정성태6/13/20248201개발 환경 구성: 711. Visual Studio로 개발 시 기본 등록하는 dev tag 이미지로 Docker Desktop k8s에서 실행하는 방법
13644정성태6/12/20248868닷넷: 2265. C# - System.Text.Json의 기본적인 (한글 등에서의) escape 처리 [1]
13643정성태6/12/20248323오류 유형: 907. MySqlConnector 사용 시 System.IO.FileLoadException 오류
13642정성태6/11/20248201스크립트: 65. 파이썬 - asgi 버전(2, 3)에 따라 달라지는 uvicorn 호스팅
13641정성태6/11/20248673Linux: 71. Ubuntu 20.04를 22.04로 업데이트
1  2  3  4  5  6  7  8  9  10  [11]  12  13  14  15  ...