.NET

    [C#] File 다루기 - 3. 인코딩(Encoding)과 디코딩(Decoding)

    3. Text의 인코딩(Encoding)과 디코딩(Decoding) 컴퓨터에 저장된 문자열(Text)는 0과 1로 표시하는 bit단위로 저장되며 8bit와 같은 단위를 통해 대부분 문자 자체를 나타내거나 특정한 포맷을 표시하기도 합니다. 예를 들어 ASCII는 128개의 코드를 가지는데 .NET은 내부적으로 문자열을 인코딩하는데 Unicode라는 표준을 사용합니다. ASCII에 비해 Unicode는 훨씬 더 많은 코드를 가지고 있습니다. 때로는 문자열이 Unicode를 사용하지 않거나 Unicode를 변환시키기 위해 다른 곳으로 옮겨져야할 경우가 있는데 이 때문에 Encoding사이에서 어떻게 변화시킬 것인지를 아는 것은 매우 중요합니다. 아래는 문자열을 인코딩하는데 사용되는 다른 일반적인 방법을 나열한..

    [C#] File 다루기 - 2. 스트림(Stream) 다루기

    2. 스트림(Stream) 다루기 stream은 byte의 배열입니다. 비록 File은 array처럼 다뤄지기는 하지만 File내부의 byte배열 위치를 통해 임의 접근이 가능하며 이는 순차적인 순서로 처리될 수 있는 byte로서 File을 처리할 수 있는 유용한 방법이 될 수 있습니다. stream은 또한 터미널이나 램덤엑세스를 제공하지 않고 위치를 찾을 수 없는(이동할 수 없는) 소켓과 포트 같은 네트워크 리소스의 입력과 출력에도 사용됩니다. 이때에도 stream자체가 어디에서 왔는지와는 상관없이 임의의 byte를 처리할 수 있는 Code를 작성할 수 있습니다. stream을 대상으로 한 읽기/쓰기를 수행하는 Code자체도 간단하며 byte가 실제 저장되는 곳도 제어할 수 있습니다. (1) Strea..

    [C#] File 다루기 - 1. 파일 시스템(Filesystem)

    1. 파일 시스템(Filesystem) 다루기 프로그램에서는 종종 파일을 통한 입력과 출력을 처리해야 하는 경우가 있으며 System과 System.IO 네임스페이스에는 이를 목적으로 만들어진 여러 클래스가 존재합니다. ● cross-platform 환경과 파일 시스템 제어 개발 중인 프로그램이 Windows와 Linux, MacOS 등 다양한 환경하에서 작동되어야 하는 것이라면 이것은 다른 OS로 인한 차이점 즉, cross-platform의 제어가 필요한 이유가 됩니다. 가장 대표적으로 들 수 있는 문제가 파일 시스템(예를 들면 경로(Path)와 같은)의 경우인데 파일 시스템에 관한 다양한 정보 확인을 통해 각각의 경우에 대비해야 합니다. 우선 간단한 Console App프로젝트를 생성하고 아래 3개..

    [.NET] 닷넷 - 5. .NET Framework에서 .NET으로의 전환

    [.NET] 닷넷 - 5. .NET Framework에서 .NET으로의 전환

    6. .NET Framework에서 .NET으로의 전환 기존에 존재하는 .NET Framework App을 새로운 .NET 버전으로 전환하는 것은 선택의 문제입니다. 예를 들어 비교적 적은 방문자를 유지하고 있는 .NET Framework의 Web 서비스의 경우 현재 상태로 아무런 문제가 없다면 굳이 전환이 필요하지 않을 수 있지만 Windows Server에서의 비용 문제로 인해 Linux Server로 서버를 이전하고자 하는 경우라면 전환에 필요한 비용이 많지 않다면 오히려 전환이 이득이 될 수 있습니다. ● 전환 가능한 Application의 유형 .NET은 Windows, Linux, MacOS등에서 실행이 가능한 것으로 아래 유형을 지원하고 있습니다. 기존의 Application이 Windows..

    [.NET] 닷넷 - 4. Decompiling

    [.NET] 닷넷 - 4. Decompiling

    5. Decompiling .NET은 IL이라고 하는 중간 언어를 거치를 방식으로 컴파일이 진행됩니다. 이런 원리를 통해 IL을 다시 본래 소스코드로 되돌려 볼 수 있는데 이를 '디컴파일'이라고 합니다. 디컴파일을 위해서는 여러 가지 도구를 사용할 수 있는데 마이크로소프트에서 공식적으로 이를 위해 내놓은 도구로 'ILSpy'라는 것이 있습니다. 이 도구는 Visual Studio (2022)에서 확장 기능으로 설치해 사용할 수 있습니다. Visual Studio를 실행해 'Manage Extension'안에서 ILSPY를 검색하고 해당 확장 기능을 설치합니다. Visual Studio를 종료하고 설치를 마무리합니다. Visual Studio를 다시 실행하고 'Tool -> ILSpy'를 선택하여 실행한 ..

    [.NET] 닷넷 - 3. 배포하기

    [.NET] 닷넷 - 3. 배포하기

    3. App 배포하기 다른 개발자를 위해 Class Library를 만들거나 일반적인 사용자를 위한 App을 만들게 되는 경우 이를 사용 가능하도록 하려면 배포하는 과정이 필요하며 배포하는 방식은 다음과 같이 크게 2가지가 있습니다. Self-contained Framework-dependent Framework-dependent는 배포해야 하는 파일 집합의 크기가 매우 간소해지지만 시스템이 .NET이 반드시 설치되어 있어야 합니다. 반면 Self-contained는 수많은 파일들이 함께 배포가 되는 경우이므로 아주 간단한 Console App정도라 하더라도 매우 많은 수의 파일이 동반될 수 있고 그에 따라 배포되어야 하는 용량도 매우 커질 수 있습니다. 하지만 Self-contained는 .NET의 설..

    [.NET] 닷넷 - 2. .NET components

    2. .NET components .NET은 크게 아래 3가지 요소로 구성되어 있습니다. 컴파일러 C#이나 F#, Visual Basic과 같은 언어로 된 소스코드를 IL(intermediate language)로 변환하는 것이며 C# 6.0 이후로 마이크로소프트는 Roslyn이라는 이름으로 컴파일러를 오픈소스화 하였습니다. CoreCLR(Common Language Runtime) rumtime에 IL이 담긴 Assembly를 로드하여 IL코드를 해당 컴퓨터의 CPU에 맞는 네이티브 코드로 변환하고 스레드나 메모리와 같은 관리환경안에서 코드를 실행합니다. BCL or CoreFX(Base Class Libraries) 사전에 빌드된 어셈블리의 모음이며 App을 개발할때 필요한 기능에 맞춰 여러가지 Li..

    [.NET] 닷넷 - 1. .NET 6 개요

    [.NET] 닷넷 - 1. .NET 6 개요

    1. .NET 6 .NET은 BCL(Base Class Library)를 포함하고 있어서 App을 개발하는데 필요한 여러 API를 사용할 수 있습니다. 다만 .NET의 플랫폼 버전에 따라 BCL이 달라질 수 있는데 이런 경우에는 .NET Standard를 통해 서로 다른 .NET 플랫폼 간 호환성을 유지할 수 있습니다. .NET Core 2.0 또는 그 이후의 버전은 .NET Standard 2.0을 지원하기 시작하면서 첫번째 .NET Core에 포함되지 않은 많은 API를 지원하고 있고 과거부터 사용되어오던 .NET Framework는 이제 .NET으로 통합되어 이를 통해 개발된 App은 Linux나 MacOS 등 다양한 OS에서 동작하는 소위 cross-flatform 실행할 수 있게 되었습니다. N..