분류 전체보기 239

[gRPC] gRPC란?

참조 : https://chacha95.github.io/2020-06-15-gRPC1 참조 : https://grpc.io/docs/what-is-grpc/introduction/ gRPC가 무엇인지 알기전에, 몇가지 추가 개념에 대해 알아봅시다. RPC RPC(원격 프로시저 호출)는 한 프로그램이 다른 컴퓨터에 있는 프로그램에 서비스를 요청하는 프로토콜입니다. 클라이언트에서 서비스를 요청(function call)하면, 서버에서 서비스를 제공합니다. RPC는 client-server 모델을 사용합니다. 스텁(Stub) 서버와 클라이언트는 다른 주소 공간을 사용합니다. 그래서, 함수호출에 사용되는 매개변수를 변환이 필요한데, 스텁이 담당합니다. 마샬링(Marshalling) 스텁은 클라이언트와 서버 각..

프로그래밍 2022.06.16

[Akka.Net] MailBox

참고 : https://getakka.net/articles/actors/mailboxes.html Mailbox Akka.NET에서 Mailbox는 액터를 대상으로 하는 메시지를 보관합니다. 액터에게 메시지를 보낼 때 메시지는 액터에게 직접 전달되지 않고, 해당 액터의 Mailbox로 우선 이동 후 액터가 처리할 시간이 있을 때 메시지를 처리합니다. Mailbox는 메시지 큐로 설명이 가능합니다. Mailbox에 들어온 메시지는 보통 액터에서 순서대로 처리합니다. Priority Mailbox 하지만 처리 순서를 변경할 수 있는 Priority Mailbox가 있습니다. 일반적으로 모든 액터는 Mailbox가 있지만, 필수 사항은 아닙니다. 라우터(Router)에 속한 라우티(Routees)들은 하나의..

[C#] 의존성 주입 (Dependency Injection)

의존성이란의존성이라는 것은 A가 B에 의존할 경우 B가 변경될 때 A도 변경될 수 있는 가능성이 있다는 뜻입니다.의존성 주입 (Dependency Injection)의존성 주입이란 외부에서 객체를 생성하여 넘겨주는 것을 의미합니다.예를들어 A 클래스가 B 클래스를 의존할 때,B Object를 A가 직접 생성하지 않고 외부에서 생성하여 넘겨주면 의존성 주입했다고 합니다.왼쪽은 A에서 B를 생성하는 일반적인 의존 형태이고, 오른쪽은 외부에서 의존 객체를 생성하고 주입하는 형태입니다.의존성 주입은 소프트웨어 디자인 패턴 중 하나로, 클래스 간의 의존성을 외부에서 주입하는 방식을 의미합니다.이를 통해 코드의 재사용성과 유연성을 높이며, 유닛 테스트와 확장성에도 도움을 줍니다.As-Is 코드 (의존성 주입을 사용..

프로그래밍/C# 2022.06.06

[C#] 오버라이딩이란? (Override)

오버라이딩이란? (Override) A클래스의 메서드를 파생 클래스 B클래스에서 메서드를 가져와 내용을 변경 하려면 오버라이딩을 해야한다. A클래스의 메서드의 한정자는 virtual이고, B클래스의 메서드 한정자는 override 이어야 한다. B클래스의 메서드에서 base.{메서드}를 기본으로 호출해야한다. A클래스의 메서드가 private이면 오버라이딩 불가하다. class ArmorSuite { public virtual void Initialize() { Console.WriteLine("Armored"); } } class IronMan : ArmorSuite { public override void Initialize() { base.Initialize(); Console.WriteLine($..

프로그래밍/C# 2022.06.06

[C#] 키워드 정리

필드 클래스 내부의 변수를 말한다. 멤버 클래스 내부의 변수,메서드 등.. 모든 것을 통틀어 말한다. Static static은 메서드나 필드가 클래스의 인스턴스가 아닌 클래스 자체에 소속되도록 지정하는 한정자이다. is 키워드 객체가 해당 형식에 해당하는지 검사, bool값을 반환한다. as 키워드 형식 변환 연산자 형식 변환 실패 시 null을 반환한다.

프로그래밍/C# 2022.06.06

[C#] 생성자 (Constructor)

생성자 (Constructor) class 명과 동일한 메서드 생성자의 임무는 단 한가지, 해당 형식(클래스)의 객체를 생성하는 것이다. 생성자를 구현하지 않으면, 컴파일러에서 만들기 때문에(이런 생성자를 기본 생성자(Default Constructor)라고 한다.) 빌드에 문제가 없다. public class Person { private string last; private string first; // 생성자 public Person(string lastName, string firstName) { last = lastName; first = firstName; } // Remaining implementation of Person class. }

프로그래밍/C# 2022.06.06

[Akka.Net] Props 이용한 Actor 생성

Prop Props는 액터 생성을 위한 옵션을 지정하는 구성 클래스로, 관련 배포 정보를 포함하여 액터를 생성하기 위한 변경 불가능하고 자유롭게 공유 가능한 레시피로 생각하십시오. 액터는 ActorSystem 및 ActorContext에서 사용할 수 있는 ActorOf라는 팩토리 메서드에 Props 인스턴스를 전달하여 생성됩니다. ActorOf에 대한 호출은 IActorRef의 인스턴스를 반환합니다. using Akka.Actor; using System; namespace AkkaNET_Actor_Tell { class Program { static ActorSystem system = ActorSystem.Create("actorSystem"); static void Main(string[] args..

[Akka.Net] Actor 생성

참조 https://getakka.net/articles/actors/receive-actor-api.html Akka.NET에서 액터를 생성하면 항상 특정 부모에 속합니다. 이것은 액터가 항상 트리로 구성된다는 것을 의미합니다. 일반적으로 액터 생성은 다른 액터 내부에서만 발생할 수 있습니다. 이 '생성자' 액터는 새로 생성된 자식 액터의 부모가 됩니다. 그러면 처음으로 만든 액터의 부모가 누구냐고 물을 수 있습니다. 최상위 액터를 생성하려면 먼저 액터 시스템을 초기화해야 합니다. 이것을 객체 시스템이라고 합시다. 그 다음에는 새로 생성된 액터에 대한 참조를 반환하는 System.ActorOf() 호출이 이어집니다. Message 클래스 생성 액터에게 무언가를 하라고 지시하는 방법은 메시..

Kosta비대면 교육 - Linux System & Network Programming

과정 제목 Linux System & Network Programming 교육 목표 리눅스 운영체제를 기반으로 한 시스템 기능 또는 어플리케이션 개발 능력 심화 향상 리눅스 운영체제 확용 능력 심화 리눅스 시스템 프로그래밍 Hardware를 이용하기 위해선 kernel을 활용해야 합니다. system call을 이용하면 kernel에 명령을 요청할 수 있습니다. libraries와 Tool을 잘 활용해야 어플리케이션 개발이 용이해지고, 최종적으로 Hardware를 제어 할 수 있습니다. 커널의 세부 기능 프로세스 관리 (Process Management) 메모리 관리 (Memory Management) 파일 시스템 관리 (File System Management) 장치 관리 (Device Manageme..

프로그래밍 2022.06.05

[C#] 파일 목록 가져오기

GetFiles 현재 디렉터리에 있는 파일 목록을 가져오려면 GetFiles 메서드를 사용합니다. var dir = new DirectoryInfo(@"C:Windows"); FileInfo[] files = dir.GetFiles(); foreach (var item in files) { Console.WriteLine($"파일명 : {item.Name}"); } EnumerateFiles .NET 프레임워크 4.0 이후 버전에서 EnumerateFiles 메서드를 사용해 파일 목록을 가져올 수 있습니다. var dir = new DirectoryInfo(@"C:Windows"); // .txt 확장자 파일을 구합니다. // 두번째 인수 `SearchOption.AllDirectories`를 설정하면 ..

프로그래밍/C# 2022.05.14

[C#] 폴더와 파일 구분하기

지정된 폴더 안에서 파일과 폴더 구분해봅시다. GetFileSystemInfos DirecotryInfo 클래스에 있는 GetFileSystemInfos 메서드를 사용합니다. var dir = new DirectoryInfo(@"C:\Users\A\source\test"); // 폴더 경로 FileSystemInfo[] fileSystemInfos = dir.GetFileSystemInfos(); foreach (var item in fileSystemInfos) { // 디렉터리 여부를 판별합니다. if ((item.Attributes & FileAttributes.Directory) == FileAttributes.Directory) Console.WriteLine($"this is dir : {it..

프로그래밍/C# 2022.05.14

[C#] StringBuilder로 문자열 연결하기

문자열은 변하지 않는 객체입니다. 예를 들어, 다음 코드는 abc 뒤에 xyz을 붙여 연결되는 것이 아니라, 새로운 6자 크기의 인스턴스가 생성되고, 인스턴스에 abc, xyz가 복사됩니다. string str1 = "abc" str1 += "xyz"; 만약 반복해서 문자열을 연결하는 코드를 작성하게 되면 비효율적인 리소스 낭비가 이뤄질 수 있습니다. StringBuilder 클래스를 사용하면 문자열을 효율적으로 연결할 수 있습니다. var sb = new StringBuilder(); //객체 생성 sb.Append("안녕하세요, "); //문자열 추가 sb.Append("Victory Ha"); sb.Append("입니다."); var result = sb.ToString(); //문자열 변환 Str..

프로그래밍/C# 2022.05.07