프로그래밍
-
[Java, Netty] PooledUnsafeDirectByteBuf을 Byte[]로 변환하기프로그래밍/Java 2023. 12. 19. 14:59
PooledUnsafeDirectByteBufPooledUnsafeDirectByteBuf는 Netty에서 제공하는 풀링(pooling) 및 unsafe 메모리 액세스를 통해 성능을 향상시키려는 목적으로 디자인된 바이트 버퍼(ByteBuf) 중 하나이다. EchoServer 예제Netty의 EchoServer 예제를 살펴보면 EchoServerHandler.java에 아래와 같은 부분이 있다.@Sharablepublic class EchoServerHandler extends ChannelInboundHandlerAdapter { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { ..
-
[C#] 생산자 소비자 문제에 사용 가능한 Concurrent Class 사용하기프로그래밍/C# + Unity 2023. 12. 12. 09:11
생산자-소비자 문제 생산자-소비자 문제(Producer-Consumer Problem)는 컴퓨터 과학에서 다중 스레드 또는 프로세스 간 협력 및 동기화에 관련된 전형적인 문제 중 하나이다. 여기서 생산자(Producer)는 공유 자원(버퍼나 큐 등)에 데이터를 생성하고 삽입하는 작업을 수행하고, 소비자(Consumer)는 공유 자원에서 데이터를 제거하고 소비하는 작업을 수행한다. 이때 발생할 수 있는 문제들은 크게 4가지로 분류한다. 동시성(Concurrency): 여러 생산자와 소비자가 동시에 실행될 수 있으므로, 공유 자원에 대한 안전한 액세스 보장 순서 보장(Ordering): 생산자가 데이터를 생성하고 삽입하는 순서와 소비자가 데이터를 제거하고 소비하는 순서 일치 공유 자원 보호: 여러 스레드 또..
-
[C#] DLLImport로 외부 DLL 함수 호출하기프로그래밍/C# + Unity 2023. 12. 11. 11:39
DLLImport DllImport는 P/Invoke(플랫폼호출) 방법 중 하나로 C#에서 .NET 외의 코드나 라이브러리, 특히 C나 C++로 작성된 코드를 호출할 때 사용한다. 이를 사용하여 C# 코드에서 외부 DLL 함수를 호출한다. 소스 코드 아래는 DllImport를 사용하는 기본적인 예제로 kernel32.dll에 있는 MessageBox 함수를 호출한다. using System; using System.Runtime.InteropServices; class Program { // kernel32.dll에 있는 MessageBox 함수 선언 [DllImport("kernel32.dll", SetLastError = true)] public static extern int MessageBox(I..
-
[C#] 비동기 이벤트 기반 소켓 서버 구현하기프로그래밍/C# + Unity 2023. 12. 4. 13:03
서버의 종류 서버를 구현하는 방식에는 크게 단일 스레드 기반 서버와 다중 스레드 기반 서버로 나뉜다. 다중 스레드 기반 서버의 경우, 각각의 스레드가 연결을 담당하여 통신하므로 이해가 쉽다. 하지만, 단일 스레드인데 어떻게 여러 클라이언트의 접속을 해결하느냐는 의문이 든다. Node.js의 libuv 구현체의 Event Loop를 사용하여 구현한 서버를 보면 이해할 수 있다. C#의 SocketAsyncEventArgs에서도 운영체제에서 제공하는 IOCP( I/O Completion Port)와 같은 메커니즘을 ThreadPool을 사용하여 비동기 작업을 처리한다. 소스 코드 아래는 SocketAsyncEventArgs를 사용하여 비동기 이벤트 기반의 에코 서버를 구현하는 코드이다. using Syste..
-
[C#] 콜백 함수프로그래밍/C# + Unity 2023. 12. 1. 09:09
콜백 함수 ? 콜백 함수(callback function)는 프로그래밍에서 특정 이벤트가 발생했을 때 호출되는 함수를 가리킨다. 콜백 함수는 다른 함수나 컴포넌트에 의해 호출되는 함수로서, 보통 이벤트 핸들러로 비동기적인 프로그래밍이나 이벤트 기반 프로그래밍에서 자주 사용된다. 이벤트 처리(Event Handling): 사용자가 버튼을 클릭하거나 다른 이벤트가 발생했을 때 특정 작업 수행 비동기 작업(Asynchronous Operations): 비동기 작업이 완료되었을 때 실행되는 함수를 콜백으로 등록하여 작업이 끝날 때까지 대기하지 않고 다른 작업 수행 타이머 및 인터벌(Timeouts and Intervals): 특정 시간 간격으로 실행되는 작업 수행 C#에서 콜백 함수는 델리게이트(delegate..
-
[C#] 크로스 스레드 작업이 잘못되었습니다. 오류 해결하기프로그래밍/C# + Unity 2023. 11. 29. 12:58
문제 상황 C#으로 멀티 스레드 프로그래밍을 하다보면, 컨트롤이 자신이 만들어진 스레드가 아닌 스레드에서 액세스하는 경우에 아래와 같은 메시지를 출력한다. 이럴 때는 Invoke함수를 사용하여 컨트롤이 자신이 만들어진 스레드 아닌 스레드에서의 함수 호출을 위임한다. 소스 코드 아래의 텍스트박스의 텍스트를 바꾸는 예제이다. private void InvokeAccess(TextBox textBox, string data) { if (textBox.InvokeRequired) { textBox.Invoke((MethodInvoker) delegate { textBox.Text = data; }); } else { textBox.Text = data; } }
-
[PHP] 파일 업로드 하기프로그래밍/Web(CSS + HTML + JS + PHP ) 2023. 9. 15. 14:46
소스 코드 php로 여러가지를 개발하다 보면, 사용자가 파일을 업로드 해야 할 상황이 있다. 아래는 php8 에서 사진 파일을 업로드하는 예제이다. index.html upload.php // 업로드 디렉토리를 설정합니다. $uploadDir = "uploads/"; // 업로드 디렉토리 경로 $maxFileSize = 5 * 1024 * 1024; // 5MB // 업로드된 파일의 정보를 가져옵니다. $fileName = $_FILES["fileToUpload"]["name"]; $fileTmpName = $_FILES["fileToUpload"]["tmp_name"]; $fileSize = $_FILES["fileToUpload"]["size"]; // 파일 확장자를 체크하고 허용되는 확장자를 지정합..
-
[C#] Enum을 ComboBox item에 집어넣기프로그래밍/C# + Unity 2023. 7. 4. 11:23
C#으로 프로그램을 만들다 보면 Enum을 ComboBox item에 집어넣어야 하는 상황이 가끔 생긴다. Linq를 사용하여 Enum을 Object[]로 만들어서 ComboBox에 넣으면 되는데, 다소 복잡하다. comboBox1.Items.AddRange(Enum.GetValues(typeof(MyEnum)).OfType().ToArray()); Enum.GetValues만 사용하면 반환 값이 System.Array로 나와 []로 캐스팅 하기 위해서 .OfType().ToArray()를 사용한다.