Microsoft MVP성태의 닷넷 이야기
.NET Framework: 386. C# 버전의 한글 형태소 분석기 [링크 복사], [링크+제목 복사]
조회: 38538
글쓴 사람
정성태 (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)
13535정성태1/22/20242431닷넷: 2208. C# - GCHandle 구조체의 메모리 분석
13534정성태1/21/20242249닷넷: 2207. C# - SQL Server DB를 bacpac으로 Export/Import파일 다운로드1
13533정성태1/18/20242462닷넷: 2206. C# - TCP KeepAlive의 서버 측 구현파일 다운로드1
13532정성태1/17/20242353닷넷: 2205. C# - SuperSimpleTcp 사용 시 주의할 점파일 다운로드1
13531정성태1/16/20242246닷넷: 2204. C# - TCP KeepAlive에 새로 추가된 Retry 옵션파일 다운로드1
13530정성태1/15/20242200닷넷: 2203. C# - Python과의 AES 암호화 연동파일 다운로드1
13529정성태1/15/20242058닷넷: 2202. C# - PublishAot의 glibc에 대한 정적 링킹하는 방법
13528정성태1/14/20242183Linux: 68. busybox 컨테이너에서 실행 가능한 C++, Go 프로그램 빌드
13527정성태1/14/20242127오류 유형: 892. Visual Studio - Failed to launch debug adapter. Additional information may be available in the output window.
13526정성태1/14/20242212닷넷: 2201. C# - Facebook 연동 / 사용자 탈퇴 처리 방법
13525정성태1/13/20242162오류 유형: 891. Visual Studio - Web Application을 실행하지 못하는 IISExpress
13524정성태1/12/20242226오류 유형: 890. 한국투자증권 KIS Developers OpenAPI - GW라우팅 중 오류가 발생했습니다.
13523정성태1/12/20242033오류 유형: 889. Visual Studio - error : A project with that name is already opened in the solution.
13522정성태1/11/20242198닷넷: 2200. C# - HttpClient.PostAsJsonAsync 호출 시 "Transfer-Encoding: chunked" 대신 "Content-Length" 헤더 처리
13521정성태1/11/20242263닷넷: 2199. C# - 한국투자증권 KIS Developers OpenAPI의 WebSocket Ping, Pong 처리
13520정성태1/10/20242005오류 유형: 888. C# - Unable to resolve service for type 'Microsoft.Extensions.ObjectPool.ObjectPool`....'
13519정성태1/10/20242096닷넷: 2198. C# - Reflection을 이용한 ClientWebSocket의 Ping 호출파일 다운로드1
13518정성태1/9/20242362닷넷: 2197. C# - ClientWebSocket의 Ping, Pong 처리
13517정성태1/8/20242202스크립트: 63. Python - 공개 패키지를 이용한 위성 이미지 생성 (pystac_client, odc.stac)
13516정성태1/7/20242314닷넷: 2196. IIS - AppPool의 "Disable Overlapped Recycle" 옵션의 부작용
13515정성태1/6/20242590닷넷: 2195. async 메서드 내에서 C# 7의 discard 구문 활용 사례 [1]
13514정성태1/5/20242263개발 환경 구성: 702. IIS - AppPool의 "Disable Overlapped Recycle" 옵션
13513정성태1/5/20242188닷넷: 2194. C# - WebActivatorEx / System.Web의 PreApplicationStartMethod 특성
13512정성태1/4/20242153개발 환경 구성: 701. IIS - w3wp.exe 프로세스의 ASP.NET 런타임을 항상 Warmup 모드로 유지하는 preload Enabled 설정
13511정성태1/4/20242175닷넷: 2193. C# - ASP.NET Web Application + OpenAPI(Swashbuckle) 스펙 제공
13510정성태1/3/20242106닷넷: 2192. C# - 특정 실행 파일이 있는지 확인하는 방법 (Linux)
1  2  3  [4]  5  6  7  8  9  10  11  12  13  14  15  ...