RabbitMQ는 안정적이고 확장 가능한 메시징을 위해 최신 분산 시스템에서 널리 사용되는 오픈 소스 메시지 브로커 소프트웨어입니다. Erlang으로 작성되었으며 AMQP, MQTT, STOMP와 같은 여러 프로토콜을 지원합니다. RabbitMQ는 확장성이 뛰어나며 다양한 프로그래밍 언어 및 프레임워크와 통합될 수 있습니다. 이 글에서는 크로스 플랫폼 웹 애플리케이션 구축을 위한 인기 있고 강력한 프레임워크인 .NET Core와 함께 RabbitMQ를 사용하는 방법을 살펴보겠습니다. RabbitMQ의 기본 사항, 아키텍처 및 개념, .NET Core 애플리케이션과 통합하는 방법을 다룹니다. RabbitMQ란 무엇입니까? RabbitMQ는 다양한 소프트웨어 애플리케이션 간의 통신을 가능하게 하는 메시지 브..
Swagger는 RESTful API를 문서화하고 테스트하는 데 널리 사용되는 오픈 소스 도구입니다. 개발자가 API를 테스트하고 실시간으로 문서를 생성할 수 있는 사용자 친화적인 인터페이스를 제공합니다. 이 글에서는 .NET Core와 함께 Swagger를 사용하여 API Endpoint를 문서화하고 테스트하는 방법을 살펴보겠습니다. Endpoint는 API가 RESTful API를 인터페이스를 통해 서버의 리소스에 액세스 할 수 있도록 해주는 URL입니다. 전제 조건 🛠️ 컴퓨터에 .NET Core 3.1 이상이 설치되어 있어야 함 RESTful API 아키텍처에 대한 기본 이해 Visual Studio Code 또는 Visual Studio 2019 이상 시작하기 🚀 .NET Core 웹 API 프..
JavaScript는 배열 작업을 위한 많은 강력한 도구를 제공하는 다용도 언어입니다. 가장 일반적으로 사용되는 도구 중 하나는 배열을 조작하고 변환하기 위한 다양한 메서드를 제공하는 Array 개체입니다. 이 글에서는 JavaScript에서 가장 중요하고 유용한 배열 메서드 중 일부를 자세히 살펴보겠습니다. forEach() forEach() 메서드는 배열을 반복하고 각 요소에 대해 콜백 함수를 실행합니다. 예는 다음과 같습니다. const numbers = [1, 2, 3, 4, 5]; numbers.forEach((number) => { console.log(number); }); 그러면 다음이 출력됩니다. 1 2 3 4 5 map() map() 메서드는 배열의 각 요소에 콜백 함수를 적용하여 새 ..
멀티스레딩은 프로그램을 여러 스레드로 나누는 방식을 의미하며, 각 스레드는 독립적으로 동시에 실행될 수 있습니다. 이로 인해 특히 I/O 또는 네트워크 통신과 같은 작업의 경우 성능과 응답성이 향상될 수 있습니다. C# 및 .NET Core에서는 System.Threading 네임스페이스를 사용하여 스레드를 만들고 관리할 수 있습니다. 다음은 Thread 클래스를 사용하여 C# 에서 새 스레드를 만드는 예입니다. using System; using System.Threading; class Program { static void Main(string[] args) { Thread thread = new Thread(new ThreadStart(Worker)); thread.Start(); Console...
일반적으로 C#에서 외부 프로그램(.exe 등)을 실행시킬 때 Process를 많이 사용합니다. 콘솔(Console; 도스 커맨드 창)로 실행되는 프로그램을 실행하는 경우 콘솔 창이 화면에 나타나서 UI 상으로 불편한 경우가 있습니다. 이 글에서는 Process로 콘솔 창을 띄우는 외부 프로그램을 실행 시 콘솔 창을 백그라운드로 실행해 보이지 않도록 하는 방법에 대해 살펴보겠습니다. 코드는 아래와 같습니다. using System; using System.Diagnostics; namespace Test.Utils { public class Program { public static void Main(string[] args) { string arg = "..."; Process process = new..
로그인 또는 회원가입 시 자동 등록 방지가 필요할 경우가 있다. 이를 구현하기 위해 여러 가지가 있는데 CATPCHA를 사용하는 방법을 사용하였다.CAPTCHA는 HIP 기술의 일종으로, 어떠한 사용자가 실제 사람인지 컴퓨터 프로그램인지를 구별하기 위해 사용되는 방법이다. 사람은 구별할 수 있지만 컴퓨터는 구별하기 힘들게 의도적으로 비틀거나 덧칠한 그림을 주고 그 그림에 쓰여 있는 내용을 물어보는 방법이 자주 사용된다.위키백과 다운로드CATPCHA를 사용하기 위해선 https://sourceforge.net/projects/simplecaptcha/ 사이트로 이동해서 jar 파일을 다운로드 받는다. jar 파일 추가사용하는 툴이 이클립스 일 경우 jar 파일을 프로젝트에 포함시켜야 한다. 아래 이전 글을..
FileSystemWatcher는 특정 폴더 경로(디렉터리)의 모든 파일이 생성되거나 변경되면 함수 호출을 해줍니다. 사용 방법 사용 방법 순서입니다. FileSystemWatcher 생성자 호출 감시할 폴더 설정(디렉토리) 감시할 항목들 설정 (파일 생성, 크기, 이름, 마지막 접근 변경 등) 감시할 이벤트 설정 (생성, 변경, 삭제 등) FIleSystemWatcher 감시 모니터링 활성화 감시할 폴더 내부 변경 시 event 호출 구현 using System; using System.IO; namespace Test.Utils { public class FileWatcher { public void initWatcher() { string filePath = $"D:\\files\\"; // 1. ..
Dart에서 클래스(Class) 사용 방법에 대해 알아보겠습니다. Class 클래스 안에서 property를 선언할 때는 타입을 사용해서 정의합니다. class Player { final String name = 'eden'; final int age = 3; void sayName() { print("Hi my name is $name"); } } void main() { // new 를 꼭 붙이지 않아도 됩니다. var player = Player(); player.sayName(); } 클래스 메서드 안에서는 this 를 붙이지 않는 것을 Dart에서는 권장하나, 어쩔 수 없이 같은 변수명이 있을 때는 this를 붙여서 사용해야 합니다. Constructor 생성자(constructor) 함수는 클..
Dart에서 함수(Function) 사용 방법에 대해 알아보겠습니다. Functions Dart는 진정한 객체 지향 언어이므로 함수도 객체이며 타입이 Function입니다. 이는 함수를 변수에 할당하거나 다른 함수에 인수로 전달할 수 있음을 의미합니다. // 하나의 표현식만 포함하는 함수의 경우 아래와 같이 단축 구문을 사용할 수 있습니다. String sayHello(String name) => "Hello ${name} nice to meet you!"; num plus(num a, num b) => a + b; void main() { print(sayHello("eden")); // Hello eden nice to meet you! } Positional Paramaters 함수을 호출할 때 필..
Dart에서 데이터 타입 사용 방법에 대해 알아보겠습니다. 기본 데이터 타입 Dart에는 대표적으로 String, bool, int, double, num 타입이 있습니다. 중요한 점은 이 모든 게 객체(object)라는 것입니다. Dart가 진정한 객체 지향 언어로 불리는 이유입니다. void main() { String name = "eden"; bool isPlay = true; int age = 3; double money = 59.99; num x = 12; num y = 1.2; } String Interpoldation String Interpoldation은 텍스트에 변수를 추가하는 방법입니다. 단순히 변수의 값을 넣고 싶다면 $달러 기호 뒤에 사용할 변수를 적어주면 됩니다. 변수의 값을 ..