프로그래밍
-
[Java, SLF4J] org.slf4j.impl.StaticLoggerBinder 에러 해결하기프로그래밍/Java 2024. 4. 15. 11:35
SLF4JSLF4J는 "Simple Logging Facade for Java"의 약자로, 자바 애플리케이션에서 사용되는 로깅 인터페이스이다. SLF4J는 로깅 시스템에 대한 추상화 계층을 제공하여 애플리케이션 코드가 특정 로깅 프레임워크에 종속되지 않도록 하며, 애플리케이션 코드에서 로깅을 위한 API를 호출할 때 어떤 구현체를 사용할지 결정할 수 있다. 문제 상황HikariCP를 프로젝트에서 사용하기 위해 Maven을 통해 라이브러리를 추가하자 발생한 오류로 아래와 같이 출력되었다.SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".SLF4J: Defaulting to no-operation (NOP) logger implem..
-
[Java, Netty] Nagle 알고리즘 적용 해제하기프로그래밍/Java 2024. 4. 12. 15:50
Nagle 알고리즘? https://syudal.tistory.com/entry/Network-Nagle알고리즘과-TCPNODELAY [Network] Nagle알고리즘과 TCP_NODELAY Nagle 알고리즘 Nagle 알고리즘은 1984년에 발표된 RFC 896 "Congestion Control in IP/TCP Internetworks" 문서에서 제안된 것으로, Van Jacobson에 의해 소개되었다. 이 알고리즘의 주요 목적은 TCP 네트워크에서 소형 syudal.tistory.com Nagle 알고리즘 적용 해제하기 아래는 Netty EchoServer 예제에 TCP_NODELAY 옵션을 true로 적용하여 Nagle 알고리즘의 적용을 해제 하는 방법이다. public final class..
-
[Java] Rhino Engine, Nashorn Engine, GraalVM프로그래밍/Java 2024. 3. 27. 16:24
자바스크립트 인터프리터 엔진 Rhino 엔진, Nashorn 엔진, 그리고 GraalVM은 모두 자바스크립트를 인터프리팅하고 실행하는데 사용되었거나 사용하는 엔진들이다. Java의 버전이 올라감에 따라서 자바스크립트를 인터프리팅하는데 사용하는 엔진들이 바뀌었는데, JDK 버전에 맞추어 각각을 간단히 설명하고자 한다. Rhino Engine (~ Java SE 7) Rhino는 Mozilla Foundation에서 개발한 자바스크립트 인터프리터 엔진이다. 자바 가상 머신(JVM)에서 실행되며, 자바스크립트 코드를 자바 바이트 코드로 변환하여 실행한다. Rhino는 자바 애플리케이션에서 자바스크립트를 사용하는 데 주로 사용되었으나, 성능 면에서 한계가 있어 Java 표준 라이브러리에서 제공하는 공식적인 Ja..
-
[Python] PyInstaller로 컴파일한 코드를 decompyle3로 디컴파일 하기프로그래밍/Python 2024. 3. 4. 10:34
PyInstaller PyInstaller는 Python 애플리케이션과 모든 종속 요소를 단일 패키지로 묶는 소프트웨어이다. 이를 통해 프로그램 사용자는 파이썬 인터프리터나 모듈을 설치하지 않고도 프로그램을 실행할 수 있다. PyInstaller는 Python 3.8 이상을 지원하며 numpy, matplotlib, PyQt, wxPython 등과 같은 많은 주요 Python 라이브러리들을 패키징한다. ※ 해당 프로그램이 무엇으로 패킹 되었는지는 Exeinfo PE를 사용하여 확인한다. 언패킹 python-exe-unpacker 스크립트를 사용하여 PyInstaller로 묶인 파일들을 언패킹해준다. git clone https://github.com/countercept/python-exe-unpacke..
-
[C#] WinAPI OpenProcess 함수로 프로세스 핸들 얻기프로그래밍/C# + Unity 2024. 2. 28. 14:06
프로세스 핸들프로세스 핸들(Process Handle)은 컴퓨터 운영 체제에서 프로세스를 식별하고 관리하기 위한 개념이다. 프로세스 핸들은 보통 운영 체제 API에서 제공되며, 각 언어 및 환경에서는 해당 API를 이용하여 프로세스 핸들을 얻고 조작한니다. 프로그래밍에서는 핸들을 이용하여 프로세스나 자원을 제어하는 데 사용한다. 주요한 Windows API 함수 및 프로세스 핸들과 관련된 몇 가지가 있다. CreateProcess 함수: 새로운 프로세스를 생성하고 핸들을 반환한다.OpenProcess 함수: 기존 프로세스의 핸들을 얻는다.CloseHandle 함수: 프로세스 핸들을 닫는다.소스 코드using System;using System.Diagnostics;using Sys..
-
[C#] 대리자와 delegate, Action, Func프로그래밍/C# + Unity 2024. 2. 23. 12:50
대리자 대리자는 특정 매개 변수 목록 및 반환 형식이 있는 메서드에 대한 참조를 나타내는 형식이다. 쉽게 설명하면, 대리자를 통해 함수를 매개 변수로 전달할 수 있다. 이는 콜백 함수와 같은 이벤트에서 사용한다는 점에서 C++의 함수 포인터와 유사하지만, 멤버 함수에 대해 완전히 개체 지향이라는 점에서 다르다. 매개변수로는 상황에 따라 Action이나 Func를 사용한다. 매개 변수가 없으며 값을 반환하지 않는 경우에는 Action을 사용하고, 이외의 경우에는 모두 Func를 사용한다. 1. Action과 delegate를 사용하는 경우 예를 들어 아래와 같은 경우를 볼 수 있다. using System; using System.Windows.Forms; public class Name { private..
-
[Unity] Destory의 비밀과 DestroyImmediate프로그래밍/C# + Unity 2024. 2. 15. 15:02
Destory 함수유니티에서는 하이어라키(Hierarchy)에 살아있는 GameObject를 스크립트로 삭제하는 방법으로 Destory 함수를 사용한다. 일반적으로 Destory 함수를 사용하면 즉시 제거된다고 생각하기 쉽지만, 사실 지연된 소멸을 통해 해당 함수의 호출이 발생한 시점에서부터 다음 Update 함수가 호출되기 전 사이에 파괴된다. 그래서 흔히 다음과 같은 실수를 하기 쉽다.foreach (Transform child in GameObject.Find("EMPTYOBJECT").transform) { GameObject.Destroy(child.gameObject);}foreach (Transform child in GameObject.Find("EMPTYOBJECT"..
-
[Unity] 버튼에 할당한 Script 외부에서 실행하기프로그래밍/C# + Unity 2024. 1. 15. 09:43
유니티에서는 컴포넌트에 Script를 할당할 수 있다. 보통 유니티 에디터 상의 OnClick()에 스크립트를 매핑하여 사용한다. using UnityEngine;public class Example : MonoBehaviour { public void OnClick() { Debug.Log("Button Clicked"); }} 위와 같은 스크립트를 적용한 버튼을 클릭하면 유니티 에디터 하단 콘솔창에 해당 메시지가 출력된다. 이때 다른 컴포넌트에서 위 버튼에 할당된 스크립트를 실행하고 싶을 땐 아래와 같은 스크립트를 사용한다.GameObject.Find("할당한 버튼 이름").GetComponent().OnClick();